| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
// SPDX-License-Identifier: MIT
/*
██╗ ██╗██╗ ██╗██████╗ ██████╗ █████╗ ██████╗
██║ ██║██║ ██║██╔══██╗██╔══██╗██╔══██╗██╔══██╗
███████║██║ ██║██║ ██║██████╔╝███████║██║ ██║
██╔══██║██║ ██║██║ ██║██╔═══╝ ██╔══██║██║ ██║
██║ ██║╚██████╔╝██████╔╝██║ ██║ ██║██████╔╝
╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚═════╝
.hud names — on-chain identity as an ERC-721 with fully on-chain SVG cards.
Fixed-ETH pricing per year (no oracle); the fee is forwarded to the treasury on
register/renew. Names expire with a grace period and their rights follow the token.
Website https://hudpad.com
X https://x.com/hudpadlaunchpad
*/
pragma solidity ^0.8.20;
import {ERC721} from "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import {Base64} from "@openzeppelin/contracts/utils/Base64.sol";
contract HudPadNames is ERC721 {
address public immutable treasury;
uint256 public constant GRACE_PERIOD = 90 days;
uint256 public constant YEAR = 365 days;
uint256 public constant MIN_LEN = 3;
uint256 public constant MAX_LEN = 32;
uint256 public immutable priceWei3;
uint256 public immutable priceWei4;
uint256 public immutable priceWei5;
mapping(uint256 => string) public nameOf;
mapping(uint256 => uint256) public expiryOf;
mapping(uint256 => address) public targetOf;
mapping(address => uint256) public primaryOf;
uint256[] public allTokenIds;
mapping(uint256 => uint64) public transferNonce;
event NameRegistered(
string name, uint256 indexed tokenId, address indexed owner, address target, uint256 expiry, uint256 paidWei
);
event NameRenewed(string name, uint256 indexed tokenId, uint256 expiry, uint256 paidWei);
event TargetSet(uint256 indexed tokenId, address target);
event PrimarySet(address indexed account, uint256 indexed tokenId);
error InvalidName();
error NameTaken();
error NameNotRegistered();
error NameExpired();
error NotNameOwner();
error BadYears();
error InsufficientPayment();
error RefundFailed();
error WithdrawFailed();
error ZeroAddress();
error Reentrancy();
uint256 private _locked = 1;
modifier nonReentrant() {
if (_locked != 1) revert Reentrancy();
_locked = 2;
_;
_locked = 1;
}
constructor(address _treasury, uint256 _wei3, uint256 _wei4, uint256 _wei5) ERC721("HudPadNames", ".hud") {
if (_treasury == address(0)) revert ZeroAddress();
treasury = _treasury;
priceWei3 = _wei3;
priceWei4 = _wei4;
priceWei5 = _wei5;
}
function register(string calldata name_, address target, uint256 numYears)
external
payable
nonReentrant
returns (uint256 id)
{
if (!_validName(name_)) revert InvalidName();
if (numYears == 0 || numYears > 10) revert BadYears();
id = uint256(keccak256(bytes(name_)));
address current = _ownerOf(id);
if (current != address(0)) {
if (block.timestamp <= expiryOf[id] + GRACE_PERIOD) revert NameTaken();
_update(msg.sender, id, address(0));
} else {
_mint(msg.sender, id);
nameOf[id] = name_;
allTokenIds.push(id);
}
uint256 cost = _charge(name_, numYears);
expiryOf[id] = block.timestamp + numYears * YEAR;
targetOf[id] = target == address(0) ? msg.sender : target;
emit NameRegistered(name_, id, msg.sender, targetOf[id], expiryOf[id], cost);
}
function renew(string calldata name_, uint256 numYears) external payable nonReentrant {
if (numYears == 0 || numYears > 10) revert BadYears();
uint256 id = uint256(keccak256(bytes(name_)));
if (_ownerOf(id) == address(0)) revert NameNotRegistered();
if (block.timestamp > expiryOf[id] + GRACE_PERIOD) revert NameExpired();
uint256 cost = _charge(name_, numYears);
uint256 base = expiryOf[id] > block.timestamp ? expiryOf[id] : block.timestamp;
uint256 newExpiry = base + numYears * YEAR;
if (newExpiry > block.timestamp + 10 * YEAR) revert BadYears();
expiryOf[id] = newExpiry;
emit NameRenewed(name_, id, newExpiry, cost);
}
function setTarget(string calldata name_, address target) external {
uint256 id = uint256(keccak256(bytes(name_)));
if (_ownerOf(id) != msg.sender) revert NotNameOwner();
if (target == address(0)) revert ZeroAddress();
targetOf[id] = target;
emit TargetSet(id, target);
}
function setPrimary(string calldata name_) external {
uint256 id = uint256(keccak256(bytes(name_)));
if (_ownerOf(id) != msg.sender) revert NotNameOwner();
if (block.timestamp > expiryOf[id]) revert NameExpired();
primaryOf[msg.sender] = id;
emit PrimarySet(msg.sender, id);
}
function resolve(string calldata name_) external view returns (address) {
uint256 id = uint256(keccak256(bytes(name_)));
if (_ownerOf(id) == address(0) || block.timestamp > expiryOf[id]) return address(0);
return targetOf[id];
}
function reverseName(address account) external view returns (string memory) {
uint256 id = primaryOf[account];
if (id == 0 || _ownerOf(id) != account || block.timestamp > expiryOf[id]) return "";
return nameOf[id];
}
function totalNames() external view returns (uint256) {
return allTokenIds.length;
}
function available(string calldata name_) external view returns (bool) {
if (!_validName(name_)) return false;
uint256 id = uint256(keccak256(bytes(name_)));
return _ownerOf(id) == address(0) || block.timestamp > expiryOf[id] + GRACE_PERIOD;
}
function priceOf(string calldata name_, uint256 numYears) public view returns (uint256) {
uint256 len = _charCount(bytes(name_));
uint256 perYear = len == 3 ? priceWei3 : (len == 4 ? priceWei4 : priceWei5);
return perYear * numYears;
}
function withdraw() external {
(bool ok,) = treasury.call{value: address(this).balance}("");
if (!ok) revert WithdrawFailed();
}
function _charge(string calldata name_, uint256 numYears) internal returns (uint256 cost) {
cost = priceOf(name_, numYears);
if (msg.value < cost) revert InsufficientPayment();
if (msg.value > cost) {
(bool ok,) = msg.sender.call{value: msg.value - cost}("");
if (!ok) revert RefundFailed();
}
(bool sent,) = treasury.call{value: cost}("");
if (!sent) revert WithdrawFailed();
}
function _update(address to, uint256 tokenId, address auth) internal override returns (address from) {
from = super._update(to, tokenId, auth);
unchecked {
transferNonce[tokenId]++;
}
if (from != address(0) && primaryOf[from] == tokenId) {
delete primaryOf[from];
emit PrimarySet(from, 0);
}
if (to != address(0) && to != from) {
targetOf[tokenId] = to;
emit TargetSet(tokenId, to);
}
}
/// a-z 0-9, inner hyphens, and pictographic emoji. Everything else is refused.
///
/// A registry's whole value is "this name is that owner", so a name that RENDERS as
/// a name someone else already owns defeats the point -- and no front-end care fixes
/// it, because wallets, explorers and bots all render the raw label themselves.
/// Refused, therefore, is anything that can wear another name's face:
/// - letters from other scripts (cyrillic "a" U+0430 is a different byte string
/// and an identical glyph), fullwidth and mathematical letterforms
/// - invisibles: zero-width spaces/joiners, bidi overrides, variation selectors,
/// tag characters -- these render as nothing, or reverse what follows them
/// - overlong / surrogate / out-of-range UTF-8, where two different byte strings
/// decode to the same character and so mint two ids for one visible name
/// Emoji stay: nobody mistakes a rocket for the letter "a", and they are the whole
/// point of the short-name premium tier.
function _validName(string calldata name_) internal pure returns (bool) {
bytes calldata b = bytes(name_);
if (b.length < MIN_LEN || b.length > MAX_LEN) return false;
if (b[0] == "-" || b[b.length - 1] == "-") return false;
uint256 chars;
uint256 i;
while (i < b.length) {
(uint256 cp, uint256 size) = _decodeUtf8(b, i);
if (size == 0 || !_allowedCodepoint(cp)) return false;
i += size;
chars++;
}
return chars >= MIN_LEN;
}
/// One UTF-8 sequence at `i` -> (codepoint, byteLength). A byteLength of 0 means
/// refuse: malformed, overlong, surrogate half, or beyond U+10FFFF. These are
/// rejected rather than normalised -- an overlong "a" (0xC1 0xA1) is a second byte
/// string for a character that already has one, which is a second id for one name.
function _decodeUtf8(bytes calldata b, uint256 i) internal pure returns (uint256 cp, uint256 size) {
uint8 c = uint8(b[i]);
if (c < 0x80) return (c, 1);
if (c >= 0xC2 && c <= 0xDF) size = 2; // 0xC0/0xC1 would be overlong: refused here
else if (c >= 0xE0 && c <= 0xEF) size = 3;
else if (c >= 0xF0 && c <= 0xF4) size = 4;
else return (0, 0);
if (i + size > b.length) return (0, 0);
for (uint256 j = 1; j < size; j++) {
uint8 cc = uint8(b[i + j]);
if (cc < 0x80 || cc > 0xBF) return (0, 0);
}
if (size == 2) {
cp = (uint256(c & 0x1F) << 6) | uint256(uint8(b[i + 1]) & 0x3F);
} else if (size == 3) {
cp = (uint256(c & 0x0F) << 12) | (uint256(uint8(b[i + 1]) & 0x3F) << 6)
| uint256(uint8(b[i + 2]) & 0x3F);
if (cp < 0x800) return (0, 0); // overlong
if (cp >= 0xD800 && cp <= 0xDFFF) return (0, 0); // surrogate half
} else {
cp = (uint256(c & 0x07) << 18) | (uint256(uint8(b[i + 1]) & 0x3F) << 12)
| (uint256(uint8(b[i + 2]) & 0x3F) << 6) | uint256(uint8(b[i + 3]) & 0x3F);
if (cp < 0x10000 || cp > 0x10FFFF) return (0, 0); // overlong / out of range
}
}
/// The allowlist. Ranges hold visible pictographs only -- no letters, no invisibles.
function _allowedCodepoint(uint256 cp) internal pure returns (bool) {
if (cp >= 0x61 && cp <= 0x7A) return true; // a-z
if (cp >= 0x30 && cp <= 0x39) return true; // 0-9
if (cp == 0x2D) return true; // -
if (cp >= 0x2600 && cp <= 0x27BF) return true; // misc symbols + dingbats (U+2764 heart)
if (cp >= 0x1F300 && cp <= 0x1F5FF) return true; // misc symbols & pictographs
if (cp >= 0x1F600 && cp <= 0x1F64F) return true; // emoticons
if (cp >= 0x1F680 && cp <= 0x1F6FF) return true; // transport & map
if (cp >= 0x1F900 && cp <= 0x1F9FF) return true; // supplemental symbols & pictographs
if (cp >= 0x1FA70 && cp <= 0x1FAFF) return true; // symbols & pictographs extended-A
return false;
}
/// Codepoints, not bytes: an emoji is one character for pricing and for SVG sizing.
/// Only ever reached for labels _validName already accepted.
function _charCount(bytes memory b) internal pure returns (uint256 n) {
for (uint256 i = 0; i < b.length;) {
uint8 c = uint8(b[i]);
i += c < 0x80 ? 1 : (c < 0xE0 ? 2 : (c < 0xF0 ? 3 : 4));
n++;
}
}
function tokenURI(uint256 tokenId) public view override returns (string memory) {
_requireOwned(tokenId);
string memory label = nameOf[tokenId];
string memory json = string(
abi.encodePacked(
'{"name":"',
label,
'.hud","description":"A .hud name on HudPad (Robinhood Chain). Fully on-chain.","image":"data:image/svg+xml;base64,',
Base64.encode(bytes(svgOf(label))),
'"}'
)
);
return string(abi.encodePacked("data:application/json;base64,", Base64.encode(bytes(json))));
}
function svgOf(string memory label) public pure returns (string memory) {
uint256 len = _charCount(bytes(label));
string memory size = len <= 6 ? "88" : (len <= 10 ? "60" : (len <= 16 ? "42" : "28"));
return string(
abi.encodePacked(
'<svg xmlns="http://www.w3.org/2000/svg" width="600" height="600" viewBox="0 0 600 600">',
_defs(),
'<rect width="600" height="600" fill="#080a0f"/>',
'<g clip-path="url(#r)">',
'<circle cx="110" cy="90" r="190" fill="url(#a1)" opacity="0.16" filter="url(#f)"/>',
'<circle cx="500" cy="520" r="220" fill="url(#a2)" opacity="0.12" filter="url(#f)"/>',
"</g>",
'<rect x="20.5" y="20.5" width="559" height="559" fill="none" stroke="#f0a94d" stroke-opacity="0.28"/>',
'<path d="M20 44V20h24M556 20h24v24M580 556v24h-24M44 580H20v-24" fill="none" stroke="#ffcf6b" stroke-width="3"/>',
'<circle cx="60" cy="62" r="14" fill="none" stroke="#f0a94d" stroke-width="2" opacity="0.55"/>',
'<circle cx="60" cy="62" r="4" fill="#f0a94d"/>',
'<path d="M60 42v8M60 74v8M40 62h8M72 62h8" stroke="#f0a94d" stroke-width="2" stroke-linecap="round"/>',
'<text x="92" y="68" font-family="monospace" font-size="15" letter-spacing="5" fill="#f0a94d">HUDPAD</text>',
'<text x="300" y="316" text-anchor="middle" font-family="Segoe UI,Helvetica,Arial,sans-serif" font-weight="700" font-size="',
size,
'" fill="#f4f6fa">',
label,
'<tspan fill="#f0a94d">.hud</tspan></text>',
'<text x="300" y="548" text-anchor="middle" font-family="monospace" font-size="13" letter-spacing="4" fill="#79828f">ROBINHOOD CHAIN \xc2\xb7 ON-CHAIN NAME</text>',
"</svg>"
)
);
}
function _defs() internal pure returns (string memory) {
return string(
abi.encodePacked(
"<defs>",
'<radialGradient id="a1"><stop offset="0" stop-color="#f0a94d"/><stop offset="1" stop-color="#f0a94d" stop-opacity="0"/></radialGradient>',
'<radialGradient id="a2"><stop offset="0" stop-color="#ffcf6b"/><stop offset="1" stop-color="#ffcf6b" stop-opacity="0"/></radialGradient>',
'<filter id="f" x="-60%" y="-60%" width="220%" height="220%"><feGaussianBlur stdDeviation="60"/></filter>',
'<clipPath id="r"><rect x="21" y="21" width="558" height="558"/></clipPath>',
"</defs>"
)
);
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "_treasury",
"type": "address",
"internalType": "address"
},
{
"name": "_wei3",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_wei4",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "_wei5",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "BadYears",
"type": "error",
"inputs": []
},
{
"name": "ERC721IncorrectOwner",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InsufficientApproval",
"type": "error",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC721InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidOperator",
"type": "error",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC721NonexistentToken",
"type": "error",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InsufficientPayment",
"type": "error",
"inputs": []
},
{
"name": "InvalidName",
"type": "error",
"inputs": []
},
{
"name": "NameExpired",
"type": "error",
"inputs": []
},
{
"name": "NameNotRegistered",
"type": "error",
"inputs": []
},
{
"name": "NameTaken",
"type": "error",
"inputs": []
},
{
"name": "NotNameOwner",
"type": "error",
"inputs": []
},
{
"name": "Reentrancy",
"type": "error",
"inputs": []
},
{
"name": "RefundFailed",
"type": "error",
"inputs": []
},
{
"name": "WithdrawFailed",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ApprovalForAll",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "NameRegistered",
"type": "event",
"inputs": [
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "target",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "expiry",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "paidWei",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "NameRenewed",
"type": "event",
"inputs": [
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "expiry",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "paidWei",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "PrimarySet",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "TargetSet",
"type": "event",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
},
{
"name": "target",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"indexed": true,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "GRACE_PERIOD",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_LEN",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MIN_LEN",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "YEAR",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allTokenIds",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "available",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "expiryOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getApproved",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isApprovedForAll",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "operator",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "nameOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "ownerOf",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "priceOf",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "numYears",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "priceWei3",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "priceWei4",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "priceWei5",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "primaryOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "register",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "target",
"type": "address",
"internalType": "address"
},
{
"name": "numYears",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "id",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "renew",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "numYears",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "resolve",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "reverseName",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "safeTransferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "data",
"type": "bytes",
"internalType": "bytes"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setApprovalForAll",
"type": "function",
"inputs": [
{
"name": "operator",
"type": "address",
"internalType": "address"
},
{
"name": "approved",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setPrimary",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTarget",
"type": "function",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "target",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "supportsInterface",
"type": "function",
"inputs": [
{
"name": "interfaceId",
"type": "bytes4",
"internalType": "bytes4"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "svgOf",
"type": "function",
"inputs": [
{
"name": "label",
"type": "string",
"internalType": "string"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "pure"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "targetOf",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "tokenURI",
"type": "function",
"inputs": [
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalNames",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "tokenId",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferNonce",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "withdraw",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x610100604052346103d65761332d6080813803918261001d816103db565b9384928339810103126103d65780516001600160a01b03811691908281036103d657602082015190606060408401519301519361005a60406103db565b600b81526a4875645061644e616d657360a81b602082015261007c60406103db565b60048152630b9a1d5960e21b6020820152815190916001600160401b0382116102d65760005490600182811c921680156103cc575b60208310146102b65781601f84931161035d575b50602090601f83116001146102f7576000926102ec575b50508160011b916000199060031b1c1916176000555b8051906001600160401b0382116102d65760015490600182811c921680156102cc575b60208310146102b65781601f849311610246575b50602090601f83116001146101de576000926101d3575b50508160011b916000199060031b1c1916176001555b6001600c55156101c25760805260a05260c05260e052604051612f2c90816104018239608051818181610f9c015281816110da015261283a015260a051818181610ffe0152612593015260c05181818161109e01526125d2015260e051818181610f3301526125f80152f35b63d92e233d60e01b60005260046000fd5b015190503880610140565b600160009081528281209350601f198516905b81811061022e5750908460019594939210610215575b505050811b01600155610156565b015160001960f88460031b161c19169055388080610207565b929360206001819287860151815501950193016101f1565b60016000529091507fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6601f840160051c810191602085106102ac575b90601f859493920160051c01905b81811061029d5750610129565b60008155849350600101610290565b9091508190610282565b634e487b7160e01b600052602260045260246000fd5b91607f1691610115565b634e487b7160e01b600052604160045260246000fd5b0151905038806100dc565b60008080528281209350601f198516905b818110610345575090846001959493921061032c575b505050811b016000556100f2565b015160001960f88460031b161c1916905538808061031e565b92936020600181928786015181550195019301610308565b600080529091507f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f840160051c810191602085106103c2575b90601f859493920160051c01905b8181106103b357506100c5565b600081558493506001016103a6565b9091508190610398565b91607f16916100b1565b600080fd5b6040519190601f01601f191682016001600160401b038111838210176102d65760405256fe608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a71461133157508063051a26641461130557806306fdde0314611260578063081812fc14611222578063095ea7b31461113357806323b872dd1461111c5780633ccfd60b146110c1578063418064ba1461108657806342842e0e1461105c578063461a447814611021578063506e1aa214610fe65780635d0797c014610fcb57806361d027b314610f865780636352211e14610f56578063640ad6f614610f1b5780636414378814610ee15780636e303cad14610eac57806370a0823114610e565780637d07b2d214610e1e5780638119648114610e0257806382bcd2d714610dce5780638391454014610daf57806395d89b4114610ce2578063a22cb46514610c41578063a38cb6c114610c23578063acf1a84114610ac1578063aeb8ce9b14610a7c578063b88d4fde14610a1b578063baef73e9146109ef578063beee6ff8146109a3578063c11296fc146108cd578063c1a287e2146108af578063c640c4e31461088b578063c87b56dd146106e2578063d393c8711461030f578063d62597f914610242578063e985e9c5146101e75763f5836c16146101c157600080fd5b346101e25760206101da6101d4366115a7565b91612570565b604051908152f35b600080fd5b346101e25760403660031901126101e2576102006114e3565b6102086114f9565b9060018060a01b0316600052600560205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346101e25760203660031901126101e2576004356001600160401b0381116101e25761027561027c913690600401611549565b36916115f4565b6020815191012080600052600260205260018060a01b036040600020541633036102fe5780600052600760205260406000205442116102ed5733600052600960205280604060002055337fc0101a5b385e969eba200e3fc2050d5283b4878d5df17988f0013cd43ed62c5d600080a3005b636c80f2e360e01b60005260046000fd5b6310bc162d60e21b60005260046000fd5b60603660031901126101e2576004356001600160401b0381116101e25761033a903690600401611549565b6103426114f9565b91604435926001600c54036106d1576002600c5561036083836128c8565b156106c0578315938480156106b6575b6106a55761037f3685856115f4565b8051602091820120600081815260029092526040909120549094906001600160a01b0316156104f8578460005260076020526040600020546276a70081018091116104d1574211156104e7576103d58533612653565b505b6103e2828286612817565b956301e1338083029283046301e133801417156104d15760209585936104297f272cd72e66e74308804b84203494aee8ecac3a9b4a678d0e5f21dea31d7d7e479442611944565b600086815260078a5260409020556001600160a01b0381166104cc5750335b846000526008885260406000209060018060a01b03166001600160601b0360a01b825416179055836000526008875260018060a01b03604060002054169484600052600788526104aa6040600020549160405194608086526080860191611951565b9588840152604083015260608201528033940390a36001600c55604051908152f35b610448565b634e487b7160e01b600052601160045260246000fd5b639e4b268560e01b60005260046000fd5b331561068f576001600160a01b036105108633612653565b166106795784600052600660205260406000206001600160401b0382116105ad5761053b815461139c565b601f8111610631575b50816000601f82116001146105ce576000916105c3575b508260011b906000198460031b1c19161790555b600a54680100000000000000008110156105ad578060016105939201600a55611576565b81549060031b9087821b91600019901b19161790556103d7565b634e487b7160e01b600052604160045260246000fd5b90508501358861055b565b82815260208120915083601f198116825b8181106106165750106105fc575b5050600182811b01905561056f565b860135600019600385901b60f8161c1916905587806105ed565b898401358555600190940193602093840193879350016105df565b816000526020600020601f840160051c8101916020851061066f575b601f0160051c01905b8181106106635750610544565b60008155600101610656565b909150819061064d565b6339e3563760e11b600052600060045260246000fd5b633250574960e11b600052600060045260246000fd5b633b40365560e21b60005260046000fd5b50600a8111610370565b63430f13b360e01b60005260046000fd5b63558a1e0360e11b60005260046000fd5b346101e25760203660031901126101e2576004356106ff8161261c565b50600052600660205261088761081f61071b60406000206113f7565b61072e6002607261073361072e85611b05565b612a15565b936029604051958692683d913730b6b2911d1160b91b6020850152610761815180926020868801910161149b565b83017f2e687564222c226465736372697074696f6e223a2241202e687564206e616d65838201527f206f6e204875645061642028526f62696e686f6f6420436861696e292e20467560498201527f6c6c79206f6e2d636861696e2e222c22696d616765223a22646174613a696d6160698201527119d94bdcdd99cade1b5b0ed8985cd94d8d0b60721b6089820152610803825180936020609b8501910161149b565b010161227d60f01b838201520301601d198101845201826113d6565b610873603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006020830152610862815180926020868601910161149b565b81010301601f1981018352826113d6565b6040519182916020835260208301906114be565b0390f35b346101e25760203660031901126101e2576108876108736108aa6114e3565b6124dd565b346101e25760003660031901126101e25760206040516276a7008152f35b346101e25760403660031901126101e2576004356001600160401b0381116101e257610900610912913690600401611549565b919061090a6114f9565b9236916115f4565b602081519101209081600052600260205260018060a01b036040600020541633036102fe576001600160a01b031680156109925760207f9cdf5acea6190e167c035f8fccead8b8b0104f3bc1a3925cbc73f6fcb1de81399183600052600882526040600020816001600160601b0360a01b825416179055604051908152a2005b63d92e233d60e01b60005260046000fd5b346101e25760203660031901126101e2576004356001600160401b0381116101e257366023820112156101e2576108736109ea6108879236906024816004013591016115f4565b611b05565b346101e25760203660031901126101e25760043560005260076020526020604060002054604051908152f35b346101e25760803660031901126101e257610a346114e3565b610a3c6114f9565b606435916001600160401b0383116101e257366023840112156101e257610a70610a7a9336906024816004013591016115f4565b91604435916119df565b005b346101e25760203660031901126101e2576004356001600160401b0381116101e257610ab7610ab16020923690600401611549565b90611972565b6040519015158152f35b610aca366115a7565b90916001600c54036106d1576002600c55811592838015610c19575b6106a557610af53682846115f4565b602081519101209384600052600260205260018060a01b036040600020541615610c08578460005260076020526040600020546276a70081018091116104d15742116102ed57610b46848385612817565b938560005260076020524260406000205411600014610c0157856000526007602052604060002054915b6301e1338082029182046301e133801417156104d157610b8f91611944565b6312cc030042018042116104d15781116106a5577f9ea02d93c5cb84ce2285db5eaef1621db6b055bf0a0a668d388ada608e9d68c09385600052600760205281604060002055610bec604051948594606086526060860191611951565b91602084015260408301520390a26001600c55005b4291610b70565b6331aef0e560e01b60005260046000fd5b50600a8311610ae6565b346101e25760003660031901126101e2576020600a54604051908152f35b346101e25760403660031901126101e257610c5a6114e3565b602435908115158092036101e2576001600160a01b0316908115610ccd57336000526005602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b50630b61174360e31b60005260045260246000fd5b346101e25760003660031901126101e2576040516000600154610d048161139c565b8084529060018116908115610d8b5750600114610d2c575b61088783610873818503826113d6565b600160009081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b808210610d7157509091508101602001610873610d1c565b919260018160209254838588010152019101909291610d59565b60ff191660208086019190915291151560051b840190910191506108739050610d1c565b346101e25760003660031901126101e25760206040516301e133808152f35b346101e25760203660031901126101e2576004356000526008602052602060018060a01b0360406000205416604051908152f35b346101e25760003660031901126101e257602060405160038152f35b346101e25760203660031901126101e257600435600a548110156101e257610e47602091611576565b90549060031b1c604051908152f35b346101e25760203660031901126101e2576001600160a01b03610e776114e3565b168015610e965760005260036020526020604060002054604051908152f35b6322718ad960e21b600052600060045260246000fd5b346101e25760203660031901126101e257600435600052600b60205260206001600160401b0360406000205416604051908152f35b346101e25760203660031901126101e2576001600160a01b03610f026114e3565b1660005260096020526020604060002054604051908152f35b346101e25760003660031901126101e25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101e25760203660031901126101e2576020610f7460043561261c565b6040516001600160a01b039091168152f35b346101e25760003660031901126101e2576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101e25760003660031901126101e2576020604051818152f35b346101e25760003660031901126101e25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101e25760203660031901126101e2576004356001600160401b0381116101e257610f746110566020923690600401611549565b906118d7565b346101e257610a7a61106d3661150f565b906040519261107d6020856113d6565b600084526119df565b346101e25760003660031901126101e25760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346101e25760003660031901126101e2576000808080477f00000000000000000000000000000000000000000000000000000000000000005af16111036118a7565b501561110b57005b631d42c86760e21b60005260046000fd5b346101e257610a7a61112d3661150f565b9161162b565b346101e25760403660031901126101e25761114c6114e3565b6024356111588161261c565b3315158061120f575b806111e1575b6111cc5781906001600160a01b0384811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4600090815260046020526040902080546001600160a01b0319166001600160a01b03909216919091179055005b63a9fbf51f60e01b6000523360045260246000fd5b506001600160a01b038116600090815260056020908152604080832033845290915290205460ff1615611167565b506001600160a01b038116331415611161565b346101e25760203660031901126101e25760043561123f8161261c565b506000526004602052602060018060a01b0360406000205416604051908152f35b346101e25760003660031901126101e257604051600080546112818161139c565b8084529060018116908115610d8b57506001146112a85761088783610873818503826113d6565b60008080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b8082106112eb57509091508101602001610873610d1c565b9192600181602092548385880101520191019092916112d3565b346101e25760203660031901126101e257600435600052600660205261088761087360406000206113f7565b346101e25760203660031901126101e2576004359063ffffffff60e01b82168092036101e2576020916380ac58cd60e01b811490811561138b575b811561137a575b5015158152f35b6301ffc9a760e01b14905083611373565b635b5e139f60e01b8114915061136c565b90600182811c921680156113cc575b60208310146113b657565b634e487b7160e01b600052602260045260246000fd5b91607f16916113ab565b90601f801991011681019081106001600160401b038211176105ad57604052565b906040519182600082549261140b8461139c565b80845293600181169081156114795750600114611432575b50611430925003836113d6565b565b90506000929192526020600020906000915b81831061145d5750509060206114309282010138611423565b6020919350806001915483858901015201910190918492611444565b90506020925061143094915060ff191682840152151560051b82010138611423565b60005b8381106114ae5750506000910152565b818101518382015260200161149e565b906020916114d78151809281855285808601910161149b565b601f01601f1916010190565b600435906001600160a01b03821682036101e257565b602435906001600160a01b03821682036101e257565b60609060031901126101e2576004356001600160a01b03811681036101e257906024356001600160a01b03811681036101e2579060443590565b9181601f840112156101e2578235916001600160401b0383116101e257602083818601950101116101e257565b600a5481101561159157600a60005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b60406003198201126101e257600435906001600160401b0382116101e2576115d191600401611549565b909160243590565b6001600160401b0381116105ad57601f01601f191660200190565b929192611600826115d9565b9161160e60405193846113d6565b8294818452818301116101e2578281602093846000960137010152565b6001600160a01b039091169190821561068f576000828152600260205260408120546001600160a01b03169383919033151580611811575b50851515806117dc575b81835260036020526040832060018154019055838352600260205260408320826001600160601b0360a01b8254161790558382887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040519680a483600052600b602052604060002080546001600160401b0360018183160116906001600160401b031916179055806117c5575b611789575b85810361173a575b5050506001600160a01b031680830361172057505050565b6364283d7b60e01b60005260045260245260445260646000fd5b7f9cdf5acea6190e167c035f8fccead8b8b0104f3bc1a3925cbc73f6fcb1de81399160209184600052600883526040600020816001600160601b0360a01b8254161790558152a2813880611708565b856000526009602052600060408120556000867fc0101a5b385e969eba200e3fc2050d5283b4878d5df17988f0013cd43ed62c5d8280a3611700565b5085600052600960205282604060002054146116fb565b600084815260046020526040902080546001600160a01b0319169055868352600360205260408320805460001901905561166d565b9192509080611858575b156118295790839138611663565b83828661184257602491637e27328960e01b8252600452fd5b60449163177e802f60e01b825233600452602452fd5b503385148015611886575b8061181b5750838252600460205260408220546001600160a01b0316331461181b565b5084825260056020908152604080842033855290915282205460ff16611863565b3d156118d2573d906118b8826115d9565b916118c660405193846113d6565b82523d6000602084013e565b606090565b6118e29136916115f4565b6020815191012080600052600260205260018060a01b036040600020541615801561192d575b611927576000908152600860205260409020546001600160a01b031690565b50600090565b508060005260076020526040600020544211611908565b919082018092116104d157565b908060209392818452848401376000828201840152601f01601f1916010190565b61197c82826128c8565b156119d85761198c9136916115f4565b6020815191012080600052600260205260018060a01b0360406000205416159081156119b6575090565b905060005260076020526040600020546276a70081018091116104d157421190565b5050600090565b92916119ec81838661162b565b813b6119f9575b50505050565b604051630a85bd0160e11b81523360048201526001600160a01b0394851660248201526044810191909152608060648201529216919060209082908190611a449060848301906114be565b03816000865af18091600091611abb575b5090611a865750611a646118a7565b80519081611a815782633250574960e11b60005260045260246000fd5b602001fd5b6001600160e01b03191663757a42ff60e11b01611aa75750388080806119f3565b633250574960e11b60005260045260246000fd5b6020813d602011611afd575b81611ad4602093836113d6565b81010312611af95751906001600160e01b031982168203611af6575038611a55565b80fd5b5080fd5b3d9150611ac7565b61245660ca6011611e4193611b198161299d565b60009060068111612459575050610398604051611b376040826113d6565b6002815261070760f31b6020820152915b60776040519360208501651e3232b3399f60d11b81527f3c72616469616c4772616469656e742069643d226131223e3c73746f70206f6660268701527f667365743d2230222073746f702d636f6c6f723d2223663061393464222f3e3c60468701527f73746f70206f66667365743d2231222073746f702d636f6c6f723d222366306160668701527f393464222073746f702d6f7061636974793d2230222f3e3c2f72616469616c476086870152673930b234b2b73a1f60c11b60a68701527f3c72616469616c4772616469656e742069643d226132223e3c73746f70206f6660ae8701527f667365743d2230222073746f702d636f6c6f723d2223666663663662222f3e3c60ce8701527f73746f70206f66667365743d2231222073746f702d636f6c6f723d222366666360ee8701527f663662222073746f702d6f7061636974793d2230222f3e3c2f72616469616c4761010e870152673930b234b2b73a1f60c11b61012e8701527f3c66696c7465722069643d22662220783d222d3630252220793d222d363025226101368701527f2077696474683d223232302522206865696768743d2232323025223e3c6665476101568701527f6175737369616e426c757220737464446576696174696f6e3d223630222f3e3c6101768701526717b334b63a32b91f60c11b6101968701527f3c636c6970506174682069643d2272223e3c7265637420783d2232312220793d61019e8701527f223231222077696474683d2235353822206865696768743d22353538222f3e3c6101be8701526917b1b634b82830ba341f60b11b6101de870152661e17b232b3399f60c91b6101e88701526101cf8652611dbd6101ef876113d6565b604051998a967f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208901527f30302f737667222077696474683d2236303022206865696768743d223630302260408901527f2076696577426f783d223020302036303020363030223e00000000000000000060608901525180928589019061149b565b7f3c726563742077696474683d2236303022206865696768743d22363030222066908601838101919091526e34b6361e9111981c1830983311179f60891b60978201527f3c6720636c69702d706174683d2275726c28237229223e00000000000000000060a68201527f3c636972636c652063783d22313130222063793d2239302220723d223139302260bd8201527f2066696c6c3d2275726c282361312922206f7061636974793d22302e3136222060dd820152713334b63a32b91e913ab9361411b31491179f60711b60fd8201527f3c636972636c652063783d22353030222063793d223532302220723d2232323061010f8201527f222066696c6c3d2275726c282361322922206f7061636974793d22302e31322261012f82015272103334b63a32b91e913ab9361411b31491179f60691b61014f820152631e17b39f60e11b6101628201527f3c7265637420783d2232302e352220793d2232302e35222077696474683d22356101668201527f353922206865696768743d22353539222066696c6c3d226e6f6e6522207374726101868201527f6f6b653d222366306139346422207374726f6b652d6f7061636974793d22302e6101a682015264191c11179f60d91b6101c68201527f3c7061746820643d224d32302034345632306832344d353536203230683234766101cb8201527f32344d35383020353536763234682d32344d343420353830483230762d3234226101eb8201527f2066696c6c3d226e6f6e6522207374726f6b653d22236666636636622220737461020b8201526f3937b5b296bbb4b23a341e911991179f60811b61022b8201527f3c636972636c652063783d223630222063793d2236322220723d22313422206661023b8201527f696c6c3d226e6f6e6522207374726f6b653d222366306139346422207374726f61025b8201527f6b652d77696474683d223222206f7061636974793d22302e3535222f3e00000061027b8201527f3c636972636c652063783d223630222063793d2236322220723d2234222066696102988201526d36361e9111b318309c9a3211179f60911b6102b88201527f3c7061746820643d224d363020343276384d363020373476384d3430203632686102c68201527f384d3732203632683822207374726f6b653d222366306139346422207374726f6102e68201527f6b652d77696474683d223222207374726f6b652d6c696e656361703d22726f7561030682015264373211179f60d91b6103268201527f3c7465787420783d2239322220793d2236382220666f6e742d66616d696c793d61032b8201527f226d6f6e6f73706163652220666f6e742d73697a653d22313522206c6574746561034b8201527f722d73706163696e673d2235222066696c6c3d2223663061393464223e48554461036b820152692820a21e17ba32bc3a1f60b11b61038b8201527f3c7465787420783d223330302220793d223331362220746578742d616e63686f6103958201527f723d226d6964646c652220666f6e742d66616d696c793d225365676f652055496103b58201527f2c48656c7665746963612c417269616c2c73616e732d73657269662220666f6e6103d58201527f742d7765696768743d223730302220666f6e742d73697a653d220000000000006103f582015281519161231190839061040f84019060200161149b565b01017011103334b6361e9111b31a331b3330911f60791b838201526123418251809360206103a98501910161149b565b01017f3c747370616e2066696c6c3d2223663061393464223e2e6875643c2f747370618382015268371f1e17ba32bc3a1f60b91b60318201527f3c7465787420783d223330302220793d223534382220746578742d616e63686f603a8201527f723d226d6964646c652220666f6e742d66616d696c793d226d6f6e6f73706163605a8201527f652220666f6e742d73697a653d22313322206c65747465722d73706163696e67607a8201527f3d2234222066696c6c3d2223373938323866223e524f42494e484f4f44204348609a8201527f41494e20c2b7204f4e2d434841494e204e414d453c2f746578743e000000000060ba820152651e17b9bb339f60d11b60d5820152030160aa8101845201826113d6565b90565b600a811161248a5750506103986040516124746040826113d6565b6002815261036360f41b60208201525b91611b48565b6010106124b757506103986040516124a36040826113d6565b60028152611a1960f11b6020820152612484565b506103986040516124c96040826113d6565b6002815261064760f31b6020820152612484565b6001600160a01b031660008181526009602052604090205490811590811561254e575b508015612537575b61252157600052600660205261245660406000206113f7565b506040516125306020826113d6565b6000815290565b508060005260076020526040600020544211612508565b6000838152600260205260409020546001600160a01b03161415905038612500565b61257f906125849236916115f4565b61299d565b600090600381036125c65750507f00000000000000000000000000000000000000000000000000000000000000005b8181029181830414901517156104d15790565b6004141590506125f6577f00000000000000000000000000000000000000000000000000000000000000006125b3565b7f00000000000000000000000000000000000000000000000000000000000000006125b3565b6000818152600260205260409020546001600160a01b031690811561263f575090565b637e27328960e01b60005260045260246000fd5b6000828152600260205260409020546001600160a01b0316801515939291846127e0575b6001600160a01b0316801515806127c6575b8360005260026020526040600020826001600160601b0360a01b825416179055604051928483827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4809685600052600b602052604060002080546001600160401b0360018183160116906001600160401b031916179055806127af575b612773575b81612768575b5061271f57505050565b7f9cdf5acea6190e167c035f8fccead8b8b0104f3bc1a3925cbc73f6fcb1de81399160209184600052600883526040600020816001600160601b0360a01b8254161790558152a2565b905081141538612715565b806000526009602052600060408120556000817fc0101a5b385e969eba200e3fc2050d5283b4878d5df17988f0013cd43ed62c5d8280a361270f565b50806000526009602052846040600020541461270a565b816000526003602052604060002060018154019055612689565b600083815260046020526040902080546001600160a01b031916905581600052600360205260406000206000198154019055612677565b906128229291612570565b9081341061289c5781341161286b575b6000808080857f00000000000000000000000000000000000000000000000000000000000000005af16128636118a7565b501561110b57565b8134033481116104d157600080808093335af16128866118a7565b5061283257633c31275160e21b60005260046000fd5b63cd1c886760e01b60005260046000fd5b90821015611591570190565b60001981146104d15760010190565b600382108015612993575b6119d85781156115915780356001600160f81b031916602d60f81b148015612963575b6119d8579060009060005b81811061291357505060039150101590565b61291e818386612b87565b91908215908115612952575b50612948576129429161293c91611944565b926128b9565b91612901565b5050505050600090565b61295c9150612df5565b153861292a565b5060001982018281116104d157602d60f81b906001600160f81b03199061298b9085856128ad565b3516146128f6565b50602082116128d3565b60009060005b8151811015612a105761293c6129d89160006020828601015160f81c608081106000146129de57505060ff60015b1690611944565b916129a3565b60e08110156129f257505060ff60026129d1565b60f0915010600014612a075760ff60036129d1565b60ff60046129d1565b505090565b90815115612b775760405191612a2c6060846113d6565b604083527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208401527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f60408401528051600281018091116104d15760039004600281901b91906001600160fe1b038116036104d157612ac5612aaf836115d9565b92612abd60405194856113d6565b8084526115d9565b6020830190601f1901368237908081518201956020870190815192600083525b888110612b295750506003939495965052510680600114612b1657600214612b0b575090565b603d90600019015390565b50603d9081600019820153600119015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c1687010151600285015316840101516003820153019497612ae5565b90506040516125306020826113d6565b919091612b958284836128ad565b35918260f81c60808110612dea5760c281101580612ddf575b15612d8957506002935b80612bc38684611944565b11612d7c5760015b858110612d32575060028503612c0857600182018092116104d157612bf9613fc092603f926107c0956128ad565b3560f81c169260f21c16161791565b91909260038514600014612c9557600184018085116104d157620ff000610fc0613fc0612c3961f0009488886128ad565b3560f21c16169260ec1c16161792600281018091116104d157603f92612c5e926128ad565b3560f81c1617916108008310612c805761d80083101580612c89575b612c8057565b60009250829150565b5061dfff831115612c7a565b600184018085116104d1576303fc00006203f000620ff000612cbc621c00009488886128ad565b3560ec1c16169260e61c161617600284018085116104d157613fc0612ce5610fc09286866128ad565b3560f21c16161792600381018091116104d157603f92612d04926128ad565b3560f81c1617916201000083108015612d26575b156114305760009250829150565b506210ffff8311612d18565b612d46612d3f8285611944565b83866128ad565b3560f81c60808110908115612d71575b50612d6357600101612bcb565b505050505050600090600090565b60bf91501138612d56565b5050505050600090600090565b60e081101580612dd4575b15612da25750600393612bb8565b60f08110159081612dc8575b5015612dbc57600493612bb8565b50505050600090600090565b60f49150111538612dae565b5060ef811115612d94565b5060df811115612bae565b935050505090600190565b606181101580612eeb575b612e9a57603081101580612ee0575b612e9a57602d8114612e9a5761260081101580612ed4575b612e9a576201f30081101580612ec7575b612e9a576201f60081101580612eba575b612e9a576201f68081101580612ead575b612e9a576201f90081101580612ea0575b612e9a576201fa708110159081612e8c575b50612e8757600090565b600190565b6201faff9150111538612e7d565b50600190565b506201f9ff811115612e6b565b506201f6ff811115612e5a565b506201f64f811115612e49565b506201f5ff811115612e38565b506127bf811115612e27565b506039811115612e0f565b50607a811115612e0056fea26469706673582212203665f32d89760240b040415b0682a781e1b5c25b3dea8801e182aeacd7cc840064736f6c634300081a00330000000000000000000000007132d8ffd8b112a11cd12c85d65a96c70476003d00000000000000000000000000000000000000000000000000b1a2bc2ec500000000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000008e1bc9bf04000
0x608080604052600436101561001357600080fd5b60003560e01c90816301ffc9a71461133157508063051a26641461130557806306fdde0314611260578063081812fc14611222578063095ea7b31461113357806323b872dd1461111c5780633ccfd60b146110c1578063418064ba1461108657806342842e0e1461105c578063461a447814611021578063506e1aa214610fe65780635d0797c014610fcb57806361d027b314610f865780636352211e14610f56578063640ad6f614610f1b5780636414378814610ee15780636e303cad14610eac57806370a0823114610e565780637d07b2d214610e1e5780638119648114610e0257806382bcd2d714610dce5780638391454014610daf57806395d89b4114610ce2578063a22cb46514610c41578063a38cb6c114610c23578063acf1a84114610ac1578063aeb8ce9b14610a7c578063b88d4fde14610a1b578063baef73e9146109ef578063beee6ff8146109a3578063c11296fc146108cd578063c1a287e2146108af578063c640c4e31461088b578063c87b56dd146106e2578063d393c8711461030f578063d62597f914610242578063e985e9c5146101e75763f5836c16146101c157600080fd5b346101e25760206101da6101d4366115a7565b91612570565b604051908152f35b600080fd5b346101e25760403660031901126101e2576102006114e3565b6102086114f9565b9060018060a01b0316600052600560205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346101e25760203660031901126101e2576004356001600160401b0381116101e25761027561027c913690600401611549565b36916115f4565b6020815191012080600052600260205260018060a01b036040600020541633036102fe5780600052600760205260406000205442116102ed5733600052600960205280604060002055337fc0101a5b385e969eba200e3fc2050d5283b4878d5df17988f0013cd43ed62c5d600080a3005b636c80f2e360e01b60005260046000fd5b6310bc162d60e21b60005260046000fd5b60603660031901126101e2576004356001600160401b0381116101e25761033a903690600401611549565b6103426114f9565b91604435926001600c54036106d1576002600c5561036083836128c8565b156106c0578315938480156106b6575b6106a55761037f3685856115f4565b8051602091820120600081815260029092526040909120549094906001600160a01b0316156104f8578460005260076020526040600020546276a70081018091116104d1574211156104e7576103d58533612653565b505b6103e2828286612817565b956301e1338083029283046301e133801417156104d15760209585936104297f272cd72e66e74308804b84203494aee8ecac3a9b4a678d0e5f21dea31d7d7e479442611944565b600086815260078a5260409020556001600160a01b0381166104cc5750335b846000526008885260406000209060018060a01b03166001600160601b0360a01b825416179055836000526008875260018060a01b03604060002054169484600052600788526104aa6040600020549160405194608086526080860191611951565b9588840152604083015260608201528033940390a36001600c55604051908152f35b610448565b634e487b7160e01b600052601160045260246000fd5b639e4b268560e01b60005260046000fd5b331561068f576001600160a01b036105108633612653565b166106795784600052600660205260406000206001600160401b0382116105ad5761053b815461139c565b601f8111610631575b50816000601f82116001146105ce576000916105c3575b508260011b906000198460031b1c19161790555b600a54680100000000000000008110156105ad578060016105939201600a55611576565b81549060031b9087821b91600019901b19161790556103d7565b634e487b7160e01b600052604160045260246000fd5b90508501358861055b565b82815260208120915083601f198116825b8181106106165750106105fc575b5050600182811b01905561056f565b860135600019600385901b60f8161c1916905587806105ed565b898401358555600190940193602093840193879350016105df565b816000526020600020601f840160051c8101916020851061066f575b601f0160051c01905b8181106106635750610544565b60008155600101610656565b909150819061064d565b6339e3563760e11b600052600060045260246000fd5b633250574960e11b600052600060045260246000fd5b633b40365560e21b60005260046000fd5b50600a8111610370565b63430f13b360e01b60005260046000fd5b63558a1e0360e11b60005260046000fd5b346101e25760203660031901126101e2576004356106ff8161261c565b50600052600660205261088761081f61071b60406000206113f7565b61072e6002607261073361072e85611b05565b612a15565b936029604051958692683d913730b6b2911d1160b91b6020850152610761815180926020868801910161149b565b83017f2e687564222c226465736372697074696f6e223a2241202e687564206e616d65838201527f206f6e204875645061642028526f62696e686f6f6420436861696e292e20467560498201527f6c6c79206f6e2d636861696e2e222c22696d616765223a22646174613a696d6160698201527119d94bdcdd99cade1b5b0ed8985cd94d8d0b60721b6089820152610803825180936020609b8501910161149b565b010161227d60f01b838201520301601d198101845201826113d6565b610873603d60405180937f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000006020830152610862815180926020868601910161149b565b81010301601f1981018352826113d6565b6040519182916020835260208301906114be565b0390f35b346101e25760203660031901126101e2576108876108736108aa6114e3565b6124dd565b346101e25760003660031901126101e25760206040516276a7008152f35b346101e25760403660031901126101e2576004356001600160401b0381116101e257610900610912913690600401611549565b919061090a6114f9565b9236916115f4565b602081519101209081600052600260205260018060a01b036040600020541633036102fe576001600160a01b031680156109925760207f9cdf5acea6190e167c035f8fccead8b8b0104f3bc1a3925cbc73f6fcb1de81399183600052600882526040600020816001600160601b0360a01b825416179055604051908152a2005b63d92e233d60e01b60005260046000fd5b346101e25760203660031901126101e2576004356001600160401b0381116101e257366023820112156101e2576108736109ea6108879236906024816004013591016115f4565b611b05565b346101e25760203660031901126101e25760043560005260076020526020604060002054604051908152f35b346101e25760803660031901126101e257610a346114e3565b610a3c6114f9565b606435916001600160401b0383116101e257366023840112156101e257610a70610a7a9336906024816004013591016115f4565b91604435916119df565b005b346101e25760203660031901126101e2576004356001600160401b0381116101e257610ab7610ab16020923690600401611549565b90611972565b6040519015158152f35b610aca366115a7565b90916001600c54036106d1576002600c55811592838015610c19575b6106a557610af53682846115f4565b602081519101209384600052600260205260018060a01b036040600020541615610c08578460005260076020526040600020546276a70081018091116104d15742116102ed57610b46848385612817565b938560005260076020524260406000205411600014610c0157856000526007602052604060002054915b6301e1338082029182046301e133801417156104d157610b8f91611944565b6312cc030042018042116104d15781116106a5577f9ea02d93c5cb84ce2285db5eaef1621db6b055bf0a0a668d388ada608e9d68c09385600052600760205281604060002055610bec604051948594606086526060860191611951565b91602084015260408301520390a26001600c55005b4291610b70565b6331aef0e560e01b60005260046000fd5b50600a8311610ae6565b346101e25760003660031901126101e2576020600a54604051908152f35b346101e25760403660031901126101e257610c5a6114e3565b602435908115158092036101e2576001600160a01b0316908115610ccd57336000526005602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b50630b61174360e31b60005260045260246000fd5b346101e25760003660031901126101e2576040516000600154610d048161139c565b8084529060018116908115610d8b5750600114610d2c575b61088783610873818503826113d6565b600160009081527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b808210610d7157509091508101602001610873610d1c565b919260018160209254838588010152019101909291610d59565b60ff191660208086019190915291151560051b840190910191506108739050610d1c565b346101e25760003660031901126101e25760206040516301e133808152f35b346101e25760203660031901126101e2576004356000526008602052602060018060a01b0360406000205416604051908152f35b346101e25760003660031901126101e257602060405160038152f35b346101e25760203660031901126101e257600435600a548110156101e257610e47602091611576565b90549060031b1c604051908152f35b346101e25760203660031901126101e2576001600160a01b03610e776114e3565b168015610e965760005260036020526020604060002054604051908152f35b6322718ad960e21b600052600060045260246000fd5b346101e25760203660031901126101e257600435600052600b60205260206001600160401b0360406000205416604051908152f35b346101e25760203660031901126101e2576001600160a01b03610f026114e3565b1660005260096020526020604060002054604051908152f35b346101e25760003660031901126101e25760206040517f0000000000000000000000000000000000000000000000000008e1bc9bf040008152f35b346101e25760203660031901126101e2576020610f7460043561261c565b6040516001600160a01b039091168152f35b346101e25760003660031901126101e2576040517f0000000000000000000000007132d8ffd8b112a11cd12c85d65a96c70476003d6001600160a01b03168152602090f35b346101e25760003660031901126101e2576020604051818152f35b346101e25760003660031901126101e25760206040517f00000000000000000000000000000000000000000000000000b1a2bc2ec500008152f35b346101e25760203660031901126101e2576004356001600160401b0381116101e257610f746110566020923690600401611549565b906118d7565b346101e257610a7a61106d3661150f565b906040519261107d6020856113d6565b600084526119df565b346101e25760003660031901126101e25760206040517f0000000000000000000000000000000000000000000000000011c37937e080008152f35b346101e25760003660031901126101e2576000808080477f0000000000000000000000007132d8ffd8b112a11cd12c85d65a96c70476003d5af16111036118a7565b501561110b57005b631d42c86760e21b60005260046000fd5b346101e257610a7a61112d3661150f565b9161162b565b346101e25760403660031901126101e25761114c6114e3565b6024356111588161261c565b3315158061120f575b806111e1575b6111cc5781906001600160a01b0384811691167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4600090815260046020526040902080546001600160a01b0319166001600160a01b03909216919091179055005b63a9fbf51f60e01b6000523360045260246000fd5b506001600160a01b038116600090815260056020908152604080832033845290915290205460ff1615611167565b506001600160a01b038116331415611161565b346101e25760203660031901126101e25760043561123f8161261c565b506000526004602052602060018060a01b0360406000205416604051908152f35b346101e25760003660031901126101e257604051600080546112818161139c565b8084529060018116908115610d8b57506001146112a85761088783610873818503826113d6565b60008080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b8082106112eb57509091508101602001610873610d1c565b9192600181602092548385880101520191019092916112d3565b346101e25760203660031901126101e257600435600052600660205261088761087360406000206113f7565b346101e25760203660031901126101e2576004359063ffffffff60e01b82168092036101e2576020916380ac58cd60e01b811490811561138b575b811561137a575b5015158152f35b6301ffc9a760e01b14905083611373565b635b5e139f60e01b8114915061136c565b90600182811c921680156113cc575b60208310146113b657565b634e487b7160e01b600052602260045260246000fd5b91607f16916113ab565b90601f801991011681019081106001600160401b038211176105ad57604052565b906040519182600082549261140b8461139c565b80845293600181169081156114795750600114611432575b50611430925003836113d6565b565b90506000929192526020600020906000915b81831061145d5750509060206114309282010138611423565b6020919350806001915483858901015201910190918492611444565b90506020925061143094915060ff191682840152151560051b82010138611423565b60005b8381106114ae5750506000910152565b818101518382015260200161149e565b906020916114d78151809281855285808601910161149b565b601f01601f1916010190565b600435906001600160a01b03821682036101e257565b602435906001600160a01b03821682036101e257565b60609060031901126101e2576004356001600160a01b03811681036101e257906024356001600160a01b03811681036101e2579060443590565b9181601f840112156101e2578235916001600160401b0383116101e257602083818601950101116101e257565b600a5481101561159157600a60005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b60406003198201126101e257600435906001600160401b0382116101e2576115d191600401611549565b909160243590565b6001600160401b0381116105ad57601f01601f191660200190565b929192611600826115d9565b9161160e60405193846113d6565b8294818452818301116101e2578281602093846000960137010152565b6001600160a01b039091169190821561068f576000828152600260205260408120546001600160a01b03169383919033151580611811575b50851515806117dc575b81835260036020526040832060018154019055838352600260205260408320826001600160601b0360a01b8254161790558382887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6040519680a483600052600b602052604060002080546001600160401b0360018183160116906001600160401b031916179055806117c5575b611789575b85810361173a575b5050506001600160a01b031680830361172057505050565b6364283d7b60e01b60005260045260245260445260646000fd5b7f9cdf5acea6190e167c035f8fccead8b8b0104f3bc1a3925cbc73f6fcb1de81399160209184600052600883526040600020816001600160601b0360a01b8254161790558152a2813880611708565b856000526009602052600060408120556000867fc0101a5b385e969eba200e3fc2050d5283b4878d5df17988f0013cd43ed62c5d8280a3611700565b5085600052600960205282604060002054146116fb565b600084815260046020526040902080546001600160a01b0319169055868352600360205260408320805460001901905561166d565b9192509080611858575b156118295790839138611663565b83828661184257602491637e27328960e01b8252600452fd5b60449163177e802f60e01b825233600452602452fd5b503385148015611886575b8061181b5750838252600460205260408220546001600160a01b0316331461181b565b5084825260056020908152604080842033855290915282205460ff16611863565b3d156118d2573d906118b8826115d9565b916118c660405193846113d6565b82523d6000602084013e565b606090565b6118e29136916115f4565b6020815191012080600052600260205260018060a01b036040600020541615801561192d575b611927576000908152600860205260409020546001600160a01b031690565b50600090565b508060005260076020526040600020544211611908565b919082018092116104d157565b908060209392818452848401376000828201840152601f01601f1916010190565b61197c82826128c8565b156119d85761198c9136916115f4565b6020815191012080600052600260205260018060a01b0360406000205416159081156119b6575090565b905060005260076020526040600020546276a70081018091116104d157421190565b5050600090565b92916119ec81838661162b565b813b6119f9575b50505050565b604051630a85bd0160e11b81523360048201526001600160a01b0394851660248201526044810191909152608060648201529216919060209082908190611a449060848301906114be565b03816000865af18091600091611abb575b5090611a865750611a646118a7565b80519081611a815782633250574960e11b60005260045260246000fd5b602001fd5b6001600160e01b03191663757a42ff60e11b01611aa75750388080806119f3565b633250574960e11b60005260045260246000fd5b6020813d602011611afd575b81611ad4602093836113d6565b81010312611af95751906001600160e01b031982168203611af6575038611a55565b80fd5b5080fd5b3d9150611ac7565b61245660ca6011611e4193611b198161299d565b60009060068111612459575050610398604051611b376040826113d6565b6002815261070760f31b6020820152915b60776040519360208501651e3232b3399f60d11b81527f3c72616469616c4772616469656e742069643d226131223e3c73746f70206f6660268701527f667365743d2230222073746f702d636f6c6f723d2223663061393464222f3e3c60468701527f73746f70206f66667365743d2231222073746f702d636f6c6f723d222366306160668701527f393464222073746f702d6f7061636974793d2230222f3e3c2f72616469616c476086870152673930b234b2b73a1f60c11b60a68701527f3c72616469616c4772616469656e742069643d226132223e3c73746f70206f6660ae8701527f667365743d2230222073746f702d636f6c6f723d2223666663663662222f3e3c60ce8701527f73746f70206f66667365743d2231222073746f702d636f6c6f723d222366666360ee8701527f663662222073746f702d6f7061636974793d2230222f3e3c2f72616469616c4761010e870152673930b234b2b73a1f60c11b61012e8701527f3c66696c7465722069643d22662220783d222d3630252220793d222d363025226101368701527f2077696474683d223232302522206865696768743d2232323025223e3c6665476101568701527f6175737369616e426c757220737464446576696174696f6e3d223630222f3e3c6101768701526717b334b63a32b91f60c11b6101968701527f3c636c6970506174682069643d2272223e3c7265637420783d2232312220793d61019e8701527f223231222077696474683d2235353822206865696768743d22353538222f3e3c6101be8701526917b1b634b82830ba341f60b11b6101de870152661e17b232b3399f60c91b6101e88701526101cf8652611dbd6101ef876113d6565b604051998a967f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060208901527f30302f737667222077696474683d2236303022206865696768743d223630302260408901527f2076696577426f783d223020302036303020363030223e00000000000000000060608901525180928589019061149b565b7f3c726563742077696474683d2236303022206865696768743d22363030222066908601838101919091526e34b6361e9111981c1830983311179f60891b60978201527f3c6720636c69702d706174683d2275726c28237229223e00000000000000000060a68201527f3c636972636c652063783d22313130222063793d2239302220723d223139302260bd8201527f2066696c6c3d2275726c282361312922206f7061636974793d22302e3136222060dd820152713334b63a32b91e913ab9361411b31491179f60711b60fd8201527f3c636972636c652063783d22353030222063793d223532302220723d2232323061010f8201527f222066696c6c3d2275726c282361322922206f7061636974793d22302e31322261012f82015272103334b63a32b91e913ab9361411b31491179f60691b61014f820152631e17b39f60e11b6101628201527f3c7265637420783d2232302e352220793d2232302e35222077696474683d22356101668201527f353922206865696768743d22353539222066696c6c3d226e6f6e6522207374726101868201527f6f6b653d222366306139346422207374726f6b652d6f7061636974793d22302e6101a682015264191c11179f60d91b6101c68201527f3c7061746820643d224d32302034345632306832344d353536203230683234766101cb8201527f32344d35383020353536763234682d32344d343420353830483230762d3234226101eb8201527f2066696c6c3d226e6f6e6522207374726f6b653d22236666636636622220737461020b8201526f3937b5b296bbb4b23a341e911991179f60811b61022b8201527f3c636972636c652063783d223630222063793d2236322220723d22313422206661023b8201527f696c6c3d226e6f6e6522207374726f6b653d222366306139346422207374726f61025b8201527f6b652d77696474683d223222206f7061636974793d22302e3535222f3e00000061027b8201527f3c636972636c652063783d223630222063793d2236322220723d2234222066696102988201526d36361e9111b318309c9a3211179f60911b6102b88201527f3c7061746820643d224d363020343276384d363020373476384d3430203632686102c68201527f384d3732203632683822207374726f6b653d222366306139346422207374726f6102e68201527f6b652d77696474683d223222207374726f6b652d6c696e656361703d22726f7561030682015264373211179f60d91b6103268201527f3c7465787420783d2239322220793d2236382220666f6e742d66616d696c793d61032b8201527f226d6f6e6f73706163652220666f6e742d73697a653d22313522206c6574746561034b8201527f722d73706163696e673d2235222066696c6c3d2223663061393464223e48554461036b820152692820a21e17ba32bc3a1f60b11b61038b8201527f3c7465787420783d223330302220793d223331362220746578742d616e63686f6103958201527f723d226d6964646c652220666f6e742d66616d696c793d225365676f652055496103b58201527f2c48656c7665746963612c417269616c2c73616e732d73657269662220666f6e6103d58201527f742d7765696768743d223730302220666f6e742d73697a653d220000000000006103f582015281519161231190839061040f84019060200161149b565b01017011103334b6361e9111b31a331b3330911f60791b838201526123418251809360206103a98501910161149b565b01017f3c747370616e2066696c6c3d2223663061393464223e2e6875643c2f747370618382015268371f1e17ba32bc3a1f60b91b60318201527f3c7465787420783d223330302220793d223534382220746578742d616e63686f603a8201527f723d226d6964646c652220666f6e742d66616d696c793d226d6f6e6f73706163605a8201527f652220666f6e742d73697a653d22313322206c65747465722d73706163696e67607a8201527f3d2234222066696c6c3d2223373938323866223e524f42494e484f4f44204348609a8201527f41494e20c2b7204f4e2d434841494e204e414d453c2f746578743e000000000060ba820152651e17b9bb339f60d11b60d5820152030160aa8101845201826113d6565b90565b600a811161248a5750506103986040516124746040826113d6565b6002815261036360f41b60208201525b91611b48565b6010106124b757506103986040516124a36040826113d6565b60028152611a1960f11b6020820152612484565b506103986040516124c96040826113d6565b6002815261064760f31b6020820152612484565b6001600160a01b031660008181526009602052604090205490811590811561254e575b508015612537575b61252157600052600660205261245660406000206113f7565b506040516125306020826113d6565b6000815290565b508060005260076020526040600020544211612508565b6000838152600260205260409020546001600160a01b03161415905038612500565b61257f906125849236916115f4565b61299d565b600090600381036125c65750507f00000000000000000000000000000000000000000000000000b1a2bc2ec500005b8181029181830414901517156104d15790565b6004141590506125f6577f0000000000000000000000000000000000000000000000000011c37937e080006125b3565b7f0000000000000000000000000000000000000000000000000008e1bc9bf040006125b3565b6000818152600260205260409020546001600160a01b031690811561263f575090565b637e27328960e01b60005260045260246000fd5b6000828152600260205260409020546001600160a01b0316801515939291846127e0575b6001600160a01b0316801515806127c6575b8360005260026020526040600020826001600160601b0360a01b825416179055604051928483827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4809685600052600b602052604060002080546001600160401b0360018183160116906001600160401b031916179055806127af575b612773575b81612768575b5061271f57505050565b7f9cdf5acea6190e167c035f8fccead8b8b0104f3bc1a3925cbc73f6fcb1de81399160209184600052600883526040600020816001600160601b0360a01b8254161790558152a2565b905081141538612715565b806000526009602052600060408120556000817fc0101a5b385e969eba200e3fc2050d5283b4878d5df17988f0013cd43ed62c5d8280a361270f565b50806000526009602052846040600020541461270a565b816000526003602052604060002060018154019055612689565b600083815260046020526040902080546001600160a01b031916905581600052600360205260406000206000198154019055612677565b906128229291612570565b9081341061289c5781341161286b575b6000808080857f0000000000000000000000007132d8ffd8b112a11cd12c85d65a96c70476003d5af16128636118a7565b501561110b57565b8134033481116104d157600080808093335af16128866118a7565b5061283257633c31275160e21b60005260046000fd5b63cd1c886760e01b60005260046000fd5b90821015611591570190565b60001981146104d15760010190565b600382108015612993575b6119d85781156115915780356001600160f81b031916602d60f81b148015612963575b6119d8579060009060005b81811061291357505060039150101590565b61291e818386612b87565b91908215908115612952575b50612948576129429161293c91611944565b926128b9565b91612901565b5050505050600090565b61295c9150612df5565b153861292a565b5060001982018281116104d157602d60f81b906001600160f81b03199061298b9085856128ad565b3516146128f6565b50602082116128d3565b60009060005b8151811015612a105761293c6129d89160006020828601015160f81c608081106000146129de57505060ff60015b1690611944565b916129a3565b60e08110156129f257505060ff60026129d1565b60f0915010600014612a075760ff60036129d1565b60ff60046129d1565b505090565b90815115612b775760405191612a2c6060846113d6565b604083527f4142434445464748494a4b4c4d4e4f505152535455565758595a61626364656660208401527f6768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f60408401528051600281018091116104d15760039004600281901b91906001600160fe1b038116036104d157612ac5612aaf836115d9565b92612abd60405194856113d6565b8084526115d9565b6020830190601f1901368237908081518201956020870190815192600083525b888110612b295750506003939495965052510680600114612b1657600214612b0b575090565b603d90600019015390565b50603d9081600019820153600119015390565b600360049199969901986001603f8b5182828260121c16870101518453828282600c1c16870101518385015382828260061c1687010151600285015316840101516003820153019497612ae5565b90506040516125306020826113d6565b919091612b958284836128ad565b35918260f81c60808110612dea5760c281101580612ddf575b15612d8957506002935b80612bc38684611944565b11612d7c5760015b858110612d32575060028503612c0857600182018092116104d157612bf9613fc092603f926107c0956128ad565b3560f81c169260f21c16161791565b91909260038514600014612c9557600184018085116104d157620ff000610fc0613fc0612c3961f0009488886128ad565b3560f21c16169260ec1c16161792600281018091116104d157603f92612c5e926128ad565b3560f81c1617916108008310612c805761d80083101580612c89575b612c8057565b60009250829150565b5061dfff831115612c7a565b600184018085116104d1576303fc00006203f000620ff000612cbc621c00009488886128ad565b3560ec1c16169260e61c161617600284018085116104d157613fc0612ce5610fc09286866128ad565b3560f21c16161792600381018091116104d157603f92612d04926128ad565b3560f81c1617916201000083108015612d26575b156114305760009250829150565b506210ffff8311612d18565b612d46612d3f8285611944565b83866128ad565b3560f81c60808110908115612d71575b50612d6357600101612bcb565b505050505050600090600090565b60bf91501138612d56565b5050505050600090600090565b60e081101580612dd4575b15612da25750600393612bb8565b60f08110159081612dc8575b5015612dbc57600493612bb8565b50505050600090600090565b60f49150111538612dae565b5060ef811115612d94565b5060df811115612bae565b935050505090600190565b606181101580612eeb575b612e9a57603081101580612ee0575b612e9a57602d8114612e9a5761260081101580612ed4575b612e9a576201f30081101580612ec7575b612e9a576201f60081101580612eba575b612e9a576201f68081101580612ead575b612e9a576201f90081101580612ea0575b612e9a576201fa708110159081612e8c575b50612e8757600090565b600190565b6201faff9150111538612e7d565b50600190565b506201f9ff811115612e6b565b506201f6ff811115612e5a565b506201f64f811115612e49565b506201f5ff811115612e38565b506127bf811115612e27565b506039811115612e0f565b50607a811115612e0056fea26469706673582212203665f32d89760240b040415b0682a781e1b5c25b3dea8801e182aeacd7cc840064736f6c634300081a0033
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x410bf3…8e213c | 30 days agoThu, 16 Jul 2026 17:31:06 UTC | 0x9cdf5a…8139 | [0] 0x5fb2cf7285f8…ac8303d3 data: 0x000000000000000000…0476003d |
| 0x410bf3…8e213c | 30 days agoThu, 16 Jul 2026 17:31:06 UTC | Transfer | [0] 0x000000000000…ba330bcc [1] 0x000000000000…0476003d [2] 0x5fb2cf7285f8…ac8303d3 |
| 0xf59a45…3e4fc5 | 30 days agoThu, 16 Jul 2026 12:57:05 UTC | 0x272cd7…7e47 | [0] 0x5fb2cf7285f8…ac8303d3 [1] 0x000000000000…ba330bcc data: 0x000000000000000000…00000000 |
| 0xf59a45…3e4fc5 | 30 days agoThu, 16 Jul 2026 12:57:05 UTC | 0x9cdf5a…8139 | [0] 0x5fb2cf7285f8…ac8303d3 data: 0x000000000000000000…ba330bcc |
| 0xf59a45…3e4fc5 | 30 days agoThu, 16 Jul 2026 12:57:05 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…ba330bcc [2] 0x5fb2cf7285f8…ac8303d3 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x410bf3…8e213c | Transfer From | 11,438,655 | 30 days agoThu, 16 Jul 2026 17:31:06 UTC | 0xd141…0bcc | IN | HudPadNames | $0.000 ETH | 0.00000451 | |
| 0xf59a45…3e4fc5 | register | 11,274,102 | 30 days agoThu, 16 Jul 2026 12:57:05 UTC | 0xd141…0bcc | IN | HudPadNames | $47.020.025 ETH | 0.00001422 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 11,274,102 | 30 days agoThu, 16 Jul 2026 12:57:05 UTC | 0xf59a45…3e4fc5 | CALL | register | 0xa7ef…cd56 | OUT | 0x7132…003d | 0.025 ETH |