jbrowse-plugin-graphgenomeviewer 7.4.4 → 7.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{GbzBaseSyntenyAdapter-A5MNPCKX.js → GbzBaseSyntenyAdapter-4KVWVUN6.js} +2 -2
- package/dist/chunks/{GbzBaseSyntenyAdapter-A5MNPCKX.js.map → GbzBaseSyntenyAdapter-4KVWVUN6.js.map} +1 -1
- package/dist/chunks/{GraphGenomeView-SEAPDRXS.js → GraphGenomeView-KI4FQ5A7.js} +2 -2
- package/dist/chunks/GraphTrackSettingsDialog-UQNMDXTE.js +4 -0
- package/dist/chunks/GraphTrackSettingsDialog-UQNMDXTE.js.map +7 -0
- package/dist/chunks/{HighlightColorDialog-QAYWLO5I.js → HighlightColorDialog-D4RCUCUF.js} +2 -2
- package/dist/chunks/LinearGraphDisplay-RPZUZSM2.js +2 -0
- package/dist/chunks/{LinearGraphDisplay-ZC4BQ27J.js.map → LinearGraphDisplay-RPZUZSM2.js.map} +2 -2
- package/dist/chunks/{MinigraphBubbleAdapter-3QM4XV47.js → MinigraphBubbleAdapter-TJYI7KEN.js} +2 -2
- package/dist/chunks/RgfaTabixAdapter-5ZMJLFZP.js +2 -0
- package/dist/chunks/RgfaTabixAdapter-5ZMJLFZP.js.map +7 -0
- package/dist/chunks/{WalkFormsAdapter-FT2SW4H6.js → WalkFormsAdapter-CAJOWOEX.js} +2 -2
- package/dist/chunks/WalkTabixSyntenyAdapter-VI3KA2GX.js +2 -0
- package/dist/chunks/{WalkTabixSyntenyAdapter-3WRVNDLB.js.map → WalkTabixSyntenyAdapter-VI3KA2GX.js.map} +2 -2
- package/dist/chunks/{chunk-6WUWQX2P.js → chunk-22ANI2KL.js} +2 -2
- package/dist/chunks/{chunk-6WUWQX2P.js.map → chunk-22ANI2KL.js.map} +1 -1
- package/dist/chunks/chunk-42KD4AVY.js +2 -0
- package/dist/chunks/{chunk-HCDKP3IP.js.map → chunk-42KD4AVY.js.map} +4 -4
- package/dist/chunks/chunk-4NIWMRKH.js +2 -0
- package/dist/chunks/{chunk-S333HOG5.js.map → chunk-4NIWMRKH.js.map} +4 -4
- package/dist/chunks/chunk-BCOXRUNQ.js +3 -0
- package/dist/chunks/chunk-BCOXRUNQ.js.map +7 -0
- package/dist/chunks/chunk-DAPI7M4M.js +4 -0
- package/dist/chunks/chunk-DAPI7M4M.js.map +7 -0
- package/dist/chunks/{chunk-G53BI7VK.js → chunk-DEWZOJSC.js} +2 -2
- package/dist/chunks/{chunk-G53BI7VK.js.map → chunk-DEWZOJSC.js.map} +1 -1
- package/dist/chunks/{chunk-6SWXMRAV.js → chunk-FCMXEFJA.js} +1 -1
- package/dist/chunks/{chunk-6SWXMRAV.js.map → chunk-FCMXEFJA.js.map} +1 -1
- package/dist/chunks/{chunk-P3FBI5ML.js → chunk-GYY6LF5L.js} +1 -1
- package/dist/chunks/{chunk-P3FBI5ML.js.map → chunk-GYY6LF5L.js.map} +1 -1
- package/dist/chunks/{chunk-HF4H6LQI.js → chunk-HHMJNAA3.js} +2 -2
- package/dist/chunks/{chunk-XXBE4IFZ.js → chunk-HTTONSO4.js} +2 -2
- package/dist/chunks/{chunk-XXBE4IFZ.js.map → chunk-HTTONSO4.js.map} +1 -1
- package/dist/chunks/{chunk-MUONTMYZ.js → chunk-K4JL57NR.js} +2 -2
- package/dist/chunks/chunk-KOC23YNN.js +4 -0
- package/dist/chunks/chunk-KOC23YNN.js.map +7 -0
- package/dist/chunks/{chunk-OJWBLPPH.js → chunk-LTNFVL2F.js} +2 -2
- package/dist/chunks/chunk-OZEKEYT3.js +2 -0
- package/dist/chunks/{chunk-6VNU7SD4.js.map → chunk-OZEKEYT3.js.map} +4 -4
- package/dist/chunks/{chunk-KIYRMZWP.js → chunk-POUV7OPY.js} +2 -2
- package/dist/chunks/{chunk-KIYRMZWP.js.map → chunk-POUV7OPY.js.map} +1 -1
- package/dist/chunks/{chunk-LE7FZM6Y.js → chunk-SPL3UO2D.js} +2 -2
- package/dist/chunks/{chunk-LE7FZM6Y.js.map → chunk-SPL3UO2D.js.map} +1 -1
- package/dist/chunks/chunk-UR2MJJUP.js +2 -0
- package/dist/chunks/chunk-VTMJQFN5.js +2 -0
- package/dist/chunks/chunk-VTMJQFN5.js.map +7 -0
- package/dist/chunks/{chunk-2KVE7YAS.js → chunk-XZGYJ3JC.js} +1 -1
- package/dist/chunks/{chunk-2KVE7YAS.js.map → chunk-XZGYJ3JC.js.map} +1 -1
- package/dist/chunks/{chunk-7RJMG6I2.js → chunk-Z3IKZAYC.js} +1 -1
- package/dist/chunks/{chunk-7RJMG6I2.js.map → chunk-Z3IKZAYC.js.map} +1 -1
- package/dist/chunks/{chunk-FTXDTU27.js → chunk-ZV5FNOHS.js} +3 -3
- package/dist/chunks/{chunk-FTXDTU27.js.map → chunk-ZV5FNOHS.js.map} +2 -2
- package/dist/chunks/{renderSvg-ZIUOPWJQ.js → renderSvg-3PPAEMBT.js} +2 -2
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -3
- package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
- package/package.json +2 -2
- package/src/GraphComputeLayout.test.ts +24 -0
- package/src/GraphComputeLayout.ts +4 -2
- package/src/GraphGenomeView/components/GraphSettingsDialog.tsx +16 -0
- package/src/GraphGenomeView/components/WalkRowsOverlay.tsx +83 -0
- package/src/GraphGenomeView/components/usePaneGestures.test.tsx +82 -5
- package/src/GraphGenomeView/components/usePaneGestures.ts +10 -4
- package/src/GraphGenomeView/graphLayers.ts +14 -1
- package/src/GraphGenomeView/legendSections.ts +32 -0
- package/src/GraphGenomeView/model.test.ts +292 -4
- package/src/GraphGenomeView/model.ts +3 -10
- package/src/GraphGenomeView/nodeSize.test.ts +21 -5
- package/src/GraphGenomeView/nodeSize.ts +24 -8
- package/src/GraphGenomeView/pane/fitViews.ts +5 -1
- package/src/GraphGenomeView/pane/graphViews.ts +96 -16
- package/src/GraphGenomeView/pane/launchActions.ts +55 -11
- package/src/GraphGenomeView/pane/launchViews.ts +46 -0
- package/src/GraphGenomeView/pane/loadActions.ts +85 -25
- package/src/GraphGenomeView/pane/morph.test.ts +25 -1
- package/src/GraphGenomeView/pane/morph.ts +3 -1
- package/src/GraphGenomeView/pane/paneBase.ts +5 -0
- package/src/GraphGenomeView/pane/renderingActions.ts +61 -2
- package/src/GraphGenomeView/pane/settingActions.ts +62 -4
- package/src/GraphGenomeView/pane/walkRowViews.ts +17 -6
- package/src/GraphGenomeView/tubeMapPanels.ts +2 -1
- package/src/GraphGenomeView/viewModel.ts +4 -6
- package/src/GraphGenomeView/walkRowBlocks.ts +50 -0
- package/src/LinearGraphDisplay/LinearGraphDisplay.test.ts +35 -5
- package/src/LinearGraphDisplay/components/GraphStatusChrome.test.tsx +18 -0
- package/src/LinearGraphDisplay/components/GraphStatusChrome.tsx +4 -2
- package/src/LinearGraphDisplay/components/SubgraphHaplotypesField.test.tsx +41 -1
- package/src/LinearGraphDisplay/components/SubgraphHaplotypesField.tsx +33 -19
- package/src/LinearGraphDisplay/configSchema.ts +4 -3
- package/src/RgfaTabixAdapter/RgfaTabixAdapter.ts +2 -9
- package/src/WalkTabixSyntenyAdapter/WalkTabixSyntenyAdapter.ts +3 -6
- package/src/hoverSync/graphViewHighlights.test.ts +53 -0
- package/src/hoverSync/graphViewHighlights.ts +25 -0
- package/src/hoverSync/lgvHover.test.ts +100 -1
- package/src/hoverSync/lgvHover.ts +77 -6
- package/src/launchFromGraph/contributors.test.ts +52 -0
- package/src/launchFromGraph/contributors.ts +105 -1
- package/src/launchFromGraph/launchFromGraph.ts +2 -2
- package/src/panSNTabix.test.ts +28 -0
- package/src/panSNTabix.ts +26 -8
- package/src/version.ts +1 -1
- package/dist/chunks/GraphTrackSettingsDialog-EVIIGC5G.js +0 -6
- package/dist/chunks/GraphTrackSettingsDialog-EVIIGC5G.js.map +0 -7
- package/dist/chunks/LinearGraphDisplay-ZC4BQ27J.js +0 -2
- package/dist/chunks/RgfaTabixAdapter-XSOIEWBK.js +0 -2
- package/dist/chunks/RgfaTabixAdapter-XSOIEWBK.js.map +0 -7
- package/dist/chunks/WalkTabixSyntenyAdapter-3WRVNDLB.js +0 -2
- package/dist/chunks/chunk-6VNU7SD4.js +0 -2
- package/dist/chunks/chunk-GRTN25B6.js +0 -3
- package/dist/chunks/chunk-GRTN25B6.js.map +0 -7
- package/dist/chunks/chunk-HCDKP3IP.js +0 -2
- package/dist/chunks/chunk-LE43I4PT.js +0 -4
- package/dist/chunks/chunk-LE43I4PT.js.map +0 -7
- package/dist/chunks/chunk-QV7SSOMJ.js +0 -2
- package/dist/chunks/chunk-S333HOG5.js +0 -2
- package/dist/chunks/chunk-VZQ6VOUP.js +0 -2
- package/dist/chunks/chunk-VZQ6VOUP.js.map +0 -7
- package/dist/chunks/chunk-WLRRI35A.js +0 -3
- package/dist/chunks/chunk-WLRRI35A.js.map +0 -7
- package/src/launchFromGraph/launchTracks.test.ts +0 -95
- package/src/launchFromGraph/launchTracks.ts +0 -49
- /package/dist/chunks/{GraphGenomeView-SEAPDRXS.js.map → GraphGenomeView-KI4FQ5A7.js.map} +0 -0
- /package/dist/chunks/{HighlightColorDialog-QAYWLO5I.js.map → HighlightColorDialog-D4RCUCUF.js.map} +0 -0
- /package/dist/chunks/{MinigraphBubbleAdapter-3QM4XV47.js.map → MinigraphBubbleAdapter-TJYI7KEN.js.map} +0 -0
- /package/dist/chunks/{WalkFormsAdapter-FT2SW4H6.js.map → WalkFormsAdapter-CAJOWOEX.js.map} +0 -0
- /package/dist/chunks/{chunk-HF4H6LQI.js.map → chunk-HHMJNAA3.js.map} +0 -0
- /package/dist/chunks/{chunk-MUONTMYZ.js.map → chunk-K4JL57NR.js.map} +0 -0
- /package/dist/chunks/{chunk-OJWBLPPH.js.map → chunk-LTNFVL2F.js.map} +0 -0
- /package/dist/chunks/{chunk-QV7SSOMJ.js.map → chunk-UR2MJJUP.js.map} +0 -0
- /package/dist/chunks/{renderSvg-ZIUOPWJQ.js.map → renderSvg-3PPAEMBT.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as p}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as p}from"./chunk-FCMXEFJA.js";function b(t,s,e){let n=t.get(s);n?n.push(e):t.set(s,[e])}function F(t,s,e){let n=t.get(s);n?n.add(e):t.set(s,new Set([e]))}function m(t,s){let e=new Map;for(let n of t)b(e,s(n),n);return e}function g(t,s){let e=0,n=t;for(;e<n;){let r=e+n>>1;s(r)?e=r+1:n=r}return e}var l=0;function _(t){return t.stable!==void 0}function w(t){return t.stable?.rank===l}function G(t){return t.stable!==void 0&&t.stable.rank>l}function U(t){return t.nodes.filter(w)}function C(t,s){return t.stable.start<s.end&&t.stable.start+t.length>s.start}function K(t){let s={};for(let e of t)s[e.id]=[{x:e.stable.start,y:0},{x:e.stable.start+e.length,y:0}];return s}function T(t,s){return g(t.length,e=>t[e].stable.start<s)}function y(t){let s=1/0,e=-1/0;for(let n of t)s=Math.min(s,n.stable.start),e=Math.max(e,n.stable.start+n.length);return e-s}function $(t,s){return s&&s.end>s.start?s.end-s.start:y(t)}var A=class{constructor(t){this.segments=t.segments,this.offsets=t.offsets,this.path=t.path,this.start=t.start,this.reversed=t.reversed,this.paths=t.paths,this.samples=t.samples,this.slots=new Map(this.segments.map((s,e)=>[s,e]))}static from(t){let s=new u;for(let[e,n]of t){s.declare(e);for(let r of n)s.add(e,r.path,r.sample,r.start,r.strand==="-")}return s.build()}get size(){return this.segments.length}slot(t){return this.slots.get(t)??-1}pathIndex(t){return this.paths.indexOf(t)}firstBy(t,s){for(let e=this.offsets[t];e<this.offsets[t+1];e++)if(this.path[e]===s)return e;return-1}replay(){let t=new Map;return(s,e)=>{if(s<0||e<0)return-1;let n=s*this.paths.length+e,r=this.offsets[s+1],a=t.get(n)??this.offsets[s];for(;a<r&&this.path[a]!==e;)a++;return t.set(n,a+1),a<r?a:-1}}filter(t,s=()=>!0){let e=this.paths.map(t),n=new u;return this.segments.forEach((r,a)=>{if(!s(r))return;let h=n.declare(r);for(let o=this.offsets[a];o<this.offsets[a+1];o++){let i=this.path[o];e[i]&&n.addAt(h,n.pathOf(this.paths[i],this.samples[i]),this.start[o],this.reversed[o]===1)}}),n.build()}strand(t){return this.reversed[t]?"-":"+"}visit(t){let s=this.path[t];return{path:this.paths[s],sample:this.samples[s],start:this.start[t],strand:this.strand(t)}}visitsAt(t){let s=[];for(let e=this.offsets[t];e<this.offsets[t+1];e++)s.push(this.visit(e));return s}get(t){let s=this.slot(t);return s<0?void 0:this.visitsAt(s)}has(t){return this.slots.has(t)}keys(){return this.segments[Symbol.iterator]()}*values(){for(let t=0;t<this.segments.length;t++)yield this.visitsAt(t)}*entries(){for(let t=0;t<this.segments.length;t++)yield[this.segments[t],this.visitsAt(t)]}[Symbol.iterator](){return this.entries()}},d=class{constructor(t){this.data=t,this.length=0}push(t){if(this.length===this.data.length){let s=new this.data.constructor(this.data.length*2);s.set(this.data),this.data=s}this.data[this.length++]=t}},u=class{constructor(){this.segments=[],this.slots=new Map,this.paths=[],this.samples=[],this.pathIndex=new Map,this.slot=new d(new Int32Array(1024)),this.path=new d(new Int32Array(1024)),this.start=new d(new Float64Array(1024)),this.reversed=new d(new Uint8Array(1024))}declare(t){let s=this.slots.get(t);return s===void 0&&(s=this.segments.length,this.slots.set(t,s),this.segments.push(t)),s}pathOf(t,s){let e=this.pathIndex.get(t);return e===void 0&&(e=this.paths.length,this.pathIndex.set(t,e),this.paths.push(t),this.samples.push(s)),e}add(t,s,e,n,r){this.addAt(this.declare(t),this.pathOf(s,e),n,r)}addAt(t,s,e,n){this.slot.push(t),this.path.push(s),this.start.push(e),this.reversed.push(n?1:0)}build(){let t=this.slot.length,s=this.segments.length,e=new Int32Array(s+1),n=this.slot.data;for(let i=0;i<t;i++)e[n[i]+1]++;for(let i=0;i<s;i++)e[i+1]+=e[i];let r=e.slice(0,s),a=new Int32Array(t),h=new Float64Array(t),o=new Uint8Array(t);for(let i=0;i<t;i++){let f=r[n[i]]++;a[f]=this.path.data[i],h[f]=this.start.data[i],o[f]=this.reversed.data[i]}return new A({segments:this.segments,offsets:e,path:a,start:h,reversed:o,paths:this.paths,samples:this.samples})}};var v=/:(\d+)-\d+$/,x=/^([^#]*#[^#]*#[^#[]*)#(\d+)(?:\[(\d+)-\d+\])?$/,I=/\[(\d+)-\d+\]$/;function E(t){let s=x.exec(t);if(s)return{name:s[1],start:+s[2]+ +(s[3]??0)};let e=v.exec(t)??I.exec(t);return e?{name:t.slice(0,e.index),start:+e[1]}:{name:t,start:0}}function Q(t,s){let e=[],n=new u;for(let r of t){let a=p(r.name),h=n.pathOf(r.name,a),o=r.start;for(let i of r.steps)n.addAt(n.declare(i.id),h,o,i.strand==="-"),o+=s(i.id);e.push({name:r.name,sample:a,start:r.start,length:o-r.start})}return{anchorPaths:e,pathVisits:n.build()}}function P(t,s){return t.find(n=>n.sample===s||n.name===s)??t[0]}var R=1;function N(t,s,e,n){let r=s.slot(t.name);if(r<0||s.offsets[r]===s.offsets[r+1])return t;let a=s.firstBy(r,e),h=a>=0?a:s.offsets[r];return{...t,stable:{refName:s.paths[s.path[h]],start:s.start[h],rank:a>=0?l:R,strand:s.strand(h)},samples:n(r)}}function O(t){let s=[...new Set(t.samples)].sort(),e=new Map(s.map((h,o)=>[h,o])),n=Int32Array.from(t.samples,h=>e.get(h)),r=new Uint8Array(s.length),a=new Int32Array(s.length);return h=>{let o=0;for(let f=t.offsets[h];f<t.offsets[h+1];f++){let c=n[t.path[f]];r[c]===0&&(r[c]=1,a[o++]=c)}let i;if(o===s.length)i=s,r.fill(0);else if(o*8<s.length){let f=a.subarray(0,o);f.forEach(c=>r[c]=0),i=Array.from(f.sort(),c=>s[c])}else{i=[];for(let f=0;f<s.length;f++)r[f]===1&&(r[f]=0,i.push(s[f]))}return i}}function k(t,s){let{anchorPaths:e,pathVisits:n}=t,r=e&&n?P(e,s):void 0;if(!r||!e||!n)return t;let a=O(n),h=n.pathIndex(r.name);return{...t,nodes:t.nodes.map(o=>N(o,n,h,a)),anchoredBy:"paths",referencePath:r.name}}function Y(t,s){if(t.anchoredBy!=="tags")return k(t,s);let e=S(t);return e?{...t,referencePath:e}:t}function S(t){let s=t.nodes.find(e=>e.stable?.rank===0)?.stable?.refName;return s!==void 0&&t.anchorPaths?.some(e=>e.name===s)?s:void 0}function Z(t,s){if(!t.anchorPaths)return;let e=new Map(t.nodes.map(a=>[a.id,a.length])),n=(a,h=a.length)=>{let o=0;for(let i=0;i<h;i++)o+=e.get(a[i])??0;return o},r=m(t.paths??[],a=>E(a.name).name);return t.anchorPaths.map(a=>{let h=r.get(a.name),o=h?.length===1?h[0]:void 0,i=o&&s.get(o.name);return o&&i?{...a,start:a.start+n(o.nodeIds,i.first),length:n(i.nodeIds)}:a})}function tt(t){let{pathVisits:s}=t,e=new Map;return n=>{let r=e.get(n.id);if(!r){r=[];let a=s?s.slot(n.name):-1,h=a>=0?s.pathIndex(n.stable.refName):-1;if(h>=0)for(let o=s.offsets[a];o<s.offsets[a+1];o++)s.path[o]===h&&r.push(s.start[o]);r.length<2&&(r=[n.stable.start]),e.set(n.id,r)}return r}}export{b as a,F as b,m as c,g as d,l as e,_ as f,w as g,G as h,U as i,C as j,K as k,T as l,y as m,$ as n,A as o,d as p,u as q,E as r,Q as s,P as t,k as u,Y as v,Z as w,tt as x};
|
|
2
|
+
//# sourceMappingURL=chunk-SPL3UO2D.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-BSOZW3FC.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-HOAIOEI7.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-RJWPJCIB.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-ZPZ7GNBT.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-3YBP46PB.js"],
|
|
4
4
|
"sourcesContent": ["// src/util/groups.ts\nfunction pushTo(map, key, value) {\n const list = map.get(key);\n if (list) {\n list.push(value);\n } else {\n map.set(key, [value]);\n }\n}\nfunction addTo(map, key, value) {\n const set = map.get(key);\n if (set) {\n set.add(value);\n } else {\n map.set(key, /* @__PURE__ */ new Set([value]));\n }\n}\nfunction groupBy(items, keyOf) {\n const groups = /* @__PURE__ */ new Map();\n for (const item of items) {\n pushTo(groups, keyOf(item), item);\n }\n return groups;\n}\n\nexport {\n pushTo,\n addTo,\n groupBy\n};\n", "// src/util/partitionPoint.ts\nfunction partitionPoint(n, pred) {\n let lo = 0;\n let hi = n;\n while (lo < hi) {\n const mid = lo + hi >> 1;\n if (pred(mid)) {\n lo = mid + 1;\n } else {\n hi = mid;\n }\n }\n return lo;\n}\n\nexport {\n partitionPoint\n};\n", "import {\n partitionPoint\n} from \"./chunk-HOAIOEI7.js\";\n\n// src/anchoredNodes.ts\nvar REFERENCE_RANK = 0;\nfunction isAnchored(node) {\n return node.stable !== void 0;\n}\nfunction isBackbone(node) {\n return node.stable?.rank === REFERENCE_RANK;\n}\nfunction isOffReference(node) {\n return node.stable !== void 0 && node.stable.rank > REFERENCE_RANK;\n}\nfunction backboneNodes(graph) {\n return graph.nodes.filter(isBackbone);\n}\nfunction overlapsWindow(node, window) {\n return node.stable.start < window.end && node.stable.start + node.length > window.start;\n}\nfunction backbonePositions(backbone) {\n const positions = {};\n for (const node of backbone) {\n positions[node.id] = [\n { x: node.stable.start, y: 0 },\n { x: node.stable.start + node.length, y: 0 }\n ];\n }\n return positions;\n}\nfunction firstNodeAtOrAfter(nodes, bp) {\n return partitionPoint(nodes.length, (i) => nodes[i].stable.start < bp);\n}\nfunction backboneSpan(backbone) {\n let min = Infinity;\n let max = -Infinity;\n for (const node of backbone) {\n min = Math.min(min, node.stable.start);\n max = Math.max(max, node.stable.start + node.length);\n }\n return max - min;\n}\nfunction referenceSpan(backbone, region) {\n return region && region.end > region.start ? region.end - region.start : backboneSpan(backbone);\n}\n\nexport {\n REFERENCE_RANK,\n isAnchored,\n isBackbone,\n isOffReference,\n backboneNodes,\n overlapsWindow,\n backbonePositions,\n firstNodeAtOrAfter,\n backboneSpan,\n referenceSpan\n};\n", "// src/pathVisits.ts\nvar PathVisits = class {\n constructor(columns) {\n this.segments = columns.segments;\n this.offsets = columns.offsets;\n this.path = columns.path;\n this.start = columns.start;\n this.reversed = columns.reversed;\n this.paths = columns.paths;\n this.samples = columns.samples;\n this.slots = new Map(this.segments.map((s, i) => [s, i]));\n }\n static from(entries) {\n const builder = new PathVisitsBuilder();\n for (const [segment, visits] of entries) {\n builder.declare(segment);\n for (const v of visits) {\n builder.add(segment, v.path, v.sample, v.start, v.strand === \"-\");\n }\n }\n return builder.build();\n }\n get size() {\n return this.segments.length;\n }\n // the segment's index into `segments` and `offsets`, -1 when unvisited\n slot(segment) {\n return this.slots.get(segment) ?? -1;\n }\n pathIndex(path) {\n return this.paths.indexOf(path);\n }\n // the first of `slot`'s visits by path `p`, -1 for none\n firstBy(slot, p) {\n for (let i = this.offsets[slot]; i < this.offsets[slot + 1]; i++) {\n if (this.path[i] === p) {\n return i;\n }\n }\n return -1;\n }\n // Paths' steps replayed in walk order against their visits: the k-th call\n // for one path and segment answers that path's k-th visit there, -1 past\n // its last. A walk in pieces lists its pieces in path order, so replaying\n // the pieces in order reads each step's own visit.\n replay() {\n const cursor = /* @__PURE__ */ new Map();\n return (slot, p) => {\n if (slot < 0 || p < 0) {\n return -1;\n }\n const key = slot * this.paths.length + p;\n const end = this.offsets[slot + 1];\n let at = cursor.get(key) ?? this.offsets[slot];\n while (at < end && this.path[at] !== p) {\n at++;\n }\n cursor.set(key, at + 1);\n return at < end ? at : -1;\n };\n }\n // the visits of paths `keepPath` accepts, at segments `keepSegment` does\n filter(keepPath, keepSegment = () => true) {\n const kept = this.paths.map(keepPath);\n const builder = new PathVisitsBuilder();\n this.segments.forEach((segment, s) => {\n if (!keepSegment(segment)) {\n return;\n }\n const slot = builder.declare(segment);\n for (let i = this.offsets[s]; i < this.offsets[s + 1]; i++) {\n const p = this.path[i];\n if (kept[p]) {\n builder.addAt(\n slot,\n builder.pathOf(this.paths[p], this.samples[p]),\n this.start[i],\n this.reversed[i] === 1\n );\n }\n }\n });\n return builder.build();\n }\n strand(i) {\n return this.reversed[i] ? \"-\" : \"+\";\n }\n visit(i) {\n const p = this.path[i];\n return {\n path: this.paths[p],\n sample: this.samples[p],\n start: this.start[i],\n strand: this.strand(i)\n };\n }\n visitsAt(slot) {\n const out = [];\n for (let i = this.offsets[slot]; i < this.offsets[slot + 1]; i++) {\n out.push(this.visit(i));\n }\n return out;\n }\n get(segment) {\n const slot = this.slot(segment);\n return slot < 0 ? void 0 : this.visitsAt(slot);\n }\n has(segment) {\n return this.slots.has(segment);\n }\n keys() {\n return this.segments[Symbol.iterator]();\n }\n *values() {\n for (let s = 0; s < this.segments.length; s++) {\n yield this.visitsAt(s);\n }\n }\n *entries() {\n for (let s = 0; s < this.segments.length; s++) {\n yield [this.segments[s], this.visitsAt(s)];\n }\n }\n [Symbol.iterator]() {\n return this.entries();\n }\n};\nvar Column = class {\n constructor(data) {\n this.data = data;\n this.length = 0;\n }\n push(value) {\n if (this.length === this.data.length) {\n const grown = new this.data.constructor(\n this.data.length * 2\n );\n grown.set(this.data);\n this.data = grown;\n }\n this.data[this.length++] = value;\n }\n};\nvar PathVisitsBuilder = class {\n constructor() {\n this.segments = [];\n this.slots = /* @__PURE__ */ new Map();\n this.paths = [];\n this.samples = [];\n this.pathIndex = /* @__PURE__ */ new Map();\n this.slot = new Column(new Int32Array(1024));\n this.path = new Column(new Int32Array(1024));\n this.start = new Column(new Float64Array(1024));\n this.reversed = new Column(new Uint8Array(1024));\n }\n // a segment's place in iteration order, though it has no visits yet\n declare(segment) {\n let s = this.slots.get(segment);\n if (s === void 0) {\n s = this.segments.length;\n this.slots.set(segment, s);\n this.segments.push(segment);\n }\n return s;\n }\n // a path's index, so a caller adding many of its visits names it once\n pathOf(path, sample) {\n let p = this.pathIndex.get(path);\n if (p === void 0) {\n p = this.paths.length;\n this.pathIndex.set(path, p);\n this.paths.push(path);\n this.samples.push(sample);\n }\n return p;\n }\n add(segment, path, sample, start, reversed) {\n this.addAt(\n this.declare(segment),\n this.pathOf(path, sample),\n start,\n reversed\n );\n }\n addAt(slot, path, start, reversed) {\n this.slot.push(slot);\n this.path.push(path);\n this.start.push(start);\n this.reversed.push(reversed ? 1 : 0);\n }\n build() {\n const n = this.slot.length;\n const segments = this.segments.length;\n const offsets = new Int32Array(segments + 1);\n const slot = this.slot.data;\n for (let i = 0; i < n; i++) {\n offsets[slot[i] + 1]++;\n }\n for (let s = 0; s < segments; s++) {\n offsets[s + 1] += offsets[s];\n }\n const fill = offsets.slice(0, segments);\n const path = new Int32Array(n);\n const start = new Float64Array(n);\n const reversed = new Uint8Array(n);\n for (let i = 0; i < n; i++) {\n const at = fill[slot[i]]++;\n path[at] = this.path.data[i];\n start[at] = this.start.data[i];\n reversed[at] = this.reversed.data[i];\n }\n return new PathVisits({\n segments: this.segments,\n offsets,\n path,\n start,\n reversed,\n paths: this.paths,\n samples: this.samples\n });\n }\n};\n\nexport {\n PathVisits,\n Column,\n PathVisitsBuilder\n};\n", "import {\n PathVisitsBuilder\n} from \"./chunk-ZPZ7GNBT.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n REFERENCE_RANK\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/pathAnchoring.ts\nvar RANGE_SUFFIX = /:(\\d+)-\\d+$/;\nvar VG_FRAGMENT = /^([^#]*#[^#]*#[^#[]*)#(\\d+)(?:\\[(\\d+)-\\d+\\])?$/;\nvar VG_SUBRANGE = /\\[(\\d+)-\\d+\\]$/;\nfunction pathOrigin(pathName) {\n const fragment = VG_FRAGMENT.exec(pathName);\n if (fragment) {\n return { name: fragment[1], start: +fragment[2] + +(fragment[3] ?? 0) };\n }\n const match = RANGE_SUFFIX.exec(pathName) ?? VG_SUBRANGE.exec(pathName);\n return match ? { name: pathName.slice(0, match.index), start: +match[1] } : { name: pathName, start: 0 };\n}\nfunction surveyPaths(paths, lengthOf) {\n const anchorPaths = [];\n const visits = new PathVisitsBuilder();\n for (const path of paths) {\n const sample = panSNSample(path.name);\n const p = visits.pathOf(path.name, sample);\n let pos = path.start;\n for (const step of path.steps) {\n visits.addAt(visits.declare(step.id), p, pos, step.strand === \"-\");\n pos += lengthOf(step.id);\n }\n anchorPaths.push({\n name: path.name,\n sample,\n start: path.start,\n length: pos - path.start\n });\n }\n return { anchorPaths, pathVisits: visits.build() };\n}\nfunction chooseReferencePath(anchorPaths, preferred) {\n const named = anchorPaths.find(\n (p) => p.sample === preferred || p.name === preferred\n );\n return named ?? anchorPaths[0];\n}\nvar OFF_REFERENCE_RANK = 1;\nfunction anchorNode(node, visits, reference, samplesOf) {\n const slot = visits.slot(node.name);\n if (slot < 0 || visits.offsets[slot] === visits.offsets[slot + 1]) {\n return node;\n }\n const own = visits.firstBy(slot, reference);\n const anchor = own >= 0 ? own : visits.offsets[slot];\n return {\n ...node,\n stable: {\n refName: visits.paths[visits.path[anchor]],\n start: visits.start[anchor],\n rank: own >= 0 ? REFERENCE_RANK : OFF_REFERENCE_RANK,\n strand: visits.strand(anchor)\n },\n samples: samplesOf(slot)\n };\n}\nfunction sampleSorter(visits) {\n const sorted = [...new Set(visits.samples)].sort();\n const rank = new Map(sorted.map((sample, i) => [sample, i]));\n const pathRank = Int32Array.from(visits.samples, (s) => rank.get(s));\n const seen = new Uint8Array(sorted.length);\n const ranks = new Int32Array(sorted.length);\n return (slot) => {\n let n = 0;\n for (let i = visits.offsets[slot]; i < visits.offsets[slot + 1]; i++) {\n const r = pathRank[visits.path[i]];\n if (seen[r] === 0) {\n seen[r] = 1;\n ranks[n++] = r;\n }\n }\n let out;\n if (n === sorted.length) {\n out = sorted;\n seen.fill(0);\n } else if (n * 8 < sorted.length) {\n const found = ranks.subarray(0, n);\n found.forEach((r) => seen[r] = 0);\n out = Array.from(found.sort(), (r) => sorted[r]);\n } else {\n out = [];\n for (let r = 0; r < sorted.length; r++) {\n if (seen[r] === 1) {\n seen[r] = 0;\n out.push(sorted[r]);\n }\n }\n }\n return out;\n };\n}\nfunction anchorFromPaths(graph, preferred) {\n const { anchorPaths, pathVisits } = graph;\n const reference = anchorPaths && pathVisits ? chooseReferencePath(anchorPaths, preferred) : void 0;\n if (!reference || !anchorPaths || !pathVisits) {\n return graph;\n }\n const samplesOf = sampleSorter(pathVisits);\n const referenceIndex = pathVisits.pathIndex(reference.name);\n return {\n ...graph,\n nodes: graph.nodes.map(\n (node) => anchorNode(node, pathVisits, referenceIndex, samplesOf)\n ),\n anchoredBy: \"paths\",\n referencePath: reference.name\n };\n}\nfunction anchorGraph(graph, preferred) {\n if (graph.anchoredBy !== \"tags\") {\n return anchorFromPaths(graph, preferred);\n }\n const referencePath = taggedReferencePath(graph);\n return referencePath ? { ...graph, referencePath } : graph;\n}\nfunction taggedReferencePath(graph) {\n const refName = graph.nodes.find((n) => n.stable?.rank === 0)?.stable?.refName;\n return refName !== void 0 && graph.anchorPaths?.some((p) => p.name === refName) ? refName : void 0;\n}\nfunction trimOrigins(graph, kept) {\n if (!graph.anchorPaths) {\n return void 0;\n }\n const lengthOf = new Map(graph.nodes.map((n) => [n.id, n.length]));\n const bp = (ids, end = ids.length) => {\n let sum = 0;\n for (let i = 0; i < end; i++) {\n sum += lengthOf.get(ids[i]) ?? 0;\n }\n return sum;\n };\n const byOrigin = groupBy(graph.paths ?? [], (p) => pathOrigin(p.name).name);\n return graph.anchorPaths.map((o) => {\n const pieces = byOrigin.get(o.name);\n const path = pieces?.length === 1 ? pieces[0] : void 0;\n const stretch = path && kept.get(path.name);\n return path && stretch ? {\n ...o,\n start: o.start + bp(path.nodeIds, stretch.first),\n length: bp(stretch.nodeIds)\n } : o;\n });\n}\nfunction referenceVisitStarts(graph) {\n const { pathVisits } = graph;\n const cache = /* @__PURE__ */ new Map();\n return (node) => {\n let starts = cache.get(node.id);\n if (!starts) {\n starts = [];\n const slot = pathVisits ? pathVisits.slot(node.name) : -1;\n const p = slot >= 0 ? pathVisits.pathIndex(node.stable.refName) : -1;\n if (p >= 0) {\n for (let i = pathVisits.offsets[slot]; i < pathVisits.offsets[slot + 1]; i++) {\n if (pathVisits.path[i] === p) {\n starts.push(pathVisits.start[i]);\n }\n }\n }\n if (starts.length < 2) {\n starts = [node.stable.start];\n }\n cache.set(node.id, starts);\n }\n return starts;\n };\n}\n\nexport {\n pathOrigin,\n surveyPaths,\n chooseReferencePath,\n anchorFromPaths,\n anchorGraph,\n trimOrigins,\n referenceVisitStarts\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["pushTo", "map", "key", "value", "list", "addTo", "set", "groupBy", "items", "keyOf", "groups", "item", "partitionPoint", "n", "pred", "lo", "hi", "mid", "REFERENCE_RANK", "isAnchored", "node", "isBackbone", "isOffReference", "backboneNodes", "graph", "overlapsWindow", "window", "backbonePositions", "backbone", "positions", "firstNodeAtOrAfter", "nodes", "bp", "partitionPoint", "i", "backboneSpan", "min", "max", "referenceSpan", "region", "PathVisits", "columns", "i", "entries", "builder", "PathVisitsBuilder", "segment", "visits", "v", "path", "slot", "p", "cursor", "key", "end", "at", "keepPath", "keepSegment", "kept", "s", "out", "Column", "data", "value", "grown", "sample", "start", "reversed", "n", "segments", "offsets", "fill", "RANGE_SUFFIX", "VG_FRAGMENT", "VG_SUBRANGE", "pathOrigin", "pathName", "fragment", "match", "surveyPaths", "paths", "lengthOf", "anchorPaths", "visits", "PathVisitsBuilder", "path", "sample", "panSNSample", "p", "pos", "step", "chooseReferencePath", "preferred", "OFF_REFERENCE_RANK", "anchorNode", "node", "reference", "samplesOf", "slot", "own", "anchor", "REFERENCE_RANK", "sampleSorter", "sorted", "rank", "i", "pathRank", "s", "seen", "ranks", "n", "r", "out", "found", "anchorFromPaths", "graph", "pathVisits", "referenceIndex", "anchorGraph", "referencePath", "taggedReferencePath", "refName", "trimOrigins", "kept", "bp", "ids", "end", "sum", "byOrigin", "groupBy", "o", "pieces", "stretch", "referenceVisitStarts", "cache", "starts"]
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{F as Hn,G as Dn,H as Yt,I as Vt,Q as Fn,R as Lt,S as jt,V as Wn,W as Gn,d as Cn,e as Tn,f as On,g as Ut,i as kn,j as In,k as Pn,l as Nn,m as Nt,y as Ln}from"./chunk-4NIWMRKH.js";import{a as St,g as Ct}from"./chunk-SPL3UO2D.js";var ut=2,Yn=1.5,Pe=4,Xn=12,Ne=64,Le=24,He=48,Bn="a thread per pass through a node",qt=t=>t.length>1&&t.some(n=>n.mostPasses>1),Vn=t=>t*ut+Math.max(0,t-1)*Yn,$n=t=>t.reduce((n,o)=>n+o,0);function jn(t,n,o){let e=t.map((a,c)=>n[c]>1?Vn(a):o*Math.min(1,a)),s=0,r=t.map(a=>{let c=Math.min(1,a),i=Pe*c*s;return s=Math.max(s,c),i});return{widths:e,gaps:r,band:$n(e)+$n(r)}}var qn=ut+Yn;function zt(t,n,o=t){let{widths:e,gaps:s,band:r}=jn(t,n,ut),a=-r/2;return e.map((c,i)=>{a+=s[i];let h=n[i]>1?Math.max(0,c-Vn(o[i])):0,f=a+h/2+ut/2;return a+=c,f})}var Ht=t=>jn(t,t,ut).band,Dt=t=>Math.min(1,He/(Ht(t)||1)),qo=t=>Dt(t.map(n=>n.mostPasses))<1?`${Bn}, thinned to fit`:Bn;function Jt(t,n,o){let e=({normal:c,offsetX:i})=>({dx:c.nx*i,dy:c.ny*i}),{dx:s,dy:r}=Tn(e(t),e(n),o),a=Math.hypot(s,r);return a>0?{normal:{nx:s/a,ny:r/a},offsetX:a}:{normal:{nx:0,ny:0},offsetX:0}}var Qt=(t,n)=>Math.hypot(n.x-t.x,n.y-t.y);function Mt(t){let n=new Float64Array(t.length);for(let o=1;o<t.length;o++)n[o]=n[o-1]+Qt(t[o-1],t[o]);return n}function De(t,n,o,e){let s=new Set,r=t.map(u=>u.map(m=>s.has(m)?!1:(s.add(m),!!n[m]?.length))),a=(u,m)=>Math.hypot(m.x-u.x,m.y*o-u.y),c=[],i=[],h=[],f=[],l=()=>{h.length&&(c.push(h),i.push(f)),h=[],f=[]};return t.forEach((u,m)=>{r[m].includes(!0)&&(u.forEach((I,k)=>{let A=n[I];if(!A?.length){l();return}let _=A[0],R=A.at(-1),S=h.at(-1),w=n[u[k+1]??""],v=g=>{let P={x:g.x,y:g.y*o};return w?.length?Math.min(a(P,w[0]),a(P,w.at(-1))):0},x=S?a(S,_)<=a(S,R):v(R)<=v(_);S&&a(S,x?_:R)>e&&l();let M=Math.floor(A.length/2);for(let g=0;g<A.length;g++){let P=x?g:A.length-1-g,b=A[P];h.push({x:b.x,y:b.y*o,id:I,index:P,middle:P===M,forward:x}),f.push(r[m][k])}}),l())}),{runs:c,owned:i}}function zn(t,n,o){let e=[];for(let s=0;s<n.length;s++){if(!n[s])continue;let r=s;for(;r+1<n.length&&n[r+1];)r++;let a=e.at(-1),c=a?a[1]:0,i=s;for(;i>c&&t[s]-t[i-1]<=o;)i--;let h=r;for(;h+1<t.length&&t[h+1]-t[r]<=o;)h++;a&&i<=a[1]+1?a[1]=h:e.push([i,h]),s=r}return e}function Fe(t,n){let o=Mt(t),e=o.at(-1),s=(c,i)=>{let h=t[i],f=t[Math.min(i+1,t.length-1)],l=o[Math.min(i+1,t.length-1)]-o[i],u=l>0?(c-o[i])/l:0;return{x:h.x+(f.x-h.x)*u,y:h.y+(f.y-h.y)*u}},r=0,a=0;return t.map((c,i)=>{let h=Math.max(0,o[i]-n/2),f=Math.min(e,o[i]+n/2);for(;r<t.length-1&&o[r+1]<=h;)r++;for(;a<t.length-1&&o[a+1]<=f;)a++;let l=s(h,r),u=s(f,a),m=Qt(l,u);return m>0?{nx:-(u.y-l.y)/m,ny:(u.x-l.x)/m}:void 0})}function We(t,n,o){let e=Mt(t),s=t.slice(),r=[];e.forEach((c,i)=>{let h=r.at(-1);(h===void 0||c-e[h]>=n/4)&&r.push(i)}),r.at(-1)!==t.length-1&&r.push(t.length-1);let a=0;for(;a<r.length;){let c=r[a],i=-1;for(let u=a+1;u<r.length&&e[r[u]]-e[c]<=o;u++){let m=r[u];e[m]-e[c]>Math.PI*n&&Qt(t[c],t[m])<=n&&(i=u)}if(i<0){a++;continue}let h=r[i],f=t[c],l=t[h];for(let u=c+1;u<h;u++){let m=(e[u]-e[c])/(e[h]-e[c]);s[u]={...t[u],x:f.x+(l.x-f.x)*m,y:f.y+(l.y-f.y)*m}}a=i}return s}function Ge(t,n){let o=t.length,e=Mt(t),s=e[o-1],r=new Float64Array(o+1),a=new Float64Array(o+1),c=new Float64Array(o+1);for(let l=0;l<o;l++){let u=t[l],m=(e[Math.min(l+1,o-1)]-e[Math.max(l-1,0)])/2;r[l+1]=r[l]+m,a[l+1]=a[l]+m*u.x,c[l+1]=c[l]+m*u.y}let i=new Array(o),h=0,f=0;for(let l=0;l<o;l++){let u=t[l],m=Math.min(n,e[l],s-e[l]),I=e[l]-m,k=e[l]+m+1e-9*(1+s);for(;h<o&&e[h]<I;)h++;for(;f<o&&e[f]<k;)f++;let A=r[f]-r[h];i[l]=A>0?{x:(a[f]-a[h])/A,y:(c[f]-c[h])/A}:{x:u.x,y:u.y}}return i}function Kn(t,n){return({id:o,index:e},s)=>{let r=t.get(o);r||(r=new Array(n[o].length),t.set(o,r)),r[e]=s}}function Xe(t,n,o,e,s,r=!0){let a=Math.max(e,2*s),c=Math.PI*s,i=r?c+s/2+a/2:a/2,h=new Map,f=new Map,l=Kn(h,n),u=Kn(f,n);return t.runs.forEach((m,I)=>{let k=t.owned[I],A=zn(Mt(m),k,i).map(([w,v])=>{let x=m.slice(w,v+1),M=r?Ge(We(x,s/2,c),s/2):x;return{lo:w,points:x,line:M,normals:Fe(M,a)}}),_=0,R=0;for(let w of A)w.points.forEach((v,x)=>{let M=h.get(v.id)?.[v.index],g=w.normals[x];M&&g&&(_+=M.nx*g.nx+M.ny*g.ny),R+=v.forward?1:-1});let S=(_===0?R:_)<0?-1:1;for(let{lo:w,points:v,line:x,normals:M}of A)v.forEach((g,P)=>{if(!k[w+P])return;let b=M[P];b&&l(g,S>0?b:{nx:-b.nx,ny:-b.ny}),r&&u(g,{dx:x[P].x-g.x,dy:(x[P].y-g.y)/o})})}),{normals:h,shifts:f}}function Jn(t,n,o,e){let s=new Array(n.length),r=[],a=0,c=0;for(let i=0;i<n.length;i++){for(;c<n.length&&t[c]-t[i]<=o;){for(;r.length>a&&e*n[r.at(-1)]<=e*n[c];)r.pop();r.push(c++)}for(;t[i]-t[r[a]]>o;)a++;s[i]=n[r[a]]}return s}function Un(t,n,o,e=()=>!0){let s=n.length,r=t.map((f,l)=>e(n[l])?s>1?(t[Math.min(l+1,s-1)]-t[Math.max(l-1,0)])/2:1:0),a=[0],c=[0];for(let f=0;f<s;f++)a.push(a[f]+r[f]),c.push(c[f]+r[f]*n[f]);let i=0,h=0;return n.map((f,l)=>{for(;t[l]-t[i]>o;)i++;for(;h<s&&t[h]-t[l]<=o;)h++;let u=a[h]-a[i];return u>0?(c[h]-c[i])/u:f})}var Be=[0];function $e(t){for(let n of t.values())if(n>1)return!0;return!1}function Ke(t,n,o,e,s){if(!$e(n))return{span:n,nodeThreads:new Map,threadPasses:new Map,linkThreads:new Map};let r=new Map,a=[],c=[],i=[],h=[],f=[],l=[];for(let S of t){let w=[],v=[];for(let E of S){let X=r.get(E);X===void 0&&(X=a.length,r.set(E,X),a.push(E),c.push(0),i.push(0)),v.push(X);let U=o[E],j=U?.[Math.floor(U.length/2)];w.push(j?{x:j.x,y:j.y*e}:w.at(-1)??{x:0,y:0})}let x=Mt(w),M=S.map(E=>n.get(E)??1),g=Jn(x,M,s/2,1),P=v.map(E=>++i[E]),b=S.length,V=new Int32Array(b),D=-1;for(let E=0;E<b;E++)D=M[E]===g[E]?E:D,V[E]=D;let st=new Int32Array(b);D=-1;for(let E=b-1;E>=0;E--)D=M[E]===g[E]?E:D,st[E]=D;let G=new Array(b);for(let E=0;E<b;E++){let X=V[E],U=st[E],j=X<0?U:U<0||x[E]-x[X]<=x[U]-x[E]?X:U;G[E]=Math.min(P[j],g[E])-1,c[v[E]]=Math.max(c[v[E]],g[E])}h.push(v),f.push(P),l.push(G)}let u=[],m=[],I=(S,w)=>{let v=c[S],x=u[S]??=new Set;for(let M=0;M<v;M++)for(let g of[w-M,w+M])if(g>=0&&g<v&&!x.has(g))return g;return w};h.forEach((S,w)=>{S.forEach((v,x)=>{if(c[v]>1){let M=I(v,l[w][x]);u[v].add(M),(m[v]??=[])[f[w][x]]=M}})});let k=new Map,A=new Map,_=new Map;a.forEach((S,w)=>{k.set(S,c[w]),A.set(S,u[w]?[...u[w]].sort((x,M)=>x-M):Be);let v=[];m[w]?.forEach((x,M)=>{v[x]=M-1}),_.set(S,v)});let R=new Map;return h.forEach((S,w)=>{let v=f[w];for(let x=1;x<S.length;x++){let M=S[x-1],g=S[x],P=[m[M]?.[v[x-1]]??0,m[g]?.[v[x]]??0],b=R.get(a[M]);b||(b=new Map,R.set(a[M],b));let V=b.get(a[g]);V?V.some(([D,st])=>D===P[0]&&st===P[1])||V.push(P):b.set(a[g],[P])}}),{span:k,nodeThreads:A,threadPasses:_,linkThreads:R}}function Ue(t,n,{reach:o,taper:e}){let s=new Map;return t.runs.forEach((r,a)=>{let c=Mt(r),i=r.flatMap((l,u)=>l.middle?[u]:[]),h=i.map(l=>c[l]),f=i.map(l=>t.owned[a][l]);for(let[l,u]of zn(h,f,o/2+e/2)){let m=h.slice(l,u+1),I=i.slice(l,u+1).map(A=>r[A].id),k=n.map(A=>{let _=I.map(R=>A.get(R)??0);return _.every(R=>R===_[0])?{slot:_,held:_}:{slot:Un(m,Jn(m,_,o/2,1),e/2),held:Un(m,_,e/2,R=>R>0)}});I.forEach((A,_)=>{f[l+_]&&s.set(A,{slot:k.map(R=>R.slot[_]),held:k.map(R=>R.held[_])})})}}),s}function Qn(t,n,o,e){let s=qt(t),r=t.map(u=>u.mostPasses),a=Ne*e,c=De(t.flatMap(u=>u.route),n,o,Xn*e),i=Xe(c,n,o,Xn*e,Ht(r)*(s?Dt(r):1)*e,s),h=s?t.map(u=>Ke(u.route,u.passes,n,o,a)):void 0,f=h?Ue(c,h.map(u=>u.span),{reach:a,taper:Le*e}):void 0,l={dx:0,dy:0};for(let u of i.shifts.values())for(let m of u)l.dx=Math.max(l.dx,Math.abs(m?.dx??0)),l.dy=Math.max(l.dy,Math.abs(m?.dy??0));return{lines:i,threads:h,spans:f,furthestShift:l}}function L(t,n,o,e){return(e<<24|o<<16|n<<8|t)>>>0}function Zt(t){return t&255}function tn(t){return t>>>8&255}function nn(t){return t>>>16&255}function en(t){return t>>>24&255}function Zn(t){return`rgba(${Zt(t)},${tn(t)},${nn(t)},${en(t)/255})`}function Jo(t,n){return`rgba(${Math.round(t[0]*255)},${Math.round(t[1]*255)},${Math.round(t[2]*255)},${n})`}function Et(t,n){return L(Zt(t),tn(t),nn(t),Math.round(en(t)*n))}function Qo(t,n){let o=Math.max(0,1-1/n),e=s=>Math.round(s+(255-s)*o);return L(e(Zt(t)),e(tn(t)),e(nn(t)),en(t))}var te=300,Tt=.7,Ot=.5;function Ye(t){return`hsl(${t}, ${Tt*100}%, ${Ot*100}%)`}function kt(t){return Math.max(0,Math.min(1,t))*te}function on(t,n){return kt((t-n.start)/(n.end-n.start))}var Ve=30;function ts({start:t,bp:n,reversed:o},e){let s=on(t,e),r=on(t+n,e);if(r-s<1)return[(s+r)/2];let a=Math.ceil((r-s)/Ve);return Array.from({length:a+1},(c,i)=>on(t+n*(o?a-i:i)/a,e))}var je=Array.from({length:7},(t,n)=>({offset:n/6,color:Ye(n/6*te)})),ns=`linear-gradient(to right, ${je.map(t=>`${t.color} ${t.offset*100}%`).join(", ")})`;var qe=Nt();function ne(t,n,o,e,s,r,a=!1){return qe(t,[n,o.scaleX,o.scaleY,e,r,a,s],()=>{let c=new Map;for(let i=0;i<n.edges.length;i++){let h=e?.get(i),f=Ln(t,n.edges[i],o,h,h&&r?.[i],a);f&&c.set(i,f)}return c})}var ze=4;function Je(t){let n=new Map;for(let o of t.edges)St(n,o.from,o.to),St(n,o.to,o.from);return n}function Qe({nodeId:t,nodeById:n,neighbors:o}){let e=new Set([t]),s=[t],r=1/0,a=-1/0;for(let c=0;c<ze&&s.length>0;c++){let i=[];for(let h of s){let f=o.get(h);if(f){for(let l of f)if(!e.has(l)){e.add(l);let u=n.get(l);u&&Ct(u)?(r=Math.min(r,u.stable.start+u.length),a=Math.max(a,u.stable.start)):i.push(l)}}}s=i}return r===1/0?void 0:{start:Math.min(r,a),end:Math.max(r,a)}}function Ze({nodeId:t,nodeById:n,neighbors:o}){let e=n.get(t);return e===void 0?void 0:Ct(e)?{start:e.stable.start,end:e.stable.start+e.length}:Qe({nodeId:t,nodeById:n,neighbors:o})}function ee(t){let n=new Map(t.nodes.map(s=>[s.id,s])),o=Je(t),e=new Map;for(let s of t.nodes){let r=Ze({nodeId:s.id,nodeById:n,neighbors:o});r&&e.set(s.id,(r.start+r.end)/2)}return e}var to=L(119,119,119,217),oe=L(136,136,136,217),no=L(24,24,28,240),eo=2.2,de=L(160,160,160,255),It=.18,ws=Zn(Et(de,It)),oo=11,so=1.2,ro=1e-6,ao=7,co=3,io=3,lo=1.5,se=3,ho=.5,fo=.45,sn=12,uo=1e-6,ot=new Float64Array(64),dt=new Float64Array(64),mt=new Float64Array(64);function mo(t,n,o,e){let s=t.length*sn+1;ot.length<s&&(ot=new Float64Array(s),dt=new Float64Array(s),mt=new Float64Array(s));let r=t[t.length-1];ot[0]=r.x1,dt[0]=r.y1,mt[0]=0;let a=1,c=0;for(let i=t.length-1;i>=0&&c<e;i--){let h=t[i];for(let f=1;f<=sn&&c<e;f++){let l=1-(f/sn)**2,u=1-l,m=u*u*u,I=3*u*u*l,k=3*u*l*l,A=l*l*l,_=m*h.x0+I*h.cx0+k*h.cx1+A*h.x1,R=m*h.y0+I*h.cy0+k*h.cy1+A*h.y1;c+=Math.hypot(_-ot[a-1],(R-dt[a-1])*o)*n,ot[a]=_,dt[a]=R,mt[a]=c,a++}}return a}function re(t,n){let o=1;for(;o<t-1&&mt[o]<n;)o++;let e=mt[o-1],s=mt[o],r=s>e?Math.min(1,Math.max(0,(n-e)/(s-e))):0;return{x:ot[o-1]+(ot[o]-ot[o-1])*r,y:dt[o-1]+(dt[o]-dt[o-1])*r}}function po({curves:t,edgeHalfWidth:n,nodeHalfWidth:o,scale:e,yToX:s,color:r,fromSegments:a,toSegments:c}){let i=ao+co*n,h=mo(t,e,s,o+se*i),f=mt[h-1],l=f<uo,u=Math.min(o,f),m=l?Math.min(1,Nn(a,e,e*s)/i):1;if(l?m<ho:f<se*i)return;let I=re(h,u),k=re(h,u+i*m),A=I.x-k.x,_=(I.y-k.y)*s,R=t[t.length-1];return{x:I.x,y:I.y,angle:Math.hypot(A,_)>0?Math.atan2(_,A):Co(R,s,Mo(R,c)),length:i*m,halfWidth:(io+lo*n)*m,color:r}}var ae=[[0,0]],go=[0],xo={dx:0,dy:0};function me(t,n,o){let e=s=>Math.hypot(s.x-t.x,(s.y-t.y)*o);return e(n[0])<e(n.at(-1))}function yo(t,n,o,e,s){return e?kn(t).from==="start":me({x:o.x0,y:o.y0},n,s)}function Mo(t,n){if(n.length<2)return;let o=n[0],e=n[n.length-1];return Math.hypot(t.x1-o.x,t.y1-o.y)<=Math.hypot(t.x1-e.x,t.y1-e.y)?{from:o,to:n[1]}:{from:e,to:n[n.length-2]}}function ce(t,n){if(!t||!n)return;let o=n.x-t.x,e=n.y-t.y,s=Math.hypot(o,e);return s>0?{nx:-e/s,ny:o/s}:void 0}var pe=.1,Eo=1/Math.sqrt(pe);function rn(t,n=1){let o=n===1?t:t.map(e=>({x:e.x,y:e.y*n}));return o.map((e,s)=>{let r=ce(o[s-1],e),a=ce(e,o[s+1]);if(r&&a){let c=(r.nx+a.nx)/2,i=(r.ny+a.ny)/2,h=r.nx*c+r.ny*i;return h>pe?{nx:c/h,ny:i/h}:{nx:c,ny:i}}return r??a??{nx:0,ny:0}})}function ie(t,n,o,e=1){let s=new Array(t.length);for(let r=0;r<t.length;r++)s[r]={x:t[r].x+n[r].nx*o,y:t[r].y+n[r].ny*o/e};return s}function cn(t,n,o){let e=(1-Math.abs(2*o-1))*n,s=e*(1-Math.abs(t/60%2-1)),r=o-e/2,a=0,c=0,i=0;return t<60?(a=e,c=s):t<120?(a=s,c=e):t<180?(c=e,i=s):t<240?(c=s,i=e):t<300?(a=s,i=e):(a=e,i=s),[a+r,c+r,i+r]}function Ft(t,n,o,e=1){let[s,r,a]=cn(t,n,o);return L(Math.round(s*255),Math.round(r*255),Math.round(a*255),Math.round(e*255))}var wo=[[68,1,84],[59,82,139],[33,145,140],[94,201,98],[253,231,37]],vo=[[237,137,44],[158,42,122]],Ao=[[220,50,50],[50,120,220]];function an(t,n){let o=Math.max(0,Math.min(1,n))*(t.length-1),e=Math.min(t.length-2,Math.floor(o)),s=o-e,r=t[e],a=t[e+1];return L(Math.round(r[0]+(a[0]-r[0])*s),Math.round(r[1]+(a[1]-r[1])*s),Math.round(r[2]+(a[2]-r[2])*s),255)}function _o(t,n){return Ft(Hn(t),Yt,Vt,n)}var ge=[60,65,72],ln=L(...ge,255),vs=`rgb(${ge.join(", ")})`;function Ro(t,n){let o=n.midpoints.get(t.id);return Ct(t)&&o!==void 0?(o-n.start)/n.span:void 0}function As(t,n){let o=ee(t);if(n&&n.end>n.start)return{start:n.start,span:n.end-n.start,midpoints:o};let e=1/0,s=-1/0;for(let r of o.values())e=Math.min(e,r),s=Math.max(s,r);return{start:e===1/0?0:e,span:s>e?s-e:1,midpoints:o}}function bo(t,n){let o=1/0,e=-1/0,s=1/0,r=-1/0,a=0;for(let c of t.nodes)c.stable!==void 0&&c.stable.rank>a&&(a=c.stable.rank),c.depth<o&&(o=c.depth),c.depth>e&&(e=c.depth),c.length<s&&(s=c.length),c.length>r&&(r=c.length);return{minDepth:o,maxDepth:e,minLength:s,maxLength:r,maxRank:a,nodeCount:t.nodes.length,referenceRamp:n}}function So(t,n,o,e){switch(o){case"random":return _o(t.id,1);case"depth":return an(wo,e.maxDepth>e.minDepth?(t.depth-e.minDepth)/(e.maxDepth-e.minDepth):.5);case"node-length":return an(Ao,e.maxLength>e.minLength?(t.length-e.minLength)/(e.maxLength-e.minLength):.5);case"stable-rank":return t.stable===void 0?L(160,160,160,255):t.stable.rank===0?L(52,152,219,255):an(vo,e.maxRank>1?(t.stable.rank-1)/(e.maxRank-1):0);case"reference-position":{let s=e.referenceRamp;if(s===void 0)return L(160,160,160,255);let r=Ro(t,s);return r===void 0?ln:Ft(kt(r),Tt,Ot)}case"grey":return L(160,160,160,255);case"rainbow":{let s=e.nodeCount>1?n/e.nodeCount*360:0;return Ft(s,.75,.5)}default:return L(52,152,219,255)}}function Co(t,n=1,o){let e=[[t.cx1,t.cy1],[t.cx0,t.cy0],[t.x0,t.y0]];for(let[s,r]of e){let a=t.x1-s,c=(t.y1-r)*n;if(Math.hypot(a,c)>0)return Math.atan2(c,a)}return o?Math.atan2((o.to.y-o.from.y)*n,o.to.x-o.from.x):0}function To(t,n){let o=!1;for(let e=0;e<t.length-1&&!o;e++){let s=t[e],r=t[e+1];o=Math.max(s.x,r.x)>=n.minX&&Math.min(s.x,r.x)<=n.maxX&&Math.max(s.y,r.y)>=n.minY&&Math.min(s.y,r.y)<=n.maxY}return o}function le(t,n,o=0,e=0){for(let s of t){let r=Math.min(s.x0,s.cx0,s.cx1,s.x1),a=Math.max(s.x0,s.cx0,s.cx1,s.x1),c=Math.min(s.y0,s.cy0,s.cy1,s.y1),i=Math.max(s.y0,s.cy0,s.cy1,s.y1);if(a>=n.minX-o&&r<=n.maxX+o&&i>=n.minY-e&&c<=n.maxY+e)return!0}return!1}var he=new WeakMap;function Oo(t){let n=he.get(t);if(!n){let o=[],e=new Map,s=t.paths??[];for(let r=0;r<s.length;r++)o.push(Ft(Dn(r,s.length),Yt,Vt,.85)),e.has(s[r].name)||e.set(s[r].name,r);n={pathColorByIndex:o,pathIndexByName:e},he.set(t,n)}return n}var fe=new WeakMap,ko=new Map;function Io(t){let n=fe.get(t);if(!n){n=new Map;for(let[o,e]of(t.paths??[]).entries())for(let s of new Set(e.nodeIds))St(n,s,o);fe.set(t,n)}return n}var Po=Nt(),ue=new WeakMap;function No(t){let n=ue.get(t);if(!n){n=new Map;for(let{from:o,to:e}of t.edges){let s=n.get(o);s||(s=new Set,n.set(o,s)),s.add(e)}ue.set(t,n)}return n}function _s(t){let{nodePositions:n,graph:o,nodeById:e,colorScheme:s,contigThickness:r,connectorThickness:a,drawPaths:c,nodeWidth:i="uniform",edgeWidth:h="uniform",highlight:f,axis:l,linearLayout:u,viewportBounds:m,referenceRamp:I,deletions:k,deletionRoutes:A,stranded:_,hiddenEdges:R,version:S=0}=t,w=i==="depth"?Fn(o):0,v=h==="walks"?Wn(o):0,x=l.scaleX,M=1/Math.max(x,ro),g=In(l),P=ne(n,o,l,k,S,A,_),b=[],V=new Map,D=[],st=new Map,G=[],E=new Map,X=bo(o,I),U=new Map;if(s==="rainbow")for(let d=0;d<o.nodes.length;d++)U.set(o.nodes[d].id,d);let j=o.paths?.length??0,{pathColorByIndex:pn,pathIndexByName:Ae}=Oo(o),_e=d=>pn[Ae.get(d)??-1]??oe,Re=c&&j>1?Io(o):ko,z=f?.walks??[],J=qt(z),wt=z.map(d=>d.mostPasses),Gt=J?Dt(wt):1,vt=f&&z.length>1?Po(f,[n,S,l.scaleX,l.scaleY],()=>Qn(z,n,g,M)):void 0,Xt=vt?.lines,Bt=vt?.threads,be=vt?.spans,Se=J?zt(wt,wt):[],gn=new Map,Ce=d=>{let p=gn.get(d);if(!p){let y=be?.get(d);p=y?zt(y.slot,wt,y.held):Se,gn.set(d,p)}return p},$t=(d,p,y,C)=>J?(Ce(d)[y]+C*qn)*Gt:(y-(z.length-1)/2)*p,xn=d=>J?ut/2*Gt:d/2,yn=new Map,Mn=(d,p)=>{let y=yn.get(d);if(!y){let C=Xt?.normals.get(d);y=C?rn(p,g).map((O,F)=>C[F]??O):rn(p,g),yn.set(d,y)}return y},En=new Map,wn=d=>{let p=En.get(d);if(p===void 0){let y=e.get(d);p=jt(y?Lt(y,r,i,w):r,z.length),En.set(d,p)}return p},vn=(d,p)=>Xt?.shifts.get(d)?.[p]??xo,An=(d,p,y)=>{let C=y?0:p.length-1;return{id:d,laneWidth:wn(d),normal:Mn(d,p)[C]??{nx:0,ny:0},shift:vn(d,C)}},Te=(d,p)=>{if(!m)return!0;let y=J?Ht(wt)*Gt:(z.length-1)/2*wn(p),C=Eo*y*M;return le(d,m,C+(vt?.furthestShift.dx??0),C/g+(vt?.furthestShift.dy??0))},Oe=(d,p,y)=>{let C=Bt?.[d]?.linkThreads;if(!C?.size)return ae;let O=C.get(p)?.get(y),F=No(o).get(y)?.has(p)?void 0:C.get(y)?.get(p);if(!F)return O??ae;let rt=F.map(([Y,Q])=>[Q,Y]);return O?[...O,...rt]:rt},Kt=(d,p,y)=>z[d]?.passColors.get(p)?.[Bt?.[d]?.threadPasses.get(p)?.[y]??0],ke=(d,p)=>Xt?.shifts.has(d)?p.map((y,C)=>{let{dx:O,dy:F}=vn(d,C);return{...y,x:y.x+O,y:y.y+F}}):p,Ie=x>(u?1:fo);for(let d=0;d<o.edges.length;d++){let p=o.edges[d],y=n[p.from],C=n[p.to],O=P.get(d);if(!y?.length||!C?.length||!O||R?.has(d))continue;let F=p.pathIds?.length??0,Y=k?.get(d)!==void 0,Q=f?.edgeIndexes.has(d)??!1,pt=a/2*(Y?eo:1),gt=Y?pt:a/2*Gn(F,v,h),at=c&&F>0,B=Y?no:to,At=!f||Q?B:Et(B,It),ct=e.get(p.to),it=(ct?Lt(ct,r,i,w):r)/2,lt=T=>!m||le(T,m),Z=T=>Cn(T,oo/x,g,m),$=(T,W,N)=>{if(!Y){G.push({curves:T,thickness:W,color:N});return}for(let q of Z(T))G.push({curves:q.curves,thickness:W,color:N})},Pt=(T,W,N,q,ht,H,xt,yt,bt)=>{if(!Y){G.push({curves:T,thickness:W,color:N,walk:q,pass:ht,normal:H,offsetX:xt,endNormal:yt,endOffsetX:bt});return}let K={normal:H,offsetX:xt},ft={normal:yt,offsetX:bt};for(let et of Z(T)){let bn=et.startAlong===0?K:Jt(K,ft,et.startAlong),Sn=et.endAlong===1?ft:Jt(K,ft,et.endAlong);G.push({curves:et.curves,thickness:W,color:N,walk:q,pass:ht,normal:bn.normal,offsetX:bn.offsetX,endNormal:Sn.normal,endOffsetX:Sn.offsetX})}},_t=T=>{let W=Ie?po({curves:T,edgeHalfWidth:Y||at?a/2:gt,nodeHalfWidth:it,scale:x,yToX:g,color:At,fromSegments:y,toSegments:C}):void 0;W&&D.push(W)},tt=G.length,Rt=D.length,nt=f?.walks.length&&Q&&!at?f.walks:void 0;if(nt&&!Te(O,p.from))continue;if(nt){let T=An(p.from,y,yo(p,y,O[0],_,g)),W=O.at(-1),N=J?An(p.to,C,me({x:W.x1,y:W.y1},C,g)):T,q=nt.length===1,ht=xn(T.laneWidth);for(let H=0;H<nt.length;H++)if(nt[H].edgeIndexes.has(d))for(let[yt,bt]of Oe(H,p.from,p.to)){let K=q?0:$t(T.id,T.laneWidth,H,yt)*M,ft=J?$t(N.id,N.laneWidth,H,bt)*M:K,et=J?On(O,T.shift.dx+T.normal.nx*K,T.shift.dy+T.normal.ny*K/g,N.shift.dx+N.normal.nx*ft,N.shift.dy+N.normal.ny*ft/g):K===0?O:Ut(O,T.normal.nx*K,T.normal.ny*K/g);lt(et)&&Pt(et,ht,Kt(H,p.from,yt)??Kt(H,p.to,bt)??B,H,yt,T.normal,K,N.normal,ft)}G.length>tt&&_t(O)}else if(!at)lt(O)&&($(O,gt,At),_t(O));else{let T=Pn(y,C,F,l),W=Math.floor((F-1)/2);for(let N=0;N<F;N++){let{x:q,y:ht}=T[N],H=q===0&&ht===0?O:Ut(O,q,ht);if(!lt(H))continue;let xt=_e(p.pathIds[N]);$(H,pt,f&&(f.walks.length?!f.names.has(p.pathIds[N]):!Q)?Et(xt,It):xt),N===W&&_t(H)}}let _n=G.length-tt;_n>0&&E.set(d,{start:tt,count:_n});let Rn=D.length-Rt;Rn>0&&st.set(d,{start:Rt,count:Rn})}for(let[d,p]of Object.entries(n)){let y=e.get(d);if(!y||m&&!To(p,m))continue;let C=f!==void 0&&!f.nodeIds.has(d),O=C?de:So(y,U.get(d)??0,s,X),F=C?Et(O,It):O,rt=Lt(y,r,i,w),Y=rt/2,Q=b.length,pt=Re.get(d),gt=rt/j,at=p.length>=2,B=f?.walks.length&&!C&&!pt?.length?f.walks:void 0;if(at&&B){let ct=jt(rt,B.length),it=B.length>1?Mn(d,p):[],lt=B.length>1?ke(d,p):p,Z=xn(ct);for(let $=0;$<B.length;$++){let Pt=B[$].colors.get(d);if(Pt===void 0)continue;let _t=Bt?.[$]?.nodeThreads.get(d)??go;for(let tt of _t){let Rt=Kt($,d,tt)??Pt;if(B.length===1){b.push({points:p,thickness:Z,color:Rt,walk:$,pass:tt});continue}let nt=$t(d,ct,$,tt)*M;b.push({points:ie(lt,it,nt,g),thickness:Z,color:Rt,walk:$,pass:tt,normals:it,offsetX:nt})}}}else if(at&&pt?.length&>>=so){let ct=rn(p,g);for(let it of pt){let lt=(it-(j-1)/2)*gt*M,Z=pn[it]??oe;b.push({points:ie(p,ct,lt,g),thickness:gt/2,color:C?Et(Z,It):Z})}}else at&&b.push({points:p,thickness:Y,color:F});let At=b.length-Q;At>0&&V.set(d,{start:Q,count:At})}return{nodeStrokes:b,nodeStrokeRuns:V,arrows:D,arrowRuns:st,edgeCurves:G,edgeCurveRuns:E}}var Me=[{value:"progress",label:"Progress along the walk"},{value:"walk",label:"One colour for the walk"},{value:"reference",label:"Reference position"}],un=[{value:"grey",label:"Grey to black",ends:["#a3a3a3","#151515"]},{value:"blue",label:"Cyan to navy",ends:["#6ee0f0","#0b2c7a"]},{value:"red",label:"Yellow to red",ends:["#ffd24a","#b3121b"]},{value:"purple",label:"Pink to plum",ends:["#f5a3d8","#5e1a6e"]},{value:"green",label:"Lime to forest",ends:["#b6e36c","#0b5d3b"]},{value:"orange",label:"Peach to rust",ends:["#ffc285","#8f3a00"]},{value:"rainbow",label:"Rainbow"}],hn=["blue","red","purple","green"],Lo=t=>Me.some(n=>n.value===t),Ho=t=>un.some(n=>n.value===t);function Do(t,n,o,e=!0){let{field:s,scheme:r}=t.color??{},a=Lo(s)?s:e?"progress":"walk",c=n?"grey":hn[o%hn.length],i=Ho(r)?r==="rainbow"&&a!=="reference"?c:r:c,h=Math.floor(o/hn.length)%xe.length;return a==="walk"&&i===c&&h>0?{field:a,scheme:i,shade:xe[h]}:e||a==="walk"?{field:a,scheme:i}:{field:a,scheme:i,darkest:Fo}}var Fo=.55,dn=.5,xe=[dn,.85,.2],Wo=.08,ye=({field:t,scheme:n})=>t!=="walk"&&n!=="rainbow";function Go(t){let n=new Map;for(let e of t)ye(e)&&n.set(e.scheme,(n.get(e.scheme)??0)+1);let o=new Map;return t.map(e=>{let s=ye(e)?n.get(e.scheme):1;if(s<2)return e;let r=o.get(e.scheme)??0;o.set(e.scheme,r+1);let a=Wo/2;return{...e,stretch:[r/s+(r>0?a:0),(r+1)/s-(r<s-1?a:0)]}})}var Ee=({stretch:t},n)=>t?t[0]+(t[1]-t[0])*n:n,Xo=t=>t<=.04045?t/12.92:((t+.055)/1.055)**2.4,Bo=t=>t<=.0031308?t*12.92:1.055*t**(1/2.4)-.055;function $o(t){let[n,o,e]=[1,3,5].map(c=>Xo(Number.parseInt(t.slice(c,c+2),16)/255)),s=Math.cbrt(.4122214708*n+.5363325363*o+.0514459929*e),r=Math.cbrt(.2119034982*n+.6806995451*o+.1073969566*e),a=Math.cbrt(.0883024619*n+.2817188376*o+.6299787005*e);return[.2104542553*s+.793617785*r-.0040720468*a,1.9779984951*s-2.428592205*r+.4505937099*a,.0259040371*s+.7827717662*r-.808675766*a]}function Ko([t,n,o]){let e=(t+.3963377774*n+.2158037573*o)**3,s=(t-.1055613458*n-.0638541728*o)**3,r=(t-.0894841775*n-1.291485548*o)**3;return[4.0767416621*e-3.3077115913*s+.2309699292*r,-1.2684380046*e+2.6097574011*s-.3413193965*r,-.0041960863*e-.7034186147*s+1.707614701*r].map(a=>Bo(Math.max(0,Math.min(1,a)))*255)}var fn=new Map;function Uo(t){if(!fn.has(t)){let n=un.find(o=>o.value===t);fn.set(t,n&&"ends"in n?n.ends.map($o):void 0)}return fn.get(t)}function mn(t,n,o=0){let e=Math.max(0,Math.min(1,n)),s=Uo(t);if(!s)return cn(kt(e),Tt,Ot).map(f=>f*255);let[r,a]=s,c=r[0],i=a[0],h=i<o&&c>o?(c-o)/(c-i):1;return Ko(r.map((f,l)=>f+(a[l]-f)*e*h))}function we(t,n,o){let[e,s,r]=mn(t,n,o).map(Math.round);return`rgb(${e}, ${s}, ${r})`}function Wt(t,n,o){let[e,s,r]=mn(t,n,o).map(Math.round);return L(e,s,r,255)}function Yo(t,n){let{field:o,scheme:e,darkest:s,shade:r=dn}=t;return o==="walk"?Wt(e,r):n===void 0?ve:Wt(e,Ee(t,n),s)}var ve=ln;function Vo(t){let{field:n,scheme:o,darkest:e,shade:s=dn}=t,r=(a,c)=>({offset:a,color:we(o,c,e),abgr:Wt(o,c,e)});return n==="walk"?[r(0,s)]:Array.from({length:7},(a,c)=>r(c/6,Ee(t,c/6)))}export{Je as a,Ze as b,ut as c,qt as d,qo as e,L as f,Zn as g,Jo as h,Et as i,Qo as j,Ye as k,ts as l,je as m,ns as n,ne as o,ws as p,cn as q,vs as r,Ro as s,As as t,bo as u,So as v,_s as w,Me as x,un as y,Do as z,Go as A,Yo as B,ve as C,Vo as D};
|
|
2
|
+
//# sourceMappingURL=chunk-VTMJQFN5.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-4KBZ7WPP.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-G2FD7S3C.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GQZVR5DW.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-P2GJBFNA.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VX656OAZ.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-GXCMBPC6.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@11.11.0/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-EB4Q35QD.js"],
|
|
4
|
+
"sourcesContent": ["import {\n slideAt\n} from \"./chunk-JJV2GT2Z.js\";\n\n// src/renderer/walkLanes.ts\nvar THREAD_PX = 2;\nvar THREAD_GAP_PX = 1.5;\nvar SLOT_GAP_PX = 4;\nvar LANE_SMOOTHING_PX = 12;\nvar THREAD_REACH_PX = 64;\nvar THREAD_TAPER_PX = 24;\nvar MAX_BAND_PX = 48;\nvar PASSES_KEY = \"a thread per pass through a node\";\nvar threadsPasses = (walks) => walks.length > 1 && walks.some((w) => w.mostPasses > 1);\nvar threadsWidth = (threads) => threads * THREAD_PX + Math.max(0, threads - 1) * THREAD_GAP_PX;\nvar sum = (values) => values.reduce((a, b) => a + b, 0);\nfunction slotLayout(spans, mostPasses, laneWidth) {\n const widths = spans.map(\n (m, i) => mostPasses[i] > 1 ? threadsWidth(m) : laneWidth * Math.min(1, m)\n );\n let seen = 0;\n const gaps = spans.map((m) => {\n const share = Math.min(1, m);\n const gap = SLOT_GAP_PX * share * seen;\n seen = Math.max(seen, share);\n return gap;\n });\n return { widths, gaps, band: sum(widths) + sum(gaps) };\n}\nvar THREAD_PITCH_PX = THREAD_PX + THREAD_GAP_PX;\nfunction slotCentres(spans, mostPasses, held = spans) {\n const { widths, gaps, band } = slotLayout(spans, mostPasses, THREAD_PX);\n let at = -band / 2;\n return widths.map((width, i) => {\n at += gaps[i];\n const slack = mostPasses[i] > 1 ? Math.max(0, width - threadsWidth(held[i])) : 0;\n const centre = at + slack / 2 + THREAD_PX / 2;\n at += width;\n return centre;\n });\n}\nvar bandWidthPx = (mostPasses) => slotLayout(mostPasses, mostPasses, THREAD_PX).band;\nvar bandScale = (mostPasses) => Math.min(1, MAX_BAND_PX / (bandWidthPx(mostPasses) || 1));\nvar passesKey = (walks) => bandScale(walks.map((w) => w.mostPasses)) < 1 ? `${PASSES_KEY}, thinned to fit` : PASSES_KEY;\nfunction laneSlideAt(start, end, along) {\n const vector = ({ normal, offsetX: offsetX2 }) => ({\n dx: normal.nx * offsetX2,\n dy: normal.ny * offsetX2\n });\n const { dx, dy } = slideAt(vector(start), vector(end), along);\n const offsetX = Math.hypot(dx, dy);\n return offsetX > 0 ? { normal: { nx: dx / offsetX, ny: dy / offsetX }, offsetX } : { normal: { nx: 0, ny: 0 }, offsetX: 0 };\n}\nvar gapOf = (a, b) => Math.hypot(b.x - a.x, b.y - a.y);\nfunction arcOf(run) {\n const s = new Float64Array(run.length);\n for (let i = 1; i < run.length; i++) {\n s[i] = s[i - 1] + gapOf(run[i - 1], run[i]);\n }\n return s;\n}\nfunction laneRuns(routes, nodePositions, yToX, jump) {\n const seen = /* @__PURE__ */ new Set();\n const owns = routes.map(\n (route) => route.map((id) => {\n if (seen.has(id)) {\n return false;\n }\n seen.add(id);\n return !!nodePositions[id]?.length;\n })\n );\n const gap = (a, b) => Math.hypot(b.x - a.x, b.y * yToX - a.y);\n const runs = [];\n const owned = [];\n let run = [];\n let mine = [];\n const breakRun = () => {\n if (run.length) {\n runs.push(run);\n owned.push(mine);\n }\n run = [];\n mine = [];\n };\n routes.forEach((route, r) => {\n if (!owns[r].includes(true)) {\n return;\n }\n route.forEach((id, step) => {\n const segments = nodePositions[id];\n if (!segments?.length) {\n breakRun();\n return;\n }\n const first = segments[0];\n const last = segments.at(-1);\n const prev = run.at(-1);\n const next = nodePositions[route[step + 1] ?? \"\"];\n const toNext = (p) => {\n const at = { x: p.x, y: p.y * yToX };\n return next?.length ? Math.min(gap(at, next[0]), gap(at, next.at(-1))) : 0;\n };\n const forward = prev ? gap(prev, first) <= gap(prev, last) : toNext(last) <= toNext(first);\n if (prev && gap(prev, forward ? first : last) > jump) {\n breakRun();\n }\n const middle = Math.floor(segments.length / 2);\n for (let k = 0; k < segments.length; k++) {\n const index = forward ? k : segments.length - 1 - k;\n const p = segments[index];\n run.push({\n x: p.x,\n y: p.y * yToX,\n id,\n index,\n middle: index === middle,\n forward\n });\n mine.push(owns[r][step]);\n }\n });\n breakRun();\n });\n return { runs, owned };\n}\nfunction ownedWindows(s, owned, margin) {\n const windows = [];\n for (let i = 0; i < owned.length; i++) {\n if (!owned[i]) {\n continue;\n }\n let j = i;\n while (j + 1 < owned.length && owned[j + 1]) {\n j++;\n }\n const last = windows.at(-1);\n const floor = last ? last[1] : 0;\n let lo = i;\n while (lo > floor && s[i] - s[lo - 1] <= margin) {\n lo--;\n }\n let hi = j;\n while (hi + 1 < s.length && s[hi + 1] - s[j] <= margin) {\n hi++;\n }\n if (last && lo <= last[1] + 1) {\n last[1] = hi;\n } else {\n windows.push([lo, hi]);\n }\n i = j;\n }\n return windows;\n}\nfunction smoothedNormals(run, reach) {\n const s = arcOf(run);\n const end = s.at(-1);\n const pointAt = (at, j) => {\n const a = run[j];\n const b = run[Math.min(j + 1, run.length - 1)];\n const span = s[Math.min(j + 1, run.length - 1)] - s[j];\n const f = span > 0 ? (at - s[j]) / span : 0;\n return { x: a.x + (b.x - a.x) * f, y: a.y + (b.y - a.y) * f };\n };\n let lo = 0;\n let hi = 0;\n return run.map((_, i) => {\n const back = Math.max(0, s[i] - reach / 2);\n const ahead = Math.min(end, s[i] + reach / 2);\n while (lo < run.length - 1 && s[lo + 1] <= back) {\n lo++;\n }\n while (hi < run.length - 1 && s[hi + 1] <= ahead) {\n hi++;\n }\n const a = pointAt(back, lo);\n const b = pointAt(ahead, hi);\n const len = gapOf(a, b);\n return len > 0 ? { nx: -(b.y - a.y) / len, ny: (b.x - a.x) / len } : void 0;\n });\n}\nfunction cutCurls(run, close, length) {\n const s = arcOf(run);\n const out = run.slice();\n const picks = [];\n s.forEach((at, k) => {\n const last = picks.at(-1);\n if (last === void 0 || at - s[last] >= close / 4) {\n picks.push(k);\n }\n });\n if (picks.at(-1) !== run.length - 1) {\n picks.push(run.length - 1);\n }\n let a = 0;\n while (a < picks.length) {\n const i = picks[a];\n let to = -1;\n for (let b = a + 1; b < picks.length && s[picks[b]] - s[i] <= length; b++) {\n const j2 = picks[b];\n if (s[j2] - s[i] > Math.PI * close && gapOf(run[i], run[j2]) <= close) {\n to = b;\n }\n }\n if (to < 0) {\n a++;\n continue;\n }\n const j = picks[to];\n const p = run[i];\n const q = run[j];\n for (let k = i + 1; k < j; k++) {\n const f = (s[k] - s[i]) / (s[j] - s[i]);\n out[k] = {\n ...run[k],\n x: p.x + (q.x - p.x) * f,\n y: p.y + (q.y - p.y) * f\n };\n }\n a = to;\n }\n return out;\n}\nfunction rounded(run, half) {\n const n = run.length;\n const s = arcOf(run);\n const end = s[n - 1];\n const sumW = new Float64Array(n + 1);\n const sumX = new Float64Array(n + 1);\n const sumY = new Float64Array(n + 1);\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const w = (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2;\n sumW[i + 1] = sumW[i] + w;\n sumX[i + 1] = sumX[i] + w * p.x;\n sumY[i + 1] = sumY[i] + w * p.y;\n }\n const out = new Array(n);\n let lo = 0;\n let hi = 0;\n for (let i = 0; i < n; i++) {\n const p = run[i];\n const reach = Math.min(half, s[i], end - s[i]);\n const from = s[i] - reach;\n const to = s[i] + reach + 1e-9 * (1 + end);\n while (lo < n && s[lo] < from) {\n lo++;\n }\n while (hi < n && s[hi] < to) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n out[i] = w > 0 ? { x: (sumX[hi] - sumX[lo]) / w, y: (sumY[hi] - sumY[lo]) / w } : { x: p.x, y: p.y };\n }\n return out;\n}\nfunction fieldSetter(field, nodePositions) {\n return ({ id, index }, value) => {\n let own = field.get(id);\n if (!own) {\n own = new Array(nodePositions[id].length);\n field.set(id, own);\n }\n own[index] = value;\n };\n}\nfunction laneLines(lanes, nodePositions, yToX, reach, band, smooth = true) {\n const turn = Math.max(reach, 2 * band);\n const curl = Math.PI * band;\n const margin = smooth ? curl + band / 2 + turn / 2 : turn / 2;\n const normals = /* @__PURE__ */ new Map();\n const shifts = /* @__PURE__ */ new Map();\n const setNormal = fieldSetter(normals, nodePositions);\n const setShift = fieldSetter(shifts, nodePositions);\n lanes.runs.forEach((run, r) => {\n const owned = lanes.owned[r];\n const pieces = ownedWindows(arcOf(run), owned, margin).map(([lo, hi]) => {\n const points = run.slice(lo, hi + 1);\n const line = smooth ? rounded(cutCurls(points, band / 2, curl), band / 2) : points;\n return { lo, points, line, normals: smoothedNormals(line, turn) };\n });\n let agree = 0;\n let along = 0;\n for (const piece of pieces) {\n piece.points.forEach((p, i) => {\n const theirs = normals.get(p.id)?.[p.index];\n const mine = piece.normals[i];\n if (theirs && mine) {\n agree += theirs.nx * mine.nx + theirs.ny * mine.ny;\n }\n along += p.forward ? 1 : -1;\n });\n }\n const sign = (agree === 0 ? along : agree) < 0 ? -1 : 1;\n for (const { lo, points, line, normals: own } of pieces) {\n points.forEach((p, i) => {\n if (!owned[lo + i]) {\n return;\n }\n const n = own[i];\n if (n) {\n setNormal(p, sign > 0 ? n : { nx: -n.nx, ny: -n.ny });\n }\n if (smooth) {\n setShift(p, {\n dx: line[i].x - p.x,\n dy: (line[i].y - p.y) / yToX\n });\n }\n });\n }\n });\n return { normals, shifts };\n}\nfunction windowed(s, v, half, sign) {\n const out = new Array(v.length);\n const deque = [];\n let head = 0;\n let next = 0;\n for (let i = 0; i < v.length; i++) {\n while (next < v.length && s[next] - s[i] <= half) {\n while (deque.length > head && sign * v[deque.at(-1)] <= sign * v[next]) {\n deque.pop();\n }\n deque.push(next++);\n }\n while (s[i] - s[deque[head]] > half) {\n head++;\n }\n out[i] = v[deque[head]];\n }\n return out;\n}\nfunction windowMean(s, v, half, counted = () => true) {\n const n = v.length;\n const weight = s.map(\n (_, i) => !counted(v[i]) ? 0 : n > 1 ? (s[Math.min(i + 1, n - 1)] - s[Math.max(i - 1, 0)]) / 2 : 1\n );\n const sumW = [0];\n const sumWV = [0];\n for (let i = 0; i < n; i++) {\n sumW.push(sumW[i] + weight[i]);\n sumWV.push(sumWV[i] + weight[i] * v[i]);\n }\n let lo = 0;\n let hi = 0;\n return v.map((value, i) => {\n while (s[i] - s[lo] > half) {\n lo++;\n }\n while (hi < n && s[hi] - s[i] <= half) {\n hi++;\n }\n const w = sumW[hi] - sumW[lo];\n return w > 0 ? (sumWV[hi] - sumWV[lo]) / w : value;\n });\n}\nvar ONE_THREAD = [0];\nfunction repeats(passes) {\n for (const p of passes.values()) {\n if (p > 1) {\n return true;\n }\n }\n return false;\n}\nfunction walkThreads(route, passes, nodePositions, yToX, reach) {\n if (!repeats(passes)) {\n return {\n span: passes,\n nodeThreads: /* @__PURE__ */ new Map(),\n threadPasses: /* @__PURE__ */ new Map(),\n linkThreads: /* @__PURE__ */ new Map()\n };\n }\n const index = /* @__PURE__ */ new Map();\n const ids = [];\n const widths = [];\n const visits = [];\n const steps = [];\n const stepVisits = [];\n const stepWants = [];\n for (const piece of route) {\n const points = [];\n const nodes = [];\n for (const id of piece) {\n let k = index.get(id);\n if (k === void 0) {\n k = ids.length;\n index.set(id, k);\n ids.push(id);\n widths.push(0);\n visits.push(0);\n }\n nodes.push(k);\n const segments = nodePositions[id];\n const mid = segments?.[Math.floor(segments.length / 2)];\n points.push(\n mid ? { x: mid.x, y: mid.y * yToX } : points.at(-1) ?? { x: 0, y: 0 }\n );\n }\n const s = arcOf(points);\n const p = piece.map((id) => passes.get(id) ?? 1);\n const most = windowed(s, p, reach / 2, 1);\n const copy = nodes.map((k) => ++visits[k]);\n const n = piece.length;\n const before = new Int32Array(n);\n let last = -1;\n for (let i = 0; i < n; i++) {\n last = p[i] === most[i] ? i : last;\n before[i] = last;\n }\n const after = new Int32Array(n);\n last = -1;\n for (let i = n - 1; i >= 0; i--) {\n last = p[i] === most[i] ? i : last;\n after[i] = last;\n }\n const wants = new Array(n);\n for (let i = 0; i < n; i++) {\n const b = before[i];\n const a = after[i];\n const nearest = b < 0 ? a : a < 0 ? b : s[i] - s[b] <= s[a] - s[i] ? b : a;\n wants[i] = Math.min(copy[nearest], most[i]) - 1;\n widths[nodes[i]] = Math.max(widths[nodes[i]], most[i]);\n }\n steps.push(nodes);\n stepVisits.push(copy);\n stepWants.push(wants);\n }\n const taken = [];\n const threadOf = [];\n const free = (k, want) => {\n const width = widths[k];\n const own = taken[k] ??= /* @__PURE__ */ new Set();\n for (let d = 0; d < width; d++) {\n for (const c of [want - d, want + d]) {\n if (c >= 0 && c < width && !own.has(c)) {\n return c;\n }\n }\n }\n return want;\n };\n steps.forEach((nodes, piece) => {\n nodes.forEach((k, i) => {\n if (widths[k] > 1) {\n const t = free(k, stepWants[piece][i]);\n taken[k].add(t);\n (threadOf[k] ??= [])[stepVisits[piece][i]] = t;\n }\n });\n });\n const span = /* @__PURE__ */ new Map();\n const nodeThreads = /* @__PURE__ */ new Map();\n const threadPasses = /* @__PURE__ */ new Map();\n ids.forEach((id, k) => {\n span.set(id, widths[k]);\n nodeThreads.set(\n id,\n taken[k] ? [...taken[k]].sort((a, b) => a - b) : ONE_THREAD\n );\n const passOf = [];\n threadOf[k]?.forEach((thread, visit) => {\n passOf[thread] = visit - 1;\n });\n threadPasses.set(id, passOf);\n });\n const linkThreads = /* @__PURE__ */ new Map();\n steps.forEach((nodes, piece) => {\n const visit = stepVisits[piece];\n for (let i = 1; i < nodes.length; i++) {\n const from = nodes[i - 1];\n const to = nodes[i];\n const pair = [\n threadOf[from]?.[visit[i - 1]] ?? 0,\n threadOf[to]?.[visit[i]] ?? 0\n ];\n let ahead = linkThreads.get(ids[from]);\n if (!ahead) {\n ahead = /* @__PURE__ */ new Map();\n linkThreads.set(ids[from], ahead);\n }\n const list = ahead.get(ids[to]);\n if (!list) {\n ahead.set(ids[to], [pair]);\n } else if (!list.some(([a, b]) => a === pair[0] && b === pair[1])) {\n list.push(pair);\n }\n }\n });\n return { span, nodeThreads, threadPasses, linkThreads };\n}\nfunction bandSpans(lanes, spans, { reach, taper }) {\n const out = /* @__PURE__ */ new Map();\n lanes.runs.forEach((run, r) => {\n const s = arcOf(run);\n const mids = run.flatMap((p, i) => p.middle ? [i] : []);\n const along = mids.map((i) => s[i]);\n const owned = mids.map((i) => lanes.owned[r][i]);\n for (const [lo, hi] of ownedWindows(along, owned, reach / 2 + taper / 2)) {\n const at = along.slice(lo, hi + 1);\n const ids = mids.slice(lo, hi + 1).map((i) => run[i].id);\n const eased = spans.map((own) => {\n const raw = ids.map((id) => own.get(id) ?? 0);\n return raw.every((v) => v === raw[0]) ? { slot: raw, held: raw } : {\n slot: windowMean(at, windowed(at, raw, reach / 2, 1), taper / 2),\n held: windowMean(at, raw, taper / 2, (v) => v > 0)\n };\n });\n ids.forEach((id, i) => {\n if (owned[lo + i]) {\n out.set(id, {\n slot: eased.map((e) => e.slot[i]),\n held: eased.map((e) => e.held[i])\n });\n }\n });\n }\n });\n return out;\n}\nfunction liftLanes(walks, nodePositions, yToX, worldPerScreenPx) {\n const threaded = threadsPasses(walks);\n const passes = walks.map((w) => w.mostPasses);\n const reach = THREAD_REACH_PX * worldPerScreenPx;\n const runs = laneRuns(\n walks.flatMap((w) => w.route),\n nodePositions,\n yToX,\n LANE_SMOOTHING_PX * worldPerScreenPx\n );\n const lines = laneLines(\n runs,\n nodePositions,\n yToX,\n LANE_SMOOTHING_PX * worldPerScreenPx,\n bandWidthPx(passes) * (threaded ? bandScale(passes) : 1) * worldPerScreenPx,\n threaded\n );\n const threads = threaded ? walks.map((w) => walkThreads(w.route, w.passes, nodePositions, yToX, reach)) : void 0;\n const spans = threads ? bandSpans(\n runs,\n threads.map((t) => t.span),\n { reach, taper: THREAD_TAPER_PX * worldPerScreenPx }\n ) : void 0;\n const furthestShift = { dx: 0, dy: 0 };\n for (const own of lines.shifts.values()) {\n for (const shift of own) {\n furthestShift.dx = Math.max(furthestShift.dx, Math.abs(shift?.dx ?? 0));\n furthestShift.dy = Math.max(furthestShift.dy, Math.abs(shift?.dy ?? 0));\n }\n }\n return { lines, threads, spans, furthestShift };\n}\n\nexport {\n THREAD_PX,\n THREAD_GAP_PX,\n SLOT_GAP_PX,\n LANE_SMOOTHING_PX,\n THREAD_REACH_PX,\n THREAD_TAPER_PX,\n MAX_BAND_PX,\n PASSES_KEY,\n threadsPasses,\n THREAD_PITCH_PX,\n slotCentres,\n bandWidthPx,\n bandScale,\n passesKey,\n laneSlideAt,\n laneRuns,\n laneLines,\n walkThreads,\n bandSpans,\n liftLanes\n};\n", "// src/renderer/colorBits.ts\nfunction packAbgr(r, g, b, a) {\n return (a << 24 | b << 16 | g << 8 | r) >>> 0;\n}\nfunction abgrRed(c) {\n return c & 255;\n}\nfunction abgrGreen(c) {\n return c >>> 8 & 255;\n}\nfunction abgrBlue(c) {\n return c >>> 16 & 255;\n}\nfunction abgrAlpha(c) {\n return c >>> 24 & 255;\n}\nfunction abgrToCssRgba(c) {\n return `rgba(${abgrRed(c)},${abgrGreen(c)},${abgrBlue(c)},${abgrAlpha(c) / 255})`;\n}\nfunction normalizedRgbToCssRgba(c, alpha) {\n return `rgba(${Math.round(c[0] * 255)},${Math.round(c[1] * 255)},${Math.round(c[2] * 255)},${alpha})`;\n}\nfunction fadeAbgr(c, alpha) {\n return packAbgr(\n abgrRed(c),\n abgrGreen(c),\n abgrBlue(c),\n Math.round(abgrAlpha(c) * alpha)\n );\n}\nfunction brightenAbgr(c, factor) {\n const t = Math.max(0, 1 - 1 / factor);\n const lift = (v) => Math.round(v + (255 - v) * t);\n return packAbgr(\n lift(abgrRed(c)),\n lift(abgrGreen(c)),\n lift(abgrBlue(c)),\n abgrAlpha(c)\n );\n}\n\nexport {\n packAbgr,\n abgrRed,\n abgrGreen,\n abgrBlue,\n abgrAlpha,\n abgrToCssRgba,\n normalizedRgbToCssRgba,\n fadeAbgr,\n brightenAbgr\n};\n", "// src/referenceRampCss.ts\nvar REFERENCE_RAMP_MAX_HUE = 300;\nvar REFERENCE_RAMP_SATURATION = 0.7;\nvar REFERENCE_RAMP_LIGHTNESS = 0.5;\nfunction rampHueCss(hue) {\n return `hsl(${hue}, ${REFERENCE_RAMP_SATURATION * 100}%, ${REFERENCE_RAMP_LIGHTNESS * 100}%)`;\n}\nfunction rampHueAt(frac) {\n return Math.max(0, Math.min(1, frac)) * REFERENCE_RAMP_MAX_HUE;\n}\nfunction rampHue(bp, domain) {\n return rampHueAt((bp - domain.start) / (domain.end - domain.start));\n}\nvar HUE_STOP_DEG = 30;\nfunction rampStops({ start, bp, reversed }, domain) {\n const low = rampHue(start, domain);\n const high = rampHue(start + bp, domain);\n if (high - low < 1) {\n return [(low + high) / 2];\n }\n const n = Math.ceil((high - low) / HUE_STOP_DEG);\n return Array.from(\n { length: n + 1 },\n (_, i) => rampHue(start + bp * (reversed ? n - i : i) / n, domain)\n );\n}\nvar RAMP_GRADIENT_STOPS = Array.from({ length: 7 }, (_, i) => ({\n offset: i / 6,\n color: rampHueCss(i / 6 * REFERENCE_RAMP_MAX_HUE)\n}));\nvar RAMP_GRADIENT_CSS = `linear-gradient(to right, ${RAMP_GRADIENT_STOPS.map(\n (s) => `${s.color} ${s.offset * 100}%`\n).join(\", \")})`;\n\nexport {\n REFERENCE_RAMP_MAX_HUE,\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS,\n rampHueCss,\n rampHueAt,\n rampHue,\n rampStops,\n RAMP_GRADIENT_STOPS,\n RAMP_GRADIENT_CSS\n};\n", "import {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n edgeCurvesOf\n} from \"./chunk-3GORESBG.js\";\n\n// src/util/edgeCurves.ts\nvar cache = weakMemo();\nfunction baseEdgeCurves(nodePositions, graph, axis, deletions, version, routes, stranded = false) {\n return cache(\n nodePositions,\n [graph, axis.scaleX, axis.scaleY, deletions, routes, stranded, version],\n () => {\n const curves = /* @__PURE__ */ new Map();\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const bypassed = deletions?.get(ei);\n const edgeCurves = edgeCurvesOf(\n nodePositions,\n graph.edges[ei],\n axis,\n bypassed,\n bypassed && routes?.[ei],\n stranded\n );\n if (edgeCurves) {\n curves.set(ei, edgeCurves);\n }\n }\n return curves;\n }\n );\n}\n\nexport {\n baseEdgeCurves\n};\n", "import {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\n\n// src/referenceSpan.ts\nvar MAX_BACKBONE_HOPS = 4;\nfunction buildNeighbors(graph) {\n const neighbors = /* @__PURE__ */ new Map();\n for (const edge of graph.edges) {\n pushTo(neighbors, edge.from, edge.to);\n pushTo(neighbors, edge.to, edge.from);\n }\n return neighbors;\n}\nfunction flankingSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const seen = /* @__PURE__ */ new Set([nodeId]);\n let frontier = [nodeId];\n let minEnd = Infinity;\n let maxStart = -Infinity;\n for (let hop = 0; hop < MAX_BACKBONE_HOPS && frontier.length > 0; hop++) {\n const next = [];\n for (const id of frontier) {\n const adjacent = neighbors.get(id);\n if (adjacent) {\n for (const neighborId of adjacent) {\n if (!seen.has(neighborId)) {\n seen.add(neighborId);\n const neighbor = nodeById.get(neighborId);\n if (neighbor && isBackbone(neighbor)) {\n minEnd = Math.min(minEnd, neighbor.stable.start + neighbor.length);\n maxStart = Math.max(maxStart, neighbor.stable.start);\n } else {\n next.push(neighborId);\n }\n }\n }\n }\n }\n frontier = next;\n }\n return minEnd === Infinity ? void 0 : {\n start: Math.min(minEnd, maxStart),\n end: Math.max(minEnd, maxStart)\n };\n}\nfunction nodeReferenceSpan({\n nodeId,\n nodeById,\n neighbors\n}) {\n const node = nodeById.get(nodeId);\n return node === void 0 ? void 0 : isBackbone(node) ? { start: node.stable.start, end: node.stable.start + node.length } : flankingSpan({ nodeId, nodeById, neighbors });\n}\nfunction referenceMidpoints(graph) {\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n const neighbors = buildNeighbors(graph);\n const midpoints = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const span = nodeReferenceSpan({ nodeId: node.id, nodeById, neighbors });\n if (span) {\n midpoints.set(node.id, (span.start + span.end) / 2);\n }\n }\n return midpoints;\n}\n\nexport {\n buildNeighbors,\n nodeReferenceSpan,\n referenceMidpoints\n};\n", "import {\n THREAD_PITCH_PX,\n THREAD_PX,\n bandScale,\n bandWidthPx,\n laneSlideAt,\n liftLanes,\n slotCentres,\n threadsPasses\n} from \"./chunk-4KBZ7WPP.js\";\nimport {\n abgrToCssRgba,\n fadeAbgr,\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\nimport {\n baseEdgeCurves\n} from \"./chunk-P2GJBFNA.js\";\nimport {\n PATH_LIGHTNESS,\n PATH_SATURATION,\n nameHue,\n pathHueAt\n} from \"./chunk-VQ353UDK.js\";\nimport {\n meanDepth,\n nodeWidthPx,\n walkLaneWidthPx\n} from \"./chunk-ZANALBSX.js\";\nimport {\n referenceMidpoints\n} from \"./chunk-VX656OAZ.js\";\nimport {\n weakMemo\n} from \"./chunk-HMXCN6PG.js\";\nimport {\n dashSpans,\n pathRibbonOffsets,\n polylinePx,\n slideCurves,\n strandSides,\n translateCurves,\n yToXOf\n} from \"./chunk-JJV2GT2Z.js\";\nimport {\n pushTo\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n isBackbone\n} from \"./chunk-RJWPJCIB.js\";\nimport {\n busiestEdge,\n edgeWidthFactor\n} from \"./chunk-DAEEMZ74.js\";\n\n// src/renderer/GeometryBuilder.ts\nvar EDGE_DEFAULT_COLOR = packAbgr(119, 119, 119, 217);\nvar EDGE_PATH_FALLBACK_COLOR = packAbgr(136, 136, 136, 217);\nvar EDGE_DELETION_COLOR = packAbgr(24, 24, 28, 240);\nvar DELETION_THICKNESS_FACTOR = 2.2;\nvar LIFT_BACKDROP_COLOR = packAbgr(160, 160, 160, 255);\nvar FADED_ALPHA = 0.18;\nvar LIFT_BACKDROP_CSS = abgrToCssRgba(\n fadeAbgr(LIFT_BACKDROP_COLOR, FADED_ALPHA)\n);\nvar DELETION_DASH_PX = 11;\nvar MIN_PATH_STRIPE_PX = 1.2;\nvar MIN_SCALE_FOR_OFFSET = 1e-6;\nvar ARROW_LENGTH_BASE_PX = 7;\nvar ARROW_LENGTH_PER_EDGE_PX = 3;\nvar ARROW_HALF_WIDTH_BASE_PX = 3;\nvar ARROW_HALF_WIDTH_PER_EDGE_PX = 1.5;\nvar MIN_LINK_HEADS = 3;\nvar MIN_ARROW_FIT = 0.5;\nvar MIN_ARROW_SCALE = 0.45;\nvar ARROW_CURVE_STEPS = 12;\nvar ABUTTING_PX = 1e-6;\nvar walkX = new Float64Array(64);\nvar walkY = new Float64Array(64);\nvar walkPx = new Float64Array(64);\nfunction backFromEnd(curves, scale, yToX, untilPx) {\n const most = curves.length * ARROW_CURVE_STEPS + 1;\n if (walkX.length < most) {\n walkX = new Float64Array(most);\n walkY = new Float64Array(most);\n walkPx = new Float64Array(most);\n }\n const last = curves[curves.length - 1];\n walkX[0] = last.x1;\n walkY[0] = last.y1;\n walkPx[0] = 0;\n let n = 1;\n let px = 0;\n for (let ci = curves.length - 1; ci >= 0 && px < untilPx; ci--) {\n const c = curves[ci];\n for (let k = 1; k <= ARROW_CURVE_STEPS && px < untilPx; k++) {\n const t = 1 - (k / ARROW_CURVE_STEPS) ** 2;\n const u = 1 - t;\n const a = u * u * u;\n const b = 3 * u * u * t;\n const d = 3 * u * t * t;\n const e = t * t * t;\n const x = a * c.x0 + b * c.cx0 + d * c.cx1 + e * c.x1;\n const y = a * c.y0 + b * c.cy0 + d * c.cy1 + e * c.y1;\n px += Math.hypot(x - walkX[n - 1], (y - walkY[n - 1]) * yToX) * scale;\n walkX[n] = x;\n walkY[n] = y;\n walkPx[n] = px;\n n++;\n }\n }\n return n;\n}\nfunction walkPointAt(n, px) {\n let i = 1;\n while (i < n - 1 && walkPx[i] < px) {\n i++;\n }\n const from = walkPx[i - 1];\n const to = walkPx[i];\n const f = to > from ? Math.min(1, Math.max(0, (px - from) / (to - from))) : 0;\n return {\n x: walkX[i - 1] + (walkX[i] - walkX[i - 1]) * f,\n y: walkY[i - 1] + (walkY[i] - walkY[i - 1]) * f\n };\n}\nfunction arrowheadFor({\n curves,\n edgeHalfWidth,\n nodeHalfWidth,\n scale,\n yToX,\n color,\n fromSegments,\n toSegments\n}) {\n const length = ARROW_LENGTH_BASE_PX + ARROW_LENGTH_PER_EDGE_PX * edgeHalfWidth;\n const n = backFromEnd(\n curves,\n scale,\n yToX,\n nodeHalfWidth + MIN_LINK_HEADS * length\n );\n const lengthPx = walkPx[n - 1];\n const abutting = lengthPx < ABUTTING_PX;\n const inset = Math.min(nodeHalfWidth, lengthPx);\n const fit = abutting ? Math.min(1, polylinePx(fromSegments, scale, scale * yToX) / length) : 1;\n if (abutting ? fit < MIN_ARROW_FIT : lengthPx < MIN_LINK_HEADS * length) {\n return void 0;\n }\n const tip = walkPointAt(n, inset);\n const base = walkPointAt(n, inset + length * fit);\n const dx = tip.x - base.x;\n const dy = (tip.y - base.y) * yToX;\n const last = curves[curves.length - 1];\n return {\n x: tip.x,\n y: tip.y,\n angle: Math.hypot(dx, dy) > 0 ? Math.atan2(dy, dx) : endTangent(last, yToX, intoDirection(last, toSegments)),\n length: length * fit,\n halfWidth: (ARROW_HALF_WIDTH_BASE_PX + ARROW_HALF_WIDTH_PER_EDGE_PX * edgeHalfWidth) * fit,\n color\n };\n}\nvar FIRST_THREADS = [[0, 0]];\nvar ONE_PASS = [0];\nvar NO_SHIFT = { dx: 0, dy: 0 };\nfunction nearerStart(at, segments, yToX) {\n const gap = (p) => Math.hypot(p.x - at.x, (p.y - at.y) * yToX);\n return gap(segments[0]) < gap(segments.at(-1));\n}\nfunction leavesStart(edge, segments, first, stranded, yToX) {\n return stranded ? strandSides(edge).from === \"start\" : nearerStart({ x: first.x0, y: first.y0 }, segments, yToX);\n}\nfunction intoDirection(last, toSegments) {\n if (toSegments.length < 2) {\n return void 0;\n }\n const first = toSegments[0];\n const final = toSegments[toSegments.length - 1];\n const atStart = Math.hypot(last.x1 - first.x, last.y1 - first.y) <= Math.hypot(last.x1 - final.x, last.y1 - final.y);\n return atStart ? { from: first, to: toSegments[1] } : { from: final, to: toSegments[toSegments.length - 2] };\n}\nfunction normal(a, b) {\n if (!a || !b) {\n return void 0;\n }\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const len = Math.hypot(dx, dy);\n return len > 0 ? { nx: -dy / len, ny: dx / len } : void 0;\n}\nvar MITRE_LIMIT = 0.1;\nvar LONGEST_NORMAL = 1 / Math.sqrt(MITRE_LIMIT);\nfunction pointNormalsOf(rawPoints, yToX = 1) {\n const points = yToX === 1 ? rawPoints : rawPoints.map((p) => ({ x: p.x, y: p.y * yToX }));\n return points.map((p, i) => {\n const before = normal(points[i - 1], p);\n const after = normal(p, points[i + 1]);\n if (before && after) {\n const nx = (before.nx + after.nx) / 2;\n const ny = (before.ny + after.ny) / 2;\n const dot = before.nx * nx + before.ny * ny;\n return dot > MITRE_LIMIT ? { nx: nx / dot, ny: ny / dot } : { nx, ny };\n }\n return before ?? after ?? { nx: 0, ny: 0 };\n });\n}\nfunction offsetPolyline(points, normals, distance, yToX = 1) {\n const out = new Array(points.length);\n for (let i = 0; i < points.length; i++) {\n out[i] = {\n x: points[i].x + normals[i].nx * distance,\n y: points[i].y + normals[i].ny * distance / yToX\n };\n }\n return out;\n}\nfunction hslToRgb(h, s, l) {\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0;\n let g = 0;\n let b = 0;\n if (h < 60) {\n r = c;\n g = x;\n } else if (h < 120) {\n r = x;\n g = c;\n } else if (h < 180) {\n g = c;\n b = x;\n } else if (h < 240) {\n g = x;\n b = c;\n } else if (h < 300) {\n r = x;\n b = c;\n } else {\n r = c;\n b = x;\n }\n return [r + m, g + m, b + m];\n}\nfunction packHsl(h, s, l, a = 1) {\n const [r, g, b] = hslToRgb(h, s, l);\n return packAbgr(\n Math.round(r * 255),\n Math.round(g * 255),\n Math.round(b * 255),\n Math.round(a * 255)\n );\n}\nvar DEPTH_GRADIENT = [\n [68, 1, 84],\n [59, 82, 139],\n [33, 145, 140],\n [94, 201, 98],\n [253, 231, 37]\n];\nvar STABLE_RANK_GRADIENT = [\n [237, 137, 44],\n [158, 42, 122]\n];\nvar NODE_LENGTH_GRADIENT = [\n [220, 50, 50],\n [50, 120, 220]\n];\nfunction sampleGradient(stops, t) {\n const pos = Math.max(0, Math.min(1, t)) * (stops.length - 1);\n const i = Math.min(stops.length - 2, Math.floor(pos));\n const f = pos - i;\n const a = stops[i];\n const b = stops[i + 1];\n return packAbgr(\n Math.round(a[0] + (b[0] - a[0]) * f),\n Math.round(a[1] + (b[1] - a[1]) * f),\n Math.round(a[2] + (b[2] - a[2]) * f),\n 255\n );\n}\nfunction hashColor(str, alpha) {\n return packHsl(nameHue(str), PATH_SATURATION, PATH_LIGHTNESS, alpha);\n}\nvar REFERENCE_RAMP_ALT_RGB = [60, 65, 72];\nvar REFERENCE_RAMP_ALT_COLOR = packAbgr(...REFERENCE_RAMP_ALT_RGB, 255);\nvar REFERENCE_RAMP_ALT_CSS = `rgb(${REFERENCE_RAMP_ALT_RGB.join(\", \")})`;\nfunction rampFraction(node, ramp) {\n const mid = ramp.midpoints.get(node.id);\n return isBackbone(node) && mid !== void 0 ? (mid - ramp.start) / ramp.span : void 0;\n}\nfunction computeReferenceRamp(graph, domain) {\n const midpoints = referenceMidpoints(graph);\n if (domain && domain.end > domain.start) {\n return {\n start: domain.start,\n span: domain.end - domain.start,\n midpoints\n };\n }\n let min = Infinity;\n let max = -Infinity;\n for (const mid of midpoints.values()) {\n min = Math.min(min, mid);\n max = Math.max(max, mid);\n }\n return {\n start: min === Infinity ? 0 : min,\n span: max > min ? max - min : 1,\n midpoints\n };\n}\nfunction computeColorSchemeRange(graph, referenceRamp) {\n let minDepth = Infinity;\n let maxDepth = -Infinity;\n let minLength = Infinity;\n let maxLength = -Infinity;\n let maxRank = 0;\n for (const n of graph.nodes) {\n if (n.stable !== void 0 && n.stable.rank > maxRank) {\n maxRank = n.stable.rank;\n }\n if (n.depth < minDepth) {\n minDepth = n.depth;\n }\n if (n.depth > maxDepth) {\n maxDepth = n.depth;\n }\n if (n.length < minLength) {\n minLength = n.length;\n }\n if (n.length > maxLength) {\n maxLength = n.length;\n }\n }\n return {\n minDepth,\n maxDepth,\n minLength,\n maxLength,\n maxRank,\n nodeCount: graph.nodes.length,\n referenceRamp\n };\n}\nfunction getNodeColor(node, nodeIndex, colorScheme, range) {\n switch (colorScheme) {\n case \"random\":\n return hashColor(node.id, 1);\n case \"depth\":\n return sampleGradient(\n DEPTH_GRADIENT,\n range.maxDepth > range.minDepth ? (node.depth - range.minDepth) / (range.maxDepth - range.minDepth) : 0.5\n );\n case \"node-length\":\n return sampleGradient(\n NODE_LENGTH_GRADIENT,\n range.maxLength > range.minLength ? (node.length - range.minLength) / (range.maxLength - range.minLength) : 0.5\n );\n // rGFA states the backbone rather than leaving it to be inferred: rank 0 is\n // the reference, higher ranks are the sequence that diverges from it. A\n // graph with no SR tags draws every node as unranked.\n case \"stable-rank\":\n return node.stable === void 0 ? packAbgr(160, 160, 160, 255) : node.stable.rank === 0 ? packAbgr(52, 152, 219, 255) : sampleGradient(\n STABLE_RANK_GRADIENT,\n range.maxRank > 1 ? (node.stable.rank - 1) / (range.maxRank - 1) : 0\n );\n // Position on the reference, the one quantity both panels of a\n // graph-over-linear figure can state, so only the backbone takes a hue\n case \"reference-position\": {\n const ramp = range.referenceRamp;\n if (ramp === void 0) {\n return packAbgr(160, 160, 160, 255);\n }\n const t = rampFraction(node, ramp);\n return t === void 0 ? REFERENCE_RAMP_ALT_COLOR : packHsl(\n rampHueAt(t),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n );\n }\n case \"grey\":\n return packAbgr(160, 160, 160, 255);\n case \"rainbow\": {\n const hue = range.nodeCount > 1 ? nodeIndex / range.nodeCount * 360 : 0;\n return packHsl(hue, 0.75, 0.5);\n }\n default:\n return packAbgr(52, 152, 219, 255);\n }\n}\nfunction endTangent(c, yToX = 1, into) {\n const candidates = [\n [c.cx1, c.cy1],\n [c.cx0, c.cy0],\n [c.x0, c.y0]\n ];\n for (const [x, y] of candidates) {\n const dx = c.x1 - x;\n const dy = (c.y1 - y) * yToX;\n if (Math.hypot(dx, dy) > 0) {\n return Math.atan2(dy, dx);\n }\n }\n return into ? Math.atan2((into.to.y - into.from.y) * yToX, into.to.x - into.from.x) : 0;\n}\nfunction isPolylineInBounds(segments, bounds) {\n let hit = false;\n for (let i = 0; i < segments.length - 1 && !hit; i++) {\n const a = segments[i];\n const b = segments[i + 1];\n hit = Math.max(a.x, b.x) >= bounds.minX && Math.min(a.x, b.x) <= bounds.maxX && Math.max(a.y, b.y) >= bounds.minY && Math.min(a.y, b.y) <= bounds.maxY;\n }\n return hit;\n}\nfunction isBezierInBounds(curves, bounds, growX = 0, growY = 0) {\n for (const c of curves) {\n const cMinX = Math.min(c.x0, c.cx0, c.cx1, c.x1);\n const cMaxX = Math.max(c.x0, c.cx0, c.cx1, c.x1);\n const cMinY = Math.min(c.y0, c.cy0, c.cy1, c.y1);\n const cMaxY = Math.max(c.y0, c.cy0, c.cy1, c.y1);\n if (cMaxX >= bounds.minX - growX && cMinX <= bounds.maxX + growX && cMaxY >= bounds.minY - growY && cMinY <= bounds.maxY + growY) {\n return true;\n }\n }\n return false;\n}\nvar paletteCache = /* @__PURE__ */ new WeakMap();\nfunction pathPaletteOf(graph) {\n let palette = paletteCache.get(graph);\n if (!palette) {\n const pathColorByIndex = [];\n const pathIndexByName = /* @__PURE__ */ new Map();\n const paths = graph.paths ?? [];\n for (let i = 0; i < paths.length; i++) {\n pathColorByIndex.push(\n packHsl(\n pathHueAt(i, paths.length),\n PATH_SATURATION,\n PATH_LIGHTNESS,\n 0.85\n )\n );\n if (!pathIndexByName.has(paths[i].name)) {\n pathIndexByName.set(paths[i].name, i);\n }\n }\n palette = { pathColorByIndex, pathIndexByName };\n paletteCache.set(graph, palette);\n }\n return palette;\n}\nvar slotsCache = /* @__PURE__ */ new WeakMap();\nvar NO_SLOTS = /* @__PURE__ */ new Map();\nfunction pathSlotsOf(graph) {\n let slots = slotsCache.get(graph);\n if (!slots) {\n slots = /* @__PURE__ */ new Map();\n for (const [pathIdx, path] of (graph.paths ?? []).entries()) {\n for (const nodeId of new Set(path.nodeIds)) {\n pushTo(slots, nodeId, pathIdx);\n }\n }\n slotsCache.set(graph, slots);\n }\n return slots;\n}\nvar lanesCache = weakMemo();\nvar linksCache = /* @__PURE__ */ new WeakMap();\nfunction linksOf(graph) {\n let links = linksCache.get(graph);\n if (!links) {\n links = /* @__PURE__ */ new Map();\n for (const { from, to } of graph.edges) {\n let out = links.get(from);\n if (!out) {\n out = /* @__PURE__ */ new Set();\n links.set(from, out);\n }\n out.add(to);\n }\n linksCache.set(graph, links);\n }\n return links;\n}\nfunction buildGeometry(options) {\n const {\n nodePositions,\n graph,\n nodeById,\n colorScheme,\n contigThickness,\n connectorThickness,\n drawPaths,\n nodeWidth = \"uniform\",\n edgeWidth = \"uniform\",\n highlight,\n axis,\n linearLayout,\n viewportBounds,\n referenceRamp,\n deletions,\n deletionRoutes,\n stranded,\n hiddenEdges,\n version = 0\n } = options;\n const depthNorm = nodeWidth === \"depth\" ? meanDepth(graph) : 0;\n const busiest = edgeWidth === \"walks\" ? busiestEdge(graph) : 0;\n const scale = axis.scaleX;\n const worldPerScreenPx = 1 / Math.max(scale, MIN_SCALE_FOR_OFFSET);\n const yToX = yToXOf(axis);\n const sharedCurves = baseEdgeCurves(\n nodePositions,\n graph,\n axis,\n deletions,\n version,\n deletionRoutes,\n stranded\n );\n const nodeStrokes = [];\n const nodeStrokeRuns = /* @__PURE__ */ new Map();\n const arrows = [];\n const arrowRuns = /* @__PURE__ */ new Map();\n const edgeCurves = [];\n const edgeCurveRuns = /* @__PURE__ */ new Map();\n const colorRange = computeColorSchemeRange(graph, referenceRamp);\n const nodeIndexMap = /* @__PURE__ */ new Map();\n if (colorScheme === \"rainbow\") {\n for (let i = 0; i < graph.nodes.length; i++) {\n nodeIndexMap.set(graph.nodes[i].id, i);\n }\n }\n const pathCount = graph.paths?.length ?? 0;\n const { pathColorByIndex, pathIndexByName } = pathPaletteOf(graph);\n const pathColorByName = (name) => pathColorByIndex[pathIndexByName.get(name) ?? -1] ?? EDGE_PATH_FALLBACK_COLOR;\n const nodePathSlots = drawPaths && pathCount > 1 ? pathSlotsOf(graph) : NO_SLOTS;\n const liftedWalks = highlight?.walks ?? [];\n const threaded = threadsPasses(liftedWalks);\n const lanePasses = liftedWalks.map((w) => w.mostPasses);\n const thinned = threaded ? bandScale(lanePasses) : 1;\n const fields = highlight && liftedWalks.length > 1 ? lanesCache(\n highlight,\n [nodePositions, version, axis.scaleX, axis.scaleY],\n () => liftLanes(liftedWalks, nodePositions, yToX, worldPerScreenPx)\n ) : void 0;\n const lines = fields?.lines;\n const threads = fields?.threads;\n const spanField = fields?.spans;\n const plainCentres = threaded ? slotCentres(lanePasses, lanePasses) : [];\n const centresByNode = /* @__PURE__ */ new Map();\n const centresOf = (nodeId) => {\n let centres = centresByNode.get(nodeId);\n if (!centres) {\n const spans = spanField?.get(nodeId);\n centres = spans ? slotCentres(spans.slot, lanePasses, spans.held) : plainCentres;\n centresByNode.set(nodeId, centres);\n }\n return centres;\n };\n const laneOffset = (nodeId, laneWidth, lane, pass) => threaded ? (centresOf(nodeId)[lane] + pass * THREAD_PITCH_PX) * thinned : (lane - (liftedWalks.length - 1) / 2) * laneWidth;\n const laneHalfWidth = (laneWidth) => threaded ? THREAD_PX / 2 * thinned : laneWidth / 2;\n const laneNormals = /* @__PURE__ */ new Map();\n const laneNormalsOf = (nodeId, segments) => {\n let normals = laneNormals.get(nodeId);\n if (!normals) {\n const smoothed = lines?.normals.get(nodeId);\n normals = smoothed ? pointNormalsOf(segments, yToX).map((n, i) => smoothed[i] ?? n) : pointNormalsOf(segments, yToX);\n laneNormals.set(nodeId, normals);\n }\n return normals;\n };\n const laneWidths = /* @__PURE__ */ new Map();\n const laneWidthOf = (id) => {\n let width = laneWidths.get(id);\n if (width === void 0) {\n const node = nodeById.get(id);\n width = walkLaneWidthPx(\n node ? nodeWidthPx(node, contigThickness, nodeWidth, depthNorm) : contigThickness,\n liftedWalks.length\n );\n laneWidths.set(id, width);\n }\n return width;\n };\n const laneShiftOf = (nodeId, index) => lines?.shifts.get(nodeId)?.[index] ?? NO_SHIFT;\n const laneEndOf = (id, segments, atStart) => {\n const at = atStart ? 0 : segments.length - 1;\n return {\n id,\n laneWidth: laneWidthOf(id),\n normal: laneNormalsOf(id, segments)[at] ?? { nx: 0, ny: 0 },\n shift: laneShiftOf(id, at)\n };\n };\n const lanesMayShow = (curves, fromId) => {\n if (!viewportBounds) {\n return true;\n }\n const offset = threaded ? bandWidthPx(lanePasses) * thinned : (liftedWalks.length - 1) / 2 * laneWidthOf(fromId);\n const reach = LONGEST_NORMAL * offset * worldPerScreenPx;\n return isBezierInBounds(\n curves,\n viewportBounds,\n reach + (fields?.furthestShift.dx ?? 0),\n reach / yToX + (fields?.furthestShift.dy ?? 0)\n );\n };\n const threadPairs = (lane, from, to) => {\n const own = threads?.[lane]?.linkThreads;\n if (!own?.size) {\n return FIRST_THREADS;\n }\n const ahead = own.get(from)?.get(to);\n const back = linksOf(graph).get(to)?.has(from) ? void 0 : own.get(to)?.get(from);\n if (!back) {\n return ahead ?? FIRST_THREADS;\n }\n const turned = back.map(([a, b]) => [b, a]);\n return ahead ? [...ahead, ...turned] : turned;\n };\n const threadColor = (lane, nodeId, thread) => liftedWalks[lane]?.passColors.get(nodeId)?.[threads?.[lane]?.threadPasses.get(nodeId)?.[thread] ?? 0];\n const lanePointsOf = (nodeId, segments) => lines?.shifts.has(nodeId) ? segments.map((p, i) => {\n const { dx, dy } = laneShiftOf(nodeId, i);\n return { ...p, x: p.x + dx, y: p.y + dy };\n }) : segments;\n const showArrows = scale > (linearLayout ? 1 : MIN_ARROW_SCALE);\n for (let ei = 0; ei < graph.edges.length; ei++) {\n const edge = graph.edges[ei];\n const fromSegments = nodePositions[edge.from];\n const toSegments = nodePositions[edge.to];\n const baseCurves = sharedCurves.get(ei);\n if (!fromSegments?.length || !toSegments?.length || !baseCurves || hiddenEdges?.has(ei)) {\n continue;\n }\n const numPaths = edge.pathIds?.length ?? 0;\n const bypassed = deletions?.get(ei);\n const isDeletion = bypassed !== void 0;\n const onWalk = highlight?.edgeIndexes.has(ei) ?? false;\n const ribbonThickness = connectorThickness / 2 * (isDeletion ? DELETION_THICKNESS_FACTOR : 1);\n const edgeThickness = isDeletion ? ribbonThickness : connectorThickness / 2 * edgeWidthFactor(numPaths, busiest, edgeWidth);\n const ribbons = drawPaths && numPaths > 0;\n const plainEdgeColor = isDeletion ? EDGE_DELETION_COLOR : EDGE_DEFAULT_COLOR;\n const edgeColor = !highlight || onWalk ? plainEdgeColor : fadeAbgr(plainEdgeColor, FADED_ALPHA);\n const toNode = nodeById.get(edge.to);\n const intoHalfWidth = (toNode ? nodeWidthPx(toNode, contigThickness, nodeWidth, depthNorm) : contigThickness) / 2;\n const inView = (curves) => !viewportBounds || isBezierInBounds(curves, viewportBounds);\n const dashesOf = (curves) => dashSpans(curves, DELETION_DASH_PX / scale, yToX, viewportBounds);\n const stroke = (curves, thickness, color) => {\n if (!isDeletion) {\n edgeCurves.push({ curves, thickness, color });\n return;\n }\n for (const dash of dashesOf(curves)) {\n edgeCurves.push({ curves: dash.curves, thickness, color });\n }\n };\n const laneStroke = (curves, thickness, color, walk, pass, normal2, offsetX, endNormal, endOffsetX) => {\n if (!isDeletion) {\n edgeCurves.push({\n curves,\n thickness,\n color,\n walk,\n pass,\n normal: normal2,\n offsetX,\n endNormal,\n endOffsetX\n });\n return;\n }\n const start = { normal: normal2, offsetX };\n const end = { normal: endNormal, offsetX: endOffsetX };\n for (const dash of dashesOf(curves)) {\n const a = dash.startAlong === 0 ? start : laneSlideAt(start, end, dash.startAlong);\n const b = dash.endAlong === 1 ? end : laneSlideAt(start, end, dash.endAlong);\n edgeCurves.push({\n curves: dash.curves,\n thickness,\n color,\n walk,\n pass,\n normal: a.normal,\n offsetX: a.offsetX,\n endNormal: b.normal,\n endOffsetX: b.offsetX\n });\n }\n };\n const arrowOn = (curves) => {\n const head = showArrows ? arrowheadFor({\n curves,\n edgeHalfWidth: isDeletion || ribbons ? connectorThickness / 2 : edgeThickness,\n nodeHalfWidth: intoHalfWidth,\n scale,\n yToX,\n color: edgeColor,\n fromSegments,\n toSegments\n }) : void 0;\n if (head) {\n arrows.push(head);\n }\n };\n const edgeCurveStart = edgeCurves.length;\n const arrowStart = arrows.length;\n const laneWalks = highlight?.walks.length && onWalk && !ribbons ? highlight.walks : void 0;\n if (laneWalks && !lanesMayShow(baseCurves, edge.from)) {\n continue;\n }\n if (laneWalks) {\n const from = laneEndOf(\n edge.from,\n fromSegments,\n leavesStart(edge, fromSegments, baseCurves[0], stranded, yToX)\n );\n const last = baseCurves.at(-1);\n const to = threaded ? laneEndOf(\n edge.to,\n toSegments,\n nearerStart({ x: last.x1, y: last.y1 }, toSegments, yToX)\n ) : from;\n const single = laneWalks.length === 1;\n const thickness = laneHalfWidth(from.laneWidth);\n for (let lane = 0; lane < laneWalks.length; lane++) {\n const walk = laneWalks[lane];\n if (!walk.edgeIndexes.has(ei)) {\n continue;\n }\n for (const [pass, toPass] of threadPairs(lane, edge.from, edge.to)) {\n const offsetX = single ? 0 : laneOffset(from.id, from.laneWidth, lane, pass) * worldPerScreenPx;\n const endOffsetX = threaded ? laneOffset(to.id, to.laneWidth, lane, toPass) * worldPerScreenPx : offsetX;\n const curves = threaded ? slideCurves(\n baseCurves,\n from.shift.dx + from.normal.nx * offsetX,\n from.shift.dy + from.normal.ny * offsetX / yToX,\n to.shift.dx + to.normal.nx * endOffsetX,\n to.shift.dy + to.normal.ny * endOffsetX / yToX\n ) : offsetX === 0 ? baseCurves : translateCurves(\n baseCurves,\n from.normal.nx * offsetX,\n from.normal.ny * offsetX / yToX\n );\n if (inView(curves)) {\n laneStroke(\n curves,\n thickness,\n threadColor(lane, edge.from, pass) ?? threadColor(lane, edge.to, toPass) ?? plainEdgeColor,\n lane,\n pass,\n from.normal,\n offsetX,\n to.normal,\n endOffsetX\n );\n }\n }\n }\n if (edgeCurves.length > edgeCurveStart) {\n arrowOn(baseCurves);\n }\n } else if (!ribbons) {\n if (inView(baseCurves)) {\n stroke(baseCurves, edgeThickness, edgeColor);\n arrowOn(baseCurves);\n }\n } else {\n const offsets = pathRibbonOffsets(\n fromSegments,\n toSegments,\n numPaths,\n axis\n );\n const arrowRibbon = Math.floor((numPaths - 1) / 2);\n for (let pathIdx = 0; pathIdx < numPaths; pathIdx++) {\n const { x, y } = offsets[pathIdx];\n const curves = x === 0 && y === 0 ? baseCurves : translateCurves(baseCurves, x, y);\n if (!inView(curves)) {\n continue;\n }\n const ribbonColor = pathColorByName(edge.pathIds[pathIdx]);\n stroke(\n curves,\n ribbonThickness,\n highlight && (highlight.walks.length ? !highlight.names.has(edge.pathIds[pathIdx]) : !onWalk) ? fadeAbgr(ribbonColor, FADED_ALPHA) : ribbonColor\n );\n if (pathIdx === arrowRibbon) {\n arrowOn(curves);\n }\n }\n }\n const edgeCurveCount = edgeCurves.length - edgeCurveStart;\n if (edgeCurveCount > 0) {\n edgeCurveRuns.set(ei, { start: edgeCurveStart, count: edgeCurveCount });\n }\n const arrowCount = arrows.length - arrowStart;\n if (arrowCount > 0) {\n arrowRuns.set(ei, { start: arrowStart, count: arrowCount });\n }\n }\n for (const [nodeId, segments] of Object.entries(nodePositions)) {\n const node = nodeById.get(nodeId);\n if (!node) {\n continue;\n }\n if (viewportBounds && !isPolylineInBounds(segments, viewportBounds)) {\n continue;\n }\n const faded = highlight !== void 0 && !highlight.nodeIds.has(nodeId);\n const own = faded ? LIFT_BACKDROP_COLOR : getNodeColor(\n node,\n nodeIndexMap.get(nodeId) ?? 0,\n colorScheme,\n colorRange\n );\n const color = faded ? fadeAbgr(own, FADED_ALPHA) : own;\n const width = nodeWidthPx(node, contigThickness, nodeWidth, depthNorm);\n const nodeThickness = width / 2;\n const start = nodeStrokes.length;\n const slots = nodePathSlots.get(nodeId);\n const slotWidth = width / pathCount;\n const drawable = segments.length >= 2;\n const lanes = highlight?.walks.length && !faded && !slots?.length ? highlight.walks : void 0;\n if (drawable && lanes) {\n const laneWidth = walkLaneWidthPx(width, lanes.length);\n const normals = lanes.length > 1 ? laneNormalsOf(nodeId, segments) : [];\n const points = lanes.length > 1 ? lanePointsOf(nodeId, segments) : segments;\n const thickness = laneHalfWidth(laneWidth);\n for (let lane = 0; lane < lanes.length; lane++) {\n const laneColor = lanes[lane].colors.get(nodeId);\n if (laneColor === void 0) {\n continue;\n }\n const onThreads = threads?.[lane]?.nodeThreads.get(nodeId) ?? ONE_PASS;\n for (const pass of onThreads) {\n const color2 = threadColor(lane, nodeId, pass) ?? laneColor;\n if (lanes.length === 1) {\n nodeStrokes.push({\n points: segments,\n thickness,\n color: color2,\n walk: lane,\n pass\n });\n continue;\n }\n const offsetX = laneOffset(nodeId, laneWidth, lane, pass) * worldPerScreenPx;\n nodeStrokes.push({\n points: offsetPolyline(points, normals, offsetX, yToX),\n thickness,\n color: color2,\n walk: lane,\n pass,\n normals,\n offsetX\n });\n }\n }\n } else if (drawable && slots?.length && slotWidth >= MIN_PATH_STRIPE_PX) {\n const normals = pointNormalsOf(segments, yToX);\n for (const slot of slots) {\n const offset = (slot - (pathCount - 1) / 2) * slotWidth * worldPerScreenPx;\n const stripe = pathColorByIndex[slot] ?? EDGE_PATH_FALLBACK_COLOR;\n nodeStrokes.push({\n points: offsetPolyline(segments, normals, offset, yToX),\n thickness: slotWidth / 2,\n // a node off the lifted walk fades whichever way it is painted\n color: faded ? fadeAbgr(stripe, FADED_ALPHA) : stripe\n });\n }\n } else if (drawable) {\n nodeStrokes.push({ points: segments, thickness: nodeThickness, color });\n }\n const count = nodeStrokes.length - start;\n if (count > 0) {\n nodeStrokeRuns.set(nodeId, { start, count });\n }\n }\n return {\n nodeStrokes,\n nodeStrokeRuns,\n arrows,\n arrowRuns,\n edgeCurves,\n edgeCurveRuns\n };\n}\n\nexport {\n LIFT_BACKDROP_COLOR,\n FADED_ALPHA,\n LIFT_BACKDROP_CSS,\n hslToRgb,\n REFERENCE_RAMP_ALT_COLOR,\n REFERENCE_RAMP_ALT_CSS,\n rampFraction,\n computeReferenceRamp,\n computeColorSchemeRange,\n getNodeColor,\n endTangent,\n buildGeometry\n};\n", "import {\n REFERENCE_RAMP_ALT_COLOR,\n hslToRgb\n} from \"./chunk-GXCMBPC6.js\";\nimport {\n packAbgr\n} from \"./chunk-G2FD7S3C.js\";\nimport {\n REFERENCE_RAMP_LIGHTNESS,\n REFERENCE_RAMP_SATURATION,\n rampHueAt\n} from \"./chunk-GQZVR5DW.js\";\n\n// src/walkEncoding.ts\nvar WALK_FIELDS = [\n { value: \"progress\", label: \"Progress along the walk\" },\n { value: \"walk\", label: \"One colour for the walk\" },\n { value: \"reference\", label: \"Reference position\" }\n];\nvar WALK_SCHEMES = [\n { value: \"grey\", label: \"Grey to black\", ends: [\"#a3a3a3\", \"#151515\"] },\n { value: \"blue\", label: \"Cyan to navy\", ends: [\"#6ee0f0\", \"#0b2c7a\"] },\n { value: \"red\", label: \"Yellow to red\", ends: [\"#ffd24a\", \"#b3121b\"] },\n { value: \"purple\", label: \"Pink to plum\", ends: [\"#f5a3d8\", \"#5e1a6e\"] },\n { value: \"green\", label: \"Lime to forest\", ends: [\"#b6e36c\", \"#0b5d3b\"] },\n { value: \"orange\", label: \"Peach to rust\", ends: [\"#ffc285\", \"#8f3a00\"] },\n { value: \"rainbow\", label: \"Rainbow\" }\n];\nvar FAMILIES = [\"blue\", \"red\", \"purple\", \"green\"];\nvar isField = (v) => WALK_FIELDS.some((f) => f.value === v);\nvar isScheme = (v) => WALK_SCHEMES.some((s) => s.value === v);\nfunction resolveEncoding(layer, reference, picked, alone = true) {\n const { field: askedField, scheme: askedScheme } = layer.color ?? {};\n const field = isField(askedField) ? askedField : alone ? \"progress\" : \"walk\";\n const family = reference ? \"grey\" : FAMILIES[picked % FAMILIES.length];\n const scheme = isScheme(askedScheme) ? askedScheme === \"rainbow\" && field !== \"reference\" ? family : askedScheme : family;\n const round = Math.floor(picked / FAMILIES.length) % SHADES.length;\n return field === \"walk\" && scheme === family && round > 0 ? { field, scheme, shade: SHADES[round] } : alone || field === \"walk\" ? { field, scheme } : { field, scheme, darkest: TOGETHER_DARKEST };\n}\nvar TOGETHER_DARKEST = 0.55;\nvar BASE_T = 0.5;\nvar SHADES = [BASE_T, 0.85, 0.2];\nvar STRETCH_GAP = 0.08;\nvar rampsOn = ({ field, scheme }) => field !== \"walk\" && scheme !== \"rainbow\";\nfunction splitFamilies(encodings) {\n const counts = /* @__PURE__ */ new Map();\n for (const e of encodings) {\n if (rampsOn(e)) {\n counts.set(e.scheme, (counts.get(e.scheme) ?? 0) + 1);\n }\n }\n const seen = /* @__PURE__ */ new Map();\n return encodings.map((e) => {\n const k = rampsOn(e) ? counts.get(e.scheme) : 1;\n if (k < 2) {\n return e;\n }\n const j = seen.get(e.scheme) ?? 0;\n seen.set(e.scheme, j + 1);\n const half = STRETCH_GAP / 2;\n return {\n ...e,\n stretch: [\n j / k + (j > 0 ? half : 0),\n (j + 1) / k - (j < k - 1 ? half : 0)\n ]\n };\n });\n}\nvar along = ({ stretch }, t) => stretch ? stretch[0] + (stretch[1] - stretch[0]) * t : t;\nvar toLinear = (c) => c <= 0.04045 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;\nvar toGamma = (c) => c <= 31308e-7 ? c * 12.92 : 1.055 * c ** (1 / 2.4) - 0.055;\nfunction oklab(hex) {\n const [r, g, b] = [1, 3, 5].map(\n (i) => toLinear(Number.parseInt(hex.slice(i, i + 2), 16) / 255)\n );\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);\n return [\n 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s\n ];\n}\nfunction oklabToRgb([L, a, b]) {\n const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;\n const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;\n const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;\n return [\n 4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,\n -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,\n -0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s\n ].map((c) => toGamma(Math.max(0, Math.min(1, c))) * 255);\n}\nvar endsCache = /* @__PURE__ */ new Map();\nfunction oklabEnds(scheme) {\n if (!endsCache.has(scheme)) {\n const family = WALK_SCHEMES.find((s) => s.value === scheme);\n endsCache.set(\n scheme,\n family && \"ends\" in family ? family.ends.map(oklab) : void 0\n );\n }\n return endsCache.get(scheme);\n}\nfunction schemeRgb(scheme, t, darkest = 0) {\n const x = Math.max(0, Math.min(1, t));\n const ends = oklabEnds(scheme);\n if (!ends) {\n return hslToRgb(\n rampHueAt(x),\n REFERENCE_RAMP_SATURATION,\n REFERENCE_RAMP_LIGHTNESS\n ).map((c) => c * 255);\n }\n const [from, to] = ends;\n const light = from[0];\n const dark = to[0];\n const reach = dark < darkest && light > darkest ? (light - darkest) / (light - dark) : 1;\n return oklabToRgb(from.map((v, i) => v + (to[i] - v) * x * reach));\n}\nfunction schemeCss(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return `rgb(${r}, ${g}, ${b})`;\n}\nfunction schemeColor(scheme, t, darkest) {\n const [r, g, b] = schemeRgb(scheme, t, darkest).map(Math.round);\n return packAbgr(r, g, b, 255);\n}\nfunction encodedColor(encoding, t) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n return field === \"walk\" ? schemeColor(scheme, shade) : t === void 0 ? NO_VALUE_COLOR : schemeColor(scheme, along(encoding, t), darkest);\n}\nvar NO_VALUE_COLOR = REFERENCE_RAMP_ALT_COLOR;\nfunction encodingStops(encoding) {\n const { field, scheme, darkest, shade = BASE_T } = encoding;\n const stop = (offset, t) => ({\n offset,\n color: schemeCss(scheme, t, darkest),\n abgr: schemeColor(scheme, t, darkest)\n });\n return field === \"walk\" ? [stop(0, shade)] : Array.from({ length: 7 }, (_, i) => stop(i / 6, along(encoding, i / 6)));\n}\nfunction encodingSwatchCss(encoding) {\n const stops = encodingStops(encoding);\n return stops.length === 1 ? stops[0].color : `linear-gradient(to right, ${stops.map((s) => `${s.color} ${s.offset * 100}%`).join(\", \")})`;\n}\n\nexport {\n WALK_FIELDS,\n WALK_SCHEMES,\n resolveEncoding,\n splitFamilies,\n schemeRgb,\n schemeCss,\n schemeColor,\n encodedColor,\n NO_VALUE_COLOR,\n encodingStops,\n encodingSwatchCss\n};\n"],
|
|
5
|
+
"mappings": "0OAKA,IAAIA,GAAY,EACZC,GAAgB,IAChBC,GAAc,EACdC,GAAoB,GACpBC,GAAkB,GAClBC,GAAkB,GAClBC,GAAc,GACdC,GAAa,mCACbC,GAAiBC,GAAUA,EAAM,OAAS,GAAKA,EAAM,KAAMC,GAAMA,EAAE,WAAa,CAAC,EACjFC,GAAgBC,GAAYA,EAAUZ,GAAY,KAAK,IAAI,EAAGY,EAAU,CAAC,EAAIX,GAC7EY,GAAOC,GAAWA,EAAO,OAAO,CAACC,EAAGC,IAAMD,EAAIC,EAAG,CAAC,EACtD,SAASC,GAAWC,EAAOC,EAAYC,EAAW,CAChD,IAAMC,EAASH,EAAM,IACnB,CAACI,EAAGC,IAAMJ,EAAWI,CAAC,EAAI,EAAIZ,GAAaW,CAAC,EAAIF,EAAY,KAAK,IAAI,EAAGE,CAAC,CAC3E,EACIE,EAAO,EACLC,EAAOP,EAAM,IAAKI,GAAM,CAC5B,IAAMI,EAAQ,KAAK,IAAI,EAAGJ,CAAC,EACrBK,EAAMzB,GAAcwB,EAAQF,EAClC,OAAAA,EAAO,KAAK,IAAIA,EAAME,CAAK,EACpBC,CACT,CAAC,EACD,MAAO,CAAE,OAAAN,EAAQ,KAAAI,EAAM,KAAMZ,GAAIQ,CAAM,EAAIR,GAAIY,CAAI,CAAE,CACvD,CACA,IAAIG,GAAkB5B,GAAYC,GAClC,SAAS4B,GAAYX,EAAOC,EAAYW,EAAOZ,EAAO,CACpD,GAAM,CAAE,OAAAG,EAAQ,KAAAI,EAAM,KAAAM,CAAK,EAAId,GAAWC,EAAOC,EAAYnB,EAAS,EAClEgC,EAAK,CAACD,EAAO,EACjB,OAAOV,EAAO,IAAI,CAACY,EAAO,IAAM,CAC9BD,GAAMP,EAAK,CAAC,EACZ,IAAMS,EAAQf,EAAW,CAAC,EAAI,EAAI,KAAK,IAAI,EAAGc,EAAQtB,GAAamB,EAAK,CAAC,CAAC,CAAC,EAAI,EACzEK,EAASH,EAAKE,EAAQ,EAAIlC,GAAY,EAC5C,OAAAgC,GAAMC,EACCE,CACT,CAAC,CACH,CACA,IAAIC,GAAejB,GAAeF,GAAWE,EAAYA,EAAYnB,EAAS,EAAE,KAC5EqC,GAAalB,GAAe,KAAK,IAAI,EAAGb,IAAe8B,GAAYjB,CAAU,GAAK,EAAE,EACpFmB,GAAa7B,GAAU4B,GAAU5B,EAAM,IAAKC,GAAMA,EAAE,UAAU,CAAC,EAAI,EAAI,GAAGH,EAAU,mBAAqBA,GAC7G,SAASgC,GAAYC,EAAOC,EAAKC,EAAO,CACtC,IAAMC,EAAS,CAAC,CAAE,OAAAC,EAAQ,QAASC,CAAS,KAAO,CACjD,GAAID,EAAO,GAAKC,EAChB,GAAID,EAAO,GAAKC,CAClB,GACM,CAAE,GAAAC,EAAI,GAAAC,CAAG,EAAIC,GAAQL,EAAOH,CAAK,EAAGG,EAAOF,CAAG,EAAGC,CAAK,EACtDO,EAAU,KAAK,MAAMH,EAAIC,CAAE,EACjC,OAAOE,EAAU,EAAI,CAAE,OAAQ,CAAE,GAAIH,EAAKG,EAAS,GAAIF,EAAKE,CAAQ,EAAG,QAAAA,CAAQ,EAAI,CAAE,OAAQ,CAAE,GAAI,EAAG,GAAI,CAAE,EAAG,QAAS,CAAE,CAC5H,CACA,IAAIC,GAAQ,CAACnC,EAAGC,IAAM,KAAK,MAAMA,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAID,EAAE,CAAC,EACrD,SAASoC,GAAMC,EAAK,CAClB,IAAMC,EAAI,IAAI,aAAaD,EAAI,MAAM,EACrC,QAAS7B,EAAI,EAAGA,EAAI6B,EAAI,OAAQ7B,IAC9B8B,EAAE9B,CAAC,EAAI8B,EAAE9B,EAAI,CAAC,EAAI2B,GAAME,EAAI7B,EAAI,CAAC,EAAG6B,EAAI7B,CAAC,CAAC,EAE5C,OAAO8B,CACT,CACA,SAASC,GAASC,EAAQC,EAAeC,EAAMC,EAAM,CACnD,IAAMlC,EAAuB,IAAI,IAC3BmC,EAAOJ,EAAO,IACjBK,GAAUA,EAAM,IAAKC,GAChBrC,EAAK,IAAIqC,CAAE,EACN,IAETrC,EAAK,IAAIqC,CAAE,EACJ,CAAC,CAACL,EAAcK,CAAE,GAAG,OAC7B,CACH,EACMlC,EAAM,CAACZ,EAAGC,IAAM,KAAK,MAAMA,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAIyC,EAAO1C,EAAE,CAAC,EACtD+C,EAAO,CAAC,EACRC,EAAQ,CAAC,EACXX,EAAM,CAAC,EACPY,EAAO,CAAC,EACNC,EAAW,IAAM,CACjBb,EAAI,SACNU,EAAK,KAAKV,CAAG,EACbW,EAAM,KAAKC,CAAI,GAEjBZ,EAAM,CAAC,EACPY,EAAO,CAAC,CACV,EACA,OAAAT,EAAO,QAAQ,CAACK,EAAOM,IAAM,CACtBP,EAAKO,CAAC,EAAE,SAAS,EAAI,IAG1BN,EAAM,QAAQ,CAACC,EAAIM,IAAS,CAC1B,IAAMC,EAAWZ,EAAcK,CAAE,EACjC,GAAI,CAACO,GAAU,OAAQ,CACrBH,EAAS,EACT,MACF,CACA,IAAMI,EAAQD,EAAS,CAAC,EAClBE,EAAOF,EAAS,GAAG,EAAE,EACrBG,EAAOnB,EAAI,GAAG,EAAE,EAChBoB,EAAOhB,EAAcI,EAAMO,EAAO,CAAC,GAAK,EAAE,EAC1CM,EAAUC,GAAM,CACpB,IAAM1C,EAAK,CAAE,EAAG0C,EAAE,EAAG,EAAGA,EAAE,EAAIjB,CAAK,EACnC,OAAOe,GAAM,OAAS,KAAK,IAAI7C,EAAIK,EAAIwC,EAAK,CAAC,CAAC,EAAG7C,EAAIK,EAAIwC,EAAK,GAAG,EAAE,CAAC,CAAC,EAAI,CAC3E,EACMG,EAAUJ,EAAO5C,EAAI4C,EAAMF,CAAK,GAAK1C,EAAI4C,EAAMD,CAAI,EAAIG,EAAOH,CAAI,GAAKG,EAAOJ,CAAK,EACrFE,GAAQ5C,EAAI4C,EAAMI,EAAUN,EAAQC,CAAI,EAAIZ,GAC9CO,EAAS,EAEX,IAAMW,EAAS,KAAK,MAAMR,EAAS,OAAS,CAAC,EAC7C,QAASS,EAAI,EAAGA,EAAIT,EAAS,OAAQS,IAAK,CACxC,IAAMC,EAAQH,EAAUE,EAAIT,EAAS,OAAS,EAAIS,EAC5CH,EAAIN,EAASU,CAAK,EACxB1B,EAAI,KAAK,CACP,EAAGsB,EAAE,EACL,EAAGA,EAAE,EAAIjB,EACT,GAAAI,EACA,MAAAiB,EACA,OAAQA,IAAUF,EAClB,QAAAD,CACF,CAAC,EACDX,EAAK,KAAKL,EAAKO,CAAC,EAAEC,CAAI,CAAC,CACzB,CACF,CAAC,EACDF,EAAS,EACX,CAAC,EACM,CAAE,KAAAH,EAAM,MAAAC,CAAM,CACvB,CACA,SAASgB,GAAa1B,EAAGU,EAAOiB,EAAQ,CACtC,IAAMC,EAAU,CAAC,EACjB,QAAS1D,EAAI,EAAGA,EAAIwC,EAAM,OAAQxC,IAAK,CACrC,GAAI,CAACwC,EAAMxC,CAAC,EACV,SAEF,IAAI2D,EAAI3D,EACR,KAAO2D,EAAI,EAAInB,EAAM,QAAUA,EAAMmB,EAAI,CAAC,GACxCA,IAEF,IAAMZ,EAAOW,EAAQ,GAAG,EAAE,EACpBE,EAAQb,EAAOA,EAAK,CAAC,EAAI,EAC3Bc,EAAK7D,EACT,KAAO6D,EAAKD,GAAS9B,EAAE9B,CAAC,EAAI8B,EAAE+B,EAAK,CAAC,GAAKJ,GACvCI,IAEF,IAAIC,EAAKH,EACT,KAAOG,EAAK,EAAIhC,EAAE,QAAUA,EAAEgC,EAAK,CAAC,EAAIhC,EAAE6B,CAAC,GAAKF,GAC9CK,IAEEf,GAAQc,GAAMd,EAAK,CAAC,EAAI,EAC1BA,EAAK,CAAC,EAAIe,EAEVJ,EAAQ,KAAK,CAACG,EAAIC,CAAE,CAAC,EAEvB9D,EAAI2D,CACN,CACA,OAAOD,CACT,CACA,SAASK,GAAgBlC,EAAKmC,EAAO,CACnC,IAAMlC,EAAIF,GAAMC,CAAG,EACbX,EAAMY,EAAE,GAAG,EAAE,EACbmC,EAAU,CAACxD,EAAIkD,IAAM,CACzB,IAAMnE,EAAIqC,EAAI8B,CAAC,EACTlE,EAAIoC,EAAI,KAAK,IAAI8B,EAAI,EAAG9B,EAAI,OAAS,CAAC,CAAC,EACvCqC,EAAOpC,EAAE,KAAK,IAAI6B,EAAI,EAAG9B,EAAI,OAAS,CAAC,CAAC,EAAIC,EAAE6B,CAAC,EAC/CQ,EAAID,EAAO,GAAKzD,EAAKqB,EAAE6B,CAAC,GAAKO,EAAO,EAC1C,MAAO,CAAE,EAAG1E,EAAE,GAAKC,EAAE,EAAID,EAAE,GAAK2E,EAAG,EAAG3E,EAAE,GAAKC,EAAE,EAAID,EAAE,GAAK2E,CAAE,CAC9D,EACIN,EAAK,EACLC,EAAK,EACT,OAAOjC,EAAI,IAAI,CAACuC,EAAG,IAAM,CACvB,IAAMC,EAAO,KAAK,IAAI,EAAGvC,EAAE,CAAC,EAAIkC,EAAQ,CAAC,EACnCM,EAAQ,KAAK,IAAIpD,EAAKY,EAAE,CAAC,EAAIkC,EAAQ,CAAC,EAC5C,KAAOH,EAAKhC,EAAI,OAAS,GAAKC,EAAE+B,EAAK,CAAC,GAAKQ,GACzCR,IAEF,KAAOC,EAAKjC,EAAI,OAAS,GAAKC,EAAEgC,EAAK,CAAC,GAAKQ,GACzCR,IAEF,IAAMtE,EAAIyE,EAAQI,EAAMR,CAAE,EACpBpE,EAAIwE,EAAQK,EAAOR,CAAE,EACrBS,EAAM5C,GAAMnC,EAAGC,CAAC,EACtB,OAAO8E,EAAM,EAAI,CAAE,GAAI,EAAE9E,EAAE,EAAID,EAAE,GAAK+E,EAAK,IAAK9E,EAAE,EAAID,EAAE,GAAK+E,CAAI,EAAI,MACvE,CAAC,CACH,CACA,SAASC,GAAS3C,EAAK4C,EAAOC,EAAQ,CACpC,IAAM5C,EAAIF,GAAMC,CAAG,EACb8C,EAAM9C,EAAI,MAAM,EAChB+C,EAAQ,CAAC,EACf9C,EAAE,QAAQ,CAACrB,EAAI6C,IAAM,CACnB,IAAMP,EAAO6B,EAAM,GAAG,EAAE,GACpB7B,IAAS,QAAUtC,EAAKqB,EAAEiB,CAAI,GAAK0B,EAAQ,IAC7CG,EAAM,KAAKtB,CAAC,CAEhB,CAAC,EACGsB,EAAM,GAAG,EAAE,IAAM/C,EAAI,OAAS,GAChC+C,EAAM,KAAK/C,EAAI,OAAS,CAAC,EAE3B,IAAI,EAAI,EACR,KAAO,EAAI+C,EAAM,QAAQ,CACvB,IAAM5E,EAAI4E,EAAM,CAAC,EACbC,EAAK,GACT,QAASpF,EAAI,EAAI,EAAGA,EAAImF,EAAM,QAAU9C,EAAE8C,EAAMnF,CAAC,CAAC,EAAIqC,EAAE9B,CAAC,GAAK0E,EAAQjF,IAAK,CACzE,IAAMqF,EAAKF,EAAMnF,CAAC,EACdqC,EAAEgD,CAAE,EAAIhD,EAAE9B,CAAC,EAAI,KAAK,GAAKyE,GAAS9C,GAAME,EAAI7B,CAAC,EAAG6B,EAAIiD,CAAE,CAAC,GAAKL,IAC9DI,EAAKpF,EAET,CACA,GAAIoF,EAAK,EAAG,CACV,IACA,QACF,CACA,IAAMlB,EAAIiB,EAAMC,CAAE,EACZ1B,EAAItB,EAAI7B,CAAC,EACT+E,EAAIlD,EAAI8B,CAAC,EACf,QAASL,EAAItD,EAAI,EAAGsD,EAAIK,EAAGL,IAAK,CAC9B,IAAMa,GAAKrC,EAAEwB,CAAC,EAAIxB,EAAE9B,CAAC,IAAM8B,EAAE6B,CAAC,EAAI7B,EAAE9B,CAAC,GACrC2E,EAAIrB,CAAC,EAAI,CACP,GAAGzB,EAAIyB,CAAC,EACR,EAAGH,EAAE,GAAK4B,EAAE,EAAI5B,EAAE,GAAKgB,EACvB,EAAGhB,EAAE,GAAK4B,EAAE,EAAI5B,EAAE,GAAKgB,CACzB,CACF,CACA,EAAIU,CACN,CACA,OAAOF,CACT,CACA,SAASK,GAAQnD,EAAKoD,EAAM,CAC1B,IAAMC,EAAIrD,EAAI,OACRC,EAAIF,GAAMC,CAAG,EACbX,EAAMY,EAAEoD,EAAI,CAAC,EACbC,EAAO,IAAI,aAAaD,EAAI,CAAC,EAC7BE,EAAO,IAAI,aAAaF,EAAI,CAAC,EAC7BG,EAAO,IAAI,aAAaH,EAAI,CAAC,EACnC,QAASlF,EAAI,EAAGA,EAAIkF,EAAGlF,IAAK,CAC1B,IAAMmD,EAAItB,EAAI7B,CAAC,EACTb,GAAK2C,EAAE,KAAK,IAAI9B,EAAI,EAAGkF,EAAI,CAAC,CAAC,EAAIpD,EAAE,KAAK,IAAI9B,EAAI,EAAG,CAAC,CAAC,GAAK,EAChEmF,EAAKnF,EAAI,CAAC,EAAImF,EAAKnF,CAAC,EAAIb,EACxBiG,EAAKpF,EAAI,CAAC,EAAIoF,EAAKpF,CAAC,EAAIb,EAAIgE,EAAE,EAC9BkC,EAAKrF,EAAI,CAAC,EAAIqF,EAAKrF,CAAC,EAAIb,EAAIgE,EAAE,CAChC,CACA,IAAMwB,EAAM,IAAI,MAAMO,CAAC,EACnBrB,EAAK,EACLC,EAAK,EACT,QAAS9D,EAAI,EAAGA,EAAIkF,EAAGlF,IAAK,CAC1B,IAAMmD,EAAItB,EAAI7B,CAAC,EACTgE,EAAQ,KAAK,IAAIiB,EAAMnD,EAAE9B,CAAC,EAAGkB,EAAMY,EAAE9B,CAAC,CAAC,EACvCsF,EAAOxD,EAAE9B,CAAC,EAAIgE,EACda,EAAK/C,EAAE9B,CAAC,EAAIgE,EAAQ,MAAQ,EAAI9C,GACtC,KAAO2C,EAAKqB,GAAKpD,EAAE+B,CAAE,EAAIyB,GACvBzB,IAEF,KAAOC,EAAKoB,GAAKpD,EAAEgC,CAAE,EAAIe,GACvBf,IAEF,IAAM3E,EAAIgG,EAAKrB,CAAE,EAAIqB,EAAKtB,CAAE,EAC5Bc,EAAI3E,CAAC,EAAIb,EAAI,EAAI,CAAE,GAAIiG,EAAKtB,CAAE,EAAIsB,EAAKvB,CAAE,GAAK1E,EAAG,GAAIkG,EAAKvB,CAAE,EAAIuB,EAAKxB,CAAE,GAAK1E,CAAE,EAAI,CAAE,EAAGgE,EAAE,EAAG,EAAGA,EAAE,CAAE,CACrG,CACA,OAAOwB,CACT,CACA,SAASY,GAAYC,EAAOvD,EAAe,CACzC,MAAO,CAAC,CAAE,GAAAK,EAAI,MAAAiB,CAAM,EAAGkC,IAAU,CAC/B,IAAIC,EAAMF,EAAM,IAAIlD,CAAE,EACjBoD,IACHA,EAAM,IAAI,MAAMzD,EAAcK,CAAE,EAAE,MAAM,EACxCkD,EAAM,IAAIlD,EAAIoD,CAAG,GAEnBA,EAAInC,CAAK,EAAIkC,CACf,CACF,CACA,SAASE,GAAUC,EAAO3D,EAAeC,EAAM8B,EAAOxD,EAAMqF,EAAS,GAAM,CACzE,IAAMC,EAAO,KAAK,IAAI9B,EAAO,EAAIxD,CAAI,EAC/BuF,EAAO,KAAK,GAAKvF,EACjBiD,EAASoC,EAASE,EAAOvF,EAAO,EAAIsF,EAAO,EAAIA,EAAO,EACtDE,EAA0B,IAAI,IAC9BC,EAAyB,IAAI,IAC7BC,EAAYX,GAAYS,EAAS/D,CAAa,EAC9CkE,EAAWZ,GAAYU,EAAQhE,CAAa,EAClD,OAAA2D,EAAM,KAAK,QAAQ,CAAC/D,EAAKc,IAAM,CAC7B,IAAMH,EAAQoD,EAAM,MAAMjD,CAAC,EACrByD,EAAS5C,GAAa5B,GAAMC,CAAG,EAAGW,EAAOiB,CAAM,EAAE,IAAI,CAAC,CAACI,EAAIC,CAAE,IAAM,CACvE,IAAMuC,EAASxE,EAAI,MAAMgC,EAAIC,EAAK,CAAC,EAC7BwC,EAAOT,EAASb,GAAQR,GAAS6B,EAAQ7F,EAAO,EAAGuF,CAAI,EAAGvF,EAAO,CAAC,EAAI6F,EAC5E,MAAO,CAAE,GAAAxC,EAAI,OAAAwC,EAAQ,KAAAC,EAAM,QAASvC,GAAgBuC,EAAMR,CAAI,CAAE,CAClE,CAAC,EACGS,EAAQ,EACRpF,EAAQ,EACZ,QAAWqF,KAASJ,EAClBI,EAAM,OAAO,QAAQ,CAACrD,EAAGnD,IAAM,CAC7B,IAAMyG,EAAST,EAAQ,IAAI7C,EAAE,EAAE,IAAIA,EAAE,KAAK,EACpCV,EAAO+D,EAAM,QAAQxG,CAAC,EACxByG,GAAUhE,IACZ8D,GAASE,EAAO,GAAKhE,EAAK,GAAKgE,EAAO,GAAKhE,EAAK,IAElDtB,GAASgC,EAAE,QAAU,EAAI,EAC3B,CAAC,EAEH,IAAMuD,GAAQH,IAAU,EAAIpF,EAAQoF,GAAS,EAAI,GAAK,EACtD,OAAW,CAAE,GAAA1C,EAAI,OAAAwC,EAAQ,KAAAC,EAAM,QAASZ,CAAI,IAAKU,EAC/CC,EAAO,QAAQ,CAAClD,EAAGnD,IAAM,CACvB,GAAI,CAACwC,EAAMqB,EAAK7D,CAAC,EACf,OAEF,IAAMkF,EAAIQ,EAAI1F,CAAC,EACXkF,GACFgB,EAAU/C,EAAGuD,EAAO,EAAIxB,EAAI,CAAE,GAAI,CAACA,EAAE,GAAI,GAAI,CAACA,EAAE,EAAG,CAAC,EAElDW,GACFM,EAAShD,EAAG,CACV,GAAImD,EAAKtG,CAAC,EAAE,EAAImD,EAAE,EAClB,IAAKmD,EAAKtG,CAAC,EAAE,EAAImD,EAAE,GAAKjB,CAC1B,CAAC,CAEL,CAAC,CAEL,CAAC,EACM,CAAE,QAAA8D,EAAS,OAAAC,CAAO,CAC3B,CACA,SAASU,GAAS7E,EAAG8E,EAAG3B,EAAMyB,EAAM,CAClC,IAAM/B,EAAM,IAAI,MAAMiC,EAAE,MAAM,EACxBC,EAAQ,CAAC,EACXC,EAAO,EACP7D,EAAO,EACX,QAAS,EAAI,EAAG,EAAI2D,EAAE,OAAQ,IAAK,CACjC,KAAO3D,EAAO2D,EAAE,QAAU9E,EAAEmB,CAAI,EAAInB,EAAE,CAAC,GAAKmD,GAAM,CAChD,KAAO4B,EAAM,OAASC,GAAQJ,EAAOE,EAAEC,EAAM,GAAG,EAAE,CAAC,GAAKH,EAAOE,EAAE3D,CAAI,GACnE4D,EAAM,IAAI,EAEZA,EAAM,KAAK5D,GAAM,CACnB,CACA,KAAOnB,EAAE,CAAC,EAAIA,EAAE+E,EAAMC,CAAI,CAAC,EAAI7B,GAC7B6B,IAEFnC,EAAI,CAAC,EAAIiC,EAAEC,EAAMC,CAAI,CAAC,CACxB,CACA,OAAOnC,CACT,CACA,SAASoC,GAAWjF,EAAG8E,EAAG3B,EAAM+B,EAAU,IAAM,GAAM,CACpD,IAAM9B,EAAI0B,EAAE,OACNK,EAASnF,EAAE,IACf,CAACsC,EAAGpE,IAAOgH,EAAQJ,EAAE5G,CAAC,CAAC,EAAQkF,EAAI,GAAKpD,EAAE,KAAK,IAAI9B,EAAI,EAAGkF,EAAI,CAAC,CAAC,EAAIpD,EAAE,KAAK,IAAI9B,EAAI,EAAG,CAAC,CAAC,GAAK,EAAI,EAAtE,CAC7B,EACMmF,EAAO,CAAC,CAAC,EACT+B,EAAQ,CAAC,CAAC,EAChB,QAASlH,EAAI,EAAGA,EAAIkF,EAAGlF,IACrBmF,EAAK,KAAKA,EAAKnF,CAAC,EAAIiH,EAAOjH,CAAC,CAAC,EAC7BkH,EAAM,KAAKA,EAAMlH,CAAC,EAAIiH,EAAOjH,CAAC,EAAI4G,EAAE5G,CAAC,CAAC,EAExC,IAAI6D,EAAK,EACLC,EAAK,EACT,OAAO8C,EAAE,IAAI,CAACnB,EAAOzF,IAAM,CACzB,KAAO8B,EAAE9B,CAAC,EAAI8B,EAAE+B,CAAE,EAAIoB,GACpBpB,IAEF,KAAOC,EAAKoB,GAAKpD,EAAEgC,CAAE,EAAIhC,EAAE9B,CAAC,GAAKiF,GAC/BnB,IAEF,IAAM3E,EAAIgG,EAAKrB,CAAE,EAAIqB,EAAKtB,CAAE,EAC5B,OAAO1E,EAAI,GAAK+H,EAAMpD,CAAE,EAAIoD,EAAMrD,CAAE,GAAK1E,EAAIsG,CAC/C,CAAC,CACH,CACA,IAAI0B,GAAa,CAAC,CAAC,EACnB,SAASC,GAAQC,EAAQ,CACvB,QAAWlE,KAAKkE,EAAO,OAAO,EAC5B,GAAIlE,EAAI,EACN,MAAO,GAGX,MAAO,EACT,CACA,SAASmE,GAAYjF,EAAOgF,EAAQpF,EAAeC,EAAM8B,EAAO,CAC9D,GAAI,CAACoD,GAAQC,CAAM,EACjB,MAAO,CACL,KAAMA,EACN,YAA6B,IAAI,IACjC,aAA8B,IAAI,IAClC,YAA6B,IAAI,GACnC,EAEF,IAAM9D,EAAwB,IAAI,IAC5BgE,EAAM,CAAC,EACPzH,EAAS,CAAC,EACV0H,EAAS,CAAC,EACVC,EAAQ,CAAC,EACTC,EAAa,CAAC,EACdC,EAAY,CAAC,EACnB,QAAWnB,KAASnE,EAAO,CACzB,IAAMgE,EAAS,CAAC,EACVuB,EAAQ,CAAC,EACf,QAAWtF,KAAMkE,EAAO,CACtB,IAAIlD,EAAIC,EAAM,IAAIjB,CAAE,EAChBgB,IAAM,SACRA,EAAIiE,EAAI,OACRhE,EAAM,IAAIjB,EAAIgB,CAAC,EACfiE,EAAI,KAAKjF,CAAE,EACXxC,EAAO,KAAK,CAAC,EACb0H,EAAO,KAAK,CAAC,GAEfI,EAAM,KAAKtE,CAAC,EACZ,IAAMT,EAAWZ,EAAcK,CAAE,EAC3BuF,EAAMhF,IAAW,KAAK,MAAMA,EAAS,OAAS,CAAC,CAAC,EACtDwD,EAAO,KACLwB,EAAM,CAAE,EAAGA,EAAI,EAAG,EAAGA,EAAI,EAAI3F,CAAK,EAAImE,EAAO,GAAG,EAAE,GAAK,CAAE,EAAG,EAAG,EAAG,CAAE,CACtE,CACF,CACA,IAAMvE,EAAIF,GAAMyE,CAAM,EAChBlD,EAAIqD,EAAM,IAAKlE,GAAO+E,EAAO,IAAI/E,CAAE,GAAK,CAAC,EACzCwF,EAAOnB,GAAS7E,EAAGqB,EAAGa,EAAQ,EAAG,CAAC,EAClC+D,EAAOH,EAAM,IAAKtE,GAAM,EAAEkE,EAAOlE,CAAC,CAAC,EACnC4B,EAAIsB,EAAM,OACVwB,EAAS,IAAI,WAAW9C,CAAC,EAC3BnC,EAAO,GACX,QAAS/C,EAAI,EAAGA,EAAIkF,EAAGlF,IACrB+C,EAAOI,EAAEnD,CAAC,IAAM8H,EAAK9H,CAAC,EAAIA,EAAI+C,EAC9BiF,EAAOhI,CAAC,EAAI+C,EAEd,IAAMkF,GAAQ,IAAI,WAAW/C,CAAC,EAC9BnC,EAAO,GACP,QAAS/C,EAAIkF,EAAI,EAAGlF,GAAK,EAAGA,IAC1B+C,EAAOI,EAAEnD,CAAC,IAAM8H,EAAK9H,CAAC,EAAIA,EAAI+C,EAC9BkF,GAAMjI,CAAC,EAAI+C,EAEb,IAAMmF,EAAQ,IAAI,MAAMhD,CAAC,EACzB,QAASlF,EAAI,EAAGA,EAAIkF,EAAGlF,IAAK,CAC1B,IAAMP,EAAIuI,EAAOhI,CAAC,EACZR,EAAIyI,GAAMjI,CAAC,EACXmI,EAAU1I,EAAI,EAAID,EAAIA,EAAI,GAAQsC,EAAE9B,CAAC,EAAI8B,EAAErC,CAAC,GAAKqC,EAAEtC,CAAC,EAAIsC,EAAE9B,CAAC,EAA7BP,EAAqCD,EACzE0I,EAAMlI,CAAC,EAAI,KAAK,IAAI+H,EAAKI,CAAO,EAAGL,EAAK9H,CAAC,CAAC,EAAI,EAC9CF,EAAO8H,EAAM5H,CAAC,CAAC,EAAI,KAAK,IAAIF,EAAO8H,EAAM5H,CAAC,CAAC,EAAG8H,EAAK9H,CAAC,CAAC,CACvD,CACAyH,EAAM,KAAKG,CAAK,EAChBF,EAAW,KAAKK,CAAI,EACpBJ,EAAU,KAAKO,CAAK,CACtB,CACA,IAAME,EAAQ,CAAC,EACTC,EAAW,CAAC,EACZC,EAAO,CAAChF,EAAGiF,IAAS,CACxB,IAAM7H,EAAQZ,EAAOwD,CAAC,EAChBoC,EAAM0C,EAAM9E,CAAC,IAAsB,IAAI,IAC7C,QAASkF,EAAI,EAAGA,EAAI9H,EAAO8H,IACzB,QAAWC,IAAK,CAACF,EAAOC,EAAGD,EAAOC,CAAC,EACjC,GAAIC,GAAK,GAAKA,EAAI/H,GAAS,CAACgF,EAAI,IAAI+C,CAAC,EACnC,OAAOA,EAIb,OAAOF,CACT,EACAd,EAAM,QAAQ,CAACG,EAAOpB,IAAU,CAC9BoB,EAAM,QAAQ,CAACtE,EAAGtD,IAAM,CACtB,GAAIF,EAAOwD,CAAC,EAAI,EAAG,CACjB,IAAMoF,EAAIJ,EAAKhF,EAAGqE,EAAUnB,CAAK,EAAExG,CAAC,CAAC,EACrCoI,EAAM9E,CAAC,EAAE,IAAIoF,CAAC,GACbL,EAAS/E,CAAC,IAAM,CAAC,GAAGoE,EAAWlB,CAAK,EAAExG,CAAC,CAAC,EAAI0I,CAC/C,CACF,CAAC,CACH,CAAC,EACD,IAAMxE,EAAuB,IAAI,IAC3ByE,EAA8B,IAAI,IAClCC,EAA+B,IAAI,IACzCrB,EAAI,QAAQ,CAACjF,EAAIgB,IAAM,CACrBY,EAAK,IAAI5B,EAAIxC,EAAOwD,CAAC,CAAC,EACtBqF,EAAY,IACVrG,EACA8F,EAAM9E,CAAC,EAAI,CAAC,GAAG8E,EAAM9E,CAAC,CAAC,EAAE,KAAK,CAAC9D,EAAGC,IAAMD,EAAIC,CAAC,EAAI0H,EACnD,EACA,IAAM0B,EAAS,CAAC,EAChBR,EAAS/E,CAAC,GAAG,QAAQ,CAACwF,EAAQC,IAAU,CACtCF,EAAOC,CAAM,EAAIC,EAAQ,CAC3B,CAAC,EACDH,EAAa,IAAItG,EAAIuG,CAAM,CAC7B,CAAC,EACD,IAAMG,EAA8B,IAAI,IACxC,OAAAvB,EAAM,QAAQ,CAACG,EAAOpB,IAAU,CAC9B,IAAMuC,EAAQrB,EAAWlB,CAAK,EAC9B,QAASxG,EAAI,EAAGA,EAAI4H,EAAM,OAAQ5H,IAAK,CACrC,IAAMsF,EAAOsC,EAAM5H,EAAI,CAAC,EAClB6E,EAAK+C,EAAM5H,CAAC,EACZiJ,EAAO,CACXZ,EAAS/C,CAAI,IAAIyD,EAAM/I,EAAI,CAAC,CAAC,GAAK,EAClCqI,EAASxD,CAAE,IAAIkE,EAAM/I,CAAC,CAAC,GAAK,CAC9B,EACIsE,EAAQ0E,EAAY,IAAIzB,EAAIjC,CAAI,CAAC,EAChChB,IACHA,EAAwB,IAAI,IAC5B0E,EAAY,IAAIzB,EAAIjC,CAAI,EAAGhB,CAAK,GAElC,IAAM4E,EAAO5E,EAAM,IAAIiD,EAAI1C,CAAE,CAAC,EACzBqE,EAEOA,EAAK,KAAK,CAAC,CAAC1J,EAAGC,EAAC,IAAMD,IAAMyJ,EAAK,CAAC,GAAKxJ,KAAMwJ,EAAK,CAAC,CAAC,GAC9DC,EAAK,KAAKD,CAAI,EAFd3E,EAAM,IAAIiD,EAAI1C,CAAE,EAAG,CAACoE,CAAI,CAAC,CAI7B,CACF,CAAC,EACM,CAAE,KAAA/E,EAAM,YAAAyE,EAAa,aAAAC,EAAc,YAAAI,CAAY,CACxD,CACA,SAASG,GAAUvD,EAAOjG,EAAO,CAAE,MAAAqE,EAAO,MAAAoF,CAAM,EAAG,CACjD,IAAMzE,EAAsB,IAAI,IAChC,OAAAiB,EAAM,KAAK,QAAQ,CAAC/D,EAAKc,IAAM,CAC7B,IAAMb,EAAIF,GAAMC,CAAG,EACbwH,EAAOxH,EAAI,QAAQ,CAACsB,EAAGnD,IAAMmD,EAAE,OAAS,CAACnD,CAAC,EAAI,CAAC,CAAC,EAChDmB,EAAQkI,EAAK,IAAKrJ,GAAM8B,EAAE9B,CAAC,CAAC,EAC5BwC,EAAQ6G,EAAK,IAAKrJ,GAAM4F,EAAM,MAAMjD,CAAC,EAAE3C,CAAC,CAAC,EAC/C,OAAW,CAAC6D,EAAIC,CAAE,IAAKN,GAAarC,EAAOqB,EAAOwB,EAAQ,EAAIoF,EAAQ,CAAC,EAAG,CACxE,IAAM3I,EAAKU,EAAM,MAAM0C,EAAIC,EAAK,CAAC,EAC3ByD,EAAM8B,EAAK,MAAMxF,EAAIC,EAAK,CAAC,EAAE,IAAK9D,GAAM6B,EAAI7B,CAAC,EAAE,EAAE,EACjDsJ,EAAQ3J,EAAM,IAAK+F,GAAQ,CAC/B,IAAM6D,EAAMhC,EAAI,IAAKjF,GAAOoD,EAAI,IAAIpD,CAAE,GAAK,CAAC,EAC5C,OAAOiH,EAAI,MAAO3C,GAAMA,IAAM2C,EAAI,CAAC,CAAC,EAAI,CAAE,KAAMA,EAAK,KAAMA,CAAI,EAAI,CACjE,KAAMxC,GAAWtG,EAAIkG,GAASlG,EAAI8I,EAAKvF,EAAQ,EAAG,CAAC,EAAGoF,EAAQ,CAAC,EAC/D,KAAMrC,GAAWtG,EAAI8I,EAAKH,EAAQ,EAAIxC,GAAMA,EAAI,CAAC,CACnD,CACF,CAAC,EACDW,EAAI,QAAQ,CAACjF,EAAItC,IAAM,CACjBwC,EAAMqB,EAAK7D,CAAC,GACd2E,EAAI,IAAIrC,EAAI,CACV,KAAMgH,EAAM,IAAKE,GAAMA,EAAE,KAAKxJ,CAAC,CAAC,EAChC,KAAMsJ,EAAM,IAAKE,GAAMA,EAAE,KAAKxJ,CAAC,CAAC,CAClC,CAAC,CAEL,CAAC,CACH,CACF,CAAC,EACM2E,CACT,CACA,SAAS8E,GAAUvK,EAAO+C,EAAeC,EAAMwH,EAAkB,CAC/D,IAAMC,EAAW1K,GAAcC,CAAK,EAC9BmI,EAASnI,EAAM,IAAKC,GAAMA,EAAE,UAAU,EACtC6E,EAAQnF,GAAkB6K,EAC1BnH,EAAOR,GACX7C,EAAM,QAASC,GAAMA,EAAE,KAAK,EAC5B8C,EACAC,EACAtD,GAAoB8K,CACtB,EACME,EAAQjE,GACZpD,EACAN,EACAC,EACAtD,GAAoB8K,EACpB7I,GAAYwG,CAAM,GAAKsC,EAAW7I,GAAUuG,CAAM,EAAI,GAAKqC,EAC3DC,CACF,EACMtK,EAAUsK,EAAWzK,EAAM,IAAKC,GAAMmI,GAAYnI,EAAE,MAAOA,EAAE,OAAQ8C,EAAeC,EAAM8B,CAAK,CAAC,EAAI,OACpGrE,EAAQN,EAAU8J,GACtB5G,EACAlD,EAAQ,IAAKqJ,GAAMA,EAAE,IAAI,EACzB,CAAE,MAAA1E,EAAO,MAAOlF,GAAkB4K,CAAiB,CACrD,EAAI,OACEG,EAAgB,CAAE,GAAI,EAAG,GAAI,CAAE,EACrC,QAAWnE,KAAOkE,EAAM,OAAO,OAAO,EACpC,QAAWE,KAASpE,EAClBmE,EAAc,GAAK,KAAK,IAAIA,EAAc,GAAI,KAAK,IAAIC,GAAO,IAAM,CAAC,CAAC,EACtED,EAAc,GAAK,KAAK,IAAIA,EAAc,GAAI,KAAK,IAAIC,GAAO,IAAM,CAAC,CAAC,EAG1E,MAAO,CAAE,MAAAF,EAAO,QAAAvK,EAAS,MAAAM,EAAO,cAAAkK,CAAc,CAChD,CC1iBA,SAASE,EAASC,EAAGC,EAAGC,EAAGC,EAAG,CAC5B,OAAQA,GAAK,GAAKD,GAAK,GAAKD,GAAK,EAAID,KAAO,CAC9C,CACA,SAASI,GAAQC,EAAG,CAClB,OAAOA,EAAI,GACb,CACA,SAASC,GAAUD,EAAG,CACpB,OAAOA,IAAM,EAAI,GACnB,CACA,SAASE,GAASF,EAAG,CACnB,OAAOA,IAAM,GAAK,GACpB,CACA,SAASG,GAAUH,EAAG,CACpB,OAAOA,IAAM,GAAK,GACpB,CACA,SAASI,GAAcJ,EAAG,CACxB,MAAO,QAAQD,GAAQC,CAAC,CAAC,IAAIC,GAAUD,CAAC,CAAC,IAAIE,GAASF,CAAC,CAAC,IAAIG,GAAUH,CAAC,EAAI,GAAG,GAChF,CACA,SAASK,GAAuBL,EAAGM,EAAO,CACxC,MAAO,QAAQ,KAAK,MAAMN,EAAE,CAAC,EAAI,GAAG,CAAC,IAAI,KAAK,MAAMA,EAAE,CAAC,EAAI,GAAG,CAAC,IAAI,KAAK,MAAMA,EAAE,CAAC,EAAI,GAAG,CAAC,IAAIM,CAAK,GACpG,CACA,SAASC,GAASP,EAAGM,EAAO,CAC1B,OAAOZ,EACLK,GAAQC,CAAC,EACTC,GAAUD,CAAC,EACXE,GAASF,CAAC,EACV,KAAK,MAAMG,GAAUH,CAAC,EAAIM,CAAK,CACjC,CACF,CACA,SAASE,GAAaR,EAAGS,EAAQ,CAC/B,IAAMC,EAAI,KAAK,IAAI,EAAG,EAAI,EAAID,CAAM,EAC9BE,EAAQC,GAAM,KAAK,MAAMA,GAAK,IAAMA,GAAKF,CAAC,EAChD,OAAOhB,EACLiB,EAAKZ,GAAQC,CAAC,CAAC,EACfW,EAAKV,GAAUD,CAAC,CAAC,EACjBW,EAAKT,GAASF,CAAC,CAAC,EAChBG,GAAUH,CAAC,CACb,CACF,CCtCA,IAAIa,GAAyB,IACzBC,GAA4B,GAC5BC,GAA2B,GAC/B,SAASC,GAAWC,EAAK,CACvB,MAAO,OAAOA,CAAG,KAAKH,GAA4B,GAAG,MAAMC,GAA2B,GAAG,IAC3F,CACA,SAASG,GAAUC,EAAM,CACvB,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGA,CAAI,CAAC,EAAIN,EAC1C,CACA,SAASO,GAAQC,EAAIC,EAAQ,CAC3B,OAAOJ,IAAWG,EAAKC,EAAO,QAAUA,EAAO,IAAMA,EAAO,MAAM,CACpE,CACA,IAAIC,GAAe,GACnB,SAASC,GAAU,CAAE,MAAAC,EAAO,GAAAJ,EAAI,SAAAK,CAAS,EAAGJ,EAAQ,CAClD,IAAMK,EAAMP,GAAQK,EAAOH,CAAM,EAC3BM,EAAOR,GAAQK,EAAQJ,EAAIC,CAAM,EACvC,GAAIM,EAAOD,EAAM,EACf,MAAO,EAAEA,EAAMC,GAAQ,CAAC,EAE1B,IAAMC,EAAI,KAAK,MAAMD,EAAOD,GAAOJ,EAAY,EAC/C,OAAO,MAAM,KACX,CAAE,OAAQM,EAAI,CAAE,EAChB,CAACC,EAAG,IAAMV,GAAQK,EAAQJ,GAAMK,EAAWG,EAAI,EAAI,GAAKA,EAAGP,CAAM,CACnE,CACF,CACA,IAAIS,GAAsB,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACD,EAAGE,KAAO,CAC7D,OAAQA,EAAI,EACZ,MAAOhB,GAAWgB,EAAI,EAAInB,EAAsB,CAClD,EAAE,EACEoB,GAAoB,6BAA6BF,GAAoB,IACtEG,GAAM,GAAGA,EAAE,KAAK,IAAIA,EAAE,OAAS,GAAG,GACrC,EAAE,KAAK,IAAI,CAAC,ICxBZ,IAAIC,GAAQC,GAAS,EACrB,SAASC,GAAeC,EAAeC,EAAOC,EAAMC,EAAWC,EAASC,EAAQC,EAAW,GAAO,CAChG,OAAOT,GACLG,EACA,CAACC,EAAOC,EAAK,OAAQA,EAAK,OAAQC,EAAWE,EAAQC,EAAUF,CAAO,EACtE,IAAM,CACJ,IAAMG,EAAyB,IAAI,IACnC,QAASC,EAAK,EAAGA,EAAKP,EAAM,MAAM,OAAQO,IAAM,CAC9C,IAAMC,EAAWN,GAAW,IAAIK,CAAE,EAC5BE,EAAaC,GACjBX,EACAC,EAAM,MAAMO,CAAE,EACdN,EACAO,EACAA,GAAYJ,IAASG,CAAE,EACvBF,CACF,EACII,GACFH,EAAO,IAAIC,EAAIE,CAAU,CAE7B,CACA,OAAOH,CACT,CACF,CACF,CCxBA,IAAIK,GAAoB,EACxB,SAASC,GAAeC,EAAO,CAC7B,IAAMC,EAA4B,IAAI,IACtC,QAAWC,KAAQF,EAAM,MACvBG,GAAOF,EAAWC,EAAK,KAAMA,EAAK,EAAE,EACpCC,GAAOF,EAAWC,EAAK,GAAIA,EAAK,IAAI,EAEtC,OAAOD,CACT,CACA,SAASG,GAAa,CACpB,OAAAC,EACA,SAAAC,EACA,UAAAL,CACF,EAAG,CACD,IAAMM,EAAuB,IAAI,IAAI,CAACF,CAAM,CAAC,EACzCG,EAAW,CAACH,CAAM,EAClBI,EAAS,IACTC,EAAW,KACf,QAASC,EAAM,EAAGA,EAAMb,IAAqBU,EAAS,OAAS,EAAGG,IAAO,CACvE,IAAMC,EAAO,CAAC,EACd,QAAWC,KAAML,EAAU,CACzB,IAAMM,EAAWb,EAAU,IAAIY,CAAE,EACjC,GAAIC,GACF,QAAWC,KAAcD,EACvB,GAAI,CAACP,EAAK,IAAIQ,CAAU,EAAG,CACzBR,EAAK,IAAIQ,CAAU,EACnB,IAAMC,EAAWV,EAAS,IAAIS,CAAU,EACpCC,GAAYC,GAAWD,CAAQ,GACjCP,EAAS,KAAK,IAAIA,EAAQO,EAAS,OAAO,MAAQA,EAAS,MAAM,EACjEN,EAAW,KAAK,IAAIA,EAAUM,EAAS,OAAO,KAAK,GAEnDJ,EAAK,KAAKG,CAAU,CAExB,EAGN,CACAP,EAAWI,CACb,CACA,OAAOH,IAAW,IAAW,OAAS,CACpC,MAAO,KAAK,IAAIA,EAAQC,CAAQ,EAChC,IAAK,KAAK,IAAID,EAAQC,CAAQ,CAChC,CACF,CACA,SAASQ,GAAkB,CACzB,OAAAb,EACA,SAAAC,EACA,UAAAL,CACF,EAAG,CACD,IAAMkB,EAAOb,EAAS,IAAID,CAAM,EAChC,OAAOc,IAAS,OAAS,OAASF,GAAWE,CAAI,EAAI,CAAE,MAAOA,EAAK,OAAO,MAAO,IAAKA,EAAK,OAAO,MAAQA,EAAK,MAAO,EAAIf,GAAa,CAAE,OAAAC,EAAQ,SAAAC,EAAU,UAAAL,CAAU,CAAC,CACxK,CACA,SAASmB,GAAmBpB,EAAO,CACjC,IAAMM,EAAW,IAAI,IAAIN,EAAM,MAAM,IAAKmB,GAAS,CAACA,EAAK,GAAIA,CAAI,CAAC,CAAC,EAC7DlB,EAAYF,GAAeC,CAAK,EAChCqB,EAA4B,IAAI,IACtC,QAAWF,KAAQnB,EAAM,MAAO,CAC9B,IAAMsB,EAAOJ,GAAkB,CAAE,OAAQC,EAAK,GAAI,SAAAb,EAAU,UAAAL,CAAU,CAAC,EACnEqB,GACFD,EAAU,IAAIF,EAAK,IAAKG,EAAK,MAAQA,EAAK,KAAO,CAAC,CAEtD,CACA,OAAOD,CACT,CCVA,IAAIE,GAAqBC,EAAS,IAAK,IAAK,IAAK,GAAG,EAChDC,GAA2BD,EAAS,IAAK,IAAK,IAAK,GAAG,EACtDE,GAAsBF,EAAS,GAAI,GAAI,GAAI,GAAG,EAC9CG,GAA4B,IAC5BC,GAAsBJ,EAAS,IAAK,IAAK,IAAK,GAAG,EACjDK,GAAc,IACdC,GAAoBC,GACtBC,GAASJ,GAAqBC,EAAW,CAC3C,EACII,GAAmB,GACnBC,GAAqB,IACrBC,GAAuB,KACvBC,GAAuB,EACvBC,GAA2B,EAC3BC,GAA2B,EAC3BC,GAA+B,IAC/BC,GAAiB,EACjBC,GAAgB,GAChBC,GAAkB,IAClBC,GAAoB,GACpBC,GAAc,KACdC,GAAQ,IAAI,aAAa,EAAE,EAC3BC,GAAQ,IAAI,aAAa,EAAE,EAC3BC,GAAS,IAAI,aAAa,EAAE,EAChC,SAASC,GAAYC,EAAQC,EAAOC,EAAMC,EAAS,CACjD,IAAMC,EAAOJ,EAAO,OAASN,GAAoB,EAC7CE,GAAM,OAASQ,IACjBR,GAAQ,IAAI,aAAaQ,CAAI,EAC7BP,GAAQ,IAAI,aAAaO,CAAI,EAC7BN,GAAS,IAAI,aAAaM,CAAI,GAEhC,IAAMC,EAAOL,EAAOA,EAAO,OAAS,CAAC,EACrCJ,GAAM,CAAC,EAAIS,EAAK,GAChBR,GAAM,CAAC,EAAIQ,EAAK,GAChBP,GAAO,CAAC,EAAI,EACZ,IAAIQ,EAAI,EACJC,EAAK,EACT,QAASC,EAAKR,EAAO,OAAS,EAAGQ,GAAM,GAAKD,EAAKJ,EAASK,IAAM,CAC9D,IAAMC,EAAIT,EAAOQ,CAAE,EACnB,QAASE,EAAI,EAAGA,GAAKhB,IAAqBa,EAAKJ,EAASO,IAAK,CAC3D,IAAMC,EAAI,GAAKD,EAAIhB,KAAsB,EACnC,EAAI,EAAIiB,EACRC,EAAI,EAAI,EAAI,EACZC,EAAI,EAAI,EAAI,EAAIF,EAChBG,EAAI,EAAI,EAAIH,EAAIA,EAChBI,EAAIJ,EAAIA,EAAIA,EACZK,EAAIJ,EAAIH,EAAE,GAAKI,EAAIJ,EAAE,IAAMK,EAAIL,EAAE,IAAMM,EAAIN,EAAE,GAC7CQ,EAAIL,EAAIH,EAAE,GAAKI,EAAIJ,EAAE,IAAMK,EAAIL,EAAE,IAAMM,EAAIN,EAAE,GACnDF,GAAM,KAAK,MAAMS,EAAIpB,GAAMU,EAAI,CAAC,GAAIW,EAAIpB,GAAMS,EAAI,CAAC,GAAKJ,CAAI,EAAID,EAChEL,GAAMU,CAAC,EAAIU,EACXnB,GAAMS,CAAC,EAAIW,EACXnB,GAAOQ,CAAC,EAAIC,EACZD,GACF,CACF,CACA,OAAOA,CACT,CACA,SAASY,GAAYZ,EAAGC,EAAI,CAC1B,IAAIY,EAAI,EACR,KAAOA,EAAIb,EAAI,GAAKR,GAAOqB,CAAC,EAAIZ,GAC9BY,IAEF,IAAMC,EAAOtB,GAAOqB,EAAI,CAAC,EACnBE,EAAKvB,GAAOqB,CAAC,EACbG,EAAID,EAAKD,EAAO,KAAK,IAAI,EAAG,KAAK,IAAI,GAAIb,EAAKa,IAASC,EAAKD,EAAK,CAAC,EAAI,EAC5E,MAAO,CACL,EAAGxB,GAAMuB,EAAI,CAAC,GAAKvB,GAAMuB,CAAC,EAAIvB,GAAMuB,EAAI,CAAC,GAAKG,EAC9C,EAAGzB,GAAMsB,EAAI,CAAC,GAAKtB,GAAMsB,CAAC,EAAItB,GAAMsB,EAAI,CAAC,GAAKG,CAChD,CACF,CACA,SAASC,GAAa,CACpB,OAAAvB,EACA,cAAAwB,EACA,cAAAC,EACA,MAAAxB,EACA,KAAAC,EACA,MAAAwB,EACA,aAAAC,EACA,WAAAC,CACF,EAAG,CACD,IAAMC,EAAS1C,GAAuBC,GAA2BoC,EAC3DlB,EAAIP,GACRC,EACAC,EACAC,EACAuB,EAAgBlC,GAAiBsC,CACnC,EACMC,EAAWhC,GAAOQ,EAAI,CAAC,EACvByB,EAAWD,EAAWnC,GACtBqC,EAAQ,KAAK,IAAIP,EAAeK,CAAQ,EACxCG,EAAMF,EAAW,KAAK,IAAI,EAAGG,GAAWP,EAAc1B,EAAOA,EAAQC,CAAI,EAAI2B,CAAM,EAAI,EAC7F,GAAIE,EAAWE,EAAMzC,GAAgBsC,EAAWvC,GAAiBsC,EAC/D,OAEF,IAAMM,EAAMjB,GAAYZ,EAAG0B,CAAK,EAC1BI,EAAOlB,GAAYZ,EAAG0B,EAAQH,EAASI,CAAG,EAC1CI,EAAKF,EAAI,EAAIC,EAAK,EAClBE,GAAMH,EAAI,EAAIC,EAAK,GAAKlC,EACxBG,EAAOL,EAAOA,EAAO,OAAS,CAAC,EACrC,MAAO,CACL,EAAGmC,EAAI,EACP,EAAGA,EAAI,EACP,MAAO,KAAK,MAAME,EAAIC,CAAE,EAAI,EAAI,KAAK,MAAMA,EAAID,CAAE,EAAIE,GAAWlC,EAAMH,EAAMsC,GAAcnC,EAAMuB,CAAU,CAAC,EAC3G,OAAQC,EAASI,EACjB,WAAY5C,GAA2BC,GAA+BkC,GAAiBS,EACvF,MAAAP,CACF,CACF,CACA,IAAIe,GAAgB,CAAC,CAAC,EAAG,CAAC,CAAC,EACvBC,GAAW,CAAC,CAAC,EACbC,GAAW,CAAE,GAAI,EAAG,GAAI,CAAE,EAC9B,SAASC,GAAYC,EAAIC,EAAU5C,EAAM,CACvC,IAAM6C,EAAOC,GAAM,KAAK,MAAMA,EAAE,EAAIH,EAAG,GAAIG,EAAE,EAAIH,EAAG,GAAK3C,CAAI,EAC7D,OAAO6C,EAAID,EAAS,CAAC,CAAC,EAAIC,EAAID,EAAS,GAAG,EAAE,CAAC,CAC/C,CACA,SAASG,GAAYC,EAAMJ,EAAUK,EAAOC,EAAUlD,EAAM,CAC1D,OAAOkD,EAAWC,GAAYH,CAAI,EAAE,OAAS,QAAUN,GAAY,CAAE,EAAGO,EAAM,GAAI,EAAGA,EAAM,EAAG,EAAGL,EAAU5C,CAAI,CACjH,CACA,SAASsC,GAAcnC,EAAMuB,EAAY,CACvC,GAAIA,EAAW,OAAS,EACtB,OAEF,IAAMuB,EAAQvB,EAAW,CAAC,EACpB0B,EAAQ1B,EAAWA,EAAW,OAAS,CAAC,EAE9C,OADgB,KAAK,MAAMvB,EAAK,GAAK8C,EAAM,EAAG9C,EAAK,GAAK8C,EAAM,CAAC,GAAK,KAAK,MAAM9C,EAAK,GAAKiD,EAAM,EAAGjD,EAAK,GAAKiD,EAAM,CAAC,EAClG,CAAE,KAAMH,EAAO,GAAIvB,EAAW,CAAC,CAAE,EAAI,CAAE,KAAM0B,EAAO,GAAI1B,EAAWA,EAAW,OAAS,CAAC,CAAE,CAC7G,CACA,SAAS2B,GAAO3C,EAAGC,EAAG,CACpB,GAAI,CAACD,GAAK,CAACC,EACT,OAEF,IAAMwB,EAAKxB,EAAE,EAAID,EAAE,EACb0B,EAAKzB,EAAE,EAAID,EAAE,EACb4C,EAAM,KAAK,MAAMnB,EAAIC,CAAE,EAC7B,OAAOkB,EAAM,EAAI,CAAE,GAAI,CAAClB,EAAKkB,EAAK,GAAInB,EAAKmB,CAAI,EAAI,MACrD,CACA,IAAIC,GAAc,GACdC,GAAiB,EAAI,KAAK,KAAKD,EAAW,EAC9C,SAASE,GAAeC,EAAW1D,EAAO,EAAG,CAC3C,IAAM2D,EAAS3D,IAAS,EAAI0D,EAAYA,EAAU,IAAKZ,IAAO,CAAE,EAAGA,EAAE,EAAG,EAAGA,EAAE,EAAI9C,CAAK,EAAE,EACxF,OAAO2D,EAAO,IAAI,CAACb,EAAG7B,IAAM,CAC1B,IAAM2C,EAASP,GAAOM,EAAO1C,EAAI,CAAC,EAAG6B,CAAC,EAChCe,EAAQR,GAAOP,EAAGa,EAAO1C,EAAI,CAAC,CAAC,EACrC,GAAI2C,GAAUC,EAAO,CACnB,IAAMC,GAAMF,EAAO,GAAKC,EAAM,IAAM,EAC9BE,GAAMH,EAAO,GAAKC,EAAM,IAAM,EAC9BG,EAAMJ,EAAO,GAAKE,EAAKF,EAAO,GAAKG,EACzC,OAAOC,EAAMT,GAAc,CAAE,GAAIO,EAAKE,EAAK,GAAID,EAAKC,CAAI,EAAI,CAAE,GAAAF,EAAI,GAAAC,CAAG,CACvE,CACA,OAAOH,GAAUC,GAAS,CAAE,GAAI,EAAG,GAAI,CAAE,CAC3C,CAAC,CACH,CACA,SAASI,GAAeN,EAAQO,EAASC,EAAUnE,EAAO,EAAG,CAC3D,IAAMoE,EAAM,IAAI,MAAMT,EAAO,MAAM,EACnC,QAAS1C,EAAI,EAAGA,EAAI0C,EAAO,OAAQ1C,IACjCmD,EAAInD,CAAC,EAAI,CACP,EAAG0C,EAAO1C,CAAC,EAAE,EAAIiD,EAAQjD,CAAC,EAAE,GAAKkD,EACjC,EAAGR,EAAO1C,CAAC,EAAE,EAAIiD,EAAQjD,CAAC,EAAE,GAAKkD,EAAWnE,CAC9C,EAEF,OAAOoE,CACT,CACA,SAASC,GAASC,EAAGC,EAAGC,EAAG,CACzB,IAAMjE,GAAK,EAAI,KAAK,IAAI,EAAIiE,EAAI,CAAC,GAAKD,EAChCzD,EAAIP,GAAK,EAAI,KAAK,IAAI+D,EAAI,GAAK,EAAI,CAAC,GACpCG,EAAID,EAAIjE,EAAI,EACdmE,EAAI,EACJC,EAAI,EACJhE,EAAI,EACR,OAAI2D,EAAI,IACNI,EAAInE,EACJoE,EAAI7D,GACKwD,EAAI,KACbI,EAAI5D,EACJ6D,EAAIpE,GACK+D,EAAI,KACbK,EAAIpE,EACJI,EAAIG,GACKwD,EAAI,KACbK,EAAI7D,EACJH,EAAIJ,GACK+D,EAAI,KACbI,EAAI5D,EACJH,EAAIJ,IAEJmE,EAAInE,EACJI,EAAIG,GAEC,CAAC4D,EAAID,EAAGE,EAAIF,EAAG9D,EAAI8D,CAAC,CAC7B,CACA,SAASG,GAAQN,EAAGC,EAAGC,EAAG9D,EAAI,EAAG,CAC/B,GAAM,CAACgE,EAAGC,EAAGhE,CAAC,EAAI0D,GAASC,EAAGC,EAAGC,CAAC,EAClC,OAAOnG,EACL,KAAK,MAAMqG,EAAI,GAAG,EAClB,KAAK,MAAMC,EAAI,GAAG,EAClB,KAAK,MAAMhE,EAAI,GAAG,EAClB,KAAK,MAAMD,EAAI,GAAG,CACpB,CACF,CACA,IAAImE,GAAiB,CACnB,CAAC,GAAI,EAAG,EAAE,EACV,CAAC,GAAI,GAAI,GAAG,EACZ,CAAC,GAAI,IAAK,GAAG,EACb,CAAC,GAAI,IAAK,EAAE,EACZ,CAAC,IAAK,IAAK,EAAE,CACf,EACIC,GAAuB,CACzB,CAAC,IAAK,IAAK,EAAE,EACb,CAAC,IAAK,GAAI,GAAG,CACf,EACIC,GAAuB,CACzB,CAAC,IAAK,GAAI,EAAE,EACZ,CAAC,GAAI,IAAK,GAAG,CACf,EACA,SAASC,GAAeC,EAAOxE,EAAG,CAChC,IAAMyE,EAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGzE,CAAC,CAAC,GAAKwE,EAAM,OAAS,GACpDhE,EAAI,KAAK,IAAIgE,EAAM,OAAS,EAAG,KAAK,MAAMC,CAAG,CAAC,EAC9C9D,EAAI8D,EAAMjE,EACVP,EAAIuE,EAAMhE,CAAC,EACXN,EAAIsE,EAAMhE,EAAI,CAAC,EACrB,OAAO5C,EACL,KAAK,MAAMqC,EAAE,CAAC,GAAKC,EAAE,CAAC,EAAID,EAAE,CAAC,GAAKU,CAAC,EACnC,KAAK,MAAMV,EAAE,CAAC,GAAKC,EAAE,CAAC,EAAID,EAAE,CAAC,GAAKU,CAAC,EACnC,KAAK,MAAMV,EAAE,CAAC,GAAKC,EAAE,CAAC,EAAID,EAAE,CAAC,GAAKU,CAAC,EACnC,GACF,CACF,CACA,SAAS+D,GAAUC,EAAKC,EAAO,CAC7B,OAAOT,GAAQU,GAAQF,CAAG,EAAGG,GAAiBC,GAAgBH,CAAK,CACrE,CACA,IAAII,GAAyB,CAAC,GAAI,GAAI,EAAE,EACpCC,GAA2BrH,EAAS,GAAGoH,GAAwB,GAAG,EAClEE,GAAyB,OAAOF,GAAuB,KAAK,IAAI,CAAC,IACrE,SAASG,GAAaC,EAAMC,EAAM,CAChC,IAAMC,EAAMD,EAAK,UAAU,IAAID,EAAK,EAAE,EACtC,OAAOG,GAAWH,CAAI,GAAKE,IAAQ,QAAUA,EAAMD,EAAK,OAASA,EAAK,KAAO,MAC/E,CACA,SAASG,GAAqBC,EAAOC,EAAQ,CAC3C,IAAMC,EAAYC,GAAmBH,CAAK,EAC1C,GAAIC,GAAUA,EAAO,IAAMA,EAAO,MAChC,MAAO,CACL,MAAOA,EAAO,MACd,KAAMA,EAAO,IAAMA,EAAO,MAC1B,UAAAC,CACF,EAEF,IAAIE,EAAM,IACNC,EAAM,KACV,QAAWR,KAAOK,EAAU,OAAO,EACjCE,EAAM,KAAK,IAAIA,EAAKP,CAAG,EACvBQ,EAAM,KAAK,IAAIA,EAAKR,CAAG,EAEzB,MAAO,CACL,MAAOO,IAAQ,IAAW,EAAIA,EAC9B,KAAMC,EAAMD,EAAMC,EAAMD,EAAM,EAC9B,UAAAF,CACF,CACF,CACA,SAASI,GAAwBN,EAAOO,EAAe,CACrD,IAAIC,EAAW,IACXC,EAAW,KACXC,EAAY,IACZC,EAAY,KACZC,EAAU,EACd,QAAW1G,KAAK8F,EAAM,MAChB9F,EAAE,SAAW,QAAUA,EAAE,OAAO,KAAO0G,IACzCA,EAAU1G,EAAE,OAAO,MAEjBA,EAAE,MAAQsG,IACZA,EAAWtG,EAAE,OAEXA,EAAE,MAAQuG,IACZA,EAAWvG,EAAE,OAEXA,EAAE,OAASwG,IACbA,EAAYxG,EAAE,QAEZA,EAAE,OAASyG,IACbA,EAAYzG,EAAE,QAGlB,MAAO,CACL,SAAAsG,EACA,SAAAC,EACA,UAAAC,EACA,UAAAC,EACA,QAAAC,EACA,UAAWZ,EAAM,MAAM,OACvB,cAAAO,CACF,CACF,CACA,SAASM,GAAalB,EAAMmB,EAAWC,EAAaC,EAAO,CACzD,OAAQD,EAAa,CACnB,IAAK,SACH,OAAO9B,GAAUU,EAAK,GAAI,CAAC,EAC7B,IAAK,QACH,OAAOb,GACLH,GACAqC,EAAM,SAAWA,EAAM,UAAYrB,EAAK,MAAQqB,EAAM,WAAaA,EAAM,SAAWA,EAAM,UAAY,EACxG,EACF,IAAK,cACH,OAAOlC,GACLD,GACAmC,EAAM,UAAYA,EAAM,WAAarB,EAAK,OAASqB,EAAM,YAAcA,EAAM,UAAYA,EAAM,WAAa,EAC9G,EAIF,IAAK,cACH,OAAOrB,EAAK,SAAW,OAASxH,EAAS,IAAK,IAAK,IAAK,GAAG,EAAIwH,EAAK,OAAO,OAAS,EAAIxH,EAAS,GAAI,IAAK,IAAK,GAAG,EAAI2G,GACpHF,GACAoC,EAAM,QAAU,GAAKrB,EAAK,OAAO,KAAO,IAAMqB,EAAM,QAAU,GAAK,CACrE,EAGF,IAAK,qBAAsB,CACzB,IAAMpB,EAAOoB,EAAM,cACnB,GAAIpB,IAAS,OACX,OAAOzH,EAAS,IAAK,IAAK,IAAK,GAAG,EAEpC,IAAMoC,EAAImF,GAAaC,EAAMC,CAAI,EACjC,OAAOrF,IAAM,OAASiF,GAA2Bd,GAC/CuC,GAAU1G,CAAC,EACX2G,GACAC,EACF,CACF,CACA,IAAK,OACH,OAAOhJ,EAAS,IAAK,IAAK,IAAK,GAAG,EACpC,IAAK,UAAW,CACd,IAAMiJ,EAAMJ,EAAM,UAAY,EAAIF,EAAYE,EAAM,UAAY,IAAM,EACtE,OAAOtC,GAAQ0C,EAAK,IAAM,EAAG,CAC/B,CACA,QACE,OAAOjJ,EAAS,GAAI,IAAK,IAAK,GAAG,CACrC,CACF,CACA,SAASgE,GAAW9B,EAAGP,EAAO,EAAGuH,EAAM,CACrC,IAAMC,EAAa,CACjB,CAACjH,EAAE,IAAKA,EAAE,GAAG,EACb,CAACA,EAAE,IAAKA,EAAE,GAAG,EACb,CAACA,EAAE,GAAIA,EAAE,EAAE,CACb,EACA,OAAW,CAACO,EAAGC,CAAC,IAAKyG,EAAY,CAC/B,IAAMrF,EAAK5B,EAAE,GAAKO,EACZsB,GAAM7B,EAAE,GAAKQ,GAAKf,EACxB,GAAI,KAAK,MAAMmC,EAAIC,CAAE,EAAI,EACvB,OAAO,KAAK,MAAMA,EAAID,CAAE,CAE5B,CACA,OAAOoF,EAAO,KAAK,OAAOA,EAAK,GAAG,EAAIA,EAAK,KAAK,GAAKvH,EAAMuH,EAAK,GAAG,EAAIA,EAAK,KAAK,CAAC,EAAI,CACxF,CACA,SAASE,GAAmB7E,EAAU8E,EAAQ,CAC5C,IAAIC,EAAM,GACV,QAAS1G,EAAI,EAAGA,EAAI2B,EAAS,OAAS,GAAK,CAAC+E,EAAK1G,IAAK,CACpD,IAAMP,EAAIkC,EAAS3B,CAAC,EACdN,EAAIiC,EAAS3B,EAAI,CAAC,EACxB0G,EAAM,KAAK,IAAIjH,EAAE,EAAGC,EAAE,CAAC,GAAK+G,EAAO,MAAQ,KAAK,IAAIhH,EAAE,EAAGC,EAAE,CAAC,GAAK+G,EAAO,MAAQ,KAAK,IAAIhH,EAAE,EAAGC,EAAE,CAAC,GAAK+G,EAAO,MAAQ,KAAK,IAAIhH,EAAE,EAAGC,EAAE,CAAC,GAAK+G,EAAO,IACpJ,CACA,OAAOC,CACT,CACA,SAASC,GAAiB9H,EAAQ4H,EAAQG,EAAQ,EAAGC,EAAQ,EAAG,CAC9D,QAAWvH,KAAKT,EAAQ,CACtB,IAAMiI,EAAQ,KAAK,IAAIxH,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EACzCyH,EAAQ,KAAK,IAAIzH,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EACzC0H,EAAQ,KAAK,IAAI1H,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EACzC2H,EAAQ,KAAK,IAAI3H,EAAE,GAAIA,EAAE,IAAKA,EAAE,IAAKA,EAAE,EAAE,EAC/C,GAAIyH,GAASN,EAAO,KAAOG,GAASE,GAASL,EAAO,KAAOG,GAASK,GAASR,EAAO,KAAOI,GAASG,GAASP,EAAO,KAAOI,EACzH,MAAO,EAEX,CACA,MAAO,EACT,CACA,IAAIK,GAA+B,IAAI,QACvC,SAASC,GAAclC,EAAO,CAC5B,IAAImC,EAAUF,GAAa,IAAIjC,CAAK,EACpC,GAAI,CAACmC,EAAS,CACZ,IAAMC,EAAmB,CAAC,EACpBC,EAAkC,IAAI,IACtCC,EAAQtC,EAAM,OAAS,CAAC,EAC9B,QAASjF,EAAI,EAAGA,EAAIuH,EAAM,OAAQvH,IAChCqH,EAAiB,KACf1D,GACE6D,GAAUxH,EAAGuH,EAAM,MAAM,EACzBjD,GACAC,GACA,GACF,CACF,EACK+C,EAAgB,IAAIC,EAAMvH,CAAC,EAAE,IAAI,GACpCsH,EAAgB,IAAIC,EAAMvH,CAAC,EAAE,KAAMA,CAAC,EAGxCoH,EAAU,CAAE,iBAAAC,EAAkB,gBAAAC,CAAgB,EAC9CJ,GAAa,IAAIjC,EAAOmC,CAAO,CACjC,CACA,OAAOA,CACT,CACA,IAAIK,GAA6B,IAAI,QACjCC,GAA2B,IAAI,IACnC,SAASC,GAAY1C,EAAO,CAC1B,IAAI2C,EAAQH,GAAW,IAAIxC,CAAK,EAChC,GAAI,CAAC2C,EAAO,CACVA,EAAwB,IAAI,IAC5B,OAAW,CAACC,EAASC,CAAI,IAAM7C,EAAM,OAAS,CAAC,GAAG,QAAQ,EACxD,QAAW8C,KAAU,IAAI,IAAID,EAAK,OAAO,EACvCE,GAAOJ,EAAOG,EAAQF,CAAO,EAGjCJ,GAAW,IAAIxC,EAAO2C,CAAK,CAC7B,CACA,OAAOA,CACT,CACA,IAAIK,GAAaC,GAAS,EACtBC,GAA6B,IAAI,QACrC,SAASC,GAAQnD,EAAO,CACtB,IAAIoD,EAAQF,GAAW,IAAIlD,CAAK,EAChC,GAAI,CAACoD,EAAO,CACVA,EAAwB,IAAI,IAC5B,OAAW,CAAE,KAAApI,EAAM,GAAAC,CAAG,IAAK+E,EAAM,MAAO,CACtC,IAAI9B,EAAMkF,EAAM,IAAIpI,CAAI,EACnBkD,IACHA,EAAsB,IAAI,IAC1BkF,EAAM,IAAIpI,EAAMkD,CAAG,GAErBA,EAAI,IAAIjD,CAAE,CACZ,CACAiI,GAAW,IAAIlD,EAAOoD,CAAK,CAC7B,CACA,OAAOA,CACT,CACA,SAASC,GAAcC,EAAS,CAC9B,GAAM,CACJ,cAAAC,EACA,MAAAvD,EACA,SAAAwD,EACA,YAAAzC,EACA,gBAAA0C,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAC,EAAY,UACZ,UAAAC,EAAY,UACZ,UAAAC,EACA,KAAAC,EACA,aAAAC,EACA,eAAAC,EACA,cAAA1D,EACA,UAAA2D,EACA,eAAAC,EACA,SAAAnH,EACA,YAAAoH,EACA,QAAAC,EAAU,CACZ,EAAIf,EACEgB,EAAYV,IAAc,QAAUW,GAAUvE,CAAK,EAAI,EACvDwE,EAAUX,IAAc,QAAUY,GAAYzE,CAAK,EAAI,EACvDnG,EAAQkK,EAAK,OACbW,EAAmB,EAAI,KAAK,IAAI7K,EAAOf,EAAoB,EAC3DgB,EAAO6K,GAAOZ,CAAI,EAClBa,EAAeC,GACnBtB,EACAvD,EACA+D,EACAG,EACAG,EACAF,EACAnH,CACF,EACM8H,EAAc,CAAC,EACfC,EAAiC,IAAI,IACrCC,EAAS,CAAC,EACVC,GAA4B,IAAI,IAChCC,EAAa,CAAC,EACdC,EAAgC,IAAI,IACpCC,EAAa9E,GAAwBN,EAAOO,CAAa,EACzD8E,EAA+B,IAAI,IACzC,GAAItE,IAAgB,UAClB,QAAShG,EAAI,EAAGA,EAAIiF,EAAM,MAAM,OAAQjF,IACtCsK,EAAa,IAAIrF,EAAM,MAAMjF,CAAC,EAAE,GAAIA,CAAC,EAGzC,IAAMuK,EAAYtF,EAAM,OAAO,QAAU,EACnC,CAAE,iBAAAoC,GAAkB,gBAAAC,EAAgB,EAAIH,GAAclC,CAAK,EAC3DuF,GAAmBC,GAASpD,GAAiBC,GAAgB,IAAImD,CAAI,GAAK,EAAE,GAAKpN,GACjFqN,GAAgB9B,GAAa2B,EAAY,EAAI5C,GAAY1C,CAAK,EAAIyC,GAClEiD,EAAc5B,GAAW,OAAS,CAAC,EACnC6B,EAAWC,GAAcF,CAAW,EACpCG,GAAaH,EAAY,IAAKI,GAAMA,EAAE,UAAU,EAChDC,GAAUJ,EAAWK,GAAUH,EAAU,EAAI,EAC7CI,GAASnC,GAAa4B,EAAY,OAAS,EAAI1C,GACnDc,EACA,CAACP,EAAec,EAASN,EAAK,OAAQA,EAAK,MAAM,EACjD,IAAMmC,GAAUR,EAAanC,EAAezJ,EAAM4K,CAAgB,CACpE,EAAI,OACEyB,GAAQF,IAAQ,MAChBG,GAAUH,IAAQ,QAClBI,GAAYJ,IAAQ,MACpBK,GAAeX,EAAWY,GAAYV,GAAYA,EAAU,EAAI,CAAC,EACjEW,GAAgC,IAAI,IACpCC,GAAa3D,GAAW,CAC5B,IAAI4D,EAAUF,GAAc,IAAI1D,CAAM,EACtC,GAAI,CAAC4D,EAAS,CACZ,IAAMC,EAAQN,IAAW,IAAIvD,CAAM,EACnC4D,EAAUC,EAAQJ,GAAYI,EAAM,KAAMd,GAAYc,EAAM,IAAI,EAAIL,GACpEE,GAAc,IAAI1D,EAAQ4D,CAAO,CACnC,CACA,OAAOA,CACT,EACME,GAAa,CAAC9D,EAAQ+D,EAAWC,EAAMC,IAASpB,GAAYc,GAAU3D,CAAM,EAAEgE,CAAI,EAAIC,EAAOC,IAAmBjB,IAAWe,GAAQpB,EAAY,OAAS,GAAK,GAAKmB,EAClKI,GAAiBJ,GAAclB,EAAWuB,GAAY,EAAInB,GAAUc,EAAY,EAChFM,GAA8B,IAAI,IAClCC,GAAgB,CAACtE,EAAQpG,IAAa,CAC1C,IAAIsB,EAAUmJ,GAAY,IAAIrE,CAAM,EACpC,GAAI,CAAC9E,EAAS,CACZ,IAAMqJ,EAAWlB,IAAO,QAAQ,IAAIrD,CAAM,EAC1C9E,EAAUqJ,EAAW9J,GAAeb,EAAU5C,CAAI,EAAE,IAAI,CAACI,EAAGa,IAAMsM,EAAStM,CAAC,GAAKb,CAAC,EAAIqD,GAAeb,EAAU5C,CAAI,EACnHqN,GAAY,IAAIrE,EAAQ9E,CAAO,CACjC,CACA,OAAOA,CACT,EACMsJ,GAA6B,IAAI,IACjCC,GAAeC,GAAO,CAC1B,IAAIC,EAAQH,GAAW,IAAIE,CAAE,EAC7B,GAAIC,IAAU,OAAQ,CACpB,IAAM9H,EAAO6D,EAAS,IAAIgE,CAAE,EAC5BC,EAAQC,GACN/H,EAAOgI,GAAYhI,EAAM8D,EAAiBG,EAAWU,CAAS,EAAIb,EAClEiC,EAAY,MACd,EACA4B,GAAW,IAAIE,EAAIC,CAAK,CAC1B,CACA,OAAOA,CACT,EACMG,GAAc,CAAC9E,EAAQ+E,IAAU1B,IAAO,OAAO,IAAIrD,CAAM,IAAI+E,CAAK,GAAKtL,GACvEuL,GAAY,CAACN,EAAI9K,EAAUqL,IAAY,CAC3C,IAAMtL,EAAKsL,EAAU,EAAIrL,EAAS,OAAS,EAC3C,MAAO,CACL,GAAA8K,EACA,UAAWD,GAAYC,CAAE,EACzB,OAAQJ,GAAcI,EAAI9K,CAAQ,EAAED,CAAE,GAAK,CAAE,GAAI,EAAG,GAAI,CAAE,EAC1D,MAAOmL,GAAYJ,EAAI/K,CAAE,CAC3B,CACF,EACMuL,GAAe,CAACpO,EAAQqO,IAAW,CACvC,GAAI,CAAChE,EACH,MAAO,GAET,IAAMiE,EAASvC,EAAWwC,GAAYtC,EAAU,EAAIE,IAAWL,EAAY,OAAS,GAAK,EAAI6B,GAAYU,CAAM,EACzGG,EAAQ9K,GAAiB4K,EAASxD,EACxC,OAAOhD,GACL9H,EACAqK,EACAmE,GAASnC,IAAQ,cAAc,IAAM,GACrCmC,EAAQtO,GAAQmM,IAAQ,cAAc,IAAM,EAC9C,CACF,EACMoC,GAAc,CAACvB,EAAM9L,EAAMC,IAAO,CACtC,IAAMqN,EAAMlC,KAAUU,CAAI,GAAG,YAC7B,GAAI,CAACwB,GAAK,KACR,OAAOjM,GAET,IAAMkM,EAAQD,EAAI,IAAItN,CAAI,GAAG,IAAIC,CAAE,EAC7BuN,EAAOrF,GAAQnD,CAAK,EAAE,IAAI/E,CAAE,GAAG,IAAID,CAAI,EAAI,OAASsN,EAAI,IAAIrN,CAAE,GAAG,IAAID,CAAI,EAC/E,GAAI,CAACwN,EACH,OAAOD,GAASlM,GAElB,IAAMoM,GAASD,EAAK,IAAI,CAAC,CAAChO,EAAGC,CAAC,IAAM,CAACA,EAAGD,CAAC,CAAC,EAC1C,OAAO+N,EAAQ,CAAC,GAAGA,EAAO,GAAGE,EAAM,EAAIA,EACzC,EACMC,GAAc,CAAC5B,EAAMhE,EAAQ6F,IAAWjD,EAAYoB,CAAI,GAAG,WAAW,IAAIhE,CAAM,IAAIsD,KAAUU,CAAI,GAAG,aAAa,IAAIhE,CAAM,IAAI6F,CAAM,GAAK,CAAC,EAC5IC,GAAe,CAAC9F,EAAQpG,IAAayJ,IAAO,OAAO,IAAIrD,CAAM,EAAIpG,EAAS,IAAI,CAACE,EAAG7B,IAAM,CAC5F,GAAM,CAAE,GAAAkB,EAAI,GAAAC,CAAG,EAAI0L,GAAY9E,EAAQ/H,CAAC,EACxC,MAAO,CAAE,GAAG6B,EAAG,EAAGA,EAAE,EAAIX,EAAI,EAAGW,EAAE,EAAIV,CAAG,CAC1C,CAAC,EAAIQ,EACCmM,GAAahP,GAASmK,EAAe,EAAI3K,IAC/C,QAASyP,EAAK,EAAGA,EAAK9I,EAAM,MAAM,OAAQ8I,IAAM,CAC9C,IAAMhM,EAAOkD,EAAM,MAAM8I,CAAE,EACrBvN,EAAegI,EAAczG,EAAK,IAAI,EACtCtB,EAAa+H,EAAczG,EAAK,EAAE,EAClCiM,EAAanE,EAAa,IAAIkE,CAAE,EACtC,GAAI,CAACvN,GAAc,QAAU,CAACC,GAAY,QAAU,CAACuN,GAAc3E,GAAa,IAAI0E,CAAE,EACpF,SAEF,IAAME,EAAWlM,EAAK,SAAS,QAAU,EAEnCmM,EADW/E,GAAW,IAAI4E,CAAE,IACF,OAC1BI,EAASpF,GAAW,YAAY,IAAIgF,CAAE,GAAK,GAC3CK,GAAkBzF,EAAqB,GAAKuF,EAAa3Q,GAA4B,GACrF8Q,GAAgBH,EAAaE,GAAkBzF,EAAqB,EAAI2F,GAAgBL,EAAUxE,EAASX,CAAS,EACpHyF,GAAU3F,GAAaqF,EAAW,EAClCO,EAAiBN,EAAa5Q,GAAsBH,GACpDsR,GAAY,CAAC1F,GAAaoF,EAASK,EAAiB5Q,GAAS4Q,EAAgB/Q,EAAW,EACxFiR,GAASjG,EAAS,IAAI1G,EAAK,EAAE,EAC7B4M,IAAiBD,GAAS9B,GAAY8B,GAAQhG,EAAiBG,EAAWU,CAAS,EAAIb,GAAmB,EAC1GkG,GAAU/P,GAAW,CAACqK,GAAkBvC,GAAiB9H,EAAQqK,CAAc,EAC/E2F,EAAYhQ,GAAWiQ,GAAUjQ,EAAQhB,GAAmBiB,EAAOC,EAAMmK,CAAc,EACvF6F,EAAS,CAAClQ,EAAQmQ,EAAWzO,IAAU,CAC3C,GAAI,CAAC2N,EAAY,CACf/D,EAAW,KAAK,CAAE,OAAAtL,EAAQ,UAAAmQ,EAAW,MAAAzO,CAAM,CAAC,EAC5C,MACF,CACA,QAAW0O,KAAQJ,EAAShQ,CAAM,EAChCsL,EAAW,KAAK,CAAE,OAAQ8E,EAAK,OAAQ,UAAAD,EAAW,MAAAzO,CAAM,CAAC,CAE7D,EACM2O,GAAa,CAACrQ,EAAQmQ,EAAWzO,EAAO4O,EAAMnD,GAAMoD,EAASC,GAASC,GAAWC,KAAe,CACpG,GAAI,CAACrB,EAAY,CACf/D,EAAW,KAAK,CACd,OAAAtL,EACA,UAAAmQ,EACA,MAAAzO,EACA,KAAA4O,EACA,KAAAnD,GACA,OAAQoD,EACR,QAAAC,GACA,UAAAC,GACA,WAAAC,EACF,CAAC,EACD,MACF,CACA,IAAMC,EAAQ,CAAE,OAAQJ,EAAS,QAAAC,EAAQ,EACnCI,GAAM,CAAE,OAAQH,GAAW,QAASC,EAAW,EACrD,QAAWN,MAAQJ,EAAShQ,CAAM,EAAG,CACnC,IAAMY,GAAIwP,GAAK,aAAe,EAAIO,EAAQE,GAAYF,EAAOC,GAAKR,GAAK,UAAU,EAC3EvP,GAAIuP,GAAK,WAAa,EAAIQ,GAAMC,GAAYF,EAAOC,GAAKR,GAAK,QAAQ,EAC3E9E,EAAW,KAAK,CACd,OAAQ8E,GAAK,OACb,UAAAD,EACA,MAAAzO,EACA,KAAA4O,EACA,KAAAnD,GACA,OAAQvM,GAAE,OACV,QAASA,GAAE,QACX,UAAWC,GAAE,OACb,WAAYA,GAAE,OAChB,CAAC,CACH,CACF,EACMiQ,GAAW9Q,GAAW,CAC1B,IAAM+Q,EAAO9B,GAAa1N,GAAa,CACrC,OAAAvB,EACA,cAAeqP,GAAcK,GAAU5F,EAAqB,EAAI0F,GAChE,cAAeM,GACf,MAAA7P,EACA,KAAAC,EACA,MAAO0P,GACP,aAAAjO,EACA,WAAAC,CACF,CAAC,EAAI,OACDmP,GACF3F,EAAO,KAAK2F,CAAI,CAEpB,EACMC,GAAiB1F,EAAW,OAC5B2F,GAAa7F,EAAO,OACpB8F,GAAYhH,GAAW,MAAM,QAAUoF,GAAU,CAACI,GAAUxF,EAAU,MAAQ,OACpF,GAAIgH,IAAa,CAAC9C,GAAae,EAAYjM,EAAK,IAAI,EAClD,SAEF,GAAIgO,GAAW,CACb,IAAM9P,EAAO8M,GACXhL,EAAK,KACLvB,EACAsB,GAAYC,EAAMvB,EAAcwN,EAAW,CAAC,EAAG/L,EAAUlD,CAAI,CAC/D,EACMG,EAAO8O,EAAW,GAAG,EAAE,EACvB9N,EAAK0K,EAAWmC,GACpBhL,EAAK,GACLtB,EACAgB,GAAY,CAAE,EAAGvC,EAAK,GAAI,EAAGA,EAAK,EAAG,EAAGuB,EAAY1B,CAAI,CAC1D,EAAIkB,EACE+P,EAASD,GAAU,SAAW,EAC9Bf,GAAY9C,GAAcjM,EAAK,SAAS,EAC9C,QAAS8L,EAAO,EAAGA,EAAOgE,GAAU,OAAQhE,IAE1C,GADagE,GAAUhE,CAAI,EACjB,YAAY,IAAIgC,CAAE,EAG5B,OAAW,CAAC/B,GAAMiE,EAAM,IAAK3C,GAAYvB,EAAMhK,EAAK,KAAMA,EAAK,EAAE,EAAG,CAClE,IAAMsN,EAAUW,EAAS,EAAInE,GAAW5L,EAAK,GAAIA,EAAK,UAAW8L,EAAMC,EAAI,EAAIrC,EACzE4F,GAAa3E,EAAWiB,GAAW3L,EAAG,GAAIA,EAAG,UAAW6L,EAAMkE,EAAM,EAAItG,EAAmB0F,EAC3FxQ,GAAS+L,EAAWsF,GACxBlC,EACA/N,EAAK,MAAM,GAAKA,EAAK,OAAO,GAAKoP,EACjCpP,EAAK,MAAM,GAAKA,EAAK,OAAO,GAAKoP,EAAUtQ,EAC3CmB,EAAG,MAAM,GAAKA,EAAG,OAAO,GAAKqP,GAC7BrP,EAAG,MAAM,GAAKA,EAAG,OAAO,GAAKqP,GAAaxQ,CAC5C,EAAIsQ,IAAY,EAAIrB,EAAamC,GAC/BnC,EACA/N,EAAK,OAAO,GAAKoP,EACjBpP,EAAK,OAAO,GAAKoP,EAAUtQ,CAC7B,EACI6P,GAAO/P,EAAM,GACfqQ,GACErQ,GACAmQ,GACArB,GAAY5B,EAAMhK,EAAK,KAAMiK,EAAI,GAAK2B,GAAY5B,EAAMhK,EAAK,GAAIkO,EAAM,GAAKzB,EAC5EzC,EACAC,GACA/L,EAAK,OACLoP,EACAnP,EAAG,OACHqP,EACF,CAEJ,CAEEpF,EAAW,OAAS0F,IACtBF,GAAQ3B,CAAU,CAEtB,SAAW,CAACO,GACNK,GAAOZ,CAAU,IACnBe,EAAOf,EAAYK,GAAeI,EAAS,EAC3CkB,GAAQ3B,CAAU,OAEf,CACL,IAAMoC,EAAUC,GACd7P,EACAC,EACAwN,EACAjF,CACF,EACMsH,EAAc,KAAK,OAAOrC,EAAW,GAAK,CAAC,EACjD,QAASpG,EAAU,EAAGA,EAAUoG,EAAUpG,IAAW,CACnD,GAAM,CAAE,EAAAhI,EAAG,EAAAC,EAAE,EAAIsQ,EAAQvI,CAAO,EAC1BhJ,EAASgB,IAAM,GAAKC,KAAM,EAAIkO,EAAamC,GAAgBnC,EAAYnO,EAAGC,EAAC,EACjF,GAAI,CAAC8O,GAAO/P,CAAM,EAChB,SAEF,IAAM0R,GAAc/F,GAAgBzI,EAAK,QAAQ8F,CAAO,CAAC,EACzDkH,EACElQ,EACAuP,GACArF,IAAcA,EAAU,MAAM,OAAS,CAACA,EAAU,MAAM,IAAIhH,EAAK,QAAQ8F,CAAO,CAAC,EAAI,CAACsG,GAAUvQ,GAAS2S,GAAa9S,EAAW,EAAI8S,EACvI,EACI1I,IAAYyI,GACdX,GAAQ9Q,CAAM,CAElB,CACF,CACA,IAAM2R,GAAiBrG,EAAW,OAAS0F,GACvCW,GAAiB,GACnBpG,EAAc,IAAI2D,EAAI,CAAE,MAAO8B,GAAgB,MAAOW,EAAe,CAAC,EAExE,IAAMC,GAAaxG,EAAO,OAAS6F,GAC/BW,GAAa,GACfvG,GAAU,IAAI6D,EAAI,CAAE,MAAO+B,GAAY,MAAOW,EAAW,CAAC,CAE9D,CACA,OAAW,CAAC1I,EAAQpG,CAAQ,IAAK,OAAO,QAAQ6G,CAAa,EAAG,CAC9D,IAAM5D,EAAO6D,EAAS,IAAIV,CAAM,EAIhC,GAHI,CAACnD,GAGDsE,GAAkB,CAAC1C,GAAmB7E,EAAUuH,CAAc,EAChE,SAEF,IAAMwH,EAAQ3H,IAAc,QAAU,CAACA,EAAU,QAAQ,IAAIhB,CAAM,EAC7DwF,EAAMmD,EAAQlT,GAAsBsI,GACxClB,EACA0F,EAAa,IAAIvC,CAAM,GAAK,EAC5B/B,EACAqE,CACF,EACM9J,EAAQmQ,EAAQ9S,GAAS2P,EAAK9P,EAAW,EAAI8P,EAC7Cb,GAAQE,GAAYhI,EAAM8D,EAAiBG,EAAWU,CAAS,EAC/DoH,EAAgBjE,GAAQ,EACxB8C,EAAQzF,EAAY,OACpBnC,GAAQ8C,GAAc,IAAI3C,CAAM,EAChC6I,GAAYlE,GAAQnC,EACpBsG,GAAWlP,EAAS,QAAU,EAC9BmP,EAAQ/H,GAAW,MAAM,QAAU,CAAC2H,GAAS,CAAC9I,IAAO,OAASmB,EAAU,MAAQ,OACtF,GAAI8H,IAAYC,EAAO,CACrB,IAAMhF,GAAYa,GAAgBD,GAAOoE,EAAM,MAAM,EAC/C7N,GAAU6N,EAAM,OAAS,EAAIzE,GAActE,EAAQpG,CAAQ,EAAI,CAAC,EAChEe,GAASoO,EAAM,OAAS,EAAIjD,GAAa9F,EAAQpG,CAAQ,EAAIA,EAC7DqN,EAAY9C,GAAcJ,EAAS,EACzC,QAASC,EAAO,EAAGA,EAAO+E,EAAM,OAAQ/E,IAAQ,CAC9C,IAAMgF,GAAYD,EAAM/E,CAAI,EAAE,OAAO,IAAIhE,CAAM,EAC/C,GAAIgJ,KAAc,OAChB,SAEF,IAAMC,GAAY3F,KAAUU,CAAI,GAAG,YAAY,IAAIhE,CAAM,GAAKxG,GAC9D,QAAWyK,MAAQgF,GAAW,CAC5B,IAAMC,GAAStD,GAAY5B,EAAMhE,EAAQiE,EAAI,GAAK+E,GAClD,GAAID,EAAM,SAAW,EAAG,CACtB/G,EAAY,KAAK,CACf,OAAQpI,EACR,UAAAqN,EACA,MAAOiC,GACP,KAAMlF,EACN,KAAAC,EACF,CAAC,EACD,QACF,CACA,IAAMqD,GAAUxD,GAAW9D,EAAQ+D,GAAWC,EAAMC,EAAI,EAAIrC,EAC5DI,EAAY,KAAK,CACf,OAAQ/G,GAAeN,GAAQO,GAASoM,GAAStQ,CAAI,EACrD,UAAAiQ,EACA,MAAOiC,GACP,KAAMlF,EACN,KAAAC,GACA,QAAA/I,GACA,QAAAoM,EACF,CAAC,CACH,CACF,CACF,SAAWwB,IAAYjJ,IAAO,QAAUgJ,IAAa9S,GAAoB,CACvE,IAAMmF,GAAUT,GAAeb,EAAU5C,CAAI,EAC7C,QAAWmS,MAAQtJ,GAAO,CACxB,IAAMuF,IAAU+D,IAAQ3G,EAAY,GAAK,GAAKqG,GAAYjH,EACpDwH,EAAS9J,GAAiB6J,EAAI,GAAK7T,GACzC0M,EAAY,KAAK,CACf,OAAQ/G,GAAerB,EAAUsB,GAASkK,GAAQpO,CAAI,EACtD,UAAW6R,GAAY,EAEvB,MAAOF,EAAQ9S,GAASuT,EAAQ1T,EAAW,EAAI0T,CACjD,CAAC,CACH,CACF,MAAWN,IACT9G,EAAY,KAAK,CAAE,OAAQpI,EAAU,UAAWgP,EAAe,MAAApQ,CAAM,CAAC,EAExE,IAAM6Q,GAAQrH,EAAY,OAASyF,EAC/B4B,GAAQ,GACVpH,EAAe,IAAIjC,EAAQ,CAAE,MAAAyH,EAAO,MAAA4B,EAAM,CAAC,CAE/C,CACA,MAAO,CACL,YAAArH,EACA,eAAAC,EACA,OAAAC,EACA,UAAAC,GACA,WAAAC,EACA,cAAAC,CACF,CACF,CCj3BA,IAAIiH,GAAc,CAChB,CAAE,MAAO,WAAY,MAAO,yBAA0B,EACtD,CAAE,MAAO,OAAQ,MAAO,yBAA0B,EAClD,CAAE,MAAO,YAAa,MAAO,oBAAqB,CACpD,EACIC,GAAe,CACjB,CAAE,MAAO,OAAQ,MAAO,gBAAiB,KAAM,CAAC,UAAW,SAAS,CAAE,EACtE,CAAE,MAAO,OAAQ,MAAO,eAAgB,KAAM,CAAC,UAAW,SAAS,CAAE,EACrE,CAAE,MAAO,MAAO,MAAO,gBAAiB,KAAM,CAAC,UAAW,SAAS,CAAE,EACrE,CAAE,MAAO,SAAU,MAAO,eAAgB,KAAM,CAAC,UAAW,SAAS,CAAE,EACvE,CAAE,MAAO,QAAS,MAAO,iBAAkB,KAAM,CAAC,UAAW,SAAS,CAAE,EACxE,CAAE,MAAO,SAAU,MAAO,gBAAiB,KAAM,CAAC,UAAW,SAAS,CAAE,EACxE,CAAE,MAAO,UAAW,MAAO,SAAU,CACvC,EACIC,GAAW,CAAC,OAAQ,MAAO,SAAU,OAAO,EAC5CC,GAAWC,GAAMJ,GAAY,KAAMK,GAAMA,EAAE,QAAUD,CAAC,EACtDE,GAAYF,GAAMH,GAAa,KAAMM,GAAMA,EAAE,QAAUH,CAAC,EAC5D,SAASI,GAAgBC,EAAOC,EAAWC,EAAQC,EAAQ,GAAM,CAC/D,GAAM,CAAE,MAAOC,EAAY,OAAQC,CAAY,EAAIL,EAAM,OAAS,CAAC,EAC7DM,EAAQZ,GAAQU,CAAU,EAAIA,EAAaD,EAAQ,WAAa,OAChEI,EAASN,EAAY,OAASR,GAASS,EAAST,GAAS,MAAM,EAC/De,EAASX,GAASQ,CAAW,EAAIA,IAAgB,WAAaC,IAAU,YAAcC,EAASF,EAAcE,EAC7GE,EAAQ,KAAK,MAAMP,EAAST,GAAS,MAAM,EAAIiB,GAAO,OAC5D,OAAOJ,IAAU,QAAUE,IAAWD,GAAUE,EAAQ,EAAI,CAAE,MAAAH,EAAO,OAAAE,EAAQ,MAAOE,GAAOD,CAAK,CAAE,EAAIN,GAASG,IAAU,OAAS,CAAE,MAAAA,EAAO,OAAAE,CAAO,EAAI,CAAE,MAAAF,EAAO,OAAAE,EAAQ,QAASG,EAAiB,CACnM,CACA,IAAIA,GAAmB,IACnBC,GAAS,GACTF,GAAS,CAACE,GAAQ,IAAM,EAAG,EAC3BC,GAAc,IACdC,GAAU,CAAC,CAAE,MAAAR,EAAO,OAAAE,CAAO,IAAMF,IAAU,QAAUE,IAAW,UACpE,SAASO,GAAcC,EAAW,CAChC,IAAMC,EAAyB,IAAI,IACnC,QAAW,KAAKD,EACVF,GAAQ,CAAC,GACXG,EAAO,IAAI,EAAE,QAASA,EAAO,IAAI,EAAE,MAAM,GAAK,GAAK,CAAC,EAGxD,IAAMC,EAAuB,IAAI,IACjC,OAAOF,EAAU,IAAK,GAAM,CAC1B,IAAMG,EAAIL,GAAQ,CAAC,EAAIG,EAAO,IAAI,EAAE,MAAM,EAAI,EAC9C,GAAIE,EAAI,EACN,OAAO,EAET,IAAMC,EAAIF,EAAK,IAAI,EAAE,MAAM,GAAK,EAChCA,EAAK,IAAI,EAAE,OAAQE,EAAI,CAAC,EACxB,IAAMC,EAAOR,GAAc,EAC3B,MAAO,CACL,GAAG,EACH,QAAS,CACPO,EAAID,GAAKC,EAAI,EAAIC,EAAO,IACvBD,EAAI,GAAKD,GAAKC,EAAID,EAAI,EAAIE,EAAO,EACpC,CACF,CACF,CAAC,CACH,CACA,IAAIC,GAAQ,CAAC,CAAE,QAAAC,CAAQ,EAAGC,IAAMD,EAAUA,EAAQ,CAAC,GAAKA,EAAQ,CAAC,EAAIA,EAAQ,CAAC,GAAKC,EAAIA,EACnFC,GAAYC,GAAMA,GAAK,OAAUA,EAAI,QAAUA,EAAI,MAAS,QAAU,IACtEC,GAAWD,GAAMA,GAAK,SAAWA,EAAI,MAAQ,MAAQA,IAAM,EAAI,KAAO,KAC1E,SAASE,GAAMC,EAAK,CAClB,GAAM,CAACC,EAAGC,EAAGC,CAAC,EAAI,CAAC,EAAG,EAAG,CAAC,EAAE,IACzBC,GAAMR,GAAS,OAAO,SAASI,EAAI,MAAMI,EAAGA,EAAI,CAAC,EAAG,EAAE,EAAI,GAAG,CAChE,EACMC,EAAI,KAAK,KAAK,YAAeJ,EAAI,YAAeC,EAAI,YAAeC,CAAC,EACpEG,EAAI,KAAK,KAAK,YAAeL,EAAI,YAAeC,EAAI,YAAeC,CAAC,EACpElC,EAAI,KAAK,KAAK,YAAegC,EAAI,YAAeC,EAAI,YAAeC,CAAC,EAC1E,MAAO,CACL,YAAeE,EAAI,WAAcC,EAAI,YAAerC,EACpD,aAAeoC,EAAI,YAAcC,EAAI,YAAerC,EACpD,YAAeoC,EAAI,YAAeC,EAAI,WAAcrC,CACtD,CACF,CACA,SAASsC,GAAW,CAACC,EAAGC,EAAGN,CAAC,EAAG,CAC7B,IAAME,GAAKG,EAAI,YAAeC,EAAI,YAAeN,IAAM,EACjDG,GAAKE,EAAI,YAAeC,EAAI,YAAeN,IAAM,EACjDlC,GAAKuC,EAAI,YAAeC,EAAI,YAAcN,IAAM,EACtD,MAAO,CACL,aAAeE,EAAI,aAAeC,EAAI,YAAerC,EACrD,cAAgBoC,EAAI,aAAeC,EAAI,YAAerC,EACtD,aAAgBoC,EAAI,YAAeC,EAAI,YAAcrC,CACvD,EAAE,IAAK4B,GAAMC,GAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGD,CAAC,CAAC,CAAC,EAAI,GAAG,CACzD,CACA,IAAIa,GAA4B,IAAI,IACpC,SAASC,GAAUhC,EAAQ,CACzB,GAAI,CAAC+B,GAAU,IAAI/B,CAAM,EAAG,CAC1B,IAAMD,EAASf,GAAa,KAAMM,GAAMA,EAAE,QAAUU,CAAM,EAC1D+B,GAAU,IACR/B,EACAD,GAAU,SAAUA,EAASA,EAAO,KAAK,IAAIqB,EAAK,EAAI,MACxD,CACF,CACA,OAAOW,GAAU,IAAI/B,CAAM,CAC7B,CACA,SAASiC,GAAUjC,EAAQgB,EAAGkB,EAAU,EAAG,CACzC,IAAMC,EAAI,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGnB,CAAC,CAAC,EAC9BoB,EAAOJ,GAAUhC,CAAM,EAC7B,GAAI,CAACoC,EACH,OAAOC,GACLC,GAAUH,CAAC,EACXI,GACAC,EACF,EAAE,IAAKtB,GAAMA,EAAI,GAAG,EAEtB,GAAM,CAACuB,EAAMC,CAAE,EAAIN,EACbO,EAAQF,EAAK,CAAC,EACdG,EAAOF,EAAG,CAAC,EACXG,EAAQD,EAAOV,GAAWS,EAAQT,GAAWS,EAAQT,IAAYS,EAAQC,GAAQ,EACvF,OAAOhB,GAAWa,EAAK,IAAI,CAACtD,EAAGsC,IAAMtC,GAAKuD,EAAGjB,CAAC,EAAItC,GAAKgD,EAAIU,CAAK,CAAC,CACnE,CACA,SAASC,GAAU9C,EAAQgB,EAAGkB,EAAS,CACrC,GAAM,CAACZ,EAAGC,EAAGC,CAAC,EAAIS,GAAUjC,EAAQgB,EAAGkB,CAAO,EAAE,IAAI,KAAK,KAAK,EAC9D,MAAO,OAAOZ,CAAC,KAAKC,CAAC,KAAKC,CAAC,GAC7B,CACA,SAASuB,GAAY/C,EAAQgB,EAAGkB,EAAS,CACvC,GAAM,CAACZ,EAAGC,EAAGC,CAAC,EAAIS,GAAUjC,EAAQgB,EAAGkB,CAAO,EAAE,IAAI,KAAK,KAAK,EAC9D,OAAOc,EAAS1B,EAAGC,EAAGC,EAAG,GAAG,CAC9B,CACA,SAASyB,GAAaC,EAAUlC,EAAG,CACjC,GAAM,CAAE,MAAAlB,EAAO,OAAAE,EAAQ,QAAAkC,EAAS,MAAAiB,EAAQ/C,EAAO,EAAI8C,EACnD,OAAOpD,IAAU,OAASiD,GAAY/C,EAAQmD,CAAK,EAAInC,IAAM,OAASoC,GAAiBL,GAAY/C,EAAQc,GAAMoC,EAAUlC,CAAC,EAAGkB,CAAO,CACxI,CACA,IAAIkB,GAAiBC,GACrB,SAASC,GAAcJ,EAAU,CAC/B,GAAM,CAAE,MAAApD,EAAO,OAAAE,EAAQ,QAAAkC,EAAS,MAAAiB,EAAQ/C,EAAO,EAAI8C,EAC7CK,EAAO,CAACC,EAAQxC,KAAO,CAC3B,OAAAwC,EACA,MAAOV,GAAU9C,EAAQgB,EAAGkB,CAAO,EACnC,KAAMa,GAAY/C,EAAQgB,EAAGkB,CAAO,CACtC,GACA,OAAOpC,IAAU,OAAS,CAACyD,EAAK,EAAGJ,CAAK,CAAC,EAAI,MAAM,KAAK,CAAE,OAAQ,CAAE,EAAG,CAACM,EAAGhC,IAAM8B,EAAK9B,EAAI,EAAGX,GAAMoC,EAAUzB,EAAI,CAAC,CAAC,CAAC,CACtH",
|
|
6
|
+
"names": ["THREAD_PX", "THREAD_GAP_PX", "SLOT_GAP_PX", "LANE_SMOOTHING_PX", "THREAD_REACH_PX", "THREAD_TAPER_PX", "MAX_BAND_PX", "PASSES_KEY", "threadsPasses", "walks", "w", "threadsWidth", "threads", "sum", "values", "a", "b", "slotLayout", "spans", "mostPasses", "laneWidth", "widths", "m", "i", "seen", "gaps", "share", "gap", "THREAD_PITCH_PX", "slotCentres", "held", "band", "at", "width", "slack", "centre", "bandWidthPx", "bandScale", "passesKey", "laneSlideAt", "start", "end", "along", "vector", "normal", "offsetX2", "dx", "dy", "slideAt", "offsetX", "gapOf", "arcOf", "run", "s", "laneRuns", "routes", "nodePositions", "yToX", "jump", "owns", "route", "id", "runs", "owned", "mine", "breakRun", "r", "step", "segments", "first", "last", "prev", "next", "toNext", "p", "forward", "middle", "k", "index", "ownedWindows", "margin", "windows", "j", "floor", "lo", "hi", "smoothedNormals", "reach", "pointAt", "span", "f", "_", "back", "ahead", "len", "cutCurls", "close", "length", "out", "picks", "to", "j2", "q", "rounded", "half", "n", "sumW", "sumX", "sumY", "from", "fieldSetter", "field", "value", "own", "laneLines", "lanes", "smooth", "turn", "curl", "normals", "shifts", "setNormal", "setShift", "pieces", "points", "line", "agree", "piece", "theirs", "sign", "windowed", "v", "deque", "head", "windowMean", "counted", "weight", "sumWV", "ONE_THREAD", "repeats", "passes", "walkThreads", "ids", "visits", "steps", "stepVisits", "stepWants", "nodes", "mid", "most", "copy", "before", "after", "wants", "nearest", "taken", "threadOf", "free", "want", "d", "c", "t", "nodeThreads", "threadPasses", "passOf", "thread", "visit", "linkThreads", "pair", "list", "bandSpans", "taper", "mids", "eased", "raw", "e", "liftLanes", "worldPerScreenPx", "threaded", "lines", "furthestShift", "shift", "packAbgr", "r", "g", "b", "a", "abgrRed", "c", "abgrGreen", "abgrBlue", "abgrAlpha", "abgrToCssRgba", "normalizedRgbToCssRgba", "alpha", "fadeAbgr", "brightenAbgr", "factor", "t", "lift", "v", "REFERENCE_RAMP_MAX_HUE", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "rampHueCss", "hue", "rampHueAt", "frac", "rampHue", "bp", "domain", "HUE_STOP_DEG", "rampStops", "start", "reversed", "low", "high", "n", "_", "RAMP_GRADIENT_STOPS", "i", "RAMP_GRADIENT_CSS", "s", "cache", "weakMemo", "baseEdgeCurves", "nodePositions", "graph", "axis", "deletions", "version", "routes", "stranded", "curves", "ei", "bypassed", "edgeCurves", "edgeCurvesOf", "MAX_BACKBONE_HOPS", "buildNeighbors", "graph", "neighbors", "edge", "pushTo", "flankingSpan", "nodeId", "nodeById", "seen", "frontier", "minEnd", "maxStart", "hop", "next", "id", "adjacent", "neighborId", "neighbor", "isBackbone", "nodeReferenceSpan", "node", "referenceMidpoints", "midpoints", "span", "EDGE_DEFAULT_COLOR", "packAbgr", "EDGE_PATH_FALLBACK_COLOR", "EDGE_DELETION_COLOR", "DELETION_THICKNESS_FACTOR", "LIFT_BACKDROP_COLOR", "FADED_ALPHA", "LIFT_BACKDROP_CSS", "abgrToCssRgba", "fadeAbgr", "DELETION_DASH_PX", "MIN_PATH_STRIPE_PX", "MIN_SCALE_FOR_OFFSET", "ARROW_LENGTH_BASE_PX", "ARROW_LENGTH_PER_EDGE_PX", "ARROW_HALF_WIDTH_BASE_PX", "ARROW_HALF_WIDTH_PER_EDGE_PX", "MIN_LINK_HEADS", "MIN_ARROW_FIT", "MIN_ARROW_SCALE", "ARROW_CURVE_STEPS", "ABUTTING_PX", "walkX", "walkY", "walkPx", "backFromEnd", "curves", "scale", "yToX", "untilPx", "most", "last", "n", "px", "ci", "c", "k", "t", "a", "b", "d", "e", "x", "y", "walkPointAt", "i", "from", "to", "f", "arrowheadFor", "edgeHalfWidth", "nodeHalfWidth", "color", "fromSegments", "toSegments", "length", "lengthPx", "abutting", "inset", "fit", "polylinePx", "tip", "base", "dx", "dy", "endTangent", "intoDirection", "FIRST_THREADS", "ONE_PASS", "NO_SHIFT", "nearerStart", "at", "segments", "gap", "p", "leavesStart", "edge", "first", "stranded", "strandSides", "final", "normal", "len", "MITRE_LIMIT", "LONGEST_NORMAL", "pointNormalsOf", "rawPoints", "points", "before", "after", "nx", "ny", "dot", "offsetPolyline", "normals", "distance", "out", "hslToRgb", "h", "s", "l", "m", "r", "g", "packHsl", "DEPTH_GRADIENT", "STABLE_RANK_GRADIENT", "NODE_LENGTH_GRADIENT", "sampleGradient", "stops", "pos", "hashColor", "str", "alpha", "nameHue", "PATH_SATURATION", "PATH_LIGHTNESS", "REFERENCE_RAMP_ALT_RGB", "REFERENCE_RAMP_ALT_COLOR", "REFERENCE_RAMP_ALT_CSS", "rampFraction", "node", "ramp", "mid", "isBackbone", "computeReferenceRamp", "graph", "domain", "midpoints", "referenceMidpoints", "min", "max", "computeColorSchemeRange", "referenceRamp", "minDepth", "maxDepth", "minLength", "maxLength", "maxRank", "getNodeColor", "nodeIndex", "colorScheme", "range", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "hue", "into", "candidates", "isPolylineInBounds", "bounds", "hit", "isBezierInBounds", "growX", "growY", "cMinX", "cMaxX", "cMinY", "cMaxY", "paletteCache", "pathPaletteOf", "palette", "pathColorByIndex", "pathIndexByName", "paths", "pathHueAt", "slotsCache", "NO_SLOTS", "pathSlotsOf", "slots", "pathIdx", "path", "nodeId", "pushTo", "lanesCache", "weakMemo", "linksCache", "linksOf", "links", "buildGeometry", "options", "nodePositions", "nodeById", "contigThickness", "connectorThickness", "drawPaths", "nodeWidth", "edgeWidth", "highlight", "axis", "linearLayout", "viewportBounds", "deletions", "deletionRoutes", "hiddenEdges", "version", "depthNorm", "meanDepth", "busiest", "busiestEdge", "worldPerScreenPx", "yToXOf", "sharedCurves", "baseEdgeCurves", "nodeStrokes", "nodeStrokeRuns", "arrows", "arrowRuns", "edgeCurves", "edgeCurveRuns", "colorRange", "nodeIndexMap", "pathCount", "pathColorByName", "name", "nodePathSlots", "liftedWalks", "threaded", "threadsPasses", "lanePasses", "w", "thinned", "bandScale", "fields", "liftLanes", "lines", "threads", "spanField", "plainCentres", "slotCentres", "centresByNode", "centresOf", "centres", "spans", "laneOffset", "laneWidth", "lane", "pass", "THREAD_PITCH_PX", "laneHalfWidth", "THREAD_PX", "laneNormals", "laneNormalsOf", "smoothed", "laneWidths", "laneWidthOf", "id", "width", "walkLaneWidthPx", "nodeWidthPx", "laneShiftOf", "index", "laneEndOf", "atStart", "lanesMayShow", "fromId", "offset", "bandWidthPx", "reach", "threadPairs", "own", "ahead", "back", "turned", "threadColor", "thread", "lanePointsOf", "showArrows", "ei", "baseCurves", "numPaths", "isDeletion", "onWalk", "ribbonThickness", "edgeThickness", "edgeWidthFactor", "ribbons", "plainEdgeColor", "edgeColor", "toNode", "intoHalfWidth", "inView", "dashesOf", "dashSpans", "stroke", "thickness", "dash", "laneStroke", "walk", "normal2", "offsetX", "endNormal", "endOffsetX", "start", "end", "laneSlideAt", "arrowOn", "head", "edgeCurveStart", "arrowStart", "laneWalks", "single", "toPass", "slideCurves", "translateCurves", "offsets", "pathRibbonOffsets", "arrowRibbon", "ribbonColor", "edgeCurveCount", "arrowCount", "faded", "nodeThickness", "slotWidth", "drawable", "lanes", "laneColor", "onThreads", "color2", "slot", "stripe", "count", "WALK_FIELDS", "WALK_SCHEMES", "FAMILIES", "isField", "v", "f", "isScheme", "s", "resolveEncoding", "layer", "reference", "picked", "alone", "askedField", "askedScheme", "field", "family", "scheme", "round", "SHADES", "TOGETHER_DARKEST", "BASE_T", "STRETCH_GAP", "rampsOn", "splitFamilies", "encodings", "counts", "seen", "k", "j", "half", "along", "stretch", "t", "toLinear", "c", "toGamma", "oklab", "hex", "r", "g", "b", "i", "l", "m", "oklabToRgb", "L", "a", "endsCache", "oklabEnds", "schemeRgb", "darkest", "x", "ends", "hslToRgb", "rampHueAt", "REFERENCE_RAMP_SATURATION", "REFERENCE_RAMP_LIGHTNESS", "from", "to", "light", "dark", "reach", "schemeCss", "schemeColor", "packAbgr", "encodedColor", "encoding", "shade", "NO_VALUE_COLOR", "REFERENCE_RAMP_ALT_COLOR", "encodingStops", "stop", "offset", "_"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
var tt;function ut(){return tt??(tt=import("./bandage-layout-UZEOCKMS.js").then(o=>o.default()).catch(o=>{throw tt=void 0,o})),tt}async function dt(o){return(await ut()).computeLayout(o.graph,o.options)}var Bt="\0deletion:";var kt=25*Math.PI/180,Pt=.25,St=150,nn=[0,-.35,.35,-.7,.7,-1.05,1.05,-1.4,1.4],pt=[0,1];function _t(o){return o?0:1}function lt(o,t){let n=t.x-o.x,e=t.y-o.y,s=Math.hypot(n,e)||1;return{x:n/s,y:e/s}}function gt(o,t,n){return{x:o.x+(t.x-o.x)*n,y:o.y+(t.y-o.y)*n}}function Ut(o){let t=0,n=0;for(let e of o)t+=e.x,n+=e.y;return{x:t/o.length,y:n/o.length}}function Gt(o){let t=new Float64Array(o.length);for(let n=1;n<o.length;n++)t[n]=t[n-1]+Math.hypot(o[n].x-o[n-1].x,o[n].y-o[n-1].y);return t}function Dt(o){var t;return(t=Gt(o)[o.length-1])!==null&&t!==void 0?t:0}var ct=new Map;function en(o){let t=ct.get(o);if(t!==void 0)return t;let n=on(o);return ct.size>1e4&&ct.clear(),ct.set(o,n),n}function on(o){let t=1e-6,n=2*Math.PI-1e-6;for(let e=0;e<60;e++){let s=(t+n)/2;s/(2*Math.sin(s/2))<o?t=s:n=s}return(t+n)/2}function sn(o,t){if(o<1e-9)return Math.PI*t;let n=(o*o/4+t*t)/(2*t),e=2*Math.asin(Math.min(1,o/(2*n)));return n*(t>n?2*Math.PI-e:e)}function mt(o,t,n,e){let s=t-2*n,i=o<1e-9?2*Math.PI:en(s/o),r=s/i,l=Math.cos(i/2),d=o/2,a=e+n-r*l;return{at:c=>{if(c<=n)return{u:0,v:e+c};if(c>=t-n)return{u:o,v:e+t-c};let h=(c-n)/r-i/2;return{u:d+r*Math.sin(h),v:a+r*Math.cos(h)}},apex:e+n+r*(1-l),length:t}}function It(o,t,n){if(!n)return o;let e=Math.cos(n),s=Math.sin(n);return{...o,at:i=>{let{u:r,v:l}=o.at(i),d=r-t/2;return{u:t/2+d*e-l*s,v:d*s+l*e}}}}function rn(o){for(let t=0;t<=32;t++)if(o.at(o.length*t/32).v<-1e-6)return!0;return!1}function Ot(o,t,n,e,s){return{at:i=>({u:o+n*i,v:t+e*i}),apex:t+Math.max(0,e)*s,length:s}}var ot=class{constructor(t,n,e=!1){var s;this.pts=t,this.normals=n,this.straight=e,this.arc=Gt(t),this.total=(s=this.arc[t.length-1])!==null&&s!==void 0?s:0}segment(t){let{arc:n}=this,e=1,s=n.length-1;for(;e<s;){let i=e+s>>1;n[i]<t?e=i+1:s=i}return e}fraction(t,n){let e=this.arc[t]-this.arc[t-1];return e>0?(n-this.arc[t-1])/e:0}pointAt(t){let{pts:n}=this,e=n.length-1;if(e===0)return{...n[0]};if(t<=0){let i=lt(n[0],n[1]);return{x:n[0].x+i.x*t,y:n[0].y+i.y*t}}if(t>=this.total){let i=lt(n[e-1],n[e]),r=t-this.total;return{x:n[e].x+i.x*r,y:n[e].y+i.y*r}}let s=this.segment(t);return gt(n[s-1],n[s],this.fraction(s,t))}normalAt(t){let{normals:n}=this;if(n.length===1||t<=0)return n[0];if(t>=this.total)return n[n.length-1];let e=this.segment(t),{x:s,y:i}=gt(n[e-1],n[e],this.fraction(e,t)),r=Math.hypot(s,i)||1;return{x:s/r,y:i/r}}};function cn(o,t){let n=Ut(o);return o.map((e,s)=>{let i=lt(o[Math.max(0,s-1)],o[Math.min(o.length-1,s+1)]),r={x:-i.y,y:i.x},l=e.x-n.x,d=e.y-n.y,a=Math.hypot(l,d),c=r.x*l+r.y*d,h=t[s],f=a>1e-9&&Math.abs(c)>.3*a?Math.sign(c):Math.sign(r.x*h.x+r.y*h.y)||1;return{x:r.x*f,y:r.y*f}})}function xt(o,t,n,e,s){let i=Math.min(s,Math.max(e.length/24,.5)),r=[],l=[];for(let d=0;d<=e.length+1e-9;d+=i){let{u:a,v:c}=e.at(Math.min(d,e.length)),h=o.pointAt(t+a),f=o.normalAt(t+a),u=f.x*n,g=f.y*n;r.push({x:h.x+u*c,y:h.y+g*c}),l.push({x:u,y:g})}return{pts:r,refs:l}}var Tt=5,an=10.5/2;function yt(o,t,n,e,s,i){let r=s,l=xt(o,t,n,e(r),i);if(o.straight)return l;for(let d=0;d<6;d++){let a=Dt(l.pts);if(!(a>0)||Math.abs(a/s-1)<.001)break;r*=s/a,l=xt(o,t,n,e(r),i)}return l}function at(o,t){return Array.from({length:t},(n,e)=>o+e*15/2)}function Ft(o){if(o.length===0)return 1/0;let t=1/0,n=-1/0;for(let e of o)t=Math.min(t,e.point.x),n=Math.max(n,e.point.x);return n-t}function Rt(o,t){return o*73856093^t*19349663}var ht=class{constructor(t){this.c=t,this.grid=new Map;let{ids:n,first:e,count:s,per:i,seedX:r,seedY:l,backbone:d}=t,a=n.length;this.points=Array.from({length:a},()=>{}),this.params=Array.from({length:a},()=>{}),this.curves=Array.from({length:a},()=>{}),this.links=t.links.map((f,u)=>f.map(g=>g.filter(([M])=>M!==u))),this.route=n.map(f=>f.startsWith(Bt));let c=1/0,h=-1/0;for(let f=0;f<a;f++){let u=e[f];!d[u]||Number.isNaN(r[u])||(c=Math.min(c,r[u]),h=Math.max(h,r[u]+i[f]*(s[f]-1)))}this.backbone=new ot([{x:c,y:0},{x:h,y:0}],[{x:0,y:1},{x:0,y:1}],!0),this.backboneCentroid={x:(c+h)/2,y:0};for(let f=0;f<a;f++){let u=e[f];if(!d[u]||Number.isNaN(r[u]))continue;let g=[],M=[];for(let b=0;b<s[f];b++){let D=r[u]+b*i[f];g.push({x:D,y:l[u]}),M.push(D-c)}this.points[f]=g,this.params[f]=M,this.curves[f]=this.backbone,this.occupy(g,this.backbone)}}static hasBackbone(t){for(let n=0;n<t.ids.length;n++){let e=t.first[n];if(t.backbone[e]&&!Number.isNaN(t.seedX[e]))return!0}return!1}run(){let t=[];for(let e=0;e<this.points.length;e++)this.points[e]||t.push(e);let n=this.componentsOf(t).map(e=>({members:e,anchors:this.anchorsOf(e)})).filter(e=>e.anchors.length).map(e=>({members:e.members,span:Ft(e.anchors),drawn:e.members.reduce((s,i)=>s+this.drawn(i),0),feet:e.anchors.map(s=>`${s.point.x},${s.point.y}`).sort().join(" ")})).sort((e,s)=>e.span-s.span||(e.feet===s.feet?s.drawn-e.drawn:e.drawn-s.drawn));for(let e of n)this.placePiece(e.members,this.backboneCentroid)}write(t,n){let{first:e}=this.c;this.points.forEach((s,i)=>{s?.forEach((r,l)=>{t[e[i]+l]=r.x,n[e[i]+l]=r.y})})}drawn(t){return this.c.per[t]*(this.c.count[t]-1)}endIndex(t,n){return n?this.c.count[t]-1:0}occupy(t,n){for(let e of t){let s=Rt(Math.floor(e.x/10.5),Math.floor(e.y/10.5)),i=this.grid.get(s),r={x:e.x,y:e.y,curve:n};i?i.push(r):this.grid.set(s,[r])}}violations(t,n,e,s){var i;let r=0;for(let l of t){if(e.some(c=>Math.hypot(l.x-c.x,l.y-c.y)<15))continue;let d=Math.floor(l.x/10.5),a=Math.floor(l.y/10.5);for(let c=d-1;c<=d+1;c++)for(let h=a-1;h<=a+1;h++)for(let f of(i=this.grid.get(Rt(c,h)))!==null&&i!==void 0?i:[])if(f.curve!==n&&Math.hypot(l.x-f.x,l.y-f.y)<10.5&&(r++,r>=s))return r}return r}choose(t,n,e){let s,i=1/0;for(let r of t){let l=this.violations(r(an).pts,n,e,i);if(l===0)return r(Tt);l<i&&(i=l,s=r)}return s(Tt)}anchorsOf(t){let n=new Set(t),e=[];for(let s of t)for(let i of pt)for(let[r,l]of this.links[s][i]){let d=this.points[r];if(n.has(r)||!d)continue;let a=this.endIndex(r,l);e.push({u:s,uSide:i,v:r,vSide:l,point:d[a],curve:this.curves[r],t:this.params[r][a]})}return e}componentsOf(t){let n=new Set(t),e=new Set,s=[];for(let i of t){if(e.has(i))continue;let r=[i];e.add(i);for(let l of r)for(let d of pt)for(let[a]of this.links[l][d])n.has(a)&&!e.has(a)&&(e.add(a),r.push(a));s.push(r)}return s}spinePath(t,n,e,s,i){let r=new Set(t),l=(u,g)=>u*2+g,d=(u,g)=>u===s&&_t(g)===i,a=new Map([[l(n,e),-1]]),c=[[n,e]],h=[n,e];for(let[u,g]of c){if(h=[u,g],s!==void 0&&d(u,g))break;for(let[M,b]of this.links[u][_t(g)])!r.has(M)||a.has(l(M,b))||(a.set(l(M,b),l(u,g)),c.push([M,b]))}if(s!==void 0&&!d(h[0],h[1]))return;let f=[];for(let u=l(h[0],h[1]);u!==-1;u=a.get(u))f.push({k:u>>1,enter:u&1});return f.reverse()}loosePath(t,n,e){let s=new Set(t),i=new Map([[n,-1]]),r=new Map([[n,0]]),l=[n];for(let a of l){if(a===e)break;for(let c of pt)for(let[h,f]of this.links[a][c])!s.has(h)||i.has(h)||(i.set(h,a),r.set(h,f),l.push(h))}let d=[];for(let a=e;a!==-1;a=i.get(a))d.push({k:a,enter:r.get(a)});return d.reverse()}spineLength(t){let{link:n}=this.c;return t.reduce((e,{k:s})=>e+this.drawn(s)+n,n)}layAlong(t,n,e,s){let{count:i,per:r,link:l}=this.c,d=e,a=[];for(let{k:c,enter:h}of t){let f=s??r[c],u=[],g=[];for(let M=0;M<i[c];M++)u.push(n.pointAt(d+M*f)),g.push(d+M*f);h===1&&(u.reverse(),g.reverse()),this.points[c]=u,this.params[c]=g,this.curves[c]=n,a.push(...u),d+=f*(i[c]-1)+l}return a}arcCandidates(t,n,e,s,i){let r=(i-s)/2-1e-6,l=i>2*s?nn:[0],d=[];for(let a of at(0,8))for(let c of l)for(let h=0;h<=16;h++){let f=r*h/16,u=It(mt(s,i,f,a),s,c);h<16&&u.apex<12||rn(u)||d.push(g=>yt(t,n,e,M=>It(mt(s,M,Math.min(f,(M-s)/2-1e-6),a),s,c),i,g))}return d}placePiece(t,n){var e;let{count:s,link:i}=this.c,r=this.anchorsOf(t);if(r.length===0)return;let l=t.every(x=>this.route[x]),d=r.every(x=>x.curve===r[0].curve)?r[0].curve:void 0,a,c,h,f;if(d)r.sort((x,F)=>x.t-F.t),a=d,c=r[0].t,h=r[r.length-1].t,f=a===this.backbone&&l?-1:1;else{r.sort((W,Q)=>W.point.x-Q.point.x||W.point.y-Q.point.y);let x=r[0].point,F=r[r.length-1].point,V=Math.hypot(F.x-x.x,F.y-x.y),B=V>1e-9?lt(x,F):{x:1,y:0},U={x:-B.y,y:B.x},C=gt(x,F,.5);f=r.some(W=>W.curve===this.backbone)?(l?-1:1)*(Math.sign(U.y)||1):(C.x-n.x)*U.x+(C.y-n.y)*U.y>=0?1:-1,a=new ot([x,F],[U,U],!0),c=0,h=V}let u=r[0],g=r[r.length-1],M=h-c,b=r.length===1||u.u===g.u&&u.uSide===g.uSide&&M<1e-9,D=[u.point,g.point],v=x=>this.choose(x,d,D),A,y,L=i,w;if(b){A=this.spinePath(t,u.u,u.uSide);let x=this.spineLength(A),F=u.vSide?Math.max(0,s[u.v]-2):Math.min(1,s[u.v]-1),B=(u.t>=this.params[u.v][F]?1:-1)*Math.cos(kt),U=Math.sin(kt);y=v(at(0,12).map(C=>W=>yt(a,c,f,Q=>Ot(0,C,B,U,Q),x,W)))}else{A=(e=this.spinePath(t,u.u,u.uSide,g.u,g.uSide))!==null&&e!==void 0?e:this.loosePath(t,u.u,g.u);let x=this.spineLength(A);if(l){let F=Math.max(12,Math.min(Pt*M,St));y=v(at(F,12).map(B=>U=>xt(a,c,f,mt(M,sn(M,B),0,0),U)));let V=Dt(y.pts);w=Math.max(.001,(V-2*i)/(s[A[0].k]-1))}else if(x>M+1e-6)y=v(this.arcCandidates(a,c,f,M,x));else{let F=x-2*i,V=Math.max(12,Math.min(Pt*(M-F),St));y=v(at(V,12).map(B=>U=>yt(a,c,f,C=>Ot(M/2-C/2,B,1,0,C),F,U))),L=0}}let E=new ot(y.pts,cn(y.pts,y.refs)),O=this.layAlong(A,E,L,w);this.occupy(O,E);let _=Ut(O),R=t.filter(x=>!this.points[x]),T=this.componentsOf(R).map(x=>({members:x,span:Ft(this.anchorsOf(x))})).sort((x,F)=>x.span-F.span);for(let x of T)this.placePiece(x.members,_)}};function Mt(o){let t=new Float64Array(o.n).fill(NaN),n=new Float64Array(o.n).fill(NaN);if(ht.hasBackbone(o)){let e=new ht(o);e.run(),e.write(t,n)}return{X:t,Y:n}}var ln=[{walks:2,iterations:15},{walks:4,iterations:30},{walks:8,iterations:60},{walks:12,iterations:90},{walks:16,iterations:120}],hn=20,fn=3,wt=.3,un=2,dn=200,pn=.1,mn=.5,yn=o=>{var t;return((t=o.stable)===null||t===void 0?void 0:t.rank)===0};function Ct(o,t){let n=t.at(-1);return(o==="+"||o==="-")&&(n==="+"||n==="-")&&o!==n}function gn(o){let t=Math.imul(o,2654435761)>>>0||1;return()=>(t^=t<<13,t>>>=0,t^=t>>>17,t^=t<<5,t>>>=0,t/4294967296)}function z(o,t){return typeof o=="number"&&Number.isFinite(o)?o:t}function At(o,t){return Math.max(z(o.nodeLengthPerMegabase,1e3)*t/1e6,z(o.minimumNodeLength,1))}function Ht(o){let{nodes:t,edges:n}=o.graph,e=o.options,s=z(e.nodeSegmentLength,1),i=z(e.edgeLength,1),r=t.map(w=>w.id),l=new Int32Array(t.length),d=new Int32Array(t.length),a=new Float64Array(t.length),c=0;t.forEach((w,E)=>{let O=At(e,w.length),_=Math.max(1,Math.ceil(O/s));l[E]=c,d[E]=_+1,a[E]=O/_,c+=_+1});let h=new Int32Array(c),f=new Int32Array(c),u=new Float64Array(c).fill(NaN),g=new Float64Array(c).fill(NaN),M=new Uint8Array(c),b=Array.from({length:c},()=>[]);t.forEach((w,E)=>{let O=typeof w.x=="number"&&typeof w.y=="number",_=yn(w)?1:0;for(let R=0;R<d[E];R++){let T=l[E]+R;h[T]=E,f[T]=R,M[T]=_,O&&(u[T]=w.x+R*a[E],g[T]=w.y),R>0&&(b[T-1].push([T,a[E]]),b[T].push([T-1,a[E]]))}});let D=new Map(r.map((w,E)=>[w,E])),v=t.map(()=>[[],[]]);for(let w of n){let E=D.get(w.from),O=D.get(w.to);if(E===void 0||O===void 0||E===O&&d[E]<=2)continue;let _=Ct(w.fromStrand,w.from)?0:1,R=Ct(w.toStrand,w.to)?1:0,T=l[E]+(_?d[E]-1:0),x=l[O]+(R?d[O]-1:0);b[T].push([x,i]),b[x].push([T,i]),v[E][_].push([O,R]),v[O][R].push([E,_])}let A=new Int32Array(c+1);for(let w=0;w<c;w++)A[w+1]=A[w]+b[w].length;let y=new Int32Array(A[c]),L=new Float64Array(A[c]);for(let w=0;w<c;w++)b[w].forEach(([E,O],_)=>{y[A[w]+_]=E,L[A[w]+_]=O});return{ids:r,first:l,count:d,per:a,links:v,chainOf:h,indexOf:f,seedX:u,seedY:g,backbone:M,off:A,nb:y,wt:L,n:c,link:i}}function xn(o){let{n:t,off:n,nb:e}=o,s=new Int32Array(t).fill(-1),i=[];for(let r=0;r<t;r++){if(s[r]>=0)continue;let l=[r];s[r]=i.length;for(let d of l)for(let a=n[d];a<n[d+1];a++){let c=e[a];s[c]<0&&(s[c]=i.length,l.push(c))}i.push(l)}return{comp:s,members:i}}function Nt(o,t={}){var n,e,s;let i=Ht(o),{n:r,off:l,nb:d,wt:a,seedX:c,seedY:h,first:f,count:u,per:g,link:M}=i,b=o.options,D=ln[Math.max(0,Math.min(4,z((n=t.quality)!==null&&n!==void 0?n:b.quality,2)))],v=z((e=t.componentSeparation)!==null&&e!==void 0?e:b.componentSeparation,15),A=gn(z((s=t.seed)!==null&&s!==void 0?s:b.seed,1)),y=new Float64Array(r),L=new Float64Array(r),w={};if(r===0)return{nodePositions:w};let{comp:E,members:O}=xn(i),_=1/0,R=0;for(let p=0;p<d.length;p++)_=Math.min(_,a[p]),R+=a[p];R/=2;let T=!1;for(let p=0;p<r;p++)if(!Number.isNaN(c[p])){T=!0;break}let x=T?Mt(i):void 0,F=Math.sqrt(r)*20;for(let p=0;p<r;p++)x&&!Number.isNaN(x.X[p])?(y[p]=x.X[p],L[p]=x.Y[p]):T&&!Number.isNaN(c[p])?(y[p]=c[p]+A()-.5,L[p]=h[p]+A()-.5):(y[p]=A()*F,L[p]=A()*F);let V=O.map(p=>x!==void 0&&p.every(N=>!Number.isNaN(x.X[N]))),B=[],U=!0;for(let p=0;p<r;p++)V[E[p]]||(B.push(p),U&&(U=!Number.isNaN(c[p])));let C=Math.max(R/4,_*10),W=C*C,Q=pn*_*_,{walks:Jt,iterations:rt}=D,Qt=Math.log(W/Q)/Math.max(1,rt-1),bt=Math.log(_),Zt=Math.log(C),Lt=(p,N,m,k)=>{let S=k/(m*m);S>1&&(S=1);let P=y[p]-y[N],I=L[p]-L[N],q=Math.sqrt(P*P+I*I)||1e-9,G=S*(q-m)/(2*q),j=G*P,H=G*I;y[p]=y[p]-j,L[p]=L[p]-H,y[N]=y[N]+j,L[N]=L[N]+H},et=0,Yt=(p,N)=>{let m=i.chainOf[p],k=i.indexOf[p],S=A()<.5?-1:1,P=N;for(let I=0;I<dn;I++){let q=u[m],G=g[m],j=(S>0?q-1-k:k)*G;if(P<=j){let J=Math.round(P/G);return et=N-P+J*G,f[m]+k+S*J}P-=j;let H=i.links[m][S>0?1:0];if(H.length===0)return et=N-P,f[m]+(S>0?q-1:0);let[Y,$]=H[Math.floor(A()*H.length)];if(P-=M,m=Y,S=$===0?1:-1,k=$===0?0:u[Y]-1,P<=0)return et=N-P,f[m]+k}return-1},Et=(p,N)=>{for(let m=l[p];m<l[p+1];m++){let k=d[m];k>p&&Lt(p,k,a[m],N)}},Z=Int32Array.from(B),Xt=U?Math.floor(mn*rt):0;for(let p=B.length?Xt:rt;p<rt;p++){let N=W*Math.exp(-Qt*p);for(let m=Z.length-1;m>0;m--){let k=Math.floor(A()*(m+1)),S=Z[m];Z[m]=Z[k],Z[k]=S}for(let m of Z){Et(m,N);for(let k=0;k<Jt;k++){let S=Math.exp(bt+A()*(Zt-bt)),P=Yt(m,S);P>=0&&P!==m&&et>0&&Lt(m,P,et,N)}}}let K=fn*M,tn=(p,N)=>Math.floor(p/K)*73856093^Math.floor(N/K)*19349663;for(let p=0;p<(B.length?hn:0);p++){let N=new Map;for(let m of B){let k=tn(y[m],L[m]),S=N.get(k);S?S.push(m):N.set(k,[m])}for(let m of B){let k=Math.floor(y[m]/K),S=Math.floor(L[m]/K);for(let P=k-1;P<=k+1;P++)for(let I=S-1;I<=S+1;I++){let q=N.get(P*73856093^I*19349663);if(q)for(let G of q){if(G<=m)continue;let j=!1;for(let X=l[m];X<l[m+1];X++)if(d[X]===G){j=!0;break}if(j)continue;let H=y[m]-y[G],Y=L[m]-L[G],$=Math.sqrt(H*H+Y*Y);if($>=K)continue;let J,it;if($>1e-6){let X=wt*(K-$)/(2*$);J=X*H,it=X*Y}else J=wt*K*(A()-.5),it=wt*K*(A()-.5);y[m]=y[m]+J,L[m]=L[m]+it,y[G]=y[G]-J,L[G]=L[G]-it}}}for(let m of B)Et(m,1/0)}for(let p=0;p<u.length;p++){let N=f[p],m=u[p];if(!(m<3)){for(let k=0;k<un;k++){let S=y.slice(N,N+m),P=L.slice(N,N+m);for(let I=1;I+1<m;I++)y[N+I]=.5*S[I]+.25*(S[I-1]+S[I+1]),L[N+I]=.5*P[I]+.25*(P[I-1]+P[I+1])}Mn(y,L,N,m,g[p])}}An(E,O,y,L,T,v);for(let p=0;p<i.ids.length;p++){let N=[];for(let m=0;m<u[p];m++)N.push({x:y[f[p]+m],y:L[f[p]+m]});w[i.ids[p]]=N}return{nodePositions:w}}function Mn(o,t,n,e,s){wn(o,t,n,e,s*(e-1));let i=new Float64Array(e);for(let c=1;c<e;c++)i[c]=i[c-1]+Math.hypot(o[n+c]-o[n+c-1],t[n+c]-t[n+c-1]);if(!i[e-1])return;let r=i[e-1],l=o.slice(n,n+e),d=t.slice(n,n+e),a=1;for(let c=1;c+1<e;c++){let h=r*c/(e-1);for(;a<e-1&&i[a]<h;)a++;let f=i[a]-i[a-1],u=f>0?(h-i[a-1])/f:0;o[n+c]=l[a-1]+(l[a]-l[a-1])*u,t[n+c]=d[a-1]+(d[a]-d[a-1])*u}}function wn(o,t,n,e,s){let i=n+e-1,r=o[n],l=t[n],d=Math.hypot(o[i]-r,t[i]-l),a=d>1e-9?(o[i]-r)/d:1,c=d>1e-9?(t[i]-l)/d:0,h=new Float64Array(e),f=new Float64Array(e),u=!0;for(let v=0;v<e;v++){let A=o[n+v]-r,y=t[n+v]-l;h[v]=A*a+y*c,f[v]=y*a-A*c,u&&(u=Math.abs(f[v])<1e-6)}let g=v=>{let A=0;for(let y=1;y<e;y++)A+=Math.hypot(h[y]-h[y-1],v*(f[y]-f[y-1]));return A};if(u||g(1)>=s)return;let M=1,b=2;for(;g(b)<s&&b<1e6;)M=b,b*=2;for(let v=0;v<40;v++){let A=(M+b)/2;g(A)<s?M=A:b=A}let D=(M+b)/2;for(let v=1;v+1<e;v++)o[n+v]=r+h[v]*a-D*f[v]*c,t[n+v]=l+h[v]*c+D*f[v]*a}function An(o,t,n,e,s,i){if(!s)for(let h of t)Nn(n,e,h);if(t.length<2)return;let r=new Float64Array(t.length).fill(1/0),l=new Float64Array(t.length).fill(1/0),d=new Float64Array(t.length).fill(-1/0);for(let h=0;h<n.length;h++){let f=o[h];r[f]=Math.min(r[f],n[h]),l[f]=Math.min(l[f],e[h]),d[f]=Math.max(d[f],e[h])}let a=new Float64Array(t.length),c=0;for(let h=0;h<t.length;h++)a[h]=c-l[h],c+=d[h]-l[h]+i;for(let h=0;h<n.length;h++){let f=o[h];n[h]=n[h]-r[f],e[h]=e[h]+a[f]}}function Nn(o,t,n){if(n.length<3)return;let e=0,s=0;for(let h of n)e+=o[h],s+=t[h];e/=n.length,s/=n.length;let i=0,r=0,l=0;for(let h of n){let f=o[h]-e,u=t[h]-s;i+=f*f,r+=u*u,l+=f*u}let d=-.5*Math.atan2(2*l,i-r),a=Math.cos(d),c=Math.sin(d);for(let h of n){let f=o[h]-e,u=t[h]-s;o[h]=e+a*f-c*u,t[h]=s+c*f+a*u}}var Vt=[{value:"fmmm",label:"Bandage (FMMM)",description:"Bandage's force-directed layout: OGDF's fast multipole multilevel method, compiled to wasm."},{value:"stress",label:"Stress",description:"Plain JS: the reference drawn straight and each variant placed against it, an allele as a lens, a repeat loop as a ring, a deletion as an arch; stress by stochastic gradient descent for components with no reference."}],vn=Vt.map(o=>o.value);var bn=async o=>{let t=performance.now();return{result:o.options.engine==="stress"?Nt(o):await dt(o),duration:performance.now()-t}};var st=40,Kt=500,ft=5;function Ln(o,t){return Math.max(o.nodeLengthPerMegabase*t/1e6,o.minimumNodeLength)}function qt(o,t=ft){let e=o.nodes.reduce((i,r)=>i+r.length,0)/1e6,s=Math.max(o.nodes.length*st,Kt);return{nodeLengthPerMegabase:e>0?s/e:1e4,minimumNodeLength:Math.max(ft,t),edgeLength:5,nodeSegmentLength:20}}var nt={power:1,effect:1};function jt(o){return o.power===1&&o.effect===1}function zt(o,t){let n=o.nodes.length,e=o.nodes.reduce((r,l)=>r+l.length,0),s=n>0?e/n:0,i=n>0?Math.max(n*st,Kt)/n:st;return r=>{if(s<=0)return i;let l=(r/s)**t.power;return Math.max(i*((l-1)*t.effect+1),ft)}}var Wt=1e3,$t={law:nt,minNodeLength:0};function Qn(o,t=$t){let{law:n,minNodeLength:e}=t,s=qt(o,e);if(jt(n))return{nodes:o.nodes,opts:s};let i=zt(o,n);return{nodes:o.nodes.map(r=>({...r,length:Math.round(i(r.length)*Wt)})),opts:{...s,nodeLengthPerMegabase:1e6/Wt,minimumNodeLength:ft}}}function Zn(o,t=$t){if(jt(t.law)){let n=qt(o,t.minNodeLength);return e=>Ln(n,e)}return zt(o,t.law)}var vt=[{value:"auto",label:"Proportional",description:"Bandage's own scale: a node draws proportional to its length, so a 1 bp allele is a speck.",law:nt,minNodeFactor:0},{value:"open",label:"Open bubbles",description:"Give every allele a drawn length, so a bubble reads as two arms rather than a knot.",law:nt,minNodeFactor:2.5},{value:"wide",label:"Wide bubbles",description:"As open, spread further. Best on a window of a dozen bubbles.",law:nt,minNodeFactor:10},{value:"compress",label:"Compress lengths",description:"Pull the longest and shortest nodes towards the graph\u2019s mean, so a cut spanning kb and bp fits one pane.",law:{power:.5,effect:.5},minNodeFactor:0}],En=vt.map(o=>o.value);function kn(o){let t=vt.find(n=>n.value===o);return{law:t?.law??nt,minNodeLength:(t?.minNodeFactor??0)*st}}export{Bt as a,Vt as b,vn as c,bn as d,Ln as e,Qn as f,Zn as g,vt as h,En as i,kn as j};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
//# sourceMappingURL=chunk-XZGYJ3JC.js.map
|