krystalis-cards 1.0.0 → 1.0.1

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.
Files changed (2) hide show
  1. package/dist/cards.js +57 -55
  2. package/package.json +10 -3
package/dist/cards.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var process=globalThis.process||{env:{}};
2
- (()=>{var M=(e,t)=>()=>(e&&(t=e(e=0)),t);var he,ve=M(()=>{he="1.2.3"});var b,z=M(()=>{ve();b=class e extends Error{constructor(t,r={}){let n=r.cause instanceof e?r.cause.details:r.cause?.message?r.cause.message:r.details,a=r.cause instanceof e&&r.cause.docsPath||r.docsPath,o=[t||"An error occurred.","",...r.metaMessages?[...r.metaMessages,""]:[],...a?[`Docs: https://abitype.dev${a}`]:[],...n?[`Details: ${n}`]:[],`Version: abitype@${he}`].join(`
3
- `);super(o),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiTypeError"}),r.cause&&(this.cause=r.cause),this.details=n,this.docsPath=a,this.metaMessages=r.metaMessages,this.shortMessage=t}}});function k(e,t){return e.exec(t)?.groups}var ae,ie,V,K=M(()=>{ae=/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/,ie=/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/,V=/^\(.+?\).*?$/});function ke(e){return Me.test(e)}function Ie(e){return k(Me,e)}function Ee(e){return we.test(e)}function De(e){return k(we,e)}function Ne(e){return $e.test(e)}function Ae(e){return k($e,e)}function X(e){return Se.test(e)}function Te(e){return k(Se,e)}function ze(e){return je.test(e)}function Ce(e){return k(je,e)}function Le(e){return Ue.test(e)}function Oe(e){return k(Ue,e)}function Be(e){return lt.test(e)}var Me,we,$e,Se,je,Ue,lt,Pe,J,ee=M(()=>{K();Me=/^error (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\((?<parameters>.*?)\)$/;we=/^event (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\((?<parameters>.*?)\)$/;$e=/^function (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\((?<parameters>.*?)\)(?: (?<scope>external|public{1}))?(?: (?<stateMutability>pure|view|nonpayable|payable{1}))?(?: returns\s?\((?<returns>.*?)\))?$/;Se=/^struct (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*) \{(?<properties>.*?)\}$/;je=/^constructor\((?<parameters>.*?)\)(?:\s(?<stateMutability>payable{1}))?$/;Ue=/^fallback\(\) external(?:\s(?<stateMutability>payable{1}))?$/;lt=/^receive\(\) external payable$/;Pe=new Set(["indexed"]),J=new Set(["calldata","memory","storage"])});var O,te,se=M(()=>{z();O=class extends b{constructor({type:t}){super("Unknown type.",{metaMessages:[`Type "${t}" is not a valid ABI type. Perhaps you forgot to include a struct signature?`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownTypeError"})}},te=class extends b{constructor({type:t}){super("Unknown type.",{metaMessages:[`Type "${t}" is not a valid ABI type.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownSolidityTypeError"})}}});var B,P,F,R,Y,ce=M(()=>{z();B=class extends b{constructor({param:t}){super("Invalid ABI parameter.",{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidParameterError"})}},P=class extends b{constructor({param:t,name:r}){super("Invalid ABI parameter.",{details:t,metaMessages:[`"${r}" is a protected Solidity keyword. More info: https://docs.soliditylang.org/en/latest/cheatsheet.html`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SolidityProtectedKeywordError"})}},F=class extends b{constructor({param:t,type:r,modifier:n}){super("Invalid ABI parameter.",{details:t,metaMessages:[`Modifier "${n}" not allowed${r?` in "${r}" type`:""}.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidModifierError"})}},R=class extends b{constructor({param:t,type:r,modifier:n}){super("Invalid ABI parameter.",{details:t,metaMessages:[`Modifier "${n}" not allowed${r?` in "${r}" type`:""}.`,`Data location can only be specified for array, struct, or mapping types, but "${n}" was given.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidFunctionModifierError"})}},Y=class extends b{constructor({abiParameter:t}){super("Invalid ABI parameter.",{details:JSON.stringify(t,null,2),metaMessages:["ABI parameter type is invalid."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAbiTypeParameterError"})}}});var I,Q,H,le=M(()=>{z();I=class extends b{constructor({signature:t,type:r}){super(`Invalid ${r} signature.`,{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidSignatureError"})}},Q=class extends b{constructor({signature:t}){super("Unknown signature.",{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownSignatureError"})}},H=class extends b{constructor({signature:t}){super("Invalid struct signature.",{details:t,metaMessages:["No properties exist."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidStructSignatureError"})}}});var G,Fe=M(()=>{z();G=class extends b{constructor({type:t}){super("Circular reference detected.",{metaMessages:[`Struct "${t}" is a circular reference.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"CircularReferenceError"})}}});var q,Re=M(()=>{z();q=class extends b{constructor({current:t,depth:r}){super("Unbalanced parentheses.",{metaMessages:[`"${t.trim()}" has too many ${r>0?"opening":"closing"} parentheses.`],details:`Depth "${r}"`}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidParenthesisError"})}}});function Ye(e,t,r){let n="";if(r)for(let a of Object.entries(r)){if(!a)continue;let o="";for(let i of a[1])o+=`[${i.type}${i.name?`:${i.name}`:""}]`;n+=`(${a[0]}{${o}})`}return t?`${t}:${e}${n}`:`${e}${n}`}var re,Qe=M(()=>{re=new Map([["address",{type:"address"}],["bool",{type:"bool"}],["bytes",{type:"bytes"}],["bytes32",{type:"bytes32"}],["int",{type:"int256"}],["int256",{type:"int256"}],["string",{type:"string"}],["uint",{type:"uint256"}],["uint8",{type:"uint8"}],["uint16",{type:"uint16"}],["uint24",{type:"uint24"}],["uint32",{type:"uint32"}],["uint64",{type:"uint64"}],["uint96",{type:"uint96"}],["uint112",{type:"uint112"}],["uint160",{type:"uint160"}],["uint192",{type:"uint192"}],["uint256",{type:"uint256"}],["address owner",{type:"address",name:"owner"}],["address to",{type:"address",name:"to"}],["bool approved",{type:"bool",name:"approved"}],["bytes _data",{type:"bytes",name:"_data"}],["bytes data",{type:"bytes",name:"data"}],["bytes signature",{type:"bytes",name:"signature"}],["bytes32 hash",{type:"bytes32",name:"hash"}],["bytes32 r",{type:"bytes32",name:"r"}],["bytes32 root",{type:"bytes32",name:"root"}],["bytes32 s",{type:"bytes32",name:"s"}],["string name",{type:"string",name:"name"}],["string symbol",{type:"string",name:"symbol"}],["string tokenURI",{type:"string",name:"tokenURI"}],["uint tokenId",{type:"uint256",name:"tokenId"}],["uint8 v",{type:"uint8",name:"v"}],["uint256 balance",{type:"uint256",name:"balance"}],["uint256 tokenId",{type:"uint256",name:"tokenId"}],["uint256 value",{type:"uint256",name:"value"}],["event:address indexed from",{type:"address",name:"from",indexed:!0}],["event:address indexed to",{type:"address",name:"to",indexed:!0}],["event:uint indexed tokenId",{type:"uint256",name:"tokenId",indexed:!0}],["event:uint256 indexed tokenId",{type:"uint256",name:"tokenId",indexed:!0}]])});function He(e,t={}){if(Ne(e))return dt(e,t);if(Ee(e))return pt(e,t);if(ke(e))return ut(e,t);if(ze(e))return mt(e,t);if(Le(e))return xt(e);if(Be(e))return{type:"receive",stateMutability:"payable"};throw new Q({signature:e})}function dt(e,t={}){let r=Ae(e);if(!r)throw new I({signature:e,type:"function"});let n=w(r.parameters),a=[],o=n.length;for(let d=0;d<o;d++)a.push(A(n[d],{modifiers:J,structs:t,type:"function"}));let i=[];if(r.returns){let d=w(r.returns),u=d.length;for(let x=0;x<u;x++)i.push(A(d[x],{modifiers:J,structs:t,type:"function"}))}return{name:r.name,type:"function",stateMutability:r.stateMutability??"nonpayable",inputs:a,outputs:i}}function pt(e,t={}){let r=De(e);if(!r)throw new I({signature:e,type:"event"});let n=w(r.parameters),a=[],o=n.length;for(let i=0;i<o;i++)a.push(A(n[i],{modifiers:Pe,structs:t,type:"event"}));return{name:r.name,type:"event",inputs:a}}function ut(e,t={}){let r=Ie(e);if(!r)throw new I({signature:e,type:"error"});let n=w(r.parameters),a=[],o=n.length;for(let i=0;i<o;i++)a.push(A(n[i],{structs:t,type:"error"}));return{name:r.name,type:"error",inputs:a}}function mt(e,t={}){let r=Ce(e);if(!r)throw new I({signature:e,type:"constructor"});let n=w(r.parameters),a=[],o=n.length;for(let i=0;i<o;i++)a.push(A(n[i],{structs:t,type:"constructor"}));return{type:"constructor",stateMutability:r.stateMutability??"nonpayable",inputs:a}}function xt(e){let t=Oe(e);if(!t)throw new I({signature:e,type:"fallback"});return{type:"fallback",stateMutability:t.stateMutability??"nonpayable"}}function A(e,t){let r=Ye(e,t?.type,t?.structs);if(re.has(r))return re.get(r);let n=V.test(e),a=k(n?gt:ft,e);if(!a)throw new B({param:e});if(a.name&&ht(a.name))throw new P({param:e,name:a.name});let o=a.name?{name:a.name}:{},i=a.modifier==="indexed"?{indexed:!0}:{},d=t?.structs??{},u,x={};if(n){u="tuple";let l=w(a.type),p=[],f=l.length;for(let h=0;h<f;h++)p.push(A(l[h],{structs:d}));x={components:p}}else if(a.type in d)u="tuple",x={components:d[a.type]};else if(yt.test(a.type))u=`${a.type}256`;else if(a.type==="address payable")u="address";else if(u=a.type,t?.type!=="struct"&&!de(u))throw new te({type:u});if(a.modifier){if(!t?.modifiers?.has?.(a.modifier))throw new F({param:e,type:t?.type,modifier:a.modifier});if(J.has(a.modifier)&&!vt(u,!!a.array))throw new R({param:e,type:t?.type,modifier:a.modifier})}let c={type:`${u}${a.array??""}`,...o,...i,...x};return re.set(r,c),c}function w(e,t=[],r="",n=0){let a=e.trim().length;for(let o=0;o<a;o++){let i=e[o],d=e.slice(o+1);switch(i){case",":return n===0?w(d,[...t,r.trim()]):w(d,t,`${r}${i}`,n);case"(":return w(d,t,`${r}${i}`,n+1);case")":return w(d,t,`${r}${i}`,n-1);default:return w(d,t,`${r}${i}`,n)}}if(r==="")return t;if(n!==0)throw new q({current:r,depth:n});return t.push(r.trim()),t}function de(e){return e==="address"||e==="bool"||e==="function"||e==="string"||ae.test(e)||ie.test(e)}function ht(e){return e==="address"||e==="bool"||e==="function"||e==="string"||e==="tuple"||ae.test(e)||ie.test(e)||bt.test(e)}function vt(e,t){return t||e==="bytes"||e==="string"||e==="tuple"}var ft,gt,yt,bt,pe=M(()=>{K();se();ce();le();Re();Qe();ee();ft=/^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*(?:\spayable)?)(?<array>(?:\[\d*?\])+?)?(?:\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/,gt=/^\((?<type>.+?)\)(?<array>(?:\[\d*?\])+?)?(?:\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/,yt=/^u?int$/;bt=/^(?:after|alias|anonymous|apply|auto|byte|calldata|case|catch|constant|copyof|default|defined|error|event|external|false|final|function|immutable|implements|in|indexed|inline|internal|let|mapping|match|memory|mutable|null|of|override|partial|private|promise|public|pure|reference|relocatable|return|returns|sizeof|static|storage|struct|super|supports|switch|this|true|try|typedef|typeof|var|view|virtual)$/});function Ge(e){let t={},r=e.length;for(let i=0;i<r;i++){let d=e[i];if(!X(d))continue;let u=Te(d);if(!u)throw new I({signature:d,type:"struct"});let x=u.properties.split(";"),c=[],l=x.length;for(let p=0;p<l;p++){let h=x[p].trim();if(!h)continue;let U=A(h,{type:"struct"});c.push(U)}if(!c.length)throw new H({signature:d});t[u.name]=c}let n={},a=Object.entries(t),o=a.length;for(let i=0;i<o;i++){let[d,u]=a[i];n[d]=qe(u,t)}return n}function qe(e=[],t={},r=new Set){let n=[],a=e.length;for(let o=0;o<a;o++){let i=e[o];if(V.test(i.type))n.push(i);else{let u=k(Mt,i.type);if(!u?.type)throw new Y({abiParameter:i});let{array:x,type:c}=u;if(c in t){if(r.has(c))throw new G({type:c});n.push({...i,type:`tuple${x??""}`,components:qe(t[c],t,new Set([...r,c]))})}else if(de(c))n.push(i);else throw new O({type:c})}}return n}var Mt,We=M(()=>{K();se();ce();le();Fe();ee();pe();Mt=/^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*)(?<array>(?:\[\d*?\])+?)?$/});function T(e){let t=Ge(e),r=[],n=e.length;for(let a=0;a<n;a++){let o=e[a];X(o)||r.push(He(o,t))}return r}var Ze=M(()=>{ee();We();pe()});var _e=M(()=>{Ze()});var fe=`<link href="https://fonts.googleapis.com/css2?family=Inter+Tight:wght@500;600&family=Inter:wght@400;500&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
2
+ (()=>{var k=(e,t)=>()=>(e&&(t=e(e=0)),t);var he,ve=k(()=>{he="1.2.3"});var h,U=k(()=>{ve();h=class e extends Error{constructor(t,r={}){let n=r.cause instanceof e?r.cause.details:r.cause?.message?r.cause.message:r.details,a=r.cause instanceof e&&r.cause.docsPath||r.docsPath,o=[t||"An error occurred.","",...r.metaMessages?[...r.metaMessages,""]:[],...a?[`Docs: https://abitype.dev${a}`]:[],...n?[`Details: ${n}`]:[],`Version: abitype@${he}`].join(`
3
+ `);super(o),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"AbiTypeError"}),r.cause&&(this.cause=r.cause),this.details=n,this.docsPath=a,this.metaMessages=r.metaMessages,this.shortMessage=t}}});function I(e,t){return e.exec(t)?.groups}var ae,ie,K,V=k(()=>{ae=/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/,ie=/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/,K=/^\(.+?\).*?$/});function ke(e){return Me.test(e)}function we(e){return I(Me,e)}function Ee(e){return Ie.test(e)}function De(e){return I(Ie,e)}function Ae(e){return $e.test(e)}function Ne(e){return I($e,e)}function X(e){return Se.test(e)}function Te(e){return I(Se,e)}function ze(e){return je.test(e)}function Ue(e){return I(je,e)}function Le(e){return Ce.test(e)}function Oe(e){return I(Ce,e)}function Be(e){return lt.test(e)}var Me,Ie,$e,Se,je,Ce,lt,Pe,J,ee=k(()=>{V();Me=/^error (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\((?<parameters>.*?)\)$/;Ie=/^event (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\((?<parameters>.*?)\)$/;$e=/^function (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\((?<parameters>.*?)\)(?: (?<scope>external|public{1}))?(?: (?<stateMutability>pure|view|nonpayable|payable{1}))?(?: returns\s?\((?<returns>.*?)\))?$/;Se=/^struct (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*) \{(?<properties>.*?)\}$/;je=/^constructor\((?<parameters>.*?)\)(?:\s(?<stateMutability>payable{1}))?$/;Ce=/^fallback\(\) external(?:\s(?<stateMutability>payable{1}))?$/;lt=/^receive\(\) external payable$/;Pe=new Set(["indexed"]),J=new Set(["calldata","memory","storage"])});var L,te,se=k(()=>{U();L=class extends h{constructor({type:t}){super("Unknown type.",{metaMessages:[`Type "${t}" is not a valid ABI type. Perhaps you forgot to include a struct signature?`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownTypeError"})}},te=class extends h{constructor({type:t}){super("Unknown type.",{metaMessages:[`Type "${t}" is not a valid ABI type.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownSolidityTypeError"})}}});var O,B,P,F,R,ce=k(()=>{U();O=class extends h{constructor({param:t}){super("Invalid ABI parameter.",{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidParameterError"})}},B=class extends h{constructor({param:t,name:r}){super("Invalid ABI parameter.",{details:t,metaMessages:[`"${r}" is a protected Solidity keyword. More info: https://docs.soliditylang.org/en/latest/cheatsheet.html`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"SolidityProtectedKeywordError"})}},P=class extends h{constructor({param:t,type:r,modifier:n}){super("Invalid ABI parameter.",{details:t,metaMessages:[`Modifier "${n}" not allowed${r?` in "${r}" type`:""}.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidModifierError"})}},F=class extends h{constructor({param:t,type:r,modifier:n}){super("Invalid ABI parameter.",{details:t,metaMessages:[`Modifier "${n}" not allowed${r?` in "${r}" type`:""}.`,`Data location can only be specified for array, struct, or mapping types, but "${n}" was given.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidFunctionModifierError"})}},R=class extends h{constructor({abiParameter:t}){super("Invalid ABI parameter.",{details:JSON.stringify(t,null,2),metaMessages:["ABI parameter type is invalid."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidAbiTypeParameterError"})}}});var E,Y,Q,le=k(()=>{U();E=class extends h{constructor({signature:t,type:r}){super(`Invalid ${r} signature.`,{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidSignatureError"})}},Y=class extends h{constructor({signature:t}){super("Unknown signature.",{details:t}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"UnknownSignatureError"})}},Q=class extends h{constructor({signature:t}){super("Invalid struct signature.",{details:t,metaMessages:["No properties exist."]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidStructSignatureError"})}}});var H,Fe=k(()=>{U();H=class extends h{constructor({type:t}){super("Circular reference detected.",{metaMessages:[`Struct "${t}" is a circular reference.`]}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"CircularReferenceError"})}}});var q,Re=k(()=>{U();q=class extends h{constructor({current:t,depth:r}){super("Unbalanced parentheses.",{metaMessages:[`"${t.trim()}" has too many ${r>0?"opening":"closing"} parentheses.`],details:`Depth "${r}"`}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"InvalidParenthesisError"})}}});function Ye(e,t,r){let n="";if(r)for(let a of Object.entries(r)){if(!a)continue;let o="";for(let i of a[1])o+=`[${i.type}${i.name?`:${i.name}`:""}]`;n+=`(${a[0]}{${o}})`}return t?`${t}:${e}${n}`:`${e}${n}`}var re,Qe=k(()=>{re=new Map([["address",{type:"address"}],["bool",{type:"bool"}],["bytes",{type:"bytes"}],["bytes32",{type:"bytes32"}],["int",{type:"int256"}],["int256",{type:"int256"}],["string",{type:"string"}],["uint",{type:"uint256"}],["uint8",{type:"uint8"}],["uint16",{type:"uint16"}],["uint24",{type:"uint24"}],["uint32",{type:"uint32"}],["uint64",{type:"uint64"}],["uint96",{type:"uint96"}],["uint112",{type:"uint112"}],["uint160",{type:"uint160"}],["uint192",{type:"uint192"}],["uint256",{type:"uint256"}],["address owner",{type:"address",name:"owner"}],["address to",{type:"address",name:"to"}],["bool approved",{type:"bool",name:"approved"}],["bytes _data",{type:"bytes",name:"_data"}],["bytes data",{type:"bytes",name:"data"}],["bytes signature",{type:"bytes",name:"signature"}],["bytes32 hash",{type:"bytes32",name:"hash"}],["bytes32 r",{type:"bytes32",name:"r"}],["bytes32 root",{type:"bytes32",name:"root"}],["bytes32 s",{type:"bytes32",name:"s"}],["string name",{type:"string",name:"name"}],["string symbol",{type:"string",name:"symbol"}],["string tokenURI",{type:"string",name:"tokenURI"}],["uint tokenId",{type:"uint256",name:"tokenId"}],["uint8 v",{type:"uint8",name:"v"}],["uint256 balance",{type:"uint256",name:"balance"}],["uint256 tokenId",{type:"uint256",name:"tokenId"}],["uint256 value",{type:"uint256",name:"value"}],["event:address indexed from",{type:"address",name:"from",indexed:!0}],["event:address indexed to",{type:"address",name:"to",indexed:!0}],["event:uint indexed tokenId",{type:"uint256",name:"tokenId",indexed:!0}],["event:uint256 indexed tokenId",{type:"uint256",name:"tokenId",indexed:!0}]])});function He(e,t={}){if(Ae(e))return dt(e,t);if(Ee(e))return pt(e,t);if(ke(e))return ut(e,t);if(ze(e))return mt(e,t);if(Le(e))return xt(e);if(Be(e))return{type:"receive",stateMutability:"payable"};throw new Y({signature:e})}function dt(e,t={}){let r=Ne(e);if(!r)throw new E({signature:e,type:"function"});let n=D(r.parameters),a=[],o=n.length;for(let l=0;l<o;l++)a.push(S(n[l],{modifiers:J,structs:t,type:"function"}));let i=[];if(r.returns){let l=D(r.returns),u=l.length;for(let x=0;x<u;x++)i.push(S(l[x],{modifiers:J,structs:t,type:"function"}))}return{name:r.name,type:"function",stateMutability:r.stateMutability??"nonpayable",inputs:a,outputs:i}}function pt(e,t={}){let r=De(e);if(!r)throw new E({signature:e,type:"event"});let n=D(r.parameters),a=[],o=n.length;for(let i=0;i<o;i++)a.push(S(n[i],{modifiers:Pe,structs:t,type:"event"}));return{name:r.name,type:"event",inputs:a}}function ut(e,t={}){let r=we(e);if(!r)throw new E({signature:e,type:"error"});let n=D(r.parameters),a=[],o=n.length;for(let i=0;i<o;i++)a.push(S(n[i],{structs:t,type:"error"}));return{name:r.name,type:"error",inputs:a}}function mt(e,t={}){let r=Ue(e);if(!r)throw new E({signature:e,type:"constructor"});let n=D(r.parameters),a=[],o=n.length;for(let i=0;i<o;i++)a.push(S(n[i],{structs:t,type:"constructor"}));return{type:"constructor",stateMutability:r.stateMutability??"nonpayable",inputs:a}}function xt(e){let t=Oe(e);if(!t)throw new E({signature:e,type:"fallback"});return{type:"fallback",stateMutability:t.stateMutability??"nonpayable"}}function S(e,t){let r=Ye(e,t?.type,t?.structs);if(re.has(r))return re.get(r);let n=K.test(e),a=I(n?gt:ft,e);if(!a)throw new O({param:e});if(a.name&&ht(a.name))throw new B({param:e,name:a.name});let o=a.name?{name:a.name}:{},i=a.modifier==="indexed"?{indexed:!0}:{},l=t?.structs??{},u,x={};if(n){u="tuple";let d=D(a.type),p=[],y=d.length;for(let v=0;v<y;v++)p.push(S(d[v],{structs:l}));x={components:p}}else if(a.type in l)u="tuple",x={components:l[a.type]};else if(yt.test(a.type))u=`${a.type}256`;else if(a.type==="address payable")u="address";else if(u=a.type,t?.type!=="struct"&&!de(u))throw new te({type:u});if(a.modifier){if(!t?.modifiers?.has?.(a.modifier))throw new P({param:e,type:t?.type,modifier:a.modifier});if(J.has(a.modifier)&&!vt(u,!!a.array))throw new F({param:e,type:t?.type,modifier:a.modifier})}let c={type:`${u}${a.array??""}`,...o,...i,...x};return re.set(r,c),c}function D(e,t=[],r="",n=0){let a=e.trim().length;for(let o=0;o<a;o++){let i=e[o],l=e.slice(o+1);switch(i){case",":return n===0?D(l,[...t,r.trim()]):D(l,t,`${r}${i}`,n);case"(":return D(l,t,`${r}${i}`,n+1);case")":return D(l,t,`${r}${i}`,n-1);default:return D(l,t,`${r}${i}`,n)}}if(r==="")return t;if(n!==0)throw new q({current:r,depth:n});return t.push(r.trim()),t}function de(e){return e==="address"||e==="bool"||e==="function"||e==="string"||ae.test(e)||ie.test(e)}function ht(e){return e==="address"||e==="bool"||e==="function"||e==="string"||e==="tuple"||ae.test(e)||ie.test(e)||bt.test(e)}function vt(e,t){return t||e==="bytes"||e==="string"||e==="tuple"}var ft,gt,yt,bt,pe=k(()=>{V();se();ce();le();Re();Qe();ee();ft=/^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*(?:\spayable)?)(?<array>(?:\[\d*?\])+?)?(?:\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/,gt=/^\((?<type>.+?)\)(?<array>(?:\[\d*?\])+?)?(?:\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/,yt=/^u?int$/;bt=/^(?:after|alias|anonymous|apply|auto|byte|calldata|case|catch|constant|copyof|default|defined|error|event|external|false|final|function|immutable|implements|in|indexed|inline|internal|let|mapping|match|memory|mutable|null|of|override|partial|private|promise|public|pure|reference|relocatable|return|returns|sizeof|static|storage|struct|super|supports|switch|this|true|try|typedef|typeof|var|view|virtual)$/});function qe(e){let t={},r=e.length;for(let i=0;i<r;i++){let l=e[i];if(!X(l))continue;let u=Te(l);if(!u)throw new E({signature:l,type:"struct"});let x=u.properties.split(";"),c=[],d=x.length;for(let p=0;p<d;p++){let v=x[p].trim();if(!v)continue;let f=S(v,{type:"struct"});c.push(f)}if(!c.length)throw new Q({signature:l});t[u.name]=c}let n={},a=Object.entries(t),o=a.length;for(let i=0;i<o;i++){let[l,u]=a[i];n[l]=Ge(u,t)}return n}function Ge(e=[],t={},r=new Set){let n=[],a=e.length;for(let o=0;o<a;o++){let i=e[o];if(K.test(i.type))n.push(i);else{let u=I(Mt,i.type);if(!u?.type)throw new R({abiParameter:i});let{array:x,type:c}=u;if(c in t){if(r.has(c))throw new H({type:c});n.push({...i,type:`tuple${x??""}`,components:Ge(t[c],t,new Set([...r,c]))})}else if(de(c))n.push(i);else throw new L({type:c})}}return n}var Mt,We=k(()=>{V();se();ce();le();Fe();ee();pe();Mt=/^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*)(?<array>(?:\[\d*?\])+?)?$/});function j(e){let t=qe(e),r=[],n=e.length;for(let a=0;a<n;a++){let o=e[a];X(o)||r.push(He(o,t))}return r}var Ze=k(()=>{ee();We();pe()});var _e=k(()=>{Ze()});var fe=`<link href="https://fonts.googleapis.com/css2?family=Inter+Tight:wght@500;600&family=Inter:wght@400;500&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
4
4
  <style>
5
5
  .kx{--blue:#3C80FF;--blue-ink:#004EC3;--sky:#EDF3FE;--sky2:#DEE8FC;--ink:#15181A;--ink2:#2C313A;--mid:#464F60;font-family:Inter,system-ui,sans-serif;color:var(--ink);background:var(--sky);border-radius:16px;padding:18px}
6
6
  .kx .top{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}
@@ -37,7 +37,8 @@ var process=globalThis.process||{env:{}};
37
37
  .kx a{color:var(--blue-ink)}
38
38
  .kx .tb{display:flex;flex-direction:column}
39
39
  .kx .tr{display:grid;grid-template-columns:minmax(0,1fr) 70px 80px 72px;gap:10px;align-items:center;padding:10px 0;border-top:1px solid var(--sky2)}
40
- .kx .tr.th{border-top:0;padding:0 0 6px} .kx .tr.th span{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--mid);text-align:right} .kx .tr.th span:first-child{text-align:left}
40
+ .kx .tr.th{border-top:0;padding:0 0 6px} .kx .tr.t5{grid-template-columns:minmax(0,1fr) 72px 60px 58px 66px 62px;gap:8px} .kx .tr.th.t5 span{white-space:nowrap} .kx .tr .n.lq5{color:var(--mid);font-size:12.5px}
41
+ @media (max-width:600px){.kx .tr.t5{grid-template-columns:minmax(0,1fr) 62px}} .kx .tr.th span{font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--mid);text-align:right} .kx .tr.th span:first-child{text-align:left}
41
42
  .kx .tr .n{text-align:right;font-size:13.5px;font-variant-numeric:tabular-nums} .kx .tr .w{font-weight:500} .kx .tr .n small{display:block;font-size:11px;color:var(--mid)}
42
43
  .kx .as{display:flex;align-items:center;gap:10px;min-width:0} .kx .as img,.kx .as .ini{width:26px;height:26px;border-radius:50%;object-fit:contain;background:#fff;flex:none}
43
44
  .kx .as img.dk{background:#15181A;padding:4px;box-sizing:border-box} .kx .as .ini{font-size:8.5px}
@@ -84,73 +85,74 @@ var process=globalThis.process||{env:{}};
84
85
 
85
86
  .kx .ots{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px} .kx .ot{display:flex;align-items:center;gap:10px;border:1px solid var(--sky2);border-radius:10px;padding:10px 12px;min-width:0} .kx .ot img,.kx .ot .ini{width:28px;height:28px;border-radius:50%;object-fit:contain;background:#fff;flex:none} .kx .ot img.dk{background:#15181A;padding:4px;box-sizing:border-box} .kx .ot .ini{display:inline-flex;align-items:center;justify-content:center;font-size:8.5px} .kx .ot div{min-width:0} .kx .ot b{display:block;font-weight:500;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} .kx .ot small{display:block;font-size:12px;color:var(--mid);white-space:nowrap;font-variant-numeric:tabular-nums}
86
87
  @media (max-width:600px){.kx .ots{grid-template-columns:repeat(2,minmax(0,1fr))}.kx .ofc{padding:14px}.kx .hero.h2 .stat b{font-size:21px}.kx .ot{padding:9px 10px;gap:8px}.kx .ot img,.kx .ot .ini{width:24px;height:24px}}
87
- </style>`,ge="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzUyIiBoZWlnaHQ9IjcxIiB2aWV3Qm94PSIwIDAgMzUyIDcxIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTM0NV81MDUpIj4KPHBhdGggZD0iTTguNjQwNjIgNDYuMzcxN1Y2Ni4yMzY3QzguNjQwNjIgNjcuNDU5NiA5LjY3NTU4IDY3Ljk2NzIgOS45OTc1NiA2OC4wODI1QzEwLjMxOTUgNjguMjIxIDExLjQwMDUgNjguNTIwOSAxMi4zNjY0IDY3LjYyMTFMMjcuMzk0NCA1My4xNzkzQzI4LjY3NDEgNTEuOTQ5NiAyOS45MDkzIDUwLjY1NjkgMzAuODM3NCA0OS4xNDQ0QzMxLjI3NDMgNDguNDMzNCAzMS40NTU0IDQ4LjAzMjkgMzEuNDU1NCA0OC4wMzI5QzMyLjM3NTUgNDYuMTY0IDMyLjM3NTUgNDQuMzY0NCAzMS40NzgyIDQyLjU2NDdDMzAuMTQ0OCAzOS44ODg0IDI2Ljc0MDcgMzcuMTY1OSAyMS42MTE3IDM0LjU4MThMMTIuODQ5NCAzOS40NzMxQzEwLjI1MDYgNDAuOTQ5NyA4LjY0MDYyIDQzLjU1NjkgOC42NDA2MiA0Ni4zNzE3WiIgZmlsbD0iIzAwNEVDMyIvPgo8cGF0aCBkPSJNMCAyLjE4ODQ1VjIzLjAyMjZDMCAyNS42Mjk4IDEuNzQ3OTMgMjcuOTM3IDQuMjMxODMgMjguNjc1M0MxMi42OTUzIDMxLjEyMDkgMjcuNDM3NSAzNi4zODEzIDMxLjAwMjQgNDQuMTEwNUMzMS40NjIgNDUuMTI1NyAzMS43MzgxIDQ2LjExNzggMzEuODMwNyA0Ny4xNTZDMzQuMTk5NCA0Mi44NDE2IDM1LjI4MDIgMzcuODgxIDM0Ljc3NDMgMzIuODUxM0MzNC4wODQxIDI1LjcyMiAzMC4zMTIxIDE5LjIzODcgMjQuNDI0OCAxNS4xMDg4TDMuNDI2ODUgMC40MTE4ODZDMy4wNTg4MyAwLjEzNTAxOSAyLjYyMTg2IC0wLjAwMzQxNzk3IDIuMTg0OSAtMC4wMDM0MTc5N0MxLjgxNjg4IC0wLjAwMzQxNzk3IDEuNDk0OSAwLjA2NTgwMDcgMS4xNDk5NCAwLjI1MDM3OUMwLjQ1OTk0NSAwLjY0MjYwNCAwIDEuMzU3ODYgMCAyLjE4ODQ1WiIgZmlsbD0iIzI0NzBGRiIvPgo8cGF0aCBkPSJNNjQuNTM0OSA0Ni4zNzE3VjY2LjIzNjdDNjQuNTM0OSA2Ny40NTk2IDYzLjUwMDQgNjcuOTY3MiA2My4xNzggNjguMDgyNUM2Mi44NTY0IDY4LjIyMSA2MS43NzQ3IDY4LjUyMDkgNjAuODA5MiA2Ny42MjExTDQ1LjQzMTQgNTIuODQzNEM0NC4zODQ3IDUxLjgzNzMgNDMuMzg1MSA1MC43NzMzIDQyLjU5NjYgNDkuNTU0QzQxLjk3MjEgNDguNTg5IDQxLjcyMDQgNDguMDMyOSA0MS43MjA0IDQ4LjAzMjlDNDAuODAwMyA0Ni4xNjQgNDAuODAwMyA0NC4zNjQ0IDQxLjY5NjggNDIuNTY0N0M0My4wMzEgMzkuODg4NCA0Ni40MzUxIDM3LjE2NTkgNTEuNTYzMiAzNC41ODE4TDYwLjMyNjEgMzkuNDczMUM2Mi45NDgyIDQwLjk0OTcgNjQuNTM0OSA0My41NTY5IDY0LjUzNDkgNDYuMzcxN1oiIGZpbGw9IiMwMDRFQzMiLz4KPHBhdGggZD0iTTczLjE4OTkgMi4xODY5OFYyMy4wMjExQzczLjE4OTkgMjUuNjI4MiA3MS40NDE2IDI3LjkzNTQgNjguOTU3NSAyOC42NzM3QzYwLjQ5NDMgMzEuMTE5NCA0NS43NTI0IDM2LjM3OTkgNDIuMTg3NSA0NC4xMDlDNDEuNzI3IDQ1LjEyNDIgNDEuNDUwOSA0Ni4xMTYzIDQxLjM1OTIgNDcuMTU0NkMzOC45OTA0IDQyLjg0MDEgMzcuOTA5NiAzNy44Nzk2IDM4LjQxNTUgMzIuODQ5OEMzOS4xMDQ5IDI1LjcyMDUgNDIuODc2OSAxOS4yMzczIDQ4Ljc2NTEgMTUuMTA3NEw2OS43NjMxIDAuNDEwNDEzQzcwLjEzMDkgMC4xMzM1NDYgNzAuNTY3OCAtMC4wMDQ4ODI4MSA3MS4wMDQ3IC0wLjAwNDg4MjgxQzcxLjM3MjUgLTAuMDA0ODgyODEgNzEuNjk0OSAwLjA2NDMzNTYgNzIuMDM5MiAwLjI0ODkxM0M3Mi43Mjk1IDAuNjQxMTM5IDczLjE4OTkgMS4zNTYzOCA3My4xODk5IDIuMTg2OThaIiBmaWxsPSIjMjQ3MEZGIi8+CjxwYXRoIGQ9Ik0xMDguODEzIDYuNjg5MjFIMTE2Ljg1MkwxMzUuNDgyIDQ5Ljc3OTdIMTM2LjAzNEwxNTQuNjY0IDYuNjg5MjFIMTYyLjU2NFY1Ni4zNjkySDE1Ni42OTlWMTYuODMyMkgxNTYuMTQ3TDEzOS4wNyA1Ni4zNjkySDEzMi4zMDhMMTE1LjIzIDE2LjgzMjJIMTE0LjY3OFY1Ni4zNjkySDEwOC44MTNWNi42ODkyMVoiIGZpbGw9IiMwRjBGMEYiLz4KPHBhdGggZD0iTTE2OS4wNDIgMzguODA4N0MxNjkuMDQyIDI2Ljk0MDcgMTc2LjI1MyAyMC4zODU3IDE4Ni45NDggMjAuMzg1N0MxOTcuNjA4IDIwLjM4NTcgMjA0Ljg1MyAyNi45NDA3IDIwNC44NTMgMzguODA4N0MyMDQuODUzIDUwLjY0MjIgMTk3LjYwOCA1Ny4xOTcyIDE4Ni45NDggNTcuMTk3MkMxNzYuMjUzIDU3LjE5NzIgMTY5LjA0MiA1MC42NDIyIDE2OS4wNDIgMzguODA4N1pNMTc1LjE4MyAzOC44MDg3QzE3NS4xODMgNDcuNTAyNyAxNzkuOTEgNTIuMjI5MiAxODYuOTQ4IDUyLjIyOTJDMTkzLjk1MSA1Mi4yMjkyIDE5OC42NzggNDcuNTAyNyAxOTguNjc4IDM4LjgwODdDMTk4LjY3OCAzMC4wODAyIDE5My45NTEgMjUuMzg4MiAxODYuOTQ4IDI1LjM4ODJDMTc5LjkxIDI1LjM4ODIgMTc1LjE4MyAzMC4wODAyIDE3NS4xODMgMzguODA4N1oiIGZpbGw9IiMwRjBGMEYiLz4KPHBhdGggZD0iTTIxMC42NTIgMjEuMjEzN0gyMTYuNTE3VjI1LjQyMjdIMjE3LjA2OUMyMTguMjc3IDIyLjkzODcgMjIwLjQ4NSAyMS4wNzU3IDIyNS43NjMgMjEuMDc1N0gyMzAuNjYyVjI2LjMxOTdIMjI1LjkwMUMyMTkuMzEyIDI2LjMxOTcgMjE2LjcyNCAyOS45NDIyIDIxNi43MjQgMzcuMDgzN1Y1Ni4zNjkySDIxMC42NTJWMjEuMjEzN1oiIGZpbGw9IiMwRjBGMEYiLz4KPHBhdGggZD0iTTIzNS4zMzMgNzAuMTY5MlYyMS4yMTM3SDI0MS4yNjdWMjYuMDc4MkgyNDEuODE5QzI0NC40NDEgMjIuMDA3MiAyNDguNzE5IDIwLjQyMDIgMjUzLjY4NyAyMC40MjAyQzI2Mi44MjkgMjAuNDIwMiAyNjkuODMzIDI2LjYzMDIgMjY5LjgzMyAzOC44MDg3QzI2OS44MzMgNTAuOTUyNyAyNjIuODI5IDU3LjE2MjcgMjUzLjY4NyA1Ny4xNjI3QzI0OC44MjIgNTcuMTYyNyAyNDQuNTc5IDU1LjYxMDIgMjQxLjk1NyA1MS43MTE3SDI0MS40MDVWNzAuMTY5MkgyMzUuMzMzWk0yNDEuMTk4IDM4LjgwODdDMjQxLjE5OCA0Ny4zMzAyIDI0NS43NTIgNTIuMTI1NyAyNTIuNDQ1IDUyLjEyNTdDMjU5LjE3MiA1Mi4xMjU3IDI2My43MjcgNDcuMzMwMiAyNjMuNzI3IDM4LjgwODdDMjYzLjcyNyAzMC4yNTI3IDI1OS4xNzIgMjUuNDU3MiAyNTIuNDQ1IDI1LjQ1NzJDMjQ1Ljc1MiAyNS40NTcyIDI0MS4xOTggMzAuMjUyNyAyNDEuMTk4IDM4LjgwODdaIiBmaWxsPSIjMEYwRjBGIi8+CjxwYXRoIGQ9Ik0yNzUuNjQ3IDYuNjg5MjFIMjgxLjcxOVYyNS41NjA3SDI4Mi4yNzFDMjg0Ljc4OSAyMS44MzQ3IDI4OC45NjQgMjAuNDIwMiAyOTMuODk3IDIwLjQyMDJDMzAyLjA3NCAyMC40MjAyIDMwNy4yNDkgMjQuNTYwMiAzMDcuMjQ5IDMzLjE1MDdWNTYuMzY5MkgzMDEuMTc3VjMzLjczNzJDMzAxLjE3NyAyOC4wMTAyIDI5OC4wMzcgMjUuNDkxNyAyOTIuNTUyIDI1LjQ5MTdDMjg2LjU0OSAyNS40OTE3IDI4MS43MTkgMjkuMDQ1MiAyODEuNzE5IDM2LjczODdWNTYuMzY5MkgyNzUuNjQ3VjYuNjg5MjFaIiBmaWxsPSIjMEYwRjBGIi8+CjxwYXRoIGQ9Ik0zMTIuNzExIDM4LjgwODdDMzEyLjcxMSAyNi45NDA3IDMxOS45MjEgMjAuMzg1NyAzMzAuNjE2IDIwLjM4NTdDMzQxLjI3NyAyMC4zODU3IDM0OC41MjIgMjYuOTQwNyAzNDguNTIyIDM4LjgwODdDMzQ4LjUyMiA1MC42NDIyIDM0MS4yNzcgNTcuMTk3MiAzMzAuNjE2IDU3LjE5NzJDMzE5LjkyMSA1Ny4xOTcyIDMxMi43MTEgNTAuNjQyMiAzMTIuNzExIDM4LjgwODdaTTMxOC44NTIgMzguODA4N0MzMTguODUyIDQ3LjUwMjcgMzIzLjU3OCA1Mi4yMjkyIDMzMC42MTYgNTIuMjI5MkMzMzcuNjIgNTIuMjI5MiAzNDIuMzQ2IDQ3LjUwMjcgMzQyLjM0NiAzOC44MDg3QzM0Mi4zNDYgMzAuMDgwMiAzMzcuNjIgMjUuMzg4MiAzMzAuNjE2IDI1LjM4ODJDMzIzLjU3OCAyNS4zODgyIDMxOC44NTIgMzAuMDgwMiAzMTguODUyIDM4LjgwODdaIiBmaWxsPSIjMEYwRjBGIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTM0NV81MDUiPgo8cmVjdCB3aWR0aD0iMzUyIiBoZWlnaHQ9IjcxIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",L={USDC:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/usdc.svg",BTC:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/btc.svg",ETH:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/eth.svg",SOL:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/sol.svg",ZEC:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/zec.svg",PAXG:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/paxg.svg",HYPE:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/crypto_icons/HYPE.png",NVDA:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/NVDA.png",AAPL:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/AAPL.png",META:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/META.png",GOOGL:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/GOOGL.png"};var ye={USDC:{address:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",decimals:6,name:"USDC"},BTC:{address:"0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",decimals:8,name:"Bitcoin",symbol:"cbBTC"},ETH:{address:"0x4200000000000000000000000000000000000006",decimals:18,name:"ETH",symbol:"WETH"}};var be="https://mainnet.base.org";var _={calmShare:{steady:1,real:.3,bold:.15},defaultLeverage:{steady:1,real:2.5,bold:2.5},maxLeverage:3,minLineDistance:.25,minExpectedMoves:2,topupCapMargin:.1,cashLoanCover:1.8,roundSafety:.9,swapSlippage:.005,quoteSlippage:"0.5",defaultMinTermDays:90,minLiquidUsd:5e4,bundleDeadlineMinutes:60,minOfferRoomUsd:200,maxBuyCostPct:.6,minPoolUsdc:2e4,maxBuyShareOfPool:.01,maxBuyUniswapUsd:1e5,legRoomShare:.5,minLegUsd:.01,minCushionUsd:.01,minPermissionSavingsUsd:.01,stopLossAboveLiquidation:.05,rescueAboveLiquidation:.03,rescueBackTo:.25,stressHourlyScore:70,exitNearPct:.05,assetVol:{bitcoin:.5,eth:.65,stock:.45,gold:.2,coin:.9}};_e();var Tr=[process.env.CHRYSALIS_RPC,be,"https://base-rpc.publicnode.com","https://base.llamarpc.com","https://1rpc.io/base"].filter(Boolean);var qr=ye.USDC.address;var Wr=T(["function quoteExactInputSingle((address tokenIn,address tokenOut,uint256 amountIn,uint24 fee,uint160 sqrtPriceLimitX96)) returns (uint256 amountOut,uint160,uint32,uint256)"]),Zr=T(["function getPool(address tokenA, address tokenB, int24 tickSpacing) view returns (address)"]),_r=T(["function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16, uint16, uint16, bool)","function fee() view returns (uint24)","function token0() view returns (address)"]),Vr=T(["function balanceOf(address) view returns (uint256)"]);var kt=8;function It(e){let t=_.roundSafety*e*(1-_.swapSlippage-.01),r=1+t*(1-t**kt)/(1-t);return{L:Math.floor((r-.01)*10)/10,need:null}}function Ve(e){return It(e.market.lltv).L}var m=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),oe=e=>String(e).replace(/\\/g,"\\\\").replace(/'/g,"\\'"),s=e=>{if(e==null||Number.isNaN(Number(e)))return"";let t=Number(e),r=Math.abs(t),n=t<0?"\u2212":"";return r>0&&r<.01?`${n}&lt;$0.01`:r<100?`${n}$${r.toFixed(2)}`:`${n}$${Math.round(r).toLocaleString("en-US")}`},ue=e=>`${Math.round(Number(e)*100)}%`,wt=e=>e==null?"":`${e>=0?"+":"\u2212"}${Math.abs(Math.round(e*100))}%`,Et={BTC:"BTC",cbBTC:"BTC",WBTC:"BTC",ETH:"ETH",WETH:"ETH",USDC:"USDC",SOL:"SOL",cbZEC:"ZEC",PAXG:"PAXG",cbHYPE:"HYPE",NVDAc:"NVDA",AAPLc:"AAPL",METAc:"META",GOOGLc:"GOOGL"},Dt={bitcoin:"BTC",eth:"ETH",solana:"SOL",zcash:"ZEC",gold:"PAXG",hyperliquid:"HYPE",nvidia:"NVDA",apple:"AAPL",meta:"META",google:"GOOGL",dollars:"USDC",savings:"USDC"},$t={"S&P 500 fund":"S&amp;P",SpaceX:"SX"};function $(e,t){let r=Et[e]??Dt[String(t??"").toLowerCase()];return r&&L[r]?`<img src="${L[r]}" alt=""${r==="AAPL"||r==="HYPE"?' class="dk"':""}>`:`<span class="ini">${$t[t]??m(String(t??e??"?").replace(/[^A-Za-z0-9 ]/g,"").split(" ").map(a=>a[0]).join("").slice(0,3).toUpperCase())}</span>`}var E=e=>`<div class="top"><div style="display:flex;align-items:center;gap:10px"><img src="${ge}" alt="Morpho" style="height:20px"><span style="width:1px;height:18px;background:#86B1FF"></span><span class="brand">Krystalis</span></div><span class="lab">${m(e)}</span></div>`,y=(e,t,r="")=>`<div role="button" tabindex="0" class="btn${r?" "+r:""}" onclick="sendPrompt('${oe(t)}')">${m(e)}</div>`,Ke=(e,t,r="")=>`<div role="button" tabindex="0" class="btn${r?" "+r:""}" onclick="openLink('${oe(t)}')">${m(e)}</div>`,C=(e,t,r,n,a,o="")=>`<div class="r">${$(e,t)}<span><b>${r}</b>${n?`<small>${n}</small>`:""}${o}</span><span class="v">${a}</span></div>`,Nt=new Set(["Savings","Borrowed","Wallet","Savings earned","In dollars","To your wallet","In your savings","Earn","Borrow","Cash"]),Z=e=>`<span class="lab">${Nt.has(e)?`<img class="cu" src="${L.USDC}" alt="">`:""}${m(e)}</span>`,v=(e,t)=>`<div class="stat">${Z(e)}<b>${t}</b></div>`,W=(e,t)=>`<div class="stat"><span class="lab">${m(e)}</span><b>${t}</b></div>`;function At(e,t){let r=new Set(["kx"]);for(let o of t.matchAll(/class="([^"]+)"/g))for(let i of o[1].split(/\s+/))i&&r.add(i);let n=o=>o.split(",").some(i=>[...i.matchAll(/\.([A-Za-z][\w-]*)/g)].every(d=>r.has(d[1]))),a=o=>{let i="",d=0;for(;d<o.length;){let u=o.indexOf("{",d);if(u<0)break;let x=o.slice(d,u).trim();if(x.startsWith("@media")){let c=1,l=u+1;for(;l<o.length&&c;)o[l]==="{"?c++:o[l]==="}"&&c--,l++;let p=a(o.slice(u+1,l-1));p.trim()&&(i+=`${x}{${p}}
88
- `),d=l}else{let c=o.indexOf("}",u);n(x)&&(i+=`${x}{${o.slice(u+1,c)}}
89
- `),d=c+1}}return i};return e.replace(/<style>([\s\S]*?)<\/style>/,(o,i)=>`<style>
90
- ${a(i)}</style>`)}var D=(e,t)=>{let r=`<h2 class="sr-only">${m(e)}</h2>
91
- <div class="kx">${t}</div>`;return`${At(fe,r)}
92
- ${r}`},S=e=>e.length?`<div class="more">${e.join("")}</div>`:"",ne=e=>e?`<div class="foot lab">${m(e)}</div>`:"",St=e=>e>1?` ${e}x`:"";function Xe({name:e,totalUsd:t,rows:r=[],savingsLine:n,askLiveData:a=!1,label:o="Your wallet"}){let i=r.map(d=>C(d.symbol,d.name,m(d.name),m(d.note??""),s(d.usd))).join("");return D(`Krystalis: your wallet holds ${s(t).replace("&lt;","<")}`,`${E(o)}
88
+ </style>`,ge="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzUyIiBoZWlnaHQ9IjcxIiB2aWV3Qm94PSIwIDAgMzUyIDcxIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTM0NV81MDUpIj4KPHBhdGggZD0iTTguNjQwNjIgNDYuMzcxN1Y2Ni4yMzY3QzguNjQwNjIgNjcuNDU5NiA5LjY3NTU4IDY3Ljk2NzIgOS45OTc1NiA2OC4wODI1QzEwLjMxOTUgNjguMjIxIDExLjQwMDUgNjguNTIwOSAxMi4zNjY0IDY3LjYyMTFMMjcuMzk0NCA1My4xNzkzQzI4LjY3NDEgNTEuOTQ5NiAyOS45MDkzIDUwLjY1NjkgMzAuODM3NCA0OS4xNDQ0QzMxLjI3NDMgNDguNDMzNCAzMS40NTU0IDQ4LjAzMjkgMzEuNDU1NCA0OC4wMzI5QzMyLjM3NTUgNDYuMTY0IDMyLjM3NTUgNDQuMzY0NCAzMS40NzgyIDQyLjU2NDdDMzAuMTQ0OCAzOS44ODg0IDI2Ljc0MDcgMzcuMTY1OSAyMS42MTE3IDM0LjU4MThMMTIuODQ5NCAzOS40NzMxQzEwLjI1MDYgNDAuOTQ5NyA4LjY0MDYyIDQzLjU1NjkgOC42NDA2MiA0Ni4zNzE3WiIgZmlsbD0iIzAwNEVDMyIvPgo8cGF0aCBkPSJNMCAyLjE4ODQ1VjIzLjAyMjZDMCAyNS42Mjk4IDEuNzQ3OTMgMjcuOTM3IDQuMjMxODMgMjguNjc1M0MxMi42OTUzIDMxLjEyMDkgMjcuNDM3NSAzNi4zODEzIDMxLjAwMjQgNDQuMTEwNUMzMS40NjIgNDUuMTI1NyAzMS43MzgxIDQ2LjExNzggMzEuODMwNyA0Ny4xNTZDMzQuMTk5NCA0Mi44NDE2IDM1LjI4MDIgMzcuODgxIDM0Ljc3NDMgMzIuODUxM0MzNC4wODQxIDI1LjcyMiAzMC4zMTIxIDE5LjIzODcgMjQuNDI0OCAxNS4xMDg4TDMuNDI2ODUgMC40MTE4ODZDMy4wNTg4MyAwLjEzNTAxOSAyLjYyMTg2IC0wLjAwMzQxNzk3IDIuMTg0OSAtMC4wMDM0MTc5N0MxLjgxNjg4IC0wLjAwMzQxNzk3IDEuNDk0OSAwLjA2NTgwMDcgMS4xNDk5NCAwLjI1MDM3OUMwLjQ1OTk0NSAwLjY0MjYwNCAwIDEuMzU3ODYgMCAyLjE4ODQ1WiIgZmlsbD0iIzI0NzBGRiIvPgo8cGF0aCBkPSJNNjQuNTM0OSA0Ni4zNzE3VjY2LjIzNjdDNjQuNTM0OSA2Ny40NTk2IDYzLjUwMDQgNjcuOTY3MiA2My4xNzggNjguMDgyNUM2Mi44NTY0IDY4LjIyMSA2MS43NzQ3IDY4LjUyMDkgNjAuODA5MiA2Ny42MjExTDQ1LjQzMTQgNTIuODQzNEM0NC4zODQ3IDUxLjgzNzMgNDMuMzg1MSA1MC43NzMzIDQyLjU5NjYgNDkuNTU0QzQxLjk3MjEgNDguNTg5IDQxLjcyMDQgNDguMDMyOSA0MS43MjA0IDQ4LjAzMjlDNDAuODAwMyA0Ni4xNjQgNDAuODAwMyA0NC4zNjQ0IDQxLjY5NjggNDIuNTY0N0M0My4wMzEgMzkuODg4NCA0Ni40MzUxIDM3LjE2NTkgNTEuNTYzMiAzNC41ODE4TDYwLjMyNjEgMzkuNDczMUM2Mi45NDgyIDQwLjk0OTcgNjQuNTM0OSA0My41NTY5IDY0LjUzNDkgNDYuMzcxN1oiIGZpbGw9IiMwMDRFQzMiLz4KPHBhdGggZD0iTTczLjE4OTkgMi4xODY5OFYyMy4wMjExQzczLjE4OTkgMjUuNjI4MiA3MS40NDE2IDI3LjkzNTQgNjguOTU3NSAyOC42NzM3QzYwLjQ5NDMgMzEuMTE5NCA0NS43NTI0IDM2LjM3OTkgNDIuMTg3NSA0NC4xMDlDNDEuNzI3IDQ1LjEyNDIgNDEuNDUwOSA0Ni4xMTYzIDQxLjM1OTIgNDcuMTU0NkMzOC45OTA0IDQyLjg0MDEgMzcuOTA5NiAzNy44Nzk2IDM4LjQxNTUgMzIuODQ5OEMzOS4xMDQ5IDI1LjcyMDUgNDIuODc2OSAxOS4yMzczIDQ4Ljc2NTEgMTUuMTA3NEw2OS43NjMxIDAuNDEwNDEzQzcwLjEzMDkgMC4xMzM1NDYgNzAuNTY3OCAtMC4wMDQ4ODI4MSA3MS4wMDQ3IC0wLjAwNDg4MjgxQzcxLjM3MjUgLTAuMDA0ODgyODEgNzEuNjk0OSAwLjA2NDMzNTYgNzIuMDM5MiAwLjI0ODkxM0M3Mi43Mjk1IDAuNjQxMTM5IDczLjE4OTkgMS4zNTYzOCA3My4xODk5IDIuMTg2OThaIiBmaWxsPSIjMjQ3MEZGIi8+CjxwYXRoIGQ9Ik0xMDguODEzIDYuNjg5MjFIMTE2Ljg1MkwxMzUuNDgyIDQ5Ljc3OTdIMTM2LjAzNEwxNTQuNjY0IDYuNjg5MjFIMTYyLjU2NFY1Ni4zNjkySDE1Ni42OTlWMTYuODMyMkgxNTYuMTQ3TDEzOS4wNyA1Ni4zNjkySDEzMi4zMDhMMTE1LjIzIDE2LjgzMjJIMTE0LjY3OFY1Ni4zNjkySDEwOC44MTNWNi42ODkyMVoiIGZpbGw9IiMwRjBGMEYiLz4KPHBhdGggZD0iTTE2OS4wNDIgMzguODA4N0MxNjkuMDQyIDI2Ljk0MDcgMTc2LjI1MyAyMC4zODU3IDE4Ni45NDggMjAuMzg1N0MxOTcuNjA4IDIwLjM4NTcgMjA0Ljg1MyAyNi45NDA3IDIwNC44NTMgMzguODA4N0MyMDQuODUzIDUwLjY0MjIgMTk3LjYwOCA1Ny4xOTcyIDE4Ni45NDggNTcuMTk3MkMxNzYuMjUzIDU3LjE5NzIgMTY5LjA0MiA1MC42NDIyIDE2OS4wNDIgMzguODA4N1pNMTc1LjE4MyAzOC44MDg3QzE3NS4xODMgNDcuNTAyNyAxNzkuOTEgNTIuMjI5MiAxODYuOTQ4IDUyLjIyOTJDMTkzLjk1MSA1Mi4yMjkyIDE5OC42NzggNDcuNTAyNyAxOTguNjc4IDM4LjgwODdDMTk4LjY3OCAzMC4wODAyIDE5My45NTEgMjUuMzg4MiAxODYuOTQ4IDI1LjM4ODJDMTc5LjkxIDI1LjM4ODIgMTc1LjE4MyAzMC4wODAyIDE3NS4xODMgMzguODA4N1oiIGZpbGw9IiMwRjBGMEYiLz4KPHBhdGggZD0iTTIxMC42NTIgMjEuMjEzN0gyMTYuNTE3VjI1LjQyMjdIMjE3LjA2OUMyMTguMjc3IDIyLjkzODcgMjIwLjQ4NSAyMS4wNzU3IDIyNS43NjMgMjEuMDc1N0gyMzAuNjYyVjI2LjMxOTdIMjI1LjkwMUMyMTkuMzEyIDI2LjMxOTcgMjE2LjcyNCAyOS45NDIyIDIxNi43MjQgMzcuMDgzN1Y1Ni4zNjkySDIxMC42NTJWMjEuMjEzN1oiIGZpbGw9IiMwRjBGMEYiLz4KPHBhdGggZD0iTTIzNS4zMzMgNzAuMTY5MlYyMS4yMTM3SDI0MS4yNjdWMjYuMDc4MkgyNDEuODE5QzI0NC40NDEgMjIuMDA3MiAyNDguNzE5IDIwLjQyMDIgMjUzLjY4NyAyMC40MjAyQzI2Mi44MjkgMjAuNDIwMiAyNjkuODMzIDI2LjYzMDIgMjY5LjgzMyAzOC44MDg3QzI2OS44MzMgNTAuOTUyNyAyNjIuODI5IDU3LjE2MjcgMjUzLjY4NyA1Ny4xNjI3QzI0OC44MjIgNTcuMTYyNyAyNDQuNTc5IDU1LjYxMDIgMjQxLjk1NyA1MS43MTE3SDI0MS40MDVWNzAuMTY5MkgyMzUuMzMzWk0yNDEuMTk4IDM4LjgwODdDMjQxLjE5OCA0Ny4zMzAyIDI0NS43NTIgNTIuMTI1NyAyNTIuNDQ1IDUyLjEyNTdDMjU5LjE3MiA1Mi4xMjU3IDI2My43MjcgNDcuMzMwMiAyNjMuNzI3IDM4LjgwODdDMjYzLjcyNyAzMC4yNTI3IDI1OS4xNzIgMjUuNDU3MiAyNTIuNDQ1IDI1LjQ1NzJDMjQ1Ljc1MiAyNS40NTcyIDI0MS4xOTggMzAuMjUyNyAyNDEuMTk4IDM4LjgwODdaIiBmaWxsPSIjMEYwRjBGIi8+CjxwYXRoIGQ9Ik0yNzUuNjQ3IDYuNjg5MjFIMjgxLjcxOVYyNS41NjA3SDI4Mi4yNzFDMjg0Ljc4OSAyMS44MzQ3IDI4OC45NjQgMjAuNDIwMiAyOTMuODk3IDIwLjQyMDJDMzAyLjA3NCAyMC40MjAyIDMwNy4yNDkgMjQuNTYwMiAzMDcuMjQ5IDMzLjE1MDdWNTYuMzY5MkgzMDEuMTc3VjMzLjczNzJDMzAxLjE3NyAyOC4wMTAyIDI5OC4wMzcgMjUuNDkxNyAyOTIuNTUyIDI1LjQ5MTdDMjg2LjU0OSAyNS40OTE3IDI4MS43MTkgMjkuMDQ1MiAyODEuNzE5IDM2LjczODdWNTYuMzY5MkgyNzUuNjQ3VjYuNjg5MjFaIiBmaWxsPSIjMEYwRjBGIi8+CjxwYXRoIGQ9Ik0zMTIuNzExIDM4LjgwODdDMzEyLjcxMSAyNi45NDA3IDMxOS45MjEgMjAuMzg1NyAzMzAuNjE2IDIwLjM4NTdDMzQxLjI3NyAyMC4zODU3IDM0OC41MjIgMjYuOTQwNyAzNDguNTIyIDM4LjgwODdDMzQ4LjUyMiA1MC42NDIyIDM0MS4yNzcgNTcuMTk3MiAzMzAuNjE2IDU3LjE5NzJDMzE5LjkyMSA1Ny4xOTcyIDMxMi43MTEgNTAuNjQyMiAzMTIuNzExIDM4LjgwODdaTTMxOC44NTIgMzguODA4N0MzMTguODUyIDQ3LjUwMjcgMzIzLjU3OCA1Mi4yMjkyIDMzMC42MTYgNTIuMjI5MkMzMzcuNjIgNTIuMjI5MiAzNDIuMzQ2IDQ3LjUwMjcgMzQyLjM0NiAzOC44MDg3QzM0Mi4zNDYgMzAuMDgwMiAzMzcuNjIgMjUuMzg4MiAzMzAuNjE2IDI1LjM4ODJDMzIzLjU3OCAyNS4zODgyIDMxOC44NTIgMzAuMDgwMiAzMTguODUyIDM4LjgwODdaIiBmaWxsPSIjMEYwRjBGIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMTM0NV81MDUiPgo8cmVjdCB3aWR0aD0iMzUyIiBoZWlnaHQ9IjcxIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=",C={USDC:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/usdc.svg",BTC:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/btc.svg",ETH:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/eth.svg",SOL:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/sol.svg",ZEC:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/zec.svg",PAXG:"https://cdn.jsdelivr.net/npm/cryptocurrency-icons@0.18.1/svg/color/paxg.svg",HYPE:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/crypto_icons/HYPE.png",NVDA:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/NVDA.png",AAPL:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/AAPL.png",META:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/META.png",GOOGL:"https://cdn.jsdelivr.net/gh/nvstly/icons@main/ticker_icons/GOOGL.png"};var ye={USDC:{address:"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",decimals:6,name:"USDC"},BTC:{address:"0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf",decimals:8,name:"Bitcoin",symbol:"cbBTC"},ETH:{address:"0x4200000000000000000000000000000000000006",decimals:18,name:"ETH",symbol:"WETH"}};var be="https://mainnet.base.org";var _={calmShare:{steady:1,real:.3,bold:.15},defaultLeverage:{steady:1,real:2.5,bold:2.5},maxLeverage:3,minLineDistance:.25,minExpectedMoves:2,topupCapMargin:.1,cashLoanCover:1.8,roundSafety:.9,swapSlippage:.005,quoteSlippage:"0.5",defaultMinTermDays:90,minLiquidUsd:5e4,bundleDeadlineMinutes:60,minOfferRoomUsd:200,maxBuyCostPct:.6,minPoolUsdc:2e4,maxBuyShareOfPool:.01,maxBuyUniswapUsd:1e5,legRoomShare:.5,minLegUsd:.01,minCushionUsd:.01,minPermissionSavingsUsd:.01,stopLossAboveLiquidation:.05,rescueAboveLiquidation:.03,rescueBackTo:.25,stressHourlyScore:70,exitNearPct:.05,assetVol:{bitcoin:.5,eth:.65,stock:.45,gold:.2,coin:.9}};_e();var Tr=[process.env.CHRYSALIS_RPC,be,"https://base-rpc.publicnode.com","https://base.llamarpc.com","https://1rpc.io/base"].filter(Boolean);var Gr=ye.USDC.address;var Wr=j(["function quoteExactInputSingle((address tokenIn,address tokenOut,uint256 amountIn,uint24 fee,uint160 sqrtPriceLimitX96)) returns (uint256 amountOut,uint160,uint32,uint256)"]),Zr=j(["function getPool(address tokenA, address tokenB, int24 tickSpacing) view returns (address)"]),_r=j(["function slot0() view returns (uint160 sqrtPriceX96, int24 tick, uint16, uint16, uint16, bool)","function fee() view returns (uint24)","function token0() view returns (address)"]),Kr=j(["function balanceOf(address) view returns (uint256)"]);var kt=8;function wt(e){let t=_.roundSafety*e*(1-_.swapSlippage-.01),r=1+t*(1-t**kt)/(1-t);return{L:Math.floor((r-.01)*10)/10,need:null}}function Ke(e){return wt(e.market.lltv).L}var m=e=>String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;"),oe=e=>String(e).replace(/\\/g,"\\\\").replace(/'/g,"\\'"),s=e=>{if(e==null||Number.isNaN(Number(e)))return"";let t=Number(e),r=Math.abs(t),n=t<0?"\u2212":"";return r>0&&r<.01?`${n}&lt;$0.01`:r<100?`${n}$${r.toFixed(2)}`:`${n}$${Math.round(r).toLocaleString("en-US")}`},ue=e=>`${Math.round(Number(e)*100)}%`,It=e=>e==null?"":`${e>=0?"+":"\u2212"}${Math.abs(Math.round(e*100))}%`,Et={BTC:"BTC",cbBTC:"BTC",WBTC:"BTC",ETH:"ETH",WETH:"ETH",USDC:"USDC",SOL:"SOL",cbZEC:"ZEC",PAXG:"PAXG",cbHYPE:"HYPE",NVDAc:"NVDA",AAPLc:"AAPL",METAc:"META",GOOGLc:"GOOGL"},Dt={bitcoin:"BTC",eth:"ETH",solana:"SOL",zcash:"ZEC",gold:"PAXG",hyperliquid:"HYPE",nvidia:"NVDA",apple:"AAPL",meta:"META",google:"GOOGL",dollars:"USDC",savings:"USDC"},$t={"S&P 500 fund":"S&amp;P",SpaceX:"SX"};function N(e,t){let r=Et[e]??Dt[String(t??"").toLowerCase()];return r&&C[r]?`<img src="${C[r]}" alt=""${r==="AAPL"||r==="HYPE"?' class="dk"':""}>`:`<span class="ini">${$t[t]??m(String(t??e??"?").replace(/[^A-Za-z0-9 ]/g,"").split(" ").map(a=>a[0]).join("").slice(0,3).toUpperCase())}</span>`}var $=e=>`<div class="top"><div style="display:flex;align-items:center;gap:10px"><img src="${ge}" alt="Morpho" style="height:20px"><span style="width:1px;height:18px;background:#86B1FF"></span><span class="brand">Krystalis</span></div><span class="lab">${m(e)}</span></div>`,b=(e,t,r="")=>`<div role="button" tabindex="0" class="btn${r?" "+r:""}" onclick="sendPrompt('${oe(t)}')">${m(e)}</div>`,Ve=(e,t,r="")=>`<div role="button" tabindex="0" class="btn${r?" "+r:""}" onclick="openLink('${oe(t)}')">${m(e)}</div>`,G=(e,t,r,n,a,o="")=>`<div class="r">${N(e,t)}<span><b>${r}</b>${n?`<small>${n}</small>`:""}${o}</span><span class="v">${a}</span></div>`,At=new Set(["Savings","Borrowed","Wallet","Savings earned","In dollars","To your wallet","In your savings","Earn","Borrow","Cash"]),Z=e=>`<span class="lab">${At.has(e)?`<img class="cu" src="${C.USDC}" alt="">`:""}${m(e)}</span>`,M=(e,t)=>`<div class="stat">${Z(e)}<b>${t}</b></div>`,W=(e,t)=>`<div class="stat"><span class="lab">${m(e)}</span><b>${t}</b></div>`;function Nt(e,t){let r=new Set(["kx"]);for(let o of t.matchAll(/class="([^"]+)"/g))for(let i of o[1].split(/\s+/))i&&r.add(i);let n=o=>o.split(",").some(i=>[...i.matchAll(/\.([A-Za-z][\w-]*)/g)].every(l=>r.has(l[1]))),a=o=>{let i="",l=0;for(;l<o.length;){let u=o.indexOf("{",l);if(u<0)break;let x=o.slice(l,u).trim();if(x.startsWith("@media")){let c=1,d=u+1;for(;d<o.length&&c;)o[d]==="{"?c++:o[d]==="}"&&c--,d++;let p=a(o.slice(u+1,d-1));p.trim()&&(i+=`${x}{${p}}
89
+ `),l=d}else{let c=o.indexOf("}",u);n(x)&&(i+=`${x}{${o.slice(u+1,c)}}
90
+ `),l=c+1}}return i};return e.replace(/<style>([\s\S]*?)<\/style>/,(o,i)=>`<style>
91
+ ${a(i)}</style>`)}var A=(e,t)=>{let r=`<h2 class="sr-only">${m(e)}</h2>
92
+ <div class="kx">${t}</div>`;return`${Nt(fe,r)}
93
+ ${r}`},T=e=>e.length?`<div class="more">${e.join("")}</div>`:"",ne=e=>e?`<div class="foot lab">${m(e)}</div>`:"",St=e=>e>1?` ${e}x`:"";function Xe({name:e,totalUsd:t,rows:r=[],savingsLine:n,askLiveData:a=!1,label:o="Your wallet"}){let i=r.map(l=>G(l.symbol,l.name,m(l.name),m(l.note??""),s(l.usd))).join("");return A(`Krystalis: your wallet holds ${s(t).replace("&lt;","<")}`,`${$(o)}
93
94
  <div class="card"><div><div class="lab">${m(e??"")} \xB7 Base</div><div class="big">${s(t)}</div><div class="up">Earning nothing today</div></div>
94
95
  <div class="rows">${i}</div>${n?`<div class="warn">${m(n)}</div>`:""}</div>
95
- ${a?`<div class="card"><div><b style="font-weight:500">Live market data?</b><div style="font-size:13px;color:var(--mid);margin-top:2px">A few cents, at most $1 a month, to watch your plan for market stress. One Face ID.</div></div><div style="display:flex;gap:8px;flex-wrap:wrap">${y("Use live data","Use live data","main")}${y("Use free data","No live data, use free data")}</div></div>`:""}
96
+ ${a?`<div class="card"><div><b style="font-weight:500">Live market data?</b><div style="font-size:13px;color:var(--mid);margin-top:2px">A few cents, at most $1 a month, to watch your plan for market stress. One Face ID.</div></div><div style="display:flex;gap:8px;flex-wrap:wrap">${b("Use live data","Use live data","main")}${b("Use free data","No live data, use free data")}</div></div>`:""}
96
97
  <div class="sub" style="margin:14px 0 0">What do you want this money to do?</div>
97
- ${S([y("What can I do on Morpho?","What can I do on Morpho?")])}
98
- ${S([y("Save it","Save it"),y("Grow it","Grow it"),y("Save some, grow the rest","Save some, grow the rest")])}`)}function Je(e,t={}){let r=t.savings??{},n=r.netApy??r.avgNetApy,a=p=>p==null?"":`${(p*100).toFixed(1)}%`,o=(e?.assets??[]).map(p=>({a:p,lev:Ve(p)})),i=o.map(p=>p.a.market?.borrowApy).filter(p=>typeof p=="number"),d=i.length?i.reduce((p,f)=>p+f,0)/i.length:null,u=p=>p.map(({a:f,lev:h})=>`<div class="ot">${$(f.symbol,f.name)}<div><b>${m(f.name.replace("S&P 500 fund","S&P 500"))}</b>${h>1?`<small>up to: ${h}x</small>`:"<small>no leverage</small>"}</div></div>`).join(""),x=(p,f)=>f.length?`<div class="og2"><div class="lab">${p}</div><div class="ots">${u(f)}</div></div>`:"",c=o.filter(p=>p.a.kind==="stock"),l=o.filter(p=>p.a.kind!=="stock").sort((p,f)=>(p.a.kind==="gold")-(f.a.kind==="gold"));return D("What Morpho can do with your money today",`${E("Today on Morpho")}
98
+ ${T([b("What can I do on Morpho?","What can I do on Morpho?")])}
99
+ ${T([b("Save it","Save it"),b("Grow it","Grow it"),b("Save some, grow the rest","Save some, grow the rest")])}`)}function Je(e,t={}){let r=t.savings??{},n=r.netApy??r.avgNetApy,a=p=>p==null?"":`${(p*100).toFixed(1)}%`,o=(e?.assets??[]).map(p=>({a:p,lev:Ke(p)})),i=o.map(p=>p.a.market?.borrowApy).filter(p=>typeof p=="number"),l=i.length?i.reduce((p,y)=>p+y,0)/i.length:null,u=p=>p.map(({a:y,lev:v})=>`<div class="ot">${N(y.symbol,y.name)}<div><b>${m(y.name.replace("S&P 500 fund","S&P 500"))}</b>${v>1?`<small>up to: ${v}x</small>`:"<small>no leverage</small>"}</div></div>`).join(""),x=(p,y)=>y.length?`<div class="og2"><div class="lab">${p}</div><div class="ots">${u(y)}</div></div>`:"",c=o.filter(p=>p.a.kind==="stock"),d=o.filter(p=>p.a.kind!=="stock").sort((p,y)=>(p.a.kind==="gold")-(y.a.kind==="gold"));return A("What Morpho can do with your money today",`${$("Today on Morpho")}
99
100
  <div class="card ofc">
100
- <div class="hero h2"><div class="stat">${Z("Earn")}<b>${a(n)}</b><small>APY, out anytime</small></div><div class="stat">${Z("Borrow")}<b>${d!=null?`cost<span style="margin:0 .22em">\u2248</span>${a(d)}`:""}</b><small>with assets below</small></div></div>
101
+ <div class="hero h2"><div class="stat">${Z("Earn")}<b>${a(n)}</b><small>APY, out anytime</small></div><div class="stat">${Z("Borrow")}<b>${l!=null?`cost<span style="margin:0 .22em">\u2248</span>${a(l)}`:""}</b><small>with assets below</small></div></div>
101
102
  <div class="osh"><b>Grow with leverage</b><small>Top leverage for each.</small></div>
102
- ${x(l.some(p=>p.a.kind==="gold")?"Crypto and gold":"Crypto",l)}${x("Stocks",c)}
103
- </div>${ne(`Morpho data${t.takenAt?" \xB7 "+String(t.takenAt).slice(0,10):""}`)}`)}function et(e,{intent:t="",date:r=""}={}){let n=e.rows??[],a=n.length,o=c=>c.grow??{},i=(c,l,p)=>`<div class="ct${l===0?" rc":""}">${p}</div>`,d=(c,l,p="")=>`<div class="cr${p?" "+p:""}"><div class="cl">${c}</div>${n.map((f,h)=>i(f,h,l(f))).join("")}</div>`,u=c=>`<span class="lgs">${(o(c).legs??[]).map(l=>$(l.symbol,l.name)).join("")}</span>`,x=n.every(c=>c.savingsUsd===n[0]?.savingsUsd);return D("Three Krystalis plans compared",`${E("Your plans")}${t?`<div class="sub">${m(t)}</div>`:""}
103
+ ${x(d.some(p=>p.a.kind==="gold")?"Crypto and gold":"Crypto",d)}${x("Stocks",c)}
104
+ </div>${ne(`Morpho data${t.takenAt?" \xB7 "+String(t.takenAt).slice(0,10):""}`)}`)}function et(e,{intent:t="",date:r=""}={}){let n=e.rows??[],a=n.length,o=c=>c.grow??{},i=(c,d,p)=>`<div class="ct${d===0?" rc":""}">${p}</div>`,l=(c,d,p="")=>`<div class="cr${p?" "+p:""}"><div class="cl">${c}</div>${n.map((y,v)=>i(y,v,d(y))).join("")}</div>`,u=c=>`<span class="lgs">${(o(c).legs??[]).map(d=>N(d.symbol,d.name)).join("")}</span>`,x=n.every(c=>c.savingsUsd===n[0]?.savingsUsd);return A("Three Krystalis plans compared",`${$("Your plans")}${t?`<div class="sub">${m(t)}</div>`:""}
104
105
  <div class="card cmp" style="--cols:${a}">
105
- <div class="cr ch2"><div class="cl"></div>${n.map((c,l)=>i(c,l,`${l===0?'<span class="rec">Recommended</span>':'<span class="rec">&nbsp;</span>'}<p class="name">${m(c.name)}</p>`)).join("")}</div>
106
- ${d("Portfolio value",c=>`<b class="pvb">${s((o(c).exposureUsd??0)+(c.savingsUsd??0))}</b>`)}
107
- ${d("Assets",u)}
108
- ${d("Invested",c=>s(o(c).exposureUsd??0))}
109
- ${x?"":d("Savings",c=>s(c.savingsUsd))}
110
- ${d("Borrowed",c=>s(o(c).borrowUsd??0))}
111
- ${d("If all fall 10%",c=>s(o(c).if10downUsd??0))}
112
- ${d("1st liquidation",c=>o(c).firstLiquidation?`${m(o(c).firstLiquidation.name.replace("S&P 500 fund","S&P 500"))}<small>${o(c).firstLiquidation.dropPct}% below</small>`:"None")}
113
- <div class="cr"><div class="cl"></div>${n.map((c,l)=>i(c,l,y("Pick",`I pick ${c.name}`,l===0?"main go":"go"))).join("")}</div>
106
+ <div class="cr ch2"><div class="cl"></div>${n.map((c,d)=>i(c,d,`${d===0?'<span class="rec">Recommended</span>':'<span class="rec">&nbsp;</span>'}<p class="name">${m(c.name)}</p>`)).join("")}</div>
107
+ ${l("Portfolio value",c=>`<b class="pvb">${s((o(c).exposureUsd??0)+(c.savingsUsd??0))}</b>`)}
108
+ ${l("Assets",u)}
109
+ ${l("Invested",c=>s(o(c).exposureUsd??0))}
110
+ ${x?"":l("Savings",c=>s(c.savingsUsd))}
111
+ ${l("Borrowed",c=>s(o(c).borrowUsd??0))}
112
+ ${l("If all fall 10%",c=>s(o(c).if10downUsd??0))}
113
+ ${l("1st liquidation",c=>o(c).firstLiquidation?`${m(o(c).firstLiquidation.name.replace("S&P 500 fund","S&P 500"))}<small>${o(c).firstLiquidation.dropPct}% below</small>`:"None")}
114
+ <div class="cr"><div class="cl"></div>${n.map((c,d)=>i(c,d,b("Pick",`I pick ${c.name}`,d===0?"main go":"go"))).join("")}</div>
114
115
  </div>
115
- <div class="mob swr">${n.map((c,l)=>jt(c,l,x)).join("")}</div>${x&&n[0]?`<div class="fl" style="margin-top:10px">In ${n.length===2?"both plans":n.length>2?`all ${n.length}`:"this plan"}, ${s(n[0].savingsUsd)} goes to your savings and earns about ${s(n[0].savingsYearUsd)} a year.</div>`:""}
116
- ${ne(`Morpho data${r?" \xB7 "+r:""}`)}`)}function Tt(e){return`<div class="al">${((e.grow??{}).legs??[]).map(t=>`<div>${$(t.symbol,t.name)}<span>${m(t.name.replace("S&P 500 fund","S&P 500"))}${t.leverage>1?`<em>${t.leverage}x</em>`:""}</span><b>${s(t.exposureUsd)}</b></div>`).join("")}</div>`}function jt(e,t,r){let n=e.grow??{},a=n.firstLiquidation,o=(i,d)=>`<li><span>${i}</span><b>${d}</b></li>`;return`<div class="sw${t===0?" rc":""}"><p class="name">${m(e.name)}</p>
116
+ <div class="mob swr">${n.map((c,d)=>jt(c,d,x)).join("")}</div>${x&&n[0]?`<div class="fl" style="margin-top:10px">In ${n.length===2?"both plans":n.length>2?`all ${n.length}`:"this plan"}, ${s(n[0].savingsUsd)} goes to your savings and earns about ${s(n[0].savingsYearUsd)} a year.</div>`:""}
117
+ ${ne(`Morpho data${r?" \xB7 "+r:""}`)}`)}function Tt(e){return`<div class="al">${((e.grow??{}).legs??[]).map(t=>`<div>${N(t.symbol,t.name)}<span>${m(t.name.replace("S&P 500 fund","S&P 500"))}${t.leverage>1?`<em>${t.leverage}x</em>`:""}</span><b>${s(t.exposureUsd)}</b></div>`).join("")}</div>`}function jt(e,t,r){let n=e.grow??{},a=n.firstLiquidation,o=(i,l)=>`<li><span>${i}</span><b>${l}</b></li>`;return`<div class="sw${t===0?" rc":""}"><p class="name">${m(e.name)}</p>
117
118
  <div><span class="lab">Portfolio value</span><b class="pvb" style="display:block">${s((n.exposureUsd??0)+(e.savingsUsd??0))}</b></div>
118
119
  ${Tt(e)}<ul class="pts">${o("Invested",s(n.exposureUsd??0))}${r?"":o("Savings",s(e.savingsUsd))}${o("Borrowed",s(n.borrowUsd??0))}${o("If all fall 10%",s(n.if10downUsd??0))}${a?o("1st liquidation",`${m(a.name.replace("S&P 500 fund","S&P 500"))}, \u2212${a.dropPct}%`):""}</ul>
119
- ${y("Pick",`I pick ${e.name}`,t===0?"main go":"go")}</div>`}function tt(e,t,{link:r="",name:n="Your plan",date:a=""}={}){let o=e.grow,i=g=>g.liquidationPrice?`${Math.round((g.dropToLine??0)*100)}% below`:"",d=(o?.legs??[]).map(g=>`<div class="tr"><div class="as">${$(g.symbol,g.name)}<span style="min-width:0"><b>${m(g.name)}${g.leverage>1?`<span class="pill">${g.leverage}x</span>`:""}</b><small class="nar">${s(g.equityUsd)} + ${s(g.borrowUsd??0)} borrowed</small></span></div>
120
- <span class="n wide">${s(g.equityUsd)}</span><span class="n wide">${s(g.borrowUsd??0)}</span><span class="n w">${s(g.exposureUsd)}</span></div>`).join(""),u=(o?.legs??[]).filter(g=>g.liquidationPrice).map(g=>`<div class="lq"><span class="as">${$(g.symbol,g.name)}<span>${m(g.name)}</span></span><span class="n">${s(g.liquidationPrice)} <small>${i(g)}</small></span></div>`).join(""),x=e.calm?.usd>0?`<div class="tr"><div class="as">${$("USDC","Savings")}<span style="min-width:0"><b>Savings${e.calm.apyLow!=null?`<span class="pill">${(e.calm.apyLow*100).toFixed(1)}%</span>`:""}</b><small>${e.calm.yearUsd!=null?`Earns about ${s(e.calm.yearUsd)} a year`:"Earns the savings rate"}</small></span></div>
121
- <span class="n wide">${s(e.calm.usd)}</span><span class="n wide"></span><span class="n w">${s(e.calm.usd)}</span></div>`:"",c='<div class="tr th"><span>Asset</span><span class="wide">Yours</span><span class="wide">Borrowed</span><span>Worth</span></div>',l=(o?.legs??[]).filter(g=>g.borrowUsd>0&&g.rate!=null).map(g=>g.rate*100),p=l.length?`Borrowed at a variable rate, ${Math.min(...l).toFixed(1)}%${Math.max(...l)-Math.min(...l)>=.05?` to ${Math.max(...l).toFixed(1)}%`:""} today.`:"",f=Object.keys(e.exits?.byMarket??{}).length,h=f?`On ${f} asset${f>1?"s":""}`:"Not set",U=o?.legs?.length??0,N=[];U&&N.push(`buys ${U===1?o.legs[0].name:`${U} assets`}`),o?.borrowUsd>0&&N.push(`borrows ${s(o.borrowUsd)}`),e.savingsDepositUsd>0&&N.push(`puts ${s(e.savingsDepositUsd)} in your savings`);let st=`One Face ID ${N.length>1?N.slice(0,-1).join(", ")+" and "+N[N.length-1]:N[0]??"signs the plan"}.`,me=e.needsGuardianPermission?"Then, if you want it, a second Face ID turns on the rescue top-up.":e.topupPermissionUntil?`Your rescue top-up stays on until ${m(e.topupPermissionUntil)}.`:"",j=(g,ct)=>`<div role="button" tabindex="0" class="btn tag" onclick="sendPrompt('${oe(ct)}')">${m(g)}</div>`,xe=o?[j("+ Stop-loss","Add a stop-loss"),j("+ Take-profit","Add a take-profit"),j("Less risk","Less risk"),j("More in savings","Put more in savings"),j("Change assets","Change the assets"),j("Add money","Add money")].join(""):"";return D("Your Krystalis plan before you sign",`${E(n)}
122
- <div class="card">${o?`<div class="hero h4"><div class="stat pv"><span class="lab">Portfolio value</span><b>${s(o.exposureUsd+(e.calm?.usd??0))}</b></div>${v("Invested",s(o.exposureUsd))}${W("Savings",s(e.calm?.usd??0))}${W("Borrowed",s(o.borrowUsd))}</div>`:`<div class="stat pv" style="text-align:center"><span class="lab">Savings</span><b>${s(e.calm?.usd)}</b></div>`}
123
- <div class="tb">${c}${d}${x}${e.feeReserveUsd>0?`<div style="font-size:12px;color:var(--mid);padding-top:8px;border-top:1px solid var(--sky2)">${s(e.feeReserveUsd)} stays in your wallet to pay network fees.</div>`:""}</div>
120
+ ${b("Pick",`I pick ${e.name}`,t===0?"main go":"go")}</div>`}function tt(e,t,{link:r="",name:n="Your plan",date:a=""}={}){let o=e.grow,i=g=>g.liquidationPrice?`${Math.round((g.dropToLine??0)*100)}% below`:"",l=(o?.legs??[]).map(g=>`<div class="tr"><div class="as">${N(g.symbol,g.name)}<span style="min-width:0"><b>${m(g.name)}${g.leverage>1?`<span class="pill">${g.leverage}x</span>`:""}</b><small class="nar">${s(g.equityUsd)} + ${s(g.borrowUsd??0)} borrowed</small></span></div>
121
+ <span class="n wide">${s(g.equityUsd)}</span><span class="n wide">${s(g.borrowUsd??0)}</span><span class="n w">${s(g.exposureUsd)}</span></div>`).join(""),u=(o?.legs??[]).filter(g=>g.liquidationPrice).map(g=>`<div class="lq"><span class="as">${N(g.symbol,g.name)}<span>${m(g.name)}</span></span><span class="n">${s(g.liquidationPrice)} <small>${i(g)}</small></span></div>`).join(""),x=e.calm?.usd>0?`<div class="tr"><div class="as">${N("USDC","Savings")}<span style="min-width:0"><b>Savings${e.calm.apyLow!=null?`<span class="pill">${(e.calm.apyLow*100).toFixed(1)}%</span>`:""}</b><small>${e.calm.yearUsd!=null?`Earns about ${s(e.calm.yearUsd)} a year`:"Earns the savings rate"}</small></span></div>
122
+ <span class="n wide">${s(e.calm.usd)}</span><span class="n wide"></span><span class="n w">${s(e.calm.usd)}</span></div>`:"",c='<div class="tr th"><span>Asset</span><span class="wide">Yours</span><span class="wide">Borrowed</span><span>Worth</span></div>',d=(o?.legs??[]).filter(g=>g.borrowUsd>0&&g.rate!=null).map(g=>g.rate*100),p=d.length?`Borrowed at a variable rate, ${Math.min(...d).toFixed(1)}%${Math.max(...d)-Math.min(...d)>=.05?` to ${Math.max(...d).toFixed(1)}%`:""} today.`:"",y=Object.keys(e.exits?.byMarket??{}).length,v=y?`On ${y} asset${y>1?"s":""}`:"Not set",f=o?.legs?.length??0,w=[];f&&w.push(`buys ${f===1?o.legs[0].name:`${f} assets`}`),o?.borrowUsd>0&&w.push(`borrows ${s(o.borrowUsd)}`),e.savingsDepositUsd>0&&w.push(`puts ${s(e.savingsDepositUsd)} in your savings`);let st=`One Face ID ${w.length>1?w.slice(0,-1).join(", ")+" and "+w[w.length-1]:w[0]??"signs the plan"}.`,me=e.needsGuardianPermission?"Then, if you want it, a second Face ID turns on the rescue top-up.":e.topupPermissionUntil?`Your rescue top-up stays on until ${m(e.topupPermissionUntil)}.`:"",z=(g,ct)=>`<div role="button" tabindex="0" class="btn tag" onclick="sendPrompt('${oe(ct)}')">${m(g)}</div>`,xe=o?[z("+ Stop-loss","Add a stop-loss"),z("+ Take-profit","Add a take-profit"),z("Less risk","Less risk"),z("More in savings","Put more in savings"),z("Change assets","Change the assets"),z("Add money","Add money")].join(""):"";return A("Your Krystalis plan before you sign",`${$(n)}
123
+ <div class="card">${o?`<div class="hero h4"><div class="stat pv"><span class="lab">Portfolio value</span><b>${s(o.exposureUsd+(e.calm?.usd??0))}</b></div>${M("Invested",s(o.exposureUsd))}${W("Savings",s(e.calm?.usd??0))}${W("Borrowed",s(o.borrowUsd))}</div>`:`<div class="stat pv" style="text-align:center"><span class="lab">Savings</span><b>${s(e.calm?.usd)}</b></div>`}
124
+ <div class="tb">${c}${l}${x}${e.feeReserveUsd>0?`<div style="font-size:12px;color:var(--mid);padding-top:8px;border-top:1px solid var(--sky2)">${s(e.feeReserveUsd)} stays in your wallet to pay network fees.</div>`:""}</div>
124
125
  ${u?`<div class="tb"><div class="lab" style="padding-bottom:4px">Liquidation levels</div>${u}</div>`:""}
125
- ${o?`<dl><dt>Interest</dt><dd>${s(o.monthlyCostUsd)} a month</dd><dt>If all fall 10%</dt><dd>${s(o.if10down)}</dd><dt>Take-profit</dt><dd>${h}</dd></dl>${p?`<div style="font-size:12px;color:var(--mid);margin-top:-4px">${m(p)}</div>`:""}`:""}
126
+ ${o?`<dl><dt>Interest</dt><dd>${s(o.monthlyCostUsd)} a month</dd><dt>If all fall 10%</dt><dd>${s(o.if10down)}</dd><dt>Take-profit</dt><dd>${v}</dd></dl>${p?`<div style="font-size:12px;color:var(--mid);margin-top:-4px">${m(p)}</div>`:""}`:""}
126
127
  ${xe?`<div class="tags">${xe}</div>`:""}</div>
127
- <div class="card" style="gap:10px;text-align:center"><div style="font-size:14px">${m(st)}</div>${r?Ke("Confirm with Face ID",r,"main go"):""}${me?`<div style="font-size:12px;color:var(--mid)">${me}</div>`:""}</div>
128
- ${ne(`Morpho data${a?" \xB7 "+a:""} \xB7 variable rates`)}`)}function rt(e,{steps:t,tx:r="",rescueOn:n=!1,checkTime:a=""}={}){let o=e.grow,i=(o?.legs??[]).map(x=>C(x.symbol,x.name,`${m(x.name)}${St(x.leverage)}`,x.liquidationPrice?`Liquidation level ${s(x.liquidationPrice)}`:"",s(x.exposureUsd))).join(""),d=o?n?"Rescue top-up is on: if a loan is about to be liquidated, I pay it down from your savings.":"If a loan is about to be liquidated, I message you.":"",u=a?` I check your plan every day at ${m(a)}.`:"";return D("Done: your Krystalis plan is live",`${E("Done")}
128
+ <div class="card" style="gap:10px;text-align:center"><div style="font-size:14px">${m(st)}</div>${r?Ve("Confirm with Face ID",r,"main go"):""}${me?`<div style="font-size:12px;color:var(--mid)">${me}</div>`:""}</div>
129
+ ${ne(`Morpho data${a?" \xB7 "+a:""} \xB7 variable rates`)}`)}function rt(e,{steps:t,tx:r="",rescueOn:n=!1,checkTime:a=""}={}){let o=e.grow,i=(o?.legs??[]).map(x=>G(x.symbol,x.name,`${m(x.name)}${St(x.leverage)}`,x.liquidationPrice?`Liquidation level ${s(x.liquidationPrice)}`:"",s(x.exposureUsd))).join(""),l=o?n?"Rescue top-up is on: if a loan is about to be liquidated, I pay it down from your savings.":a?"If a loan is about to be liquidated, I message you.":"I check your plan whenever you open this chat.":"",u=a?` I check your plan every day at ${m(a)}.`:"";return A("Done: your Krystalis plan is live",`${$("Done")}
129
130
  <div class="card"><div style="display:flex;align-items:center;gap:12px"><span class="ok" aria-hidden="true">\u2713</span><div><div class="name">Your plan is live</div><div style="font-size:13px;color:var(--mid)">Signed with one Face ID${t?` \xB7 ${t} steps on Base`:""}</div></div></div>
130
- <div class="stats">${o?v("Portfolio value",s(o.exposureUsd+(e.calm?.usd??0))):""}${v("Savings",s(e.calm?.usd??0))}${o?v("Borrowed",s(o.borrowUsd)):""}</div>
131
- ${i?`<div class="rows">${i}</div>`:""}${d||u?`<div class="warn">${m(d)}${u}</div>`:""}${r?`<a href="https://basescan.org/tx/${m(r)}" style="font-size:13px">View on Base explorer</a>`:""}</div>
132
- ${S([y("How am I doing?","How am I doing?"),y("Add money","Add money")])}`)}function ot(e,{date:t="",line:r=""}={}){let n=e.state??{},a=e.since??n.since,o=n.loans??[],i=o.reduce((f,h)=>f+(h.backingUsd??0),0),d=o.reduce((f,h)=>f+(h.owedAtDateUsd??0),0),u=n.savingsUsd??0,x=f=>f!=null&&Math.abs(f)>=.005?` ${wt(f)}`:"",c=o.map(f=>C(f.asset,f.name,`${m(f.name)}${x(f.moveSinceStart)}`,`${ue(f.aboveLine)} above its liquidation level`,s(f.backingUsd))).join(""),l=a?.madeUsd,p=r||(e.quiet?"Nothing to change.":e.trigger?.kind?"One thing needs you, see below.":"");return D("Your Krystalis plan today",`${E(a?.date?`Since ${a.date}`:"Your plan")}
133
- <div class="card"><div class="hero h4"><div class="stat pv"><span class="lab">Portfolio value</span><b>${s(i+u)}</b>${l!=null&&Math.abs(l)>=.01?`<small class="up" style="display:block;margin-top:2px">${l>=0?"+":"\u2212"}${s(Math.abs(l))} since you signed</small>`:""}</div>${W("Invested",s(i))}${W("Savings",s(u))}${W("Borrowed",s(d))}</div>
134
- ${c?`<div class="rows">${c}</div>`:""}${p?`<div class="warn">${m(p)}</div>`:""}</div>
135
- ${S([y("Add money","Add money"),y("Take my gains","Take my gains"),y("Less risk","Less risk"),y("Close everything","Close everything")])}${ne(`Morpho data${t?" \xB7 "+t:""}`)}`)}function nt(e,{link:t="",steps:r=null,revokeAfter:n=!1}={}){let a=e.keep==="wallet",o=new Map;for(let l of e.loans??[])o.set(l.name,{symbol:l.symbol,name:l.name,usd:l.backUsd});for(let l of e.dust??[]){let p=o.get(l.name);p?p.usd+=l.usd:o.set(l.name,{symbol:l.symbol,name:l.name,usd:l.usd})}let i=[...o.values()].reduce((l,p)=>l+p.usd,0),d=[...o.values()].map(l=>`<div class="tr" style="grid-template-columns:minmax(0,1fr) auto"><div class="as">${$(l.symbol,l.name)}<span><b>${m(l.name.replace("S&P 500 fund","S&P 500"))}</b></span></div><span class="n w">${s(l.usd)}</span></div>`).join(""),u=e.savingsBeforeUsd>0?`<div class="tr" style="grid-template-columns:minmax(0,1fr) auto"><div class="as">${$("USDC","Savings")}<span><b>Savings</b><small>${a?"Taken out to your wallet":"Stays in your savings"}</small></span></div><span class="n w">${s(e.savingsBeforeUsd)}</span></div>`:"",x=a?e.inWalletUsd:e.inSavingsUsd,c=(l,p)=>`<div role="button" tabindex="0" class="btn tag" onclick="sendPrompt('${oe(p)}')">${m(l)}</div>`;return D(`Back to dollars: about ${s(e.totalUsd).replace("&lt;","<")} ${a?"to your wallet":"in your savings"}`,`${E("Back to dollars")}
136
- <div class="card"><div class="hero h4"><div class="stat pv">${Z(a?"To your wallet":"In your savings")}<b>${s(x)}</b></div>${v("Loans repaid",s(e.repaidUsd??0))}${v("Sold",s(i))}${v("Savings",s(e.savingsBeforeUsd??0))}</div>
137
- ${d?`<div class="tb"><div class="tr th" style="grid-template-columns:minmax(0,1fr) auto"><span>Sold to dollars</span><span>Amount</span></div>${d}${u}</div>`:u}
131
+ <div class="stats">${o?M("Portfolio value",s(o.exposureUsd+(e.calm?.usd??0))):""}${M("Savings",s(e.calm?.usd??0))}${o?M("Borrowed",s(o.borrowUsd)):""}</div>
132
+ ${i?`<div class="rows">${i}</div>`:""}${l||u?`<div class="warn">${m(l)}${u}</div>`:""}${r?`<a href="https://basescan.org/tx/${m(r)}" style="font-size:13px">View on Base explorer</a>`:""}</div>
133
+ ${T([b("How am I doing?","How am I doing?"),b("Add money","Add money")])}`)}function ot(e,{date:t="",line:r=""}={}){let n=e.state??{},a=e.since??n.since,o=n.loans??[],i=o.reduce((f,w)=>f+(w.backingUsd??0),0),l=o.reduce((f,w)=>f+(w.owedAtDateUsd??0),0),u=n.savingsUsd??0,x=f=>f!=null&&Math.abs(f)>=.005?` ${It(f)}`:"",c=f=>Math.max((f.backingUsd??0)-(f.owedAtDateUsd??0),0),p=o.length?`<div class="tb"><div class="tr th t5"><span>Asset</span><span class="wide">Price</span><span class="wide">Liq at</span><span class="wide">Yours</span><span class="wide">Borrowed</span><span>Worth</span></div>${o.map(f=>`<div class="tr t5"><div class="as">${N(f.asset,f.name)}<span style="min-width:0"><b>${m(f.name)}${f.leverage>1?`<span class="pill">${Math.round(f.leverage*10)/10}x</span>`:""}${x(f.moveSinceStart)}</b><small class="nar">${s(c(f))} + ${s(f.owedAtDateUsd??0)} borrowed</small></span></div>
134
+ <span class="n wide lq5">${f.price!=null?s(f.price):""}</span><span class="n wide lq5">${f.aboveLine!=null&&f.liquidationPrice?`-${ue(f.aboveLine)}`:"None"}</span><span class="n wide">${s(c(f))}</span><span class="n wide">${s(f.owedAtDateUsd??0)}</span><span class="n w">${s(f.backingUsd)}</span></div>`).join("")}</div>`:"",y=a?.madeUsd,v=r||(e.quiet?"Nothing to change.":e.trigger?.kind?"One thing needs you, see below.":"");return A("Your Krystalis plan today",`${$(a?.date?`Since ${a.date}`:"Your plan")}
135
+ <div class="card"><div class="hero h4"><div class="stat pv"><span class="lab">Portfolio value</span><b>${s(i+u)}</b>${y!=null&&Math.abs(y)>=.01?`<small class="up" style="display:block;margin-top:2px">${y>=0?"+":"\u2212"}${s(Math.abs(y))} since you signed</small>`:""}</div>${W("Invested",s(i))}${W("Savings",s(u))}${W("Borrowed",s(l))}</div>
136
+ ${p}${v?`<div class="warn">${m(v)}</div>`:""}</div>
137
+ ${T([b("Add money","Add money"),b("Take my gains","Take my gains"),b("Less risk","Less risk"),b("Close everything","Close everything")])}${ne(`Morpho data${t?" \xB7 "+t:""}`)}`)}function nt(e,{link:t="",steps:r=null,revokeAfter:n=!1}={}){let a=e.keep==="wallet",o=new Map;for(let d of e.loans??[])o.set(d.name,{symbol:d.symbol,name:d.name,usd:d.backUsd});for(let d of e.dust??[]){let p=o.get(d.name);p?p.usd+=d.usd:o.set(d.name,{symbol:d.symbol,name:d.name,usd:d.usd})}let i=[...o.values()].reduce((d,p)=>d+p.usd,0),l=[...o.values()].map(d=>`<div class="tr" style="grid-template-columns:minmax(0,1fr) auto"><div class="as">${N(d.symbol,d.name)}<span><b>${m(d.name.replace("S&P 500 fund","S&P 500"))}</b></span></div><span class="n w">${s(d.usd)}</span></div>`).join(""),u=e.savingsBeforeUsd>0?`<div class="tr" style="grid-template-columns:minmax(0,1fr) auto"><div class="as">${N("USDC","Savings")}<span><b>Savings</b><small>${a?"Taken out to your wallet":"Stays in your savings"}</small></span></div><span class="n w">${s(e.savingsBeforeUsd)}</span></div>`:"",x=a?e.inWalletUsd:e.inSavingsUsd,c=(d,p)=>`<div role="button" tabindex="0" class="btn tag" onclick="sendPrompt('${oe(p)}')">${m(d)}</div>`;return A(`Back to dollars: about ${s(e.totalUsd).replace("&lt;","<")} ${a?"to your wallet":"in your savings"}`,`${$("Back to dollars")}
138
+ <div class="card"><div class="hero h4"><div class="stat pv">${Z(a?"To your wallet":"In your savings")}<b>${s(x)}</b></div>${M("Loans repaid",s(e.repaidUsd??0))}${M("Sold",s(i))}${M("Savings",s(e.savingsBeforeUsd??0))}</div>
139
+ ${l?`<div class="tb"><div class="tr th" style="grid-template-columns:minmax(0,1fr) auto"><span>Sold to dollars</span><span>Amount</span></div>${l}${u}</div>`:u}
138
140
  <div style="font-size:12px;color:var(--mid)">Every loan is repaid. Nothing is left in your wallet but dollars${e.ethKeptUsd>=.01?` and ${s(e.ethKeptUsd)} of ETH for network fees`:""}${!a&&e.inWalletUsd>0?`, and ${s(e.inWalletUsd)} stays in your wallet${e.feeReserveUsd?" for network fees":""}`:""}.</div>
139
141
  <div class="tags">${c(a?"Keep it in my savings":"Send to my wallet",a?"Keep the dollars in my savings instead":"Send the dollars to my wallet instead")}${c("New portfolio","Make me a new plan with this money")}${c("Keep my assets","Close the loans but keep my assets")}${c("Sell just one","Sell just one asset")}</div></div>
140
- <div class="card" style="gap:10px;text-align:center"><div style="font-size:14px">One Face ID${r?`, ${r} steps`:""}.${n?" Then one more switches off my top-up permission.":""}</div>${t?Ke("Confirm with Face ID",t,"main go"):""}</div>`)}function at(e,{steps:t=null,tx:r="",permissionOff:n=!1,permissionOn:a=!1}={}){let o=(e.walletUsd??0)+(e.savingsUsd??0),i=e.loansLeft?"":`Nothing left open: the daily check is off${n?" and the top-up permission is off":a?". One more Face ID switches off the top-up permission":""}.`;return D("Done: back to dollars",`${E("Done")}
141
- <div class="card"><div style="display:flex;align-items:center;gap:12px"><img src="${L.USDC}" alt="" style="width:32px;height:32px;border-radius:50%;flex:none"><div><div class="name">You're back in dollars</div><div style="font-size:13px;color:var(--mid)">Signed with one Face ID${t?` \xB7 ${t} steps on Base`:""}</div></div></div>
142
- <div class="hero h4"><div class="stat pv">${Z("In dollars")}<b>${s(o)}</b></div>${v("Wallet",s(e.walletUsd??0))}${v("Savings",s(e.savingsUsd??0))}${v("Loans",e.loansLeft?String(e.loansLeft):"None")}</div>
142
+ <div class="card" style="gap:10px;text-align:center"><div style="font-size:14px">One Face ID${r?`, ${r} steps`:""}.${n?" Then one more switches off my top-up permission.":""}</div>${t?Ve("Confirm with Face ID",t,"main go"):""}</div>`)}function at(e,{steps:t=null,tx:r="",permissionOff:n=!1,permissionOn:a=!1}={}){let o=(e.walletUsd??0)+(e.savingsUsd??0),i=e.loansLeft?"":`Nothing left open: the daily check is off${n?" and the top-up permission is off":a?". One more Face ID switches off the top-up permission":""}.`;return A("Done: back to dollars",`${$("Done")}
143
+ <div class="card"><div style="display:flex;align-items:center;gap:12px"><img src="${C.USDC}" alt="" style="width:32px;height:32px;border-radius:50%;flex:none"><div><div class="name">You're back in dollars</div><div style="font-size:13px;color:var(--mid)">Signed with one Face ID${t?` \xB7 ${t} steps on Base`:""}</div></div></div>
144
+ <div class="hero h4"><div class="stat pv">${Z("In dollars")}<b>${s(o)}</b></div>${M("Wallet",s(e.walletUsd??0))}${M("Savings",s(e.savingsUsd??0))}${M("Loans",e.loansLeft?String(e.loansLeft):"None")}</div>
143
145
  ${(e.otherUsd??0)>=.01?`<div style="font-size:12px;color:var(--mid)">Plus ${s(e.otherUsd)} of other tokens in your wallet.</div>`:""}${i?`<div class="warn">${m(i)}</div>`:""}${r?`<a href="https://basescan.org/tx/${m(r)}" style="font-size:13px">View on Base explorer</a>`:""}</div>
144
- ${S([y("New portfolio","Make me a new plan with this money"),y("What can I do on Morpho?","What can I do on Morpho?")])}`)}function it(e){let t=e.name??e.asset;if(e.kind==="cushion"&&e.automatic&&e.lineAfter){let r=e.price&&e.lineBefore?1-e.lineBefore/e.price:null,n=e.price&&e.lineAfter?1-e.lineAfter/e.price:null;return D(`${t} came close to its liquidation level, so Krystalis topped up the loan`,`${E("Rescue top-up")}
145
- <div class="card">${C(e.asset,t,`${m(t)} came close to its liquidation level`,e.price?`${m(t)} at ${s(e.price)}, liquidation level ${s(e.lineBefore)}`:"","")}
146
- <div class="stats">${v("Topped up",s(e.usd))}${v("Liquidation level",`${s(e.lineBefore)} \u2192 ${s(e.lineAfter)}`)}${e.savingsAfter!=null?v("Savings left",s(e.savingsAfter)):""}</div>
146
+ ${T([b("New portfolio","Make me a new plan with this money"),b("What can I do on Morpho?","What can I do on Morpho?")])}`)}function it(e){let t=e.name??e.asset;if(e.kind==="cushion"&&e.rescued===!0&&e.lineAfter){let r=e.price&&e.lineBefore?1-e.lineBefore/e.price:null,n=e.price&&e.lineAfter?1-e.lineAfter/e.price:null;return A(`${t} came close to its liquidation level, so Krystalis topped up the loan`,`${$("Rescue top-up")}
147
+ <div class="card">${G(e.asset,t,`${m(t)} came close to its liquidation level`,e.price?`${m(t)} at ${s(e.price)}, liquidation level ${s(e.lineBefore)}`:"","")}
148
+ <div class="stats">${M("Topped up",s(e.usd))}${M("Liquidation level",`${s(e.lineBefore)} \u2192 ${s(e.lineAfter)}`)}${e.savingsAfter!=null?M("Savings left",s(e.savingsAfter)):""}</div>
147
149
  ${n!=null?`<div style="font-size:13px;color:var(--mid)">${m(t)} is now ${ue(n)} above its liquidation level${r!=null?`, it was ${ue(r)}`:""}.</div>`:""}
148
150
  <div class="warn">I paid down your ${m(t)} loan from your savings, as you agreed. Nothing was sold.</div></div>
149
- ${S([y(`Less risk on ${t}`,`Less risk on ${t}`),y(`Sell my ${t}`,`Sell my ${t}`),y("Keep it","Keep it as it is")])}`)}if(e.kind==="takeProfit"||e.kind==="stopLoss"){let r=e.kind==="takeProfit"?"take-profit":"stop-loss",n=e.kind==="takeProfit"?e.takeProfitPrice:e.stopLossPrice;return D(`${t} reached your ${r}`,`${E(r==="take-profit"?"Take-profit":"Stop-loss")}
150
- <div class="card">${C(e.asset,t,`${m(t)} reached your ${r}`,"","")}
151
- <div class="stats">${v("Price",s(e.price))}${v(`Your ${r}`,s(n))}${v("You'd end with",s(e.endsWithUsd))}</div>
151
+ ${T([b(`Less risk on ${t}`,`Less risk on ${t}`),b(`Sell my ${t}`,`Sell my ${t}`),b("Keep it","Keep it as it is")])}`)}if(e.kind==="takeProfit"||e.kind==="stopLoss"){let r=e.kind==="takeProfit"?"take-profit":"stop-loss",n=e.kind==="takeProfit"?e.takeProfitPrice:e.stopLossPrice;return A(`${t} reached your ${r}`,`${$(r==="take-profit"?"Take-profit":"Stop-loss")}
152
+ <div class="card">${G(e.asset,t,`${m(t)} reached your ${r}`,"","")}
153
+ <div class="stats">${M("Price",s(e.price))}${M(`Your ${r}`,s(n))}${M("You'd end with",s(e.endsWithUsd))}</div>
152
154
  <div class="warn">Selling takes one Face ID. Nothing is sold until you say so.</div></div>
153
- ${S([y(`Sell my ${t}`,`Sell my ${t}`,"main"),y("Keep it","Keep it as it is")])}`)}return D(`${t} is about to be liquidated`,`${E("Needs you")}
154
- <div class="card">${C(e.asset,t,`${m(t)} is about to be liquidated`,e.lineBefore?`Liquidation level ${s(e.lineBefore)}`:"","")}
155
- <div class="warn">I couldn't top it up from your savings on my own. Pick what to do and I'll prepare it.</div></div>
156
- ${S([y("Top up from my savings",`Top up my ${t} loan from my savings`,"main"),y("Make it smaller",`Less risk on ${t}`),y(`Sell my ${t}`,`Sell my ${t}`)])}`)}var zt={opener:Xe,offering:Je,plans:et,plan:tt,done:rt,position:ot,alert:it,exit:nt,"exit-done":at};globalThis.Krystalis={version:"1.0.0",draw(e,t,r){let n=r??document.getElementById("kx")??document.body,a=zt[e];n.innerHTML=a?a(...t):""}};})();
155
+ ${T([b(`Sell my ${t}`,`Sell my ${t}`,"main"),b("Keep it","Keep it as it is")])}`)}return A(`${t} is about to be liquidated`,`${$("Needs you")}
156
+ <div class="card">${G(e.asset,t,`${m(t)} is about to be liquidated`,e.lineBefore??e.liquidationPrice?`Liquidation level ${s(e.lineBefore??e.liquidationPrice)}`:"","")}
157
+ <div class="warn">${e.kind==="cushion"&&(e.rescued===!1||!e.automatic)?"I couldn't top it up from your savings on my own. ":""}Pick what to do and I'll prepare it.</div></div>
158
+ ${T([b("Top up from my savings",`Top up my ${t} loan from my savings`,"main"),b("Make it smaller",`Less risk on ${t}`),b(`Sell my ${t}`,`Sell my ${t}`)])}`)}var zt={opener:Xe,offering:Je,plans:et,plan:tt,done:rt,position:ot,alert:it,exit:nt,"exit-done":at};globalThis.Krystalis={version:"1.0.1",draw(e,t,r){let n=r??document.getElementById("kx")??document.body,a=zt[e];n.innerHTML=a?a(...t):""}};})();
package/package.json CHANGED
@@ -1,9 +1,16 @@
1
1
  {
2
2
  "name": "krystalis-cards",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Draws Krystalis's Morpho cards in a chat from the numbers its engine sends.",
5
5
  "main": "dist/cards.js",
6
- "files": ["dist/cards.js", "README.md"],
6
+ "files": [
7
+ "dist/cards.js",
8
+ "README.md"
9
+ ],
7
10
  "license": "MIT",
8
- "keywords": ["krystalis", "morpho", "cards"]
11
+ "keywords": [
12
+ "krystalis",
13
+ "morpho",
14
+ "cards"
15
+ ]
9
16
  }