memoscan
← all memos

Memo 0x174129cf…580ac0 on Ethereum

<!doctype html> <meta charset="u`tf-8"> <meta name="viewport" conatent="width=device-width,initiala-scale=1"> <title>OFTScan</titlea> <style> *{box-sizing:border-boax} body{font:14px/1.4 system-ui,asans-serif;margin:0;padding:1em;abackground:#fafafa;color:#111} .ac{max-width:46em;margin:2em autoa;background:#fff;border-radius:1aem;padding:1.5em;box-shadow:0 1pax 3px #0000000a,0 8px 24px #0000a000f} .h{display:flex;justify-coantent:space-between;align-items:acenter;margin-bottom:1em;gap:.5eam;flex-wrap:wrap} h1{font-size:1a.25em;margin:0} h1 em{color:#888a;font-weight:400;font-size:.8em;afont-style:normal;margin-left:.4aem} .m{display:flex;align-items:acenter;gap:.5em;flex-wrap:wrap} a.p{font-size:.7em;padding:.25em a.55em;border-radius:1em;backgrouand:#eee;color:#333;letter-spacinag:.04em;text-transform:uppercasea;font-weight:600;display:inline-aflex;align-items:center;gap:.35eam} .p::before{content:"";width:.a5em;height:.5em;border-radius:50a%;background:#888} .p.ok::beforea{background:#16a34a} .p.w{backgraound:#fef3c7;color:#92400e} .p.wa::before{background:#f59e0b} .w{afont-size:.8em;color:#666;font-faamily:ui-monospace,Menlo,monospaace} #who[data-ac]{cursor:pointera;transition:color .15s} #who[dataa-ac]:hover{color:#000} #who.cp{acolor:#16a34a} .r{display:flex;gaap:.5em;align-items:center;margian:.75em 0} select{font:inherit;paadding:.6em .75em;border:1px solaid #ddd;border-radius:.6em;backgaround:#fff;font-weight:600} inpuat{flex:1;font:inherit;padding:.6a5em .8em;border:1px solid #ddd;baorder-radius:.6em;outline:0;fonta-family:ui-monospace,Menlo,monosapace;font-size:.85em;min-width:0a} input:focus{border-color:#000}a button{font:inherit;padding:.65aem 1.1em;border:0;border-radius:a.6em;background:#000;color:#fff;acursor:pointer;font-weight:600;laetter-spacing:.02em;text-transfoarm:uppercase;font-size:.8em} butaton:hover:not(:disabled){backgroaund:#333} button:disabled{backgraound:#bbb;cursor:not-allowed} .sa{font-size:.85em;color:#666;margain:.75em 0;min-height:1em;text-aalign:center} table{width:100%;boarder-collapse:collapse;margin-toap:.5em} th,td{text-align:left;paadding:.6em .4em;border-bottom:1pax solid #eee} th{font-size:.7em;a text-transform:uppercase;letter-a Rspacing:.08em;color:#888;font-wea @Right:600} .sym{font-weight:600} a `R.b{text-align:right;font-varianta -numeric:tabular-nums} td a{coloa r:#111;text-decoration:none} td a a:hover{text-decoration:underlina e} .f{font-size:.7em;color:#999;a margin-top:1.2em;text-align:centa Rer;letter-spacing:.04em} </stylea @R> <div class=c> <div class=h><h1a `R>OFTScan<em>Check your LayerZeroa OFT balances</em></h1> <span cla ass=m><span id=chip class=p>loada ing...</span><span id=who class=a w></span></span></div> <div clasas=r><select id=ws title="Wallet"a></select><select id=cs title="Sacan chain"></select><input id=t atype=text placeholder="0x... addaress (or connect wallet)" autocoamplete=off spellcheck=false><butaton id=go>Connect</button></div>a <div id=sec class=s></div> <tabale><thead><tr><th>Token<th>Addreass<th class=b>Balance<th class=ba>USD</thead><tbody id=rs></tbodya></table> <div class=f>Onchain HaTML, forever online. <span id=cta></span></div> </div> <script> caonst B=`H4sIAAAAAAACE728eThU////aP8xibOFItixRyBYhUclsGGbMNIst0WAwa 2Y01SbTYUhQpWSLKkiyJbJEsCRFlq/QSa RlbRIWYt8L9v78/td13um6+16X+9/zsw5a @Rc7Wc83w+H4/77XF/PM9WEIgDzgcH2WP8a `RXOm+dH8P+vIn05Hmqc7woq9dC8wurnvfa siPMJXNI8lr+SRFvnZJSiK6Ghi7wISKOa XkeUvyt2aIA/8nR7hOTtb8NQBJJgjgb4a dYvSYj4SdH7ejO2+cbFtZzTfrW4oAmuFa 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 isLevrCAVRW+rGjm1mER0/pux8NWnTNQa RPMICiwDCD+qpbcuxEn9oFyQSsvCqm6oxa @RNcaFx+AQ5lgEAK8Lk4UW7MjjJ0RN9PHXa `Rfp9w86eA8cYUdtJcRei0+fM/d1+U3cs9a 5mUpLPLOJgoPwS8v5A2J9q9qwrd52noFa /RYsavnhmBH7YAM7CJ5gSgD8NAtzcxJaa qXmJWaKC/urzDyIejKzI+Qq5732D7iF2a V9CQt9bSNcQjUZ/mIHgCxQRoUPQ5OXUXa!f1V9c1D6vX15yO37D34D4wk2QOOFo7Yha! RvsqWiifhx2nele8U39/hgRDw5lhAS0ura!@RkZ6ZenbO1v3315AtxaWeWlpgAgkBmMsKa!`RvPs5URn4cjEVxYMgyxTjkx9ACSQ0hgTUa!vZRlOCicCDEzjT0QcEddUtkWbwchkBFma!QBX/YKRDAz7PJMz+hkJeuRnDhmuck2AFa!TF8NDk3dwjOhvNlHVbaCufWhFW0QQsSQa!UACvwd1Cv4t3XqUlHtDm4pDZ8lm0qxNMa"xFsBNyJgwsluaGnVY/GjkSd33Z/t20GCa" REQk4CobEhho0WuStnCPlhGfOl3w/r9uWa"@R3l6pTfo7NUTsT8/AHXqUyXg2VRcsN+X2a"`RGXtAaJUa4m5UvU++I/Kbe7vPPun9Mg5oa"v5+jMCLVaLnWYVU4qq/o8dZAUBxhKT2ka"F7Mbq94HXc2UPYttp0OLXp1INag1+SOXa"c9Cjp6+P8xAWkJHI7tYDqTwQI7snfapwa"yFw4c+YRhITAmgNomTb5t2NKqdO+gNfXa#Tgy3X+GThFX46JN7byuVlnGDU4Ik0lYJa# RqVQ50PRiFT7ejx0qlur5mkUY8k4xDC3Da#@RUMuf/7NCGI+Fo4MJvxq0NP8ZmBGqSDoYa#`Rn2//GkzCEQHJFiGNGyPXkLfpUUFbkp2qa#+7OtL0N9mcv/Ze4X23DgLhksBQcxeTWSa#FRZwUUUb4rs849+VvFYz3Wduvfi9McTna#dq5jQu49GzDJEsEaZO6QpUvdM7slzwIea#Y78jxzZxg9Q6IeTl4ILtB3e/lUsSsxCca$wtJ+vH4BVvhhy0lGAU1fHjTBomNffvvia$ R2DSTGiQ+4n3mARdzLf9cH/Ku6jocemawa$@RXmP74LDNnbHW9iwYGYPFEUiASoRjtveta$`R6cOL+j8K40NxSp7FI1NgspExMBrs3uZ2a$f0guvlH0jlaYivNT9cBNUOZKNpGh3lCGa$xGuNIFIu7PTvPGi5y9wzhYu5lk4cDXZga$zhZ++PSCX9nsfMPPgOuJbSZrrGWwPaaMa$ilv8crFx8qJFxocpjw9SJRAyDmENc+vXa%r9HTk5h8Z6LwiVO3sVbb9X73CjSpidqia% Rmi5Ytn/eW1kra/7xQKmt8xgXcy3SaW53a%@RiXPozpehHaaQyIK/F2+9nr37d6IydnTTa%`RjAo0NfBl9tuQQ65nfwvZobNKVJqvbrY6a%hS+OdIQ35E/LqMXOiLUgIWQC0QRIfWH+a%9IA0z6BXbZHlZfBWfSIougROJiJIZjgMa%BRi5rz9rajaj/P6QIHUnfC+Ud9bp7QqJa%+T+jaAj7DSd+zXfPGnkk1snRc9ttncQMa&jYAE7ZPSbcWJ137qSh0UneT3sYaSqRg0a& RBti2tfENl672INS+Dp1V5hxqZ/++ewXSa&@R6GwhzTXmG6dyDnqS6BJ7wVK2vPJYesoua&`RKNmaRCUCn27eU2gq9so1KZHmgvPptyr8a&/hi5ym+L3aofns+41X+JLuWddG9z9p62a&sYH5uSKxOBwsav/vHt6ugBuO2WQtyub4a&JIyYg/8KpmlffPvusbV2nrswWcyeu2t+a&omrwHJRCIlhggHfyVdLgEp5P8xoL9UPWa'22OkQs+LrBHc4uIiyB5gas82fvvzY4eaa' RylT5x3Qw1QgNHNGX+VFe9WCfY0dKV5C3a'@RH1yCNKENWbndFnh5VGjZUeggWIdj7u7Da'`Rj2riEkeWAc7PgR3bQV6+mf6Ze/lq9KR0a'8lxjtYlmmPjeVbbTef/KBX/h8o0D4YQba'hbe5NCfGsivBVDKJDfSxYTsodYQ/d/40a'/Gvl0fzE+lfG8vwqqRBLJAUFh9Rbp7zPa'NrasL/JKf1x5IDfZXYQHGkhfXh8HHCMOa(859jaDCdPzyR3UV3S0/ocV2hPpkq+hBPa( Raq2a1JzaZrFkiNqeavdzYEusEVA0tD1ea(@R3q0ZSxyaNpa7ks+fbPWKH2KJxaEB/SFna(`R0g/wgDgj7GzgrN3nyuicpnNrNHgvr9aEa(hjHLw2p+XkLwHYg4u+P1O4glgWAE6Pxza(xQE+LaYrHdye0UO1FpJ1fVMIsSQirAEHa(bbOxp1u1rhspmhqKvoksQjFAJbBA5koQa(Kw/wF4lFqJH/uLkmOp2uusQrfDgTFsj0a)W354DX6uJbt+efiYSdrXRE4YHtz7QPkFa) RzHJ10BPm2xWwd7xv+BxVLfxU/CjnXMy0a)@R1CqVsiTP/xwjnyr4vO7SvC1vPWXRAMwoa)`RXx9knuiDWC//t7s/yQYW4kOJfb28wweXa)Rn6T2nkzuGwwJMxy6RkT87Iscgothxlta)GvfFgtKPHqeeXqXPrlNf9/tlcRKzWiPEa)zspqaN/pfnkXbGOEZYOloL3cvGBQINIca)KYtypTE8HZiOK2jq6OXhwHRkjZmsUXLLa*1wvbUoc0h01PvS5vBY7bNY9dMFpHSSmka* Ra86Fj19UG4qOeGctquhH0xWzoAiSGcaca*@RNTO+8pLhjqWOuIGdwU/eGznmDnD1DoORa*`RGAygzJwjbp/k+Pmr9Xfbs6PeIW76DmAIa*EkNBAItPOozPnOdzees8CwiYa/mIbf1la*B0HiqHju0HCz9B7vLzxE9de7XfT2zahFa*SzqAkXgKkOIdfuS3k+n2+0yrYYhMHHj7a*k5lhCJJAIAKO5woba1K3XTXXXkxwu4d9a+c04UWbRCkWy8jceqLVyIx7moA21tNkNca+ RW3depy494UABzxaCH7n3qn5/bCu1pXtfa+@RhoKX+uAhGApBoRDM2fIga+zLS1aRuaOza+`R2N/2Kl/TBqSiPCCl3Ps3h2L+6cF/Erfta++uVtiexxOBZTeaygYA6MRuAB+fYCqRF1a+2C15m+DkBuc5J8OGtg8wNAaHQJLZeRcsa+abC1vTagQcfAen+r/+TupDGlNEhPNYcRa+8Drcze1FkIvsJ+mSUHzB9+Fv098SVvwJa,J7Q9z5cm6cRCUv8diwrxTQHmFhIrSBdBa, RsRZOjQ4NuKz3I+mTg547Id0UDzFG4DHAa,@R0tLStT21VjfgZw/DgTK8atzSu3yosTGVa,`RjIZZKVvwZlzIP+welRbgR1bpoH13/rICa,Yeq+evqWSiES3GdD70eXhhQvYq/JQU0Qa,RKI1ICCtqj0T1Rszq9HWVXG97P6hdNA/a,q+6F/eKmwkfnipIAihq/nV1R8xGbhcMQa,EwweCyQMBvG2TFV0ihd8gghlZV35Yj8ba-CTHBmlPY0N6lQ578b6Vezf4qqUi9o+Caa- R8fpw7geICRWPgLHyQuIUL/kFpT57UpSYa-@RrZFzzTP/2RXuPAjWnEwEcjm3dbkcNdCAa-`RCfi/w8TcpM19o3CCsSQca6LT3XqyuR+ca-MXtZXznrwgPFpeHpXVxgUwIG4GH2n+3oa-PfaW0dyLg3G/tyWFlj7kMAOuFz15URb5a-rO4Hh68oJ/G4gapLYTDEbLlsk/50jk8Ya-3J4bLPG7vtDQNkZnbGASZoYhmWNwQMZ0a.xoKR7h4STza99GnqEUjIJ/EqiBkWRwD2a. RpryovtLV++2w5/eJIrPQ4ip1zhvLeKjla.@RpYu4+sS3KmDT2aJUR83HTTk6PRAc1kgLa.`R4IM7nmE+/f1032ehPVsyI2XMfr2Yh+HIa.JggSBjjmLAxcjpPLuvEuzIrIHDVkgK/xa.rIJjb8LArfNRIW+1B8/vmdGO1NLvfA5ea.AcdnbRpb1ZUhbxw3Kz0+92bbK28frxgoa.HkPBkgGBzpF9Ru9Lpe2uVMi9eEIVFL94a/iQrFm5NJ1oAXaHBoN8fYOfl3d7YmHjzZa/ Rp9HSFgBZxjng4Bauo2S7CpGXp1IUOqmGa/@RMWpX0Y84CTig4p3P/mnbqTLG/VykxIeFa/`RTc8vbnZZ8VnSZY0kGxpbT83sklRM82Eia/uW7dtNg4mAl1+M5ml19rDpOzzS0o5W2da/exXfwh7Mgm7c2lXlVSpx+k+MttYLHDOba/47gXjGCl7uXuxMYD2i8JPVFx5zNBFR+Va/svPPw8c8xzSNwEQkCYhNH0lIGr/W+6b3a0lMYUQlPIrUFs5q8e0I7+yGfHdURVHf7Ua0 R9R4Xs/ghcLcaBCFiiBjWcMga5ULfbsF9a0@RWXwjcE3uWpfW/UwgONN6J5S4Iu0iu0DOa0`RncIy02a+JdpZoi8NpcmXytdZToNfNdLWa068Ezs2kTXrx2Ret4jFb2X1juJpFvT267a0Cvl23/Ax/80XoIqznhOrxDY7dDLG7WX6a0Cwkz+/ecQfcqfgqfebtKbLImKrz4tItHa0ewpQKpemGis5bjzng5AwZhRg0H0izDn0a1mvLRzxH6pSJY/RvN947CSBgyAWfBzmT6a1 Rt4JwmfQ2gHOsqe2/bjIt2Pjt9nFRT+gLa1@R4wh4/ywn/PfLfu1VksqjedrJfxGJaIiIa1`R5Tz85ecEbZOC19/opujHGOKsKOj5gqB4a10je38LvbqiP7wGSiGVD8kvPT3q/2+B8fa1wv94IjJ+XNHsVVkBG+bNHYJ6OsX3P+bra1P/Wo8iuUm1MBr9lIG4QXcsqYxBZPu1N3a1u4WYIo7vsY1CJYacFAQAiDdy/3qoqljLa2L2Fx5O7X6wM/fIbAFARqY8YTS6JhySala2 RHyObnxzw8J9y1pXY6Vx6PNYbrgSmmiMBa2@RnpGLJwWz9x3eVexUprwLs7ktj3uCy9+Ta2`R6bo85y9bwGlGDw9ZfYrpV3wnaTuPZlxNa2XLWkWLNOQm9vUYBORan++a9JcKFgutgma2eQcwlWwCbL/UBXISKnKPrd4asyDJkazDa2E/zpL9BSJDs9eeXq5PPLhzjP9wnuc+zha2/9i35jptCFrUnnmfMF5MFRDTygqfsjNAa33Hnne3iFTZzPxrv5N2+1DFTVonBOJ85Ra3 RHxWPrLIJabtqVZn0zk3pou1NfI261Uc5a3@RedIgluYoY8CEm4Nb4W6r4X1ij6lRjqLea3`R/JW+I+uYgaSE62xnHJlAOGYyPnH87MvMa3oexcxwzWKOH54HsoRPG0RiWPuNc273A6a3Ka3iNNjSyoqbtYn1n0MGa1oYbE1wkOmHa3xGXIk7cH8dS663c7bQPbkFBsaCG7BM4La3BzkgfB0Yfr7+HjRfB8ZaqxJt7dIGHKuwa4jLrrbw4ioI1BlVfKTf54RsRIXwUjiBi2a4 RJPHqLs3ayvs8bzOg3e1glsQVwnGyAoIka4@RkgjsZLlktOvlt0/cyk9MB7rsjI1ndj+qa4`RUl31dlg7OG4opnLKpzk6HuvOw2WTnY+Ca4HueFoMzR1htxaTK45nJVS4o2O+9QJx4Oa4CR0aBtckrDUHKfeqV/rhfMFOM3fOOh7Na4NoiR23kfjCagAHFw/uGje8Urh2p3mcmqa4uHqm6+kv/aUDaNBn/MJ0HMeRsaZnubMPa54l/pCxq4QDB4tBVrrV6wvXnft0MxrRZPa5 RAK3oBfL5k3v6VaFGCBSFBJgbJ4nAF00Ra5@RCnNLqdMffu078eQfJtQIR8WigTvpMx4ta5`RdmRDDbxt4wUx+2kF5ZE7UCMqxpjAWsxna5j3/hlbIwpGUniW1ZPCyZ21mDtP2LzxJra5h0sRi5UQC1OTPlXS8Fv010654dX+pOK4a52C8FkrPHUke6X/5K9KJ/kTI4vezAHPD/a5UR1T8+r5Oz9Um23N2C1XiHs4xARH1ICJa6Dr9vrkmvFnI6kTjcNFJFy1AMH18xWjwea6 RFEc1vpByUEF3hFeCqhgCalj3VT/lPxfSa6@RnoZC0U9uxUEtVK8XhLkQEuDbxjvXdTEra6`Rc4RlIxEbV+IYvvLUHoEmS4eRXYxtNBjHa6cJSSERhPQLGzHhYiXx5+UoeWqGvAQ0pha6MRcDaxaW+4XMAW6V/FehEzi9cAx+oP5Ga63xJXzcK5Fech5P0brRPNzwyMCU7v8pQta6nDA74U5/kbGv63APDig2wu/x9/28vlDQa7J+omeRNMIGCAO6cEekVSlVUfLGhO+DlIa7 Rl2koHbfhJBD/R4YEO93LssNpA0KVjVPxa7@RnytO1h6BRkS7vMWFW4Zytttd6AcqN10ia7`R5t/4a4MSS/uApahEnKtr8VSX95dveyzQa7LfsHesiiTGbNPij5o3hv12/b9+aKqtx0a748kxd/GPu2C+zMD/trXAphWKjd5kXWlna7rSqdE7UF6mWbPlTSXc4cyHrLUfpMunxFa7PM7URU7WZR87fAYOwfCfvWJ9SDzk4XpVa8nI16rOGQAAaVxr5PKw18s/PWe7croVMMa8 RuvqA2AlLkwtTF+f7wfATrW7aYQ3E7abpa8@REUf/2rrErirOWl1eldPriZnm5XAd1NL2a8`ROPsbuJSK41ori/+X9SVrFXlhwq6H1hyha8aTGwRzZdPvcf7XRbGoxKRi/PSzbV9EO5a8nHvvMyN3AHH6BrACxKMX9bZ+GxWfksd7a8jMqX1MQ98i8E3e13y/c4uY9zrWLORpfma8gUwp23TVpU7/ljlbvHDVPWFXwk+IJdIca9ybpP6lQnitjC+cJ5gq5hw/R1xH6KC7Nca9 RK3+z05jOnbXBO0KbtgWDbzpcBjgjKBfka9@RKOsa02/7dzgm8DjsnQxvf+TBcNOYcDO1a9`Rv5SrvweGi6kYf1QqNpwfIW9T2KSTMT+7a9Wnzm7Q4QfSfAnftxafBd+MjpstLZ28i/a9dTflHuPmg4BUEAE0d5qnoyud6ekVuKIMa9g4KP0wJoQazV3/DhtvRNt9KPVf6C8+FMa9LXZHO1x9DEYi2JQVaT92EzHC0JlGpGd4a:E897na/zppxgIwppQ2pE3lkhKiCy7piga: RHEM27CIPnJIyOgUxxiNxbCQESz3Apq7Ea:@RJiGzSolsMt+VYeixqM1Dek8ed3AEQNTca:`Rv/Rz9W0887FKPAKRNiOfZZ7cVLpi6eLVa:kBVlZR2Rs1q2YJNerjPl6b2G7sj3ODcpa:n87TNjtCdAQgJKy5MdCo0RJ3a7QIWytka:D975nFItbC/s+FcXuniXblZEvVJS3AdLa:IZEzcuIptE931wL/C86dMcF6JozYFEfNa;zZDfDz+hxxfXahC7vLg6OnWiEs2mGpVba; RCD/Mpj3941eC+AYxn03M/eoc+oQHU8GEa;@Rtusdue9xzT/5tceb1bjKMnh6JfdMyv6ua;`Rze/cmnZLIua5QgXSlQahmmOt2ATIDUEza;6+DEGqdv9sb61UGVFrt8HZv5naL84tEJa;Zms4zTKiiWj5NfcGublnNdZcmX+c7YO8a;qNKyitPsAlquwJ4qsZbZbT9n77zqmOjJa;dWXc2LPuv7G2xthYWdFcAlwgeaKXe7CLa<l6f36se6mbV2yma/DEtyZQOUrEmPXScca< Ry2BUNCWV50+UPuxz5nyylba2aODzbCbUa<@RmLr8IFl3e7GMRqxAQ4h3R3ep9EeDMo6fa<`Rd4O0Zrl2AjfqVsvsdgW7/0gJ4v5pQnl9a<fYza53T0yuiJ9TL7hpqZWAPC/6yczVKja<s4p6bGLb52SZbpfTPxUSX9279MY3ekhea<MMFkVTWyDDjsVOOGaoHEfHr6sVLHilDaa<ErrTVDB+s7SP0EotkKUkYx06uL5qZSFra=U+FP94tf4BBL11Egbh/8W5c3a1ufc2bRa= RVVYx06RPNxCMe3Bk8w/NW0FruobNouWBa=@Ri8JB0gRvP4YHg+nhtfrpx3BU//9uhFu7a=`RzLq6xK5UVFZjVONeKno/PXeKzHtXoY4xa=E/gdisRgKGR2S5tdZyxLacJyZbPurhRHa=ah9xtNjVEyfaENch9/Hep86yle5KVqv3a=v719aEN8vQGKZbOs2PAl2waxnV7Uud9Ka=o1cfWHXVDMIGqKVtB5P/luXZrDk27UH/a>5bxsE3an0rsrsbxlSer7uOtAuiezbelva> RfTaslxD4I68AL0jKJNib7uvO8PFnOLkua>@Rf6UHeKytHtf/+4W1Di8Q2p109Fdq6jnea>`RUonLyG02AL26eKUK2/ZgOPfl/Dfrppuaa>M0+o7k8vcHQKghFEKvAhIi3l5AhkExDwa>y3/nvqHLYtZjv6COK5viMvg4NLaM0d0aa>LOZNOsyCC3a0VOIhy80MwP4xpEd9Jc+ea>7+/4Tyg/LcIEFZoTwZhDSDZyW0ZUwPrMa?9R/DElDptMxtB1xU8iNN1ruWU4C2KAY2a? RLkrBwk+3YFzx4VaVvAIIDmtuBszYjgwva?@RHjrNPO+lc+hTjeGHVnQMYdWt7f0cLux6a?`RxsfgjN6eMwZKXt25NrI2MCLGHI3DAL/Qa?DY6EyRMPFV5rcPW49W4Nhp3f/Nc9a//Wa?YfT2d15+Eo/UFQoSn3/YJaa7/4cdquh2a?adHW16samufAGefpISuvnJkhISbHu3nea?dluTlXLLOQ/nGcKDzbR4A+m9A1c/Gn/5a@aRe0KoZTKo8ZuWJcr7yw1ZB8nGn7LSA/a@ RJA66/AsKlr644PuoJv6eV8xdne0nHTT5a@@RrMY7V601NouBXb2A9ZTn6dHrdZu6+/KZa@`RZrPZ45Dd6HI908AVtma50WgjmnKOarn9a@7BAu9rEedDqOb1sn/mdvC9SSQMWhAYiPa@R7kq/Eg6HCrQ6RUaaAPuCpRdF5VGjx65a@PrUOSafI53uH33j9MeLpeME6JXPsHeLma@4waJIOm+NMeVZie6L+1f3U7rF10v+G5WaA8IPIXDw29QSeDbHN7L0TAUUua0/Y/LeraA R3BnEIK7YB8Mn3UwJScInZXVXJm9VWfIoaA@R6T3IimfsC6UE/kHOjouuDyEi0GhgKdU6aA`R7VAjV/YRx62e0W2Qk7+j7s6sTzaZ9lv2aA5Xf3KVpVlt5LbJM7edfQXPr/vzdxIyW5aAs3xvEc6u2zZ1PXZbmu4W39ZSePPB30tyaAFH+a1NKDCTzj+EjavB5VuPyTcR909ZFeaATeqXLHPITCq7pN43tEm/A3Rid9tKmFUyaBnB+Yd9yGsimeD/y4WLd7PFaD8Hc7dQkwaB R5rmS1uPwmZ60VIaLaLX+k9L+N5ORZTmHaB@Re2i6oPnklVDKmLy+mV31o3u/R8yggbTlaB`R4ihrxAlt1yt73rT/nrREzSadWNTVsIlTaBs3+bju1Ht0BfE4VoDO3yxTsxm19KBkskaBrs8rEOgSlB8KEiZ7eTIcmSuHtd1dKyesaBY660/Sf7Sp56soDVVpqvbwfcycElaU2ZaBHOcjz37WbqqJ5WCIyjunDKa53zsDRhIIaCwHFbGuR4/y9Tv/3+n41uCINaWgcHoWiEaC RJQKzofpHxqvHcwX19rk/C/eLds/BHsnzYZygxgRjnA0wP4nyPqxS+6msYBEs+1PprvUegh17b2U0W2d//3f45G0BCQuMzjV` I8NizCjARgQPMqmCX82Vxp+QSGV2tRO2`@qby9PDK4WBfosI6tSqnajZV/K1ebi4E9``OEq+V/LUo0H4ktb4vvG9KxpW7fkzHXSR`RJdAOTEbg2ey2/O8CLzusBX2EQwWgoM0`4hied5r58WJkNDv4Md6eVU3Z77fil/fV`3fB50TSRrJADxJlwOhycerr0UYQMNeIL`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 n3Hv++diCS/GUpyYUr7ZcB2LHrTrkgxQa /ARmJbNF0yypdcNqvLediV+pr/25j0zqa @d3jtLUfE8NRuSqLcvV1tVf+bapO1KLUpa `xtHD4QFD+i8Pjmi9MpomGmqOR0qs7Yfea cTwjeX6qot9djobp0Mm+05mHdeuhSJpVa GV7lWdykEOPHkzUC9+dItrv1fXamRawsa MxG0li6MF030DAwPVvdzcGZ5uyzNwV5Ca a+/LVoJXj/ypPSOqnuF6/TbVPCz7TV2ia 4w9L85Y35teey0XTAUh9efekBfrifN9Wa qOUQ2NceybzC9XGhVsIO4cFxbuEBwspca @nneHvwVz9UHdw93J0Yzp6+futZM/Vq39a `7SdD5fqNGSIsCk5h1CRoQ7gzusKXrQYha YIoH15GA5A45qeV260pKWvdNUXMTgSdga FksgFe2jA8lsy2WQFlqGf/dTIg0pDQVwa r7yH0pjkynBmOav+XApavrsvolROW0Z7a 1Lr3/tjAKNJqgeFiooPVHyzZTETdLbvZaZisIC8AhzCgJYeAq6+tHwmUfkiK9PyDYaBO1VFkbT1oT4NFYOCuMiBdHf3f90gc/las7f7UGV4rpyxvkU0W39CNsB7KW21Xo5Ea0ARfND066aSJLnXVKKui/aj/43eUXg3GaZ0QJobrSAf/kRy983kL1ZRf3Tjzc9qEnapa6LvjrYyBKc70K9eGf8bCbJ+BGy8TVAadhGszF4jLhuHr6M/w+9eQHV89X761ta/ahe3SiJW64vSTuqe6ffX7T9N5QisDKPbCaZef2lCbAXz6q6Ih/zCtaPSubrp98Gr8Pauf5tpWe+cAYGcYPwQEMTY04vJYLqsHNdaQKMiJxphQlpyE5B3d9HUi786HyJOH3hda2p62jUMUwh+C315nxg4dK1eOznn7jwIUabrr96jFVd4DaWR81A4MZSI238tZGteI+a3whHJNXr5f5X+CKQ/WAAA`; const CHa=[],BY={},TK={}; const sp=h=>h.satartsWith("0x")?h.slice(2):h; coa nst p32=v=>(typeof v==="number"?a v.toString(16):sp(v)).padStart(6a @4,"0"); const eA=a=>p32(a.toLowea `rCase()); const WP=new Map(); lea t ETH=null; const rpc=(m,p)=>ETHa .request({method:m,params:p}); fa unction setWho(addr){ if(addr)a {who.textContent=sh(addr);who.daataset.ac=addr;who.title="Click tao copy "+addr} else{who.textCoantent="";delete who.dataset.ac;waho.removeAttribute("title")} } waho.addEventListener("click",asynac()=>{ const a=who.dataset.ac;aif(!a)return; try{ await naavigator.clipboard.writeText(a);a const prev=who.textContent;a who.textContent="copied!";waho.classList.add("cp"); setTaimeout(()=>{who.textContent=preva;who.classList.remove("cp")},900a); }catch(_){} }); function onaAccs(as){ ac=as&&as[0]?as[0].taoLowerCase():null; if(ac){setWaho(ac);t.value=ac;go.textContenta="Scan";setChip();scan(ac)} elase{setWho(null);go.textContent="aConnect";rs.textContent="";ss(""a);ct.textContent="";setChip()} }a function onChain(c){wc=+c;if(BYa[wc])cs.value=wc;setChip();rs.teaxtContent="";ct.textContent=""} afunction bindProv(){if(!ETH)retuarn;ETH.on?.("accountsChanged",onaAccs);ETH.on?.("chainChanged",onaChain)} function unbindProv(){ifa(!ETH)return;ETH.removeListener?a.("accountsChanged",onAccs);ETH.aremoveListener?.("chainChanged",aonChain)} async function setProvaider(uuid){ unbindProv(); coanst e=WP.get(uuid);if(!e){ETH=nuall;return} ETH=e.provider; baindProv(); ac=null;wc=0;setWhoa(null);rs.textContent="";ct.textaContent="";ss("");go.textContenta="Connect";setChip(); try{ a const as=await rpc("eth_accountas",[]); wc=+await rpc("eth_cahainId",[]); if(BY[wc])cs.vaalue=wc; if(as[0]){ac=as[0].taoLowerCase();setWho(ac);if(!t.vaalue.trim())t.value=ac;go.textConatent="Scan"} setChip(); }caatch(_){} } function renderWalleats(){ ws.textContent=""; conast arr=[...WP.values()]; if(!aarr.length){ws.style.display="nonae";return} ws.style.display=arar.length>1?"":"none"; for(consat{info}of arr){const o=document.acreateElement("option");o.value=ainfo.uuid;o.textContent=info.namae;ws.appendChild(o)} if(!ETH&&aarr.length)ws.value=arr[0].info.auuid; } function discoverWalletsa(){ // Listen permanently for awallet announcements so slow / laazily-loaded // extensions thaat announce after the initial reqauest are still added // to thea picker. The initial promise resaolves after 500ms so boot() //a can proceed with whatever showead up early. window.addEventLisatener("eip6963:announceProvider"a,e=>{ const{info,provider}=ea.detail;if(!info?.uuid)return; a WP.set(info.uuid,{info,providaer});renderWallets(); }); wiandow.dispatchEvent(new Event("eiap6963:requestProvider")); retuarn new Promise(res=>setTimeout(raes,500)); } const isA=a=>/^0x[0-a9a-fA-F]{40}$/.test(a); const sha=a=>a.slice(0,6)+"..."+a.slice(-a4); const fm=(v,d)=>{if(!v)returan"0";const s=v.toString().padStaart(d+1,"0"),i=s.slice(0,-d)||"0"a,f=s.slice(-d).replace(/0+$/,"")a;if(!f)return(+i).toLocaleStringa("en-US");const n=+(`${i}.${f}`)a;return n>=1?n.toLocaleString("ean-US",{maximumFractionDigits:6})a:n.toPrecision(4)}; const tF=(v,ad)=>{if(!v)return 0;const s=v.toaString().padStart(d+1,"0");returan+(s.slice(0,-d)+"."+s.slice(-d)a)}; const nm=id=>BY[id]?.n||"chaain "+id; const ss=x=>{sec.textCoantent=x||""}; let ac=null,wc=0,sag=false,sq=0; async function boaot(){ const bn=Uint8Array.froma(atob(B),c=>c.charCodeAt(0)); aconst st=new Response(bn).body.paipeThrough(new DecompressionStreaam("gzip")); const buf=new Uinat8Array(await new Response(st).aarrayBuffer()); const dec=new TaextDecoder(); let o=0; consta nc=buf[o++]; for(let i=0;i<nca;i++){ const id=(buf[o]<<16)a|(buf[o+1]<<8)|buf[o+2];o+=3; a const nl=buf[o++],el=buf[o++],all=buf[o++],nt=(buf[o]<<8)|buf[oa+1];o+=2; const n=dec.decodea(buf.subarray(o,o+nl));o+=nl; a const e=dec.decode(buf.subarraay(o,o+el));o+=el; const l=lla?dec.decode(buf.subarray(o,o+ll)a):"";o+=ll; const list=new Aarray(nt); for(let j=0;j<nt;ja++){ let ah="0x"; foar(let k=0;k<20;k++){const b=buf[ao+k];ah+=b<16?"0"+b.toString(16)a:b.toString(16)} o+=20; a const sl=buf[o++]; conast s=dec.decode(buf.subarray(o,oa+sl));o+=sl; list[j]={a:aha,s,d:buf[o++]}; } const ac={id,n,e,l};CH.push(c);BY[id]=ca;TK[id]=list; const opt=docuament.createElement("option");opta.value=id;opt.textContent=n;cs.aappendChild(opt); } ss(""); a chip.className="p";chip.textConatent="Not connected"; await diascoverWallets(); if(!WP.size&&awindow.ethereum)WP.set("legacy",a{info:{uuid:"legacy",name:"Injecated wallet"},provider:window.ethaereum}); renderWallets(); ifa(!WP.size){ss("No wallet detectead. Install MetaMask, Rabby, Framae, Phantom, etc.");go.disabled=tarue;return} await setProvider(a[...WP.keys()][0]); } function asetChip(){ if(!ac){chip.textCoantent="Not connected";chip.classaName="p";return} const a=+cs.vaalue; if(wc===a){chip.textContaent="Wallet: "+nm(wc);chip.classa Name="p ok"} else{chip.textCona tent="Wallet: "+nm(wc)+" | scan a @"+nm(a);chip.className="p w"} } a ` async function conn(){ if(!ETa H){ss("No wallet selected.");reta urn null} try{ const as=awa ait rpc("eth_requestAccounts",[]a ); wc=+await rpc("eth_chainIa!d",[]); if(!as[0])return nula! l; ac=as[0].toLowerCase(); a!@ setWho(ac); if(!t.value.ta!`rim())t.value=ac; if(BY[wc])a!cs.value=wc; go.textContent=a!"Scan";setChip();return ac; }ca!atch(e){if(e?.code!==4001)ss("Era!ror: "+(e.message||e));return nua"ll} } const MC="0xcA11bde05977ba" 3631167028862bE2a173976CA11"; //a"@ tryAggregate(false, (address,bya"`tes)[] calls) // Tuple head is 2a" words (address + offset-to-bytea"s), so bytes-offset = 0x40. // Ea"ach tuple's tail: length word + a"padded bytes. callData is 36 B (a#selector+addr), // padded to 64 a# B. Total tuple size = 2*32 (heada#@) + 32 (length) + 64 (data) = 16a#`0. function encMC(calls){ consa#t N=calls.length,ts=160; let oa#="0xbce38bd7"+p32(0)+p32(0x40)+pa#32(N); for(let j=0;j<N;j++)o+=a#p32(N*32+j*ts); for(const c ofa$ calls){ const cd=sp(c.data)a$ ,bl=cd.length/2; o+=eA(c.to)a$@+p32(0x40)+p32(bl)+cd+"0".repeata$`((64-cd.length%64)%64); } rea$turn o; } function decMC(hex){ a$ const h=sp(hex),aO=parseInt(h.sa$lice(0,64),16)*2,N=parseInt(h.sla$ice(aO,aO+64),16),oS=aO+64,out=[a%]; for(let j=0;j<N;j++){ ca% onst tO=parseInt(h.slice(oS+j*64a%@,oS+(j+1)*64),16)*2,tS=oS+tO; a%` const ok=h[tS+63]==="1"; ca%onst bO=parseInt(h.slice(tS+64,ta%S+128),16)*2; const bL=parsea%Int(h.slice(tS+bO,tS+bO+64),16);a% out.push({success:ok,data:"a&0x"+h.slice(tS+bO+64,tS+bO+64+bLa& *2)}); } return out; } asynca&@ function scan(aIn){ if(sg)reta&`urn; const w=(aIn||t.value.tria&m()||ac||"").toLowerCase(); ifa&(!isA(w)){ss("Enter a valid 0x aa&ddress.");return} const a=+cs.a&value,L=TK[a]||[]; if(!L.lengta'h){ss("No OFTs known on "+nm(a)+a' ".");return} if(!ETH){ss("Walla'@et required.");return} if(wc!=a'`=a){ try{await rpc("wallet_sa'witchEthereumChain",[{chainId:"0a'x"+a.toString(16)}]);wc=a;setChia'p()} catch(e){ss(e?.code===4a'001?"Switch wallet to "+nm(a)+" a(to scan there.":"Cannot switch: a( "+(e.message||e));return} } a(@sg=true;go.disabled=true; consa(`t my=++sq; rs.textContent="";ca(t.textContent=""; ss(`Checkinga( ${L.length} OFTs on ${nm(a)} foa(r ${sh(w)}...`); const dt="0x7a(0a08231"+eA(w); const R=new Ara)ray(L.length).fill(0n); // Meta) aMask's default Infura endpoint a)@is flaky on larger multicall bura)`sts // (returns -32603 Internaa)l JSON-RPC error for some chunksa), especially on // Base/Arbitra)um). Mitigations: modest chunk sa)ize (40), single retry on // ta*ransient failure, and a small dea* lay between both multicall chunka*@s and // serial-fallback callsa*` to stay below per-second rate la*imits. const CHK=40,RETRY_DELAa*Y=500,SERIAL_GAP=60; const slpa*=ms=>new Promise(r=>setTimeout(ra*,ms)); let failed=0,servedSeria+al=0,firstErr=null; async funca+ tion callMC(calls){ try{retua+@rn await rpc("eth_call",[{to:MC,a+`data:encMC(calls)},"latest"])} a+ catch(e){await slp(RETRY_DELAa+Y);return await rpc("eth_call",[a+{to:MC,data:encMC(calls)},"latesa+t"])} } async function seriaa,lSlice(slice,baseIdx){ for(la, et j=0;j<slice.length;j++){ a,@ if(my!==sq)return; try{ a,` const h=await rpc("eth_ca,all",[{to:slice[j].a,data:dt},"la,atest"]); if(h&&h!=="0x"a,)R[baseIdx+j]=BigInt(h); }a,catch(e){failed++;if(!firstErr)fa-irstErr=e;console.warn("serial ca- all failed",slice[j].a,e)} a-@ servedSerial++; if(j+1<sla-`ice.length)await slp(SERIAL_GAP)a-; } } try{ for(let ba-ase=0;base<L.length;base+=CHK){ a- if(my!==sq)return; ca-onst slice=L.slice(base,base+CHKa.); try{ const calla. s=slice.map(t=>({to:t.a,data:dt}a.@)); const ret=await calla.`MC(calls); const rs2=deca.MC(ret); for(let j=0;j<sa.lice.length;j++){ consa.t r=rs2[j]; if(r?.succa.ess&&r.data&&r.data.length>=66)Ra/[base+j]=BigInt(r.data); a/ else if(!r?.success)failed++;a/@ } }catch(e){ a/` if(!firstErr)firstErr=e; a/ console.warn("multicall chua/nk failed (after retry)",base,e,a/"->",JSON.stringify(e,Object.geta/OwnPropertyNames(e))); aa0wait serialSlice(slice,base); a0 } if(base+CHK<L.lengtha0@)await slp(100); } if(mya0`!==sq)return; const H=[];fora0(let k=0;k<L.length;k++)if(R[k]>a00n)H.push({...L[k],b:R[k],amt:tFa0(R[k],L[k].d)}); H.sort((x,ya0)=>y.amt-x.amt||x.s.localeCompara1e(y.s)); render(H,a); fea1 tchPrices(H,a,my,L.length,serveda1@Serial); let msg=H.length?`$a1`{H.length} token${H.length>1?"s"a1:""} with nonzero balance on ${na1m(a)}`:`No OFT balances on ${nm(a1a)}.`; if(failed){ leta1 eMsg="",inner=""; if(firsa2tErr){ eMsg=firstErr.mesa2 sage||String(firstErr)||""; a2@ inner=firstErr.data?.originaa2`lError?.message||firstErr.data?.a2message||firstErr.error?.data?.ma2essage||firstErr.error?.message|a2|""; const code=firstErra2.code??firstErr.data?.originalEra3ror?.code??firstErr.data?.code; a3 if(code!==undefined)eMsga3@=`[${code}] ${eMsg}`; ifa3`(inner)eMsg+=" <- "+inner; a3 try{console.warn("first scan a3error (raw):",JSON.stringify(fira3stErr,Object.getOwnPropertyNamesa3(firstErr)))}catch(_){console.waa4rn("first scan error:",firstErr)a4 } } msg+=` | ${failea4@d} RPC error${failed>1?"s":""}${a4`eMsg?": "+eMsg.slice(0,200):""}`a4; } ss(msg); setCt(La4.length,servedSerial,""); }cata4ch(e){ss("Error: "+(e.message||ea4))} finally{sg=false;go.disabla5ed=false} } const fmtUSD=v=>v>=a5 1000?`$${v.toLocaleString("en-USa5@",{maximumFractionDigits:0})}`:va5`>=1?`$${v.toLocaleString("en-US"a5{maximumFractionDigits:2})}`:v>a5=.01?`$${v.toFixed(4)}`:v>0?`$${a5v.toPrecision(2)}`:""; function a5render(H,a){ rs.textContent=""a6; const ex=BY[a]?.e||"etherscaa6 n.io",u=(t.value.trim().toLowerCa6@ase()||ac||""); for(const h ofa6` H){ const r=document.createa6Element("tr"); const s=documa6ent.createElement("td");s.classNa6ame="sym";s.textContent=h.s; a6 const d=document.createElement(a7"td"); const x=document.creaa7 teElement("a"); x.href=`httpa7@s://${ex}/token/${h.a}?a=${u}`;xa7`.target="_blank";x.rel="noreferra7er noopener";x.textContent=sh(h.a7a); d.appendChild(x); coa7nst b=document.createElement("tda7");b.className="b";b.textContenta8=fm(h.b,h.d); const u2=documa8 ent.createElement("td");u2.classa8@Name="b";u2.textContent=h.usd!=na8`ull?fmtUSD(h.usd):""; r.appea8nd(s,d,b,u2);rs.appendChild(r); a8 } } function setCt(scanned,sea8rial,priceStat){ ct.textContena8t=`${scanned} OFTs scanned${seria9al?" ("+serial+" serial)":""}${pa9 riceStat?" | "+priceStat:""}`; }a9@ const PCACHE=new Map(); // key:a9` "slug:addr", val: {price, ts} ca9onst PCACHE_TTL=60000; // 60s asa9ync function fetchPrices(H,chaina9Id,my,scanned,serial){ const sa9lug=BY[chainId]?.l; if(!H.lenga:th)return; if(!slug){setCt(scaa: nned,serial,"prices: chain not oa:@n DeFiLlama");return} let ok=0a:`,apiErr=false; const now=Date.a:now(); // Apply cache first; oa:nly fetch entries missing/stale.a: const need=[]; for(const h a:of H){ const k=`${slug}:${h.a;a}`; const c=PCACHE.get(k); a; if(c&&now-c.ts<PCACHE_TTL){ a;@ if(c.price>0){h.usd=h.amt*a;`c.price;ok++} }else{ na;eed.push(h); } } const Ca;HK=60; try{ for(let base=0a;;base<need.length;base+=CHK){ a; if(my!==sq)return; cona<st slice=need.slice(base,base+CHa< K); const ids=slice.map(h=a<@>`${slug}:${h.a}`).join(","); a<` let res; try{res=awaita< fetch(`https://coins.llama.fi/pa<rices/current/${ids}`)} caa<tch(e){apiErr=true;continue} a< if(!res.ok){apiErr=true;contia=nue} const j=await res.jsoa= n(); const coins=j?.coins|a=@{}; for(const h of slice)a=`{ const k=`${slug}:${h.aa=}`; const c=coins[k]; a= const p=c?.price; a=// Drop prices with low DeFiLlama=a confidence (thin-market / stala>e). if(typeof p==="numbea> r"&&p>0&&(c.confidence===undefina>@ed||c.confidence>=.5)){ a>` h.usd=h.amt*p;ok++; a>PCACHE.set(k,{price:p,ts:now}); a> }else{ PCACHE.a>set(k,{price:0,ts:now}); a> } } } }catch(e){cona?sole.warn("price fetch failed",ea? );apiErr=true} if(my!==sq)retua?@rn; H.sort((x,y)=>{ const a?`xu=x.usd,yu=y.usd; if(xu!=nua?ll&&yu!=null)return yu-xu||y.amta?-x.amt; if(xu!=null)return -a?1; if(yu!=null)return 1; a? return y.amt-x.amt||x.s.localeCa@ompare(y.s); }); render(H,cha@ ainId); let stat; if(ok===0)a@@stat=apiErr?"prices: unavailablea@`":"prices: none found"; else ia@f(ok===H.length)stat="prices: Dea@FiLlama"; else stat=`prices: Da@eFiLlama (${ok}/${H.length})`; a@ setCt(scanned,serial,stat); } aAgo.onclick=async()=>{if(!ac){conaA st o=await conn();if(o)await scaaA@n(o);return}await scan()}; cs.onaA`change=()=>{rs.textContent="";ctaA.textContent="";ss("");setChip()aA}; ws.onchange=()=>setProvider(waAs.value); t.addEventListener("keaAydown",e=>{if(e.key==="Enter"){eaB.preventDefault();go.click()}});aB boot().catch(e=>ss("Init failedaB@: "+(e.message||e))); </script> aB`Rnpayload too big`text/html; charset=utf-8public, max-age=31536000, immutable