// SPDX-License-Identifier: MIT
pragma solidity ^0.8.26;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol";
import {RhmiDistributor} from "./RhmiDistributor.sol";
/// @title RhmiToken ($RHMI — RobinHood Meme Index)
/// @notice Plain fixed-supply ERC-20. The trade tax lives entirely in the v4
/// hook (collected in native ETH); this contract's only extra job is keeping
/// the distributor's holder registry in sync on every balance change.
///
/// Launch posture (same as the audited base): 1B fixed supply, no mint, no
/// burn hooks, no blacklist, no pause, no proxy. The owner wires things up
/// (trading gate, exemptions, distributor config) and then renounces, freezing
/// the token forever. The reward BASKET stays curated at the treasury by the
/// multisig — that is the one trust point of this design, documented openly.
/// Claims and batch processing are permissionless and survive renounce.
contract RhmiToken is ERC20, Ownable2Step {
uint256 public constant TOTAL_SUPPLY = 1_000_000_000 ether;
uint32 public constant MAX_PROCESSING_GAS = 1_000_000;
RhmiDistributor public immutable distributor;
/// One-way launch gate: until enabled, only exempt addresses can move
/// tokens (deployer/LP seeding liquidity, sniper-check window).
bool public tradingEnabled;
mapping(address => bool) public isExempt;
event TradingEnabled();
event ExemptUpdated(address indexed account, bool exempt);
error TradingDisabled();
error AlreadyEnabled();
error GasLimitTooHigh();
error ZeroAddress();
constructor(
string memory name_,
string memory symbol_,
address owner_,
uint256 minimumTokenBalanceForRewards_,
uint256 claimWait_
) ERC20(name_, symbol_) Ownable(owner_)
{
distributor = new RhmiDistributor(minimumTokenBalanceForRewards_, claimWait_);
isExempt[owner_] = true;
emit ExemptUpdated(owner_, true);
_mint(owner_, TOTAL_SUPPLY);
}
// ---- owner wiring (all frozen at renounce) ----
function enableTrading() external onlyOwner {
if (tradingEnabled) revert AlreadyEnabled();
tradingEnabled = true;
emit TradingEnabled();
}
function setExempt(address account, bool exempt) external onlyOwner {
if (account == address(0)) revert ZeroAddress();
isExempt[account] = exempt;
emit ExemptUpdated(account, exempt);
}
/// @notice One-time forward: fixes the distributor's treasury (the only
/// address ever allowed to register assets and credit rewards).
function setDistributorTreasury(address treasury_) external onlyOwner {
distributor.setTreasury(treasury_);
}
function setRewardCriteria(uint256 minimumTokenBalanceForRewards_, uint256 claimWait_) external onlyOwner {
distributor.setCriteria(minimumTokenBalanceForRewards_, claimWait_);
}
/// @notice Exclude system addresses (PoolManager, distributor, treasury,
/// LP wallet) from the reward registry so pooled tokens never earn.
function setExcludedFromRewards(address account, bool excluded) external onlyOwner {
distributor.setExcludedFromRewards(account, excluded);
}
// ---- permissionless reward surface (alive forever) ----
function claimRewards() external returns (uint256 paidAssets) {
return distributor.claim(msg.sender);
}
function processRewardClaims(uint256 gasLimit)
external
returns (uint256 iterations, uint256 claims, uint256 lastProcessedIndex)
{
if (gasLimit > MAX_PROCESSING_GAS) revert GasLimitTooHigh();
return distributor.process(gasLimit);
}
// ---- transfer hook: launch gate + registry sync ----
function _update(address from, address to, uint256 amount) internal override {
if (from != address(0) && to != address(0) && !tradingEnabled) {
if (!isExempt[from] && !isExempt[to]) revert TradingDisabled();
}
super._update(from, to, amount);
if (from != address(0)) {
distributor.setShare(from, balanceOf(from));
}
if (to != address(0)) {
distributor.setShare(to, balanceOf(to));
}
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "owner_",
"type": "address",
"internalType": "address"
},
{
"name": "minimumTokenBalanceForRewards_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claimWait_",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AlreadyEnabled",
"type": "error",
"inputs": []
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "GasLimitTooHigh",
"type": "error",
"inputs": []
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "TradingDisabled",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ExemptUpdated",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "exempt",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferStarted",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "TradingEnabled",
"type": "event",
"inputs": [],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "MAX_PROCESSING_GAS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint32",
"internalType": "uint32"
}
],
"stateMutability": "view"
},
{
"name": "TOTAL_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "acceptOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claimRewards",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "paidAssets",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "distributor",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract RhmiDistributor"
}
],
"stateMutability": "view"
},
{
"name": "enableTrading",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "isExempt",
"type": "function",
"inputs": [
{
"name": "",
"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": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pendingOwner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "processRewardClaims",
"type": "function",
"inputs": [
{
"name": "gasLimit",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "iterations",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claims",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "lastProcessedIndex",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setDistributorTreasury",
"type": "function",
"inputs": [
{
"name": "treasury_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setExcludedFromRewards",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "excluded",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setExempt",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "exempt",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setRewardCriteria",
"type": "function",
"inputs": [
{
"name": "minimumTokenBalanceForRewards_",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "claimWait_",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "tradingEnabled",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60a0806040523461034357612fb0803803809161001c828561055a565b833981019060a0818303126103435780516001600160401b038111610343578261004791830161057d565b602082015190926001600160401b0382116103435761006791830161057d565b604082015190926001600160a01b038216929091839003610343576060810151608090910151825190926001600160401b03821161035b5760035490600182811c92168015610550575b60208310146104535781601f8493116104e2575b50602090601f831160011461047c575f92610471575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161035b57600454600181811c91168015610467575b602082101461045357601f81116103f0575b50602094601f821160011461038d579481929394955f92610382575b50508160011b915f199060031b1c1916176004555b821561036f57600680546001600160a01b03199081169091556005805491821685179055604051929084906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3611a0690838201906001600160401b0382118583101761035b5760409385936115aa8539825260208201520301905ff0801561033857608052805f52600760205260405f20600160ff19825416179055807f1a4e65b5f8cbcaf438d3211a0ce9c99ba3c826628362671bf77215c0c2aaed24602060405160018152a26002546b033b2e3c9fd0803ce8000000810180911161034757600255805f525f60205260405f206b033b2e3c9fd0803ce80000008154019055805f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60206040516b033b2e3c9fd0803ce80000008152a360018060a01b036080511690805f525f60205260405f2054823b156103435760445f92836040519586948593630a5b654b60e11b8552600485015260248401525af1801561033857610328575b604051610fd790816105d382396080518181816102430152818161030701528181610613015281816107f9015281816108d201528181610b3f0152610e360152f35b5f6103329161055a565b5f6102e6565b6040513d5f823e3d90fd5b5f80fd5b634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b631e4fbdf760e01b5f525f60045260245ffd5b015190505f8061013f565b601f1982169560045f52805f20915f5b8881106103d8575083600195969798106103c0575b505050811b01600455610154565b01515f1960f88460031b161c191690555f80806103b2565b9192602060018192868501518155019401920161039d565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c81019160208410610449575b601f0160051c01905b81811061043e5750610123565b5f8155600101610431565b9091508190610428565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610111565b015190505f806100db565b60035f9081528281209350601f198516905b8181106104ca57509084600195949392106104b2575b505050811b016003556100f0565b01515f1960f88460031b161c191690555f80806104a4565b9293602060018192878601518155019501930161048e565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610546575b90601f859493920160051c01905b81811061053857506100c5565b5f815584935060010161052b565b909150819061051d565b91607f16916100b1565b601f909101601f19168101906001600160401b0382119082101761035b57604052565b81601f82011215610343578051906001600160401b03821161035b57604051926105b1601f8401601f19166020018561055a565b8284526020838301011161034357815f9260208093018386015e830101529056fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816306fdde0314610bc1575080630918c05e14610b23578063095ea7b314610a7857806318160ddd14610a5a57806323b872dd146109785780632a68914c14610892578063313ce56714610876578063372500ab146107cc5780634ada218b146107a657806370a082311461076e578063715018a61461070757806379ba50971461067f57806389384db8146105ee5780638a8c523c146105815780638da5cb5b14610558578063902d55a51461053157806395d89b41146104285780639fde54f5146103a7578063a9059cbb14610375578063ad5dff7314610336578063bfe10928146102f1578063c388f0ca146102d3578063c6f5def714610228578063dd62ed3e146101d5578063e30c3978146101ac5763f2fde38b1461013c575f80fd5b346101a95760203660031901126101a957610155610cdc565b61015d610d6d565b600680546001600160a01b0319166001600160a01b039283169081179091556005549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b50346101a957806003193601126101a9576006546040516001600160a01b039091168152602090f35b50346101a95760403660031901126101a95760406101f1610cdc565b916101fa610cf2565b9260018060a01b031681526001602052209060018060a01b03165f52602052602060405f2054604051908152f35b50346101a9578061023836610d08565b90610241610d6d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691823b156102ce5760405163c6f5def760e01b81526001600160a01b039092166004830152151560248201529082908290604490829084905af180156102c3576102b25750f35b816102bc91610d37565b6101a95780f35b6040513d84823e3d90fd5b505050fd5b50346101a957806003193601126101a9576020604051620f42408152f35b50346101a957806003193601126101a9576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346101a95760203660031901126101a95760209060ff906040906001600160a01b03610361610cdc565b168152600784522054166040519015158152f35b50346101a95760403660031901126101a95761039c610392610cdc565b6024359033610d94565b602060405160018152f35b50346101a9576103b636610d08565b906103bf610d6d565b6001600160a01b03169081156104195760207f1a4e65b5f8cbcaf438d3211a0ce9c99ba3c826628362671bf77215c0c2aaed249183855260078252604085209015159060ff1981541660ff8316179055604051908152a280f35b63d92e233d60e01b8352600483fd5b50346101a957806003193601126101a9576040519080600454908160011c91600181168015610527575b602084108114610513578386529081156104ec575060011461048f575b61048b8461047f81860382610d37565b60405191829182610cb2565b0390f35b600481527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106104d25750909150810160200161047f8261046f565b9192600181602092548385880101520191019092916104b9565b60ff191660208087019190915292151560051b8501909201925061047f915083905061046f565b634e487b7160e01b83526022600452602483fd5b92607f1692610452565b50346101a957806003193601126101a95760206040516b033b2e3c9fd0803ce80000008152f35b50346101a957806003193601126101a9576005546040516001600160a01b039091168152602090f35b50346101a957806003193601126101a95761059a610d6d565b60065460ff8160a01c166105df5760ff60a01b1916600160a01b176006557f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c78180a180f35b637952fbad60e11b8252600482fd5b50346101a95760203660031901126101a95780610609610cdc565b610611610d6d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690813b1561067b57604051630787a21360e51b81526001600160a01b0390911660048201529082908290602490829084905af180156102c3576102b25750f35b5050fd5b50346101a957806003193601126101a957600654336001600160a01b03909116036106f457600680546001600160a01b0319908116909155600580543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63118cdaa760e01b815233600452602490fd5b50346101a957806003193601126101a957610720610d6d565b600680546001600160a01b031990811690915560058054918216905581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101a95760203660031901126101a9576020906040906001600160a01b03610796610cdc565b1681528083522054604051908152f35b50346101a957806003193601126101a957602060ff60065460a01c166040519015158152f35b50346101a957806003193601126101a957604051630f41a04d60e11b8152336004820152602081602481857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156102c357829161083c575b602082604051908152f35b90506020813d60201161086e575b8161085760209383610d37565b8101031261086a5760209150515f610831565b5080fd5b3d915061084a565b50346101a957806003193601126101a957602060405160128152f35b50346101a95760203660031901126101a957600435620f42408111610969576040516001624d3b8760e01b031981526004810191909152606081602481857f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156102c357829183908492610924575b506060935060405192835260208301526040820152f35b925050506060813d606011610961575b8161094160609383610d37565b8101031261086a576060915080516040602083015192015190915f61090d565b3d9150610934565b637d2e4eb560e01b8252600482fd5b50346101a95760603660031901126101a957610992610cdc565b61099a610cf2565b6001600160a01b038216808452600160209081526040808620335f908152925290205460443593915f1982106109d7575b505061039c9350610d94565b848210610a3f578015610a2b573315610a17578560409161039c975260016020522060018060a01b0333165f526020528360405f20910390555f806109cb565b634a1406b160e11b86526004869052602486fd5b63e602df0560e01b86526004869052602486fd5b6064868684637dc7a0d960e11b835233600452602452604452fd5b50346101a957806003193601126101a9576020600254604051908152f35b50346101a95760403660031901126101a957610a92610cdc565b602435903315610b0f576001600160a01b0316918215610afb57604090338152600160205220825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b81526004819052602490fd5b63e602df0560e01b83526004839052602483fd5b5034610bbd576040366003190112610bbd57610b3d610d6d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15610bbd575f809160446040518094819363f259f3df60e01b8352600435600484015260243560248401525af18015610bb257610ba4575080f35b610bb091505f90610d37565b005b6040513d5f823e3d90fd5b5f80fd5b34610bbd575f366003190112610bbd575f6003548060011c90600181168015610ca8575b602083108114610c9457828552908115610c705750600114610c12575b61048b8361047f81850382610d37565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b808210610c565750909150810160200161047f610c02565b919260018160209254838588010152019101909291610c3e565b60ff191660208086019190915291151560051b8401909101915061047f9050610c02565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610be5565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b0382168203610bbd57565b602435906001600160a01b0382168203610bbd57565b6040906003190112610bbd576004356001600160a01b0381168103610bbd57906024358015158103610bbd5790565b90601f8019910116810190811067ffffffffffffffff821117610d5957604052565b634e487b7160e01b5f52604160045260245ffd5b6005546001600160a01b03163303610d8157565b63118cdaa760e01b5f523360045260245ffd5b5f926001600160a01b038216918215610f8e576001600160a01b038416918215610f7b5760ff60065460a01c1615610f39575b835f525f60205260405f2054818110610f20577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208386948894855f525f84520360405f2055845f525f825260405f20818154019055604051908152a35f92835260208390526040909220547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692833b15610bbd57604051630a5b654b60e11b81526001600160a01b0391909116600482015260248101919091525f8160448183875af18015610bb257610f0b575b50835282602052604083205491813b15610f0757604051630a5b654b60e11b81526001600160a01b03919091166004820152602481019290925282908290604490829084905af180156102c357610ef5575050565b610f00828092610d37565b6101a95750565b8380fd5b610f189194505f90610d37565b5f925f610ea0565b8463391434e360e21b5f5260045260245260445260645ffd5b835f52600760205260ff60405f2054161580610f64575b15610dc75763bcb8b8fb60e01b5f5260045ffd5b50825f52600760205260ff60405f20541615610f50565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220eb072e977a9ff83a38f16ffe53de241d4006eab9498fdaf726e64a36e7044a8c64736f6c634300081a003360a03460ca57601f611a0638819003918201601f19168301916001600160401b0383118484101760ce57808492604094855283398101031260ca57602081519101519060017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005562093a80821160bb573360805260055560065560405161192390816100e3823960805181818161017601528181610205015281816102810152818161031d015281816104cf015281816109d40152610be80152f35b63b2034bbb60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c806314b6ca9614610bca57806315274d6014610b75578063197bc33614610b3e5780631aab9a9f14610b215780631e83409a146109b957806321a436e41461099c578063226cfa3d146109645780633009a609146109475780633a98ef391461092a57806361d027b3146109035780636f2789ec146108e65780637625391a146107ff57806376b1d08f146107e45780637b551f3d146107be578063995652a51461079857806399aab83a1461077b578063a7310b58146106bb578063aa9239f514610674578063b00dc77b146105a6578063b33068c414610562578063c6f5def7146104a5578063ce7c2ac21461046d578063d312998f14610421578063d78c629e146103db578063eafe7a74146103be578063f0f4426014610302578063f259f3df14610271578063f82f235f14610234578063fc0c546a146101f05763ffb2c47914610163575f80fd5b346101ec5760203660031901126101ec577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101dd576101ac6116e1565b60606101b9600435611116565b9060015f805160206118ce8339815191525560405192835260208301526040820152f35b633d0f0d9f60e21b5f5260045ffd5b5f80fd5b346101ec575f3660031901126101ec576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101ec5760203660031901126101ec576001600160a01b03610255610c58565b165f52600b602052602060ff60405f2054166040519015158152f35b346101ec5761027f36610c84565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101dd5762093a8081116102f357816040917f2f4d1814657d140c6d8df30ea0eb3e78cfc8a32ba4c202deb5920147d51be621936005558060065582519182526020820152a1005b63b2034bbb60e01b5f5260045ffd5b346101ec5760203660031901126101ec5761031b610c58565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101dd576001600160a01b031680156103af575f546001600160a01b0381166103a0576001600160a01b03191681175f9081557f3c864541ef71378c6229510ed90f376565ee42d9c5e0904a984a9e863e6db44f9080a2005b636f98f01d60e11b5f5260045ffd5b63d92e233d60e01b5f5260045ffd5b346101ec575f3660031901126101ec576020600154604051908152f35b346101ec5761040f61041d6103f86103f236610c84565b9061100f565b604092919251938493604085526040850190610ccd565b908382036020850152610c9a565b0390f35b346101ec5760203660031901126101ec5761043a610c58565b5f546001600160a01b0316330361045e57610456602091610edc565b604051908152f35b632298d39d60e11b5f5260045ffd5b346101ec5760203660031901126101ec576001600160a01b0361048e610c58565b165f526009602052602060405f2054604051908152f35b346101ec5760403660031901126101ec576104be610c58565b60243590811515908183036101ec577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101dd577f6fb704e328736eb59ac6758cc1df5a98a609cfd47a1877201101c614dffc92e99160209160018060a01b03811694855f52600b845260405f2060ff1981541660ff8516179055610553575b50604051908152a2005b61055c906113c6565b84610549565b346101ec5760403660031901126101ec5761057b610c6e565b6004355f52600460205260405f209060018060a01b03165f52602052602060405f2054604051908152f35b346101ec575f3660031901126101ec576001546105c281610e96565b6105cb82610e96565b916105d581610e96565b905f5b81811061061b576105ff8461041d8561060d89604051958695606087526060870190610ccd565b908582036020870152610c9a565b908382036040850152610c9a565b80610627600192610d09565b50828060a01b0390541661063b8287610ec8565b52600261064782610d09565b5001546106548288610ec8565b52600361066082610d09565b50015461066d8286610ec8565b52016105d8565b346101ec5760203660031901126101ec576060610692600435610d09565b5060018060a01b0381541690600360028201549101549060405192835260208301526040820152f35b346101ec5760203660031901126101ec576106d4610c58565b6001546001600160a01b0382165f9081526009602052604090205490916106fa83610e96565b9261070481610e96565b916001600160a01b038116905f5b83811061073b57868661041d8761060d6040519485948552606060208601526060850190610c9a565b8061074883600193610d7e565b610752828a610ec8565b52805f52600460205260405f20845f5260205260405f20546107748288610ec8565b5201610712565b346101ec575f3660031901126101ec57602060405162093a808152f35b346101ec5760403660031901126101ec5760206104566107b6610c6e565b600435610ddd565b346101ec5760403660031901126101ec5760206104566107dc610c6e565b600435610d7e565b346101ec575f3660031901126101ec57602060405160088152f35b346101ec5761080d36610c84565b5f546001600160a01b0316330361045e576001548210156108d75780156108c85760075480156108b95761084083610d09565b5091608081901b818104600160801b036108a5577feaf3d57629d9b1ce95715ccd98d6f5bf48023be1d5a06e09f64ab7f6d8be01d5936020936002920461088c60018301918254610d64565b90550161089a828254610d64565b9055604051908152a2005b634e487b7160e01b5f52601160045260245ffd5b63b317087b60e01b5f5260045ffd5b631f2a200560e01b5f5260045ffd5b63c97d95cf60e01b5f5260045ffd5b346101ec575f3660031901126101ec576020600654604051908152f35b346101ec575f3660031901126101ec575f546040516001600160a01b039091168152602090f35b346101ec575f3660031901126101ec576020600754604051908152f35b346101ec575f3660031901126101ec576020600854604051908152f35b346101ec5760203660031901126101ec576001600160a01b03610985610c58565b165f52600a602052602060405f2054604051908152f35b346101ec575f3660031901126101ec576020600554604051908152f35b346101ec5760203660031901126101ec576109d2610c58565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101dd57610a0a6116e1565b6001545f9182916001600160a01b038216919083905b808210610a5e57505050602092610a4c575b5060015f805160206118ce83398151915255604051908152f35b5f52600a82524260405f205582610a32565b919390928095610a6e8686610d7e565b908115610b125750610b0192917fad82e4ded87b4f1d117a62956445ec6ff411c4f2eb80134db1573f8cb74b86e7604083610af089958b610aae88610d09565b50885f526004602052855f20885f52602052855f20610ace848254610d64565b905560038101610adf848254610d64565b9055546001600160a01b0316611660565b81519081525f6020820152a3611108565b92600180935b019091949294610a20565b94905060019150949194610b07565b346101ec575f3660031901126101ec576020600c54604051908152f35b346101ec5760203660031901126101ec576020610b5c600435610d39565b905460405160039290921b1c6001600160a01b03168152f35b346101ec5760603660031901126101ec57610b8e610c6e565b303303610bbb57610bb990610ba4600435610d09565b505460443591906001600160a01b0316611660565b005b63029a949d60e31b5f5260045ffd5b346101ec5760403660031901126101ec57610be3610c58565b6024357f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036101dd576001600160a01b0382165f908152600b6020526040902054610bb9929060ff16828115610c4c575b50156114a2575f91506114a2565b90506005541184610c3e565b600435906001600160a01b03821682036101ec57565b602435906001600160a01b03821682036101ec57565b60409060031901126101ec576004359060243590565b90602080835192838152019201905f5b818110610cb75750505090565b8251845260209384019390920191600101610caa565b90602080835192838152019201905f5b818110610cea5750505090565b82516001600160a01b0316845260209384019390920191600101610cdd565b600154811015610d255760015f5260205f209060021b01905f90565b634e487b7160e01b5f52603260045260245ffd5b600c54811015610d2557600c5f5260205f2001905f90565b818102929181159184041417156108a557565b919082018092116108a557565b919082039182116108a557565b90610d898183610ddd565b915f52600460205260405f209060018060a01b03165f5260205260405f205480821115610dbc57610db991610d71565b90565b50505f90565b9190915f83820193841291129080158216911516176108a557565b610e3591610e106001610def84610d09565b5001546001600160a01b0383165f9081526009602052604090205490610d51565b915f52600360205260405f209060018060a01b03165f5260205260405f205490610dc2565b5f811315610e435760801c90565b505f90565b90601f8019910116810190811067ffffffffffffffff821117610e6a57604052565b634e487b7160e01b5f52604160045260245ffd5b67ffffffffffffffff8111610e6a5760051b60200190565b90610ea082610e7e565b610ead6040519182610e48565b8281528092610ebe601f1991610e7e565b0190602036910137565b8051821015610d255760209160051b010190565b6001600160a01b03169081156103af57815f52600260205260405f205480610ffe57506001546008811015610fef576040516080810181811067ffffffffffffffff821117610e6a5760405283815260208101915f8352604082015f815260608301915f8352600160401b811015610e6a57806001610f5e9201600155610d09565b949094610fdc5760039360018060a01b039051166bffffffffffffffffffffffff60a01b86541617855551600185015551600284015551910155600154915f1983018381116108a5578093825f52600260205260405f20557f85819f62de3f36778ef25274607ec7071cf41151e6e04a29971d86f30e8bbf915f80a3565b634e487b7160e01b5f525f60045260245ffd5b63df8153c760e01b5f5260045ffd5b9091505f1981019081116108a55790565b9091600c5492838310156110d3576110279083610d64565b928084116110cb575b5061104361103e8385610d71565b610e96565b9261105161103e8483610d71565b92805b82811061106057505050565b8061106c600192610d39565b838060a01b0391549060031b1c1661108d6110878584610d71565b89610ec8565b5261109781610d39565b838060a01b0391549060031b1c165f52600960205260405f20546110c46110be8584610d71565b88610ec8565b5201611054565b92505f611030565b509150506020906040516110e78382610e48565b5f81525f368137604051926110fc8185610e48565b5f8452505f3681379190565b5f1981146108a55760010190565b5f915f92600c5480156113b8575f9392915a926008545b858710806113af575b156113615761114490611108565b9183831015611359575b61115783610d39565b905460039190911b1c6001600160a01b031661117281611719565b6111b0575b5061118190611108565b935a90818111611194575b50939161112d565b966111a3826111a99399610d71565b90610d64565b955f61118c565b6001545f919082906001600160a01b03831690825b818110611208575050506111f5575b506111e0575b5f611177565b966111ed61118191611108565b9790506111da565b5f52600a6020524260405f20555f6111d4565b6112128582610d7e565b801561135057600361122383610d09565b50835f52600460205260405f20865f5260205260405f20611245848254610d64565b905501611253828254610d64565b8155303b156101ec5760405162a93a6b60e51b81528360048201528760248201528260448201525f8160648183305af19081611340575b506112f55791867f9d9e98f5e08c69876edaf0f6cb5a710145dffdf28a008e0e756bee3319d6fb4e60208394600196855f526004835260405f208a5f52835260405f206112d8838254610d71565b90556112e5828254610d71565b9055604051908152a35b016111c5565b5081945090857fad82e4ded87b4f1d117a62956445ec6ff411c4f2eb80134db1573f8cb74b86e76040611336959994815190815260016020820152a3611108565b93600180936112ef565b5f61134a91610e48565b5f61128a565b506001906112ef565b5f925061114e565b95509391509150836008556040519082825285602083015284604083015260608201527f30a24227f922fbe8461722b748679f146da10df67921abe743ce85386ca32bf860803292a2929190565b50838310611136565b50506008545f935083925090565b6001600160a01b0381165f818152600960205260409020549091811561149d576001546113f583600754610d71565b6007555f5b81811061144b5750507fd8a33efa58f607a36c49d8a8c5477fce4b2c71986998476cbe3494fb8f5fb7589161143d604092855f5260096020525f848120556117d3565b81519081525f6020820152a2565b8060016114588193610d09565b500154858161146a575b5050016113fa565b61147391610d51565b815f52600360205260405f20875f5260205261149460405f20918254610dc2565b90555f85611462565b505050565b6001600160a01b0381165f818152600960205260409020549092909182821461165a57600154838311156115b8576114da8484610d71565b6114e681600754610d64565b6007555f5b82811061155557505050916040917fd8a33efa58f607a36c49d8a8c5477fce4b2c71986998476cbe3494fb8f5fb758935b855f52600960205281845f205581155f146115475761153a906117d3565b82519182526020820152a2565b61155090611757565b61153a565b81600161156183610d09565b50015480611574575b50506001016114eb565b9061157e91610d51565b90805f52600360205260405f20885f5260205260405f209182545f82820392128183128116918313901516176108a557909155815f61156a565b6115c28385610d71565b6115ce81600754610d71565b6007555f5b82811061160857505050916040917fd8a33efa58f607a36c49d8a8c5477fce4b2c71986998476cbe3494fb8f5fb7589361151c565b8060016116158193610d09565b5001548381611627575b5050016115d3565b61163091610d51565b815f52600360205260405f20895f5260205261165160405f20918254610dc2565b90555f8361161f565b50505050565b916040519163a9059cbb60e01b5f5260018060a01b031660045260245260205f60448180865af19060015f51148216156116c0575b604052156116a05750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b9060018115166116d857823b15153d15161690611695565b503d5f823e3d90fd5b60025f805160206118ce833981519152541461170a5760025f805160206118ce83398151915255565b633ee5aeb560e01b5f5260045ffd5b600654908115611750576001600160a01b03165f908152600a60205260409020549081156117505761174a91610d64565b42101590565b5050600190565b6001600160a01b0381165f818152600d60205260409020549091906117cf57600c5490600160401b821015610e6a576117998260016117bd9401600c55610d39565b81546001600160a01b0393841660039290921b91821b9390911b1916919091179055565b600c54905f52600d60205260405f2055565b5050565b6001600160a01b03165f818152600d602052604090205480156117cf575f1981018181116108a557600c545f1981019081116108a55780820361188f575b505050600c54801561187b575f190161182981610d39565b81549060018060a01b039060031b1b19169055600c555f52600d6020525f6040812055600c5480155f1461185e57505f600855565b80600854101561186b5750565b5f1981019081116108a557600855565b634e487b7160e01b5f52603160045260245ffd5b6117999161189f6118b992610d39565b905460039190911b1c6001600160a01b0316928391610d39565b5f52600d60205260405f20555f808061181156fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220855e560a41282b4fb7b68911656fe8b39a967010a6091a4fba41c5170578bca264736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000005b90387625d91340120d7d1c72805f199e792cc30000000000000000000000000000000000000000000000000de0b6b3a764000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008486f6f644c6573730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005484f4f444c000000000000000000000000000000000000000000000000000000
0x6080806040526004361015610012575f80fd5b5f905f3560e01c90816306fdde0314610bc1575080630918c05e14610b23578063095ea7b314610a7857806318160ddd14610a5a57806323b872dd146109785780632a68914c14610892578063313ce56714610876578063372500ab146107cc5780634ada218b146107a657806370a082311461076e578063715018a61461070757806379ba50971461067f57806389384db8146105ee5780638a8c523c146105815780638da5cb5b14610558578063902d55a51461053157806395d89b41146104285780639fde54f5146103a7578063a9059cbb14610375578063ad5dff7314610336578063bfe10928146102f1578063c388f0ca146102d3578063c6f5def714610228578063dd62ed3e146101d5578063e30c3978146101ac5763f2fde38b1461013c575f80fd5b346101a95760203660031901126101a957610155610cdc565b61015d610d6d565b600680546001600160a01b0319166001600160a01b039283169081179091556005549091167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227008380a380f35b80fd5b50346101a957806003193601126101a9576006546040516001600160a01b039091168152602090f35b50346101a95760403660031901126101a95760406101f1610cdc565b916101fa610cf2565b9260018060a01b031681526001602052209060018060a01b03165f52602052602060405f2054604051908152f35b50346101a9578061023836610d08565b90610241610d6d565b7f0000000000000000000000001b366497e1dca662ec8d0f91f474e11db755d8f66001600160a01b031691823b156102ce5760405163c6f5def760e01b81526001600160a01b039092166004830152151560248201529082908290604490829084905af180156102c3576102b25750f35b816102bc91610d37565b6101a95780f35b6040513d84823e3d90fd5b505050fd5b50346101a957806003193601126101a9576020604051620f42408152f35b50346101a957806003193601126101a9576040517f0000000000000000000000001b366497e1dca662ec8d0f91f474e11db755d8f66001600160a01b03168152602090f35b50346101a95760203660031901126101a95760209060ff906040906001600160a01b03610361610cdc565b168152600784522054166040519015158152f35b50346101a95760403660031901126101a95761039c610392610cdc565b6024359033610d94565b602060405160018152f35b50346101a9576103b636610d08565b906103bf610d6d565b6001600160a01b03169081156104195760207f1a4e65b5f8cbcaf438d3211a0ce9c99ba3c826628362671bf77215c0c2aaed249183855260078252604085209015159060ff1981541660ff8316179055604051908152a280f35b63d92e233d60e01b8352600483fd5b50346101a957806003193601126101a9576040519080600454908160011c91600181168015610527575b602084108114610513578386529081156104ec575060011461048f575b61048b8461047f81860382610d37565b60405191829182610cb2565b0390f35b600481527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106104d25750909150810160200161047f8261046f565b9192600181602092548385880101520191019092916104b9565b60ff191660208087019190915292151560051b8501909201925061047f915083905061046f565b634e487b7160e01b83526022600452602483fd5b92607f1692610452565b50346101a957806003193601126101a95760206040516b033b2e3c9fd0803ce80000008152f35b50346101a957806003193601126101a9576005546040516001600160a01b039091168152602090f35b50346101a957806003193601126101a95761059a610d6d565b60065460ff8160a01c166105df5760ff60a01b1916600160a01b176006557f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c78180a180f35b637952fbad60e11b8252600482fd5b50346101a95760203660031901126101a95780610609610cdc565b610611610d6d565b7f0000000000000000000000001b366497e1dca662ec8d0f91f474e11db755d8f66001600160a01b031690813b1561067b57604051630787a21360e51b81526001600160a01b0390911660048201529082908290602490829084905af180156102c3576102b25750f35b5050fd5b50346101a957806003193601126101a957600654336001600160a01b03909116036106f457600680546001600160a01b0319908116909155600580543392811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b63118cdaa760e01b815233600452602490fd5b50346101a957806003193601126101a957610720610d6d565b600680546001600160a01b031990811690915560058054918216905581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b50346101a95760203660031901126101a9576020906040906001600160a01b03610796610cdc565b1681528083522054604051908152f35b50346101a957806003193601126101a957602060ff60065460a01c166040519015158152f35b50346101a957806003193601126101a957604051630f41a04d60e11b8152336004820152602081602481857f0000000000000000000000001b366497e1dca662ec8d0f91f474e11db755d8f66001600160a01b03165af19081156102c357829161083c575b602082604051908152f35b90506020813d60201161086e575b8161085760209383610d37565b8101031261086a5760209150515f610831565b5080fd5b3d915061084a565b50346101a957806003193601126101a957602060405160128152f35b50346101a95760203660031901126101a957600435620f42408111610969576040516001624d3b8760e01b031981526004810191909152606081602481857f0000000000000000000000001b366497e1dca662ec8d0f91f474e11db755d8f66001600160a01b03165af180156102c357829183908492610924575b506060935060405192835260208301526040820152f35b925050506060813d606011610961575b8161094160609383610d37565b8101031261086a576060915080516040602083015192015190915f61090d565b3d9150610934565b637d2e4eb560e01b8252600482fd5b50346101a95760603660031901126101a957610992610cdc565b61099a610cf2565b6001600160a01b038216808452600160209081526040808620335f908152925290205460443593915f1982106109d7575b505061039c9350610d94565b848210610a3f578015610a2b573315610a17578560409161039c975260016020522060018060a01b0333165f526020528360405f20910390555f806109cb565b634a1406b160e11b86526004869052602486fd5b63e602df0560e01b86526004869052602486fd5b6064868684637dc7a0d960e11b835233600452602452604452fd5b50346101a957806003193601126101a9576020600254604051908152f35b50346101a95760403660031901126101a957610a92610cdc565b602435903315610b0f576001600160a01b0316918215610afb57604090338152600160205220825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b634a1406b160e11b81526004819052602490fd5b63e602df0560e01b83526004839052602483fd5b5034610bbd576040366003190112610bbd57610b3d610d6d565b7f0000000000000000000000001b366497e1dca662ec8d0f91f474e11db755d8f66001600160a01b0316803b15610bbd575f809160446040518094819363f259f3df60e01b8352600435600484015260243560248401525af18015610bb257610ba4575080f35b610bb091505f90610d37565b005b6040513d5f823e3d90fd5b5f80fd5b34610bbd575f366003190112610bbd575f6003548060011c90600181168015610ca8575b602083108114610c9457828552908115610c705750600114610c12575b61048b8361047f81850382610d37565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b808210610c565750909150810160200161047f610c02565b919260018160209254838588010152019101909291610c3e565b60ff191660208086019190915291151560051b8401909101915061047f9050610c02565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610be5565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b0382168203610bbd57565b602435906001600160a01b0382168203610bbd57565b6040906003190112610bbd576004356001600160a01b0381168103610bbd57906024358015158103610bbd5790565b90601f8019910116810190811067ffffffffffffffff821117610d5957604052565b634e487b7160e01b5f52604160045260245ffd5b6005546001600160a01b03163303610d8157565b63118cdaa760e01b5f523360045260245ffd5b5f926001600160a01b038216918215610f8e576001600160a01b038416918215610f7b5760ff60065460a01c1615610f39575b835f525f60205260405f2054818110610f20577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60208386948894855f525f84520360405f2055845f525f825260405f20818154019055604051908152a35f92835260208390526040909220547f0000000000000000000000001b366497e1dca662ec8d0f91f474e11db755d8f66001600160a01b031692833b15610bbd57604051630a5b654b60e11b81526001600160a01b0391909116600482015260248101919091525f8160448183875af18015610bb257610f0b575b50835282602052604083205491813b15610f0757604051630a5b654b60e11b81526001600160a01b03919091166004820152602481019290925282908290604490829084905af180156102c357610ef5575050565b610f00828092610d37565b6101a95750565b8380fd5b610f189194505f90610d37565b5f925f610ea0565b8463391434e360e21b5f5260045260245260445260645ffd5b835f52600760205260ff60405f2054161580610f64575b15610dc75763bcb8b8fb60e01b5f5260045ffd5b50825f52600760205260ff60405f20541615610f50565b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffdfea2646970667358221220eb072e977a9ff83a38f16ffe53de241d4006eab9498fdaf726e64a36e7044a8c64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| DIH | 1 | $0.0000106 | $0 |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x71c2eb…80469d | Transfer | 5,635,405 | 37 days agoFri, 10 Jul 2026 00:06:38 UTC | 0x3f96…5bfe | IN | HoodLess | $0.000 ETH | 0.00000520 | |
| 0x8664c9…5cd951 | Transfer | 5,635,349 | 37 days agoFri, 10 Jul 2026 00:06:32 UTC | 0x47c9…c486 | IN | HoodLess | $0.000 ETH | 0.00000824 | |
| 0x2a4823…ae27c1 | claimRewards | 5,614,527 | 37 days agoThu, 09 Jul 2026 23:31:46 UTC | 0x3f96…5bfe | IN | HoodLess | $0.000 ETH | 0.00000197 | |
| 0xf048e6…5b0c9c | processRewardClaims | 5,614,392 | 37 days agoThu, 09 Jul 2026 23:31:32 UTC | 0x3f96…5bfe | IN | HoodLess | $0.000 ETH | 0.00000785 | |
| 0x0dbf01…444cd6 | renounceOwnership | 5,614,116 | 37 days agoThu, 09 Jul 2026 23:31:05 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000128 | |
| 0xfe4e0f…217586 | enableTrading | 5,613,870 | 37 days agoThu, 09 Jul 2026 23:30:40 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000235 | |
| 0x7b7039…72dfcf | Approve | 5,613,691 | 37 days agoThu, 09 Jul 2026 23:30:22 UTC | 0x47c9…c486 | IN | HoodLess | $0.000 ETH | 0.00000235 | |
| 0xa78668…faffa6 | Transfer | 5,613,610 | 37 days agoThu, 09 Jul 2026 23:30:14 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000325 | |
| 0xc77e47…f5cb61 | setExempt | 5,613,534 | 37 days agoThu, 09 Jul 2026 23:30:06 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000243 | |
| 0x56e662…edbb44 | setExcludedFromRewards | 5,613,509 | 37 days agoThu, 09 Jul 2026 23:30:04 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000337 | |
| 0x67cc4b…68bf76 | setExcludedFromRewards | 5,613,481 | 37 days agoThu, 09 Jul 2026 23:30:01 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000273 | |
| 0x61cac3…0d701e | setExcludedFromRewards | 5,613,456 | 37 days agoThu, 09 Jul 2026 23:29:58 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000275 | |
| 0x94c16f…cd15f7 | setExcludedFromRewards | 5,613,432 | 37 days agoThu, 09 Jul 2026 23:29:56 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000273 | |
| 0x4f0829…6ccd12 | setExcludedFromRewards | 5,613,408 | 37 days agoThu, 09 Jul 2026 23:29:54 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000282 | |
| 0x2aad55…d1bb05 | setExcludedFromRewards | 5,613,384 | 37 days agoThu, 09 Jul 2026 23:29:51 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000274 | |
| 0x95b737…bf28e7 | setDistributorTreasury | 5,613,356 | 37 days agoThu, 09 Jul 2026 23:29:48 UTC | 0x5b90…2cc3 | IN | HoodLess | $0.000 ETH | 0.00000262 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x377980e0…db5b53 | Transfer | 18,599,311 | 22 days agoSat, 25 Jul 2026 01:00:55 UTC | 0xcaf7…5d11 | IN | 0x9fa5…6ee5 | $0.001 DIH |
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x71c2eb…80469d | 37 days agoFri, 10 Jul 2026 00:06:38 UTC | Transfer | [0] 0x000000000000…79045bfe [1] 0x000000000000…f5de0834 data: 0x000000000000000000…a4dff463 |
| 0x8664c9…5cd951 | 37 days agoFri, 10 Jul 2026 00:06:32 UTC | Transfer | [0] 0x000000000000…3b2dc486 [1] 0x000000000000…f5de0834 data: 0x000000000000000000…43200b9b |
| 0x301642…9d471a | 37 days agoFri, 10 Jul 2026 00:06:14 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…3b2dc486 data: 0x000000000000000000…195c2ee5 |
| 0x8e7b1c…8514d3 | 37 days agoFri, 10 Jul 2026 00:06:11 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…3b2dc486 data: 0x000000000000000000…29bf8b9c |
| 0x14539e…26f910 | 37 days agoThu, 09 Jul 2026 23:31:18 UTC | Transfer | [0] 0x000000000000…43e40951 [1] 0x000000000000…79045bfe data: 0x000000000000000000…a4dff463 |
| 0x0dbf01…444cd6 | 37 days agoThu, 09 Jul 2026 23:31:05 UTC | 0x8be007…57e0 | [0] 0x000000000000…9e792cc3 [1] 0x000000000000…00000000 |
| 0xfe4e0f…217586 | 37 days agoThu, 09 Jul 2026 23:30:40 UTC | 0x799663…86c7 | |
| 0x6ea926…a3db12 | 37 days agoThu, 09 Jul 2026 23:30:35 UTC | Transfer | [0] 0x000000000000…3b2dc486 [1] 0x000000000000…43e40951 data: 0x000000000000000000…75fdd442 |
| 0x39a474…fdef49 | 37 days agoThu, 09 Jul 2026 23:30:27 UTC | Transfer | [0] 0x000000000000…3b2dc486 [1] 0x000000000000…43e40951 data: 0x000000000000000000…71fddaa4 |
| 0x7b7039…72dfcf | 37 days agoThu, 09 Jul 2026 23:30:22 UTC | Approval | [0] 0x000000000000…3b2dc486 [1] 0x000000000000…3ac78ba3 data: 0xffffffffffffffffff…ffffffff |
| 0xa78668…faffa6 | 37 days agoThu, 09 Jul 2026 23:30:14 UTC | Transfer | [0] 0x000000000000…9e792cc3 [1] 0x000000000000…3b2dc486 data: 0x000000000000000000…e8000000 |
| 0xc77e47…f5cb61 | 37 days agoThu, 09 Jul 2026 23:30:06 UTC | 0x1a4e65…ed24 | [0] 0x000000000000…3b2dc486 data: 0x000000000000000000…00000001 |
| 0xcfff7b…999c93 | 37 days agoThu, 09 Jul 2026 23:29:30 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…9e792cc3 data: 0x000000000000000000…e8000000 |
| 0xcfff7b…999c93 | 37 days agoThu, 09 Jul 2026 23:29:30 UTC | 0x1a4e65…ed24 | [0] 0x000000000000…9e792cc3 data: 0x000000000000000000…00000001 |
| 0xcfff7b…999c93 | 37 days agoThu, 09 Jul 2026 23:29:30 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…9e792cc3 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 5,613,172 | 37 days agoThu, 09 Jul 2026 23:29:30 UTC | 0xcfff7b…999c93 | CREATE | 0x60a08060 | 0x9fa5…6ee5 | OUT | 0x1b36…d8f6 | 0 ETH |