// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import {HoodToken} from "./HoodToken.sol";
import {ISushiV3LaunchAdapter} from "./interfaces/ISushiV3LaunchAdapter.sol";
import {IReferralRegistry} from "./interfaces/IReferralRegistry.sol";
/// @notice Deploys plain fixed-supply tokens directly into one live Sushi V3 pool.
contract HoodpumpFactory is Ownable, ReentrancyGuard {
using SafeERC20 for IERC20;
uint256 public constant MAX_PAUSE = 72 hours;
uint256 public constant BPS = 10_000;
address public immutable treasury;
address public immutable guardian;
ISushiV3LaunchAdapter public immutable launchAdapter;
IReferralRegistry public immutable referralRegistry;
uint64 public launchesPauseExpiresAt;
uint256 public launchCount;
uint256 public creatorFeeShareBps = 7_500;
mapping(address token => address launchVault) public launchVaultForToken;
mapping(address token => address pool) public poolForToken;
mapping(address token => address locker) public lockerForToken;
mapping(address vault => bool recognized) public isLaunchVault;
struct LaunchParams {
string name;
string symbol;
string metadataUri;
bytes32 metadataHash;
bytes32 salt;
uint256 minCreatorTokens;
}
constructor(
address governanceTimelock,
address guardian_,
address treasury_,
ISushiV3LaunchAdapter launchAdapter_,
IReferralRegistry referralRegistry_
) Ownable(governanceTimelock) {
if (
governanceTimelock == address(0) || guardian_ == address(0) || treasury_ == address(0)
|| address(launchAdapter_) == address(0) || address(referralRegistry_) == address(0)
) revert InvalidConfiguration();
guardian = guardian_;
treasury = treasury_;
launchAdapter = launchAdapter_;
referralRegistry = referralRegistry_;
}
function launch(LaunchParams calldata params)
external
payable
nonReentrant
returns (HoodToken token, address launchVault, address liquidityLocker, uint256 creatorTokensOut)
{
if (launchesPauseExpiresAt > block.timestamp) revert LaunchesPaused();
if (bytes(params.name).length == 0 || bytes(params.symbol).length == 0) revert InvalidMetadata();
bytes32 deploymentSalt = keccak256(abi.encode(msg.sender, params.salt));
token = new HoodToken{salt: deploymentSalt}(params.name, params.symbol, params.metadataUri, msg.sender);
IERC20(address(token)).forceApprove(address(launchAdapter), token.TOTAL_SUPPLY());
bytes32 poolId;
uint256 launchPositionId;
(poolId, launchVault, liquidityLocker, launchPositionId, creatorTokensOut) = launchAdapter.launch{value: msg.value}(
address(token), msg.sender, params.minCreatorTokens
);
IERC20(address(token)).forceApprove(address(launchAdapter), 0);
address pool = address(uint160(uint256(poolId)));
if (pool == address(0) || launchVault == address(0) || liquidityLocker == address(0)) {
revert InvalidLaunchResult();
}
launchVaultForToken[address(token)] = launchVault;
poolForToken[address(token)] = pool;
lockerForToken[address(token)] = liquidityLocker;
isLaunchVault[launchVault] = true;
++launchCount;
emit TokenLaunched(
address(token),
pool,
launchVault,
liquidityLocker,
msg.sender,
params.metadataHash,
params.metadataUri,
msg.value,
creatorTokensOut,
launchPositionId
);
}
function predictTokenAddress(address creator, LaunchParams calldata params)
external
view
returns (address predicted)
{
bytes32 deploymentSalt = keccak256(abi.encode(creator, params.salt));
bytes memory initCode = abi.encodePacked(
type(HoodToken).creationCode, abi.encode(params.name, params.symbol, params.metadataUri, creator)
);
predicted = address(uint160(uint256(keccak256(abi.encodePacked(bytes1(0xff), address(this), deploymentSalt, keccak256(initCode))))));
}
function pauseLaunches() external {
if (msg.sender != guardian && msg.sender != owner()) revert Unauthorized();
launchesPauseExpiresAt = uint64(block.timestamp + MAX_PAUSE);
emit LaunchesPausedUntil(launchesPauseExpiresAt);
}
function unpauseLaunches() external onlyOwner {
launchesPauseExpiresAt = 0;
emit LaunchesUnpaused();
}
function setCreatorFeeShareForFutureLaunches(uint256 creatorShareBps) external onlyOwner {
if (creatorShareBps + referralRegistry.REFERRAL_FEE_SHARE_BPS() > BPS) revert InvalidFeeShare();
creatorFeeShareBps = creatorShareBps;
emit FutureCreatorFeeShareUpdated(creatorShareBps);
}
function renounceOwnership() public view override onlyOwner {
revert OwnershipRenounceDisabled();
}
event TokenLaunched(
address indexed token,
address indexed pool,
address launchVault,
address liquidityLocker,
address indexed creator,
bytes32 metadataHash,
string metadataUri,
uint256 initialBuy,
uint256 initialTokens,
uint256 launchPositionId
);
event LaunchesPausedUntil(uint64 expiresAt);
event LaunchesUnpaused();
event FutureCreatorFeeShareUpdated(uint256 creatorShareBps);
error InvalidConfiguration();
error InvalidMetadata();
error LaunchesPaused();
error Unauthorized();
error InvalidFeeShare();
error InvalidLaunchResult();
error OwnershipRenounceDisabled();
}[
{
"type": "constructor",
"inputs": [
{
"name": "governanceTimelock",
"type": "address",
"internalType": "address"
},
{
"name": "guardian_",
"type": "address",
"internalType": "address"
},
{
"name": "treasury_",
"type": "address",
"internalType": "address"
},
{
"name": "launchAdapter_",
"type": "address",
"internalType": "contract ISushiV3LaunchAdapter"
},
{
"name": "referralRegistry_",
"type": "address",
"internalType": "contract IReferralRegistry"
}
],
"stateMutability": "nonpayable"
},
{
"name": "InvalidConfiguration",
"type": "error",
"inputs": []
},
{
"name": "InvalidFeeShare",
"type": "error",
"inputs": []
},
{
"name": "InvalidLaunchResult",
"type": "error",
"inputs": []
},
{
"name": "InvalidMetadata",
"type": "error",
"inputs": []
},
{
"name": "LaunchesPaused",
"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": "OwnershipRenounceDisabled",
"type": "error",
"inputs": []
},
{
"name": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "SafeERC20FailedOperation",
"type": "error",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "Unauthorized",
"type": "error",
"inputs": []
},
{
"name": "FutureCreatorFeeShareUpdated",
"type": "event",
"inputs": [
{
"name": "creatorShareBps",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "LaunchesPausedUntil",
"type": "event",
"inputs": [
{
"name": "expiresAt",
"type": "uint64",
"indexed": false,
"internalType": "uint64"
}
],
"anonymous": false
},
{
"name": "LaunchesUnpaused",
"type": "event",
"inputs": [],
"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": "TokenLaunched",
"type": "event",
"inputs": [
{
"name": "token",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "pool",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "launchVault",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "liquidityLocker",
"type": "address",
"indexed": false,
"internalType": "address"
},
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "metadataHash",
"type": "bytes32",
"indexed": false,
"internalType": "bytes32"
},
{
"name": "metadataUri",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "initialBuy",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "initialTokens",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "launchPositionId",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_PAUSE",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "creatorFeeShareBps",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "guardian",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isLaunchVault",
"type": "function",
"inputs": [
{
"name": "vault",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "recognized",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "launch",
"type": "function",
"inputs": [
{
"name": "params",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "metadataUri",
"type": "string",
"internalType": "string"
},
{
"name": "metadataHash",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "minCreatorTokens",
"type": "uint256",
"internalType": "uint256"
}
],
"internalType": "struct HoodpumpFactory.LaunchParams"
}
],
"outputs": [
{
"name": "token",
"type": "address",
"internalType": "contract HoodToken"
},
{
"name": "launchVault",
"type": "address",
"internalType": "address"
},
{
"name": "liquidityLocker",
"type": "address",
"internalType": "address"
},
{
"name": "creatorTokensOut",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "payable"
},
{
"name": "launchAdapter",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract ISushiV3LaunchAdapter"
}
],
"stateMutability": "view"
},
{
"name": "launchCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "launchVaultForToken",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "launchVault",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "launchesPauseExpiresAt",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint64",
"internalType": "uint64"
}
],
"stateMutability": "view"
},
{
"name": "lockerForToken",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "locker",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pauseLaunches",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "poolForToken",
"type": "function",
"inputs": [
{
"name": "token",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "pool",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "predictTokenAddress",
"type": "function",
"inputs": [
{
"name": "creator",
"type": "address",
"internalType": "address"
},
{
"name": "params",
"type": "tuple",
"components": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "metadataUri",
"type": "string",
"internalType": "string"
},
{
"name": "metadataHash",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "salt",
"type": "bytes32",
"internalType": "bytes32"
},
{
"name": "minCreatorTokens",
"type": "uint256",
"internalType": "uint256"
}
],
"internalType": "struct HoodpumpFactory.LaunchParams"
}
],
"outputs": [
{
"name": "predicted",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "referralRegistry",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "contract IReferralRegistry"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "view"
},
{
"name": "setCreatorFeeShareForFutureLaunches",
"type": "function",
"inputs": [
{
"name": "creatorShareBps",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "unpauseLaunches",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x610100346101d357601f61260e38819003918201601f19168301916001600160401b038311848410176101d75780849260a0946040528339810103126101d357610048816101eb565b90610055602082016101eb565b610061604083016101eb565b60608301516001600160a01b038116939092908484036101d357608001516001600160a01b038116959094908686036101d3576001600160a01b03169586156101c0575f80546001600160a01b031981168917825560405198916001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a360017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055611d4c6002556001600160a01b038316159182156101ae575b82156101a5575b50811561019c575b5061018d5760a05260805260c05260e05261240e908161020082396080518161050a015260a0518181816101fc0152610867015260c05181818161047a0152610bd5015260e0518181816105be01526108ea0152f35b63c52a9bd360e01b5f5260045ffd5b9050155f610137565b1591505f61012f565b6001600160a01b038516159250610128565b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036101d35756fe6080806040526004361015610012575f80fd5b5f3560e01c908163237ef3bf14610a7357508063249d39e914610a5757806327cca59f14610a3a5780632982782614610a1d5780632e2dde12146109c25780633868b8401461088b578063452a93201461083b5780634586223d146107e05780634d670cfa146105e25780634e627e62146105925780635af026771461052e57806361d027b3146104de578063715018a61461049e57806374c117f01461044e57806385e3149f1461042557806388cf8361146103db5780638da5cb5b146103a9578063999d55fb1461038c578063c8518e3114610331578063e79b502e146101d55763f2fde38b14610103575f80fd5b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff610131611170565b6101396112df565b1680156101a55773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b346101d1575f6003193601126101d15773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633141580610310575b6102e8576203f48042018042116102bb5760207f44b321add1b2d6c15cd4f6b3e48e63ed6c191f9f6dc4b0068dcb555dc2bfc575917fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000005f549260a01b16911617805f5567ffffffffffffffff6040519160a01c168152a1005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff5f5416331415610225565b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff61035f611170565b165f526003602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101d1575f6003193601126101d15760206040516203f4808152f35b346101d1575f6003193601126101d157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff610409611170565b165f526006602052602060ff60405f2054166040519015158152f35b346101d1575f6003193601126101d157602067ffffffffffffffff5f5460a01c16604051908152f35b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d1575f6003193601126101d1576104b66112df565b7f3df11b96000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d1575f6003193601126101d1576105466112df565b7fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff5f54165f557f07ec20fda323d7aad667bc196c6195b67fa0027c76058fe6d9fb0ffa94f1719a5f80a1005b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d15760406003193601126101d1576105fb611170565b60243567ffffffffffffffff81116101d1578060040160c060031983360301126101d15760209273ffffffffffffffffffffffffffffffffffffffff92610784604051868101906106a481610678608487013588866020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826111e4565b5190209386610f52916107356106f8610709604051986106c68688018b6111e4565b868a52858a0196611487883960446106de8680611193565b9490966106ee60248d0182611193565b93909c0190611193565b916040519b8c968a8801998a611263565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866111e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826111e4565b51902060405190848201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b602184015260358301526055820152605581526107d46075826111e4565b51902016604051908152f35b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff61080e611170565b165f526004602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101d15760206003193601126101d1576004356108a76112df565b6040517f6ea101ad00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109b7575f91610985575b5081018082116102bb576127101061095d576020817faec47fc5da4dc821ea9a0514092796c57dc5cbd05121fda1432558d27d8cb8b992600255604051908152a1005b7fe8cdd5bd000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d6020116109af575b816109a0602093836111e4565b810103126101d157518261091a565b3d9150610993565b6040513d5f823e3d90fd5b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff6109f0611170565b165f526005602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101d1575f6003193601126101d1576020600254604051908152f35b346101d1575f6003193601126101d1576020600154604051908152f35b346101d1575f6003193601126101d15760206040516127108152f35b60206003193601126101d15760043567ffffffffffffffff81116101d157806004019160c060031983360301126101d15760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054146111485760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005567ffffffffffffffff5f5460a01c16421061112057610b108380611193565b905015801561110a575b6110e25733602082019081526084830135604083015290610b3e8160608101610678565b519020610b4b8380611193565b9190610b5a6024850186611193565b91906044860194610b6b8689611193565b9060405195610f52948588019488861067ffffffffffffffff8711176110b5578897610b9d976114878a393396611263565b03905ff580156109b75773ffffffffffffffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916040517f902d55a5000000000000000000000000000000000000000000000000000000008152602081600481885afa9081156109b7575f91611083575b50610c3f81858761132b565b15611006575b506040517f163841c800000000000000000000000000000000000000000000000000000000815284600482015233602482015260a4830135604482015260a08160648134885af19384156109b7575f905f915f915f945f98610fa3575b50610cae5f828b61132b565b15610f26575b5073ffffffffffffffffffffffffffffffffffffffff169182158015610f08575b8015610eea575b610ec25773ffffffffffffffffffffffffffffffffffffffff90885f52600360205260405f208282167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055885f52600460205260405f208285167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055885f52600560205260405f208284167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790551693845f52600660205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055600154917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83146102bb57610e70610e327f2321706b31bf18f6df57ea698d54831c8d5cccd710c969152f3acc1dd8f01ddf9360809c60018d9701600155611193565b606473ffffffffffffffffffffffffffffffffffffffff604051958b8752169a8b60208701520135604085015260e0606085015260e0840191611225565b94348b8301528860a083015260c08201528033950390a460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051938452602084015260408301526060820152f35b7f630e9da4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff821615610cdc565b5073ffffffffffffffffffffffffffffffffffffffff811615610cd5565b610f30818a61139f565b15610f77575f610f40918a611424565b15610f4b5789610cb4565b877f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b887f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9450965050505060a0813d60a011610ffe575b81610fc360a093836111e4565b810103126101d157805190610fda602082016112be565b90610fe7604082016112be565b91608060608301519201519390929193968a610ca2565b3d9150610fb6565b611010848661139f565b1561105757611020908486611424565b1561102b5785610c45565b837f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b847f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90506020813d6020116110ad575b8161109e602093836111e4565b810103126101d1575186610c33565b3d9150611091565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fbcecb64a000000000000000000000000000000000000000000000000000000005f5260045ffd5b506111186024830184611193565b905015610b1a565b7f07b3e48e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d157565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d1570180359067ffffffffffffffff82116101d1576020019181360383136101d157565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110b557604052565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b95906112b79373ffffffffffffffffffffffffffffffffffffffff9561129b6112a993606099969c9b9c60808c5260808c0191611225565b9189830360208b0152611225565b918683036040880152611225565b9416910152565b519073ffffffffffffffffffffffffffffffffffffffff821682036101d157565b73ffffffffffffffffffffffffffffffffffffffff5f541633036112ff57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b929173ffffffffffffffffffffffffffffffffffffffff604051927f095ea7b3000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180875af19260015f511484161561138e575b50604052565b3d15903b151516909216915f611388565b919073ffffffffffffffffffffffffffffffffffffffff604051917f095ea7b3000000000000000000000000000000000000000000000000000000005f52166004525f60245260205f60448180875af19260015f51148416156114025750604052565b6001849294151661141b573b15153d151616915f611388565b833d5f823e3d90fd5b929173ffffffffffffffffffffffffffffffffffffffff604051927f095ea7b3000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180875af19260015f5114841615611402575060405256fe60c06040523461054757610f52803803806100198161054b565b9283398101906080818303126105475780516001600160401b0381116105475782610045918301610570565b60208201516001600160401b0381116105475783610064918401610570565b60408301519093906001600160401b03811161054757606091610088918501610570565b920151906001600160a01b03821690818303610547578051906001600160401b0382116103605760035490600182811c9216801561053d575b60208310146103425781601f8493116104cf575b50602090601f8311600114610469575f9261045e575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161036057600454600181811c91168015610454575b602082101461034257601f81116103f1575b50602094601f821160011461038e579481929394955f92610383575b50508160011b915f199060031b1c1916176004555b15610374576080523360a05280516001600160401b03811161036057600554600181811c91168015610356575b602082101461034257601f81116102fc575b50602091601f821160011461029c579181925f92610291575b50508160011b915f199060031b1c1916176005555b331561027e576002546b033b2e3c9fd0803ce8000000810180911161026a57600255335f525f60205260405f206b033b2e3c9fd0803ce800000081540190556040516b033b2e3c9fd0803ce800000081525f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a360405161099090816105c28239608051816107a4015260a0518161043d0152f35b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b015190505f806101bc565b601f1982169260055f52805f20915f5b8581106102e4575083600195106102cc575b505050811b016005556101d1565b01515f1960f88460031b161c191690555f80806102be565b919260206001819286850151815501940192016102ac565b60055f5260205f20601f830160051c81019160208410610338575b601f0160051c01905b81811061032d57506101a3565b5f8155600101610320565b9091508190610317565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610191565b634e487b7160e01b5f52604160045260245ffd5b6332db94d160e21b5f5260045ffd5b015190505f8061014f565b601f1982169560045f52805f20915f5b8881106103d9575083600195969798106103c1575b505050811b01600455610164565b01515f1960f88460031b161c191690555f80806103b3565b9192602060018192868501518155019401920161039e565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101916020841061044a575b601f0160051c01905b81811061043f5750610133565b5f8155600101610432565b9091508190610429565b90607f1690610121565b015190505f806100eb565b60035f9081528281209350601f198516905b8181106104b7575090846001959493921061049f575b505050811b01600355610100565b01515f1960f88460031b161c191690555f8080610491565b9293602060018192878601518155019501930161047b565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610533575b90601f859493920160051c01905b81811061052557506100d5565b5f8155849350600101610518565b909150819061050a565b91607f16916100c1565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761036057604052565b81601f82011215610547578051906001600160401b0382116103605761059f601f8301601f191660200161054b565b928284526020838301011161054757815f9260208093018386015e830101529056fe6080806040526004361015610012575f80fd5b5f3560e01c90816302d05d3f1461077a5750806306fdde031461069e578063095ea7b31461060f57806318160ddd146105f257806323b872dd1461047c578063313ce56714610461578063536dac9b1461041157806370a08231146103cd57806377a4d559146102f1578063902d55a5146102cb57806395d89b411461014e578063a9059cbb1461011d5763dd62ed3e146100ab575f80fd5b34610119576040600319360112610119576100c46107f2565b73ffffffffffffffffffffffffffffffffffffffff6100e1610815565b91165f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b5f80fd5b34610119576040600319360112610119576101436101396107f2565b6024359033610838565b602060405160018152f35b34610119575f600319360112610119576040515f600454908160011c600183169283156102c1575b60208210841461029457818552849390811561025257506001146101f6575b5003601f01601f191681019067ffffffffffffffff8211818310176101c957604082905281906101c590826107c8565b0390f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60045f90815291507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8183106102365750508101602001601f19610195565b6020919350806001915483858801015201910190918392610220565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b84019091019150601f199050610195565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b90607f1690610176565b34610119575f6003193601126101195760206040516b033b2e3c9fd0803ce80000008152f35b34610119575f600319360112610119576040515f600554908160011c600183169283156103c3575b6020821084146102945781855284939081156102525750600114610367575003601f01601f191681019067ffffffffffffffff8211818310176101c957604082905281906101c590826107c8565b60055f90815291507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8183106103a75750508101602001601f19610195565b6020919350806001915483858801015201910190918392610391565b90607f1690610319565b346101195760206003193601126101195773ffffffffffffffffffffffffffffffffffffffff6103fb6107f2565b165f525f602052602060405f2054604051908152f35b34610119575f60031936011261011957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610119575f60031936011261011957602060405160128152f35b34610119576060600319360112610119576104956107f2565b61049d610815565b6044359073ffffffffffffffffffffffffffffffffffffffff831692835f52600160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110610519575b506101439350610838565b8381106105be57841561059257331561056657610143945f52600160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f526020528360405f20910390558461050e565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000005f523360045260245260445260645ffd5b34610119575f600319360112610119576020600254604051908152f35b34610119576040600319360112610119576106286107f2565b6024359033156105925773ffffffffffffffffffffffffffffffffffffffff1690811561056657335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610119575f600319360112610119576040515f600354908160011c60018316928315610770575b6020821084146102945781855284939081156102525750600114610714575003601f01601f191681019067ffffffffffffffff8211818310176101c957604082905281906101c590826107c8565b60035f90815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8183106107545750508101602001601f19610195565b602091935080600191548385880101520191019091839261073e565b90607f16906106c6565b34610119575f6003193601126101195760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361011957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361011957565b73ffffffffffffffffffffffffffffffffffffffff1690811561092e5773ffffffffffffffffffffffffffffffffffffffff1691821561090257815f525f60205260405f20548181106108d057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea264697066735822122043052297046651819167a69f1b794310d7e68cfdcb61e8f302ea45a759a115bf64736f6c634300081c0033a264697066735822122074566b547bf8399b7956c3d347f6f371b143608f28398c98815b6d4cb5c0454764736f6c634300081c00330000000000000000000000007f5f9713b27a1c2d5c36b679399dd7039a7dcac600000000000000000000000023a08dbf1f0256890d679c0c2fb3ff828bfc3a7400000000000000000000000023a08dbf1f0256890d679c0c2fb3ff828bfc3a740000000000000000000000008c8795afe3d13e773a8a8942ac9bd52ac0d29ca90000000000000000000000004ad40394fb3d669975dd83635308106a356cd84b
0x6080806040526004361015610012575f80fd5b5f3560e01c908163237ef3bf14610a7357508063249d39e914610a5757806327cca59f14610a3a5780632982782614610a1d5780632e2dde12146109c25780633868b8401461088b578063452a93201461083b5780634586223d146107e05780634d670cfa146105e25780634e627e62146105925780635af026771461052e57806361d027b3146104de578063715018a61461049e57806374c117f01461044e57806385e3149f1461042557806388cf8361146103db5780638da5cb5b146103a9578063999d55fb1461038c578063c8518e3114610331578063e79b502e146101d55763f2fde38b14610103575f80fd5b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff610131611170565b6101396112df565b1680156101a55773ffffffffffffffffffffffffffffffffffffffff5f54827fffffffffffffffffffffffff00000000000000000000000000000000000000008216175f55167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f80fd5b346101d1575f6003193601126101d15773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000023a08dbf1f0256890d679c0c2fb3ff828bfc3a741633141580610310575b6102e8576203f48042018042116102bb5760207f44b321add1b2d6c15cd4f6b3e48e63ed6c191f9f6dc4b0068dcb555dc2bfc575917fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff7bffffffffffffffff00000000000000000000000000000000000000005f549260a01b16911617805f5567ffffffffffffffff6040519160a01c168152a1005b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f82b42900000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff5f5416331415610225565b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff61035f611170565b165f526003602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101d1575f6003193601126101d15760206040516203f4808152f35b346101d1575f6003193601126101d157602073ffffffffffffffffffffffffffffffffffffffff5f5416604051908152f35b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff610409611170565b165f526006602052602060ff60405f2054166040519015158152f35b346101d1575f6003193601126101d157602067ffffffffffffffff5f5460a01c16604051908152f35b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008c8795afe3d13e773a8a8942ac9bd52ac0d29ca9168152f35b346101d1575f6003193601126101d1576104b66112df565b7f3df11b96000000000000000000000000000000000000000000000000000000005f5260045ffd5b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000023a08dbf1f0256890d679c0c2fb3ff828bfc3a74168152f35b346101d1575f6003193601126101d1576105466112df565b7fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff5f54165f557f07ec20fda323d7aad667bc196c6195b67fa0027c76058fe6d9fb0ffa94f1719a5f80a1005b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004ad40394fb3d669975dd83635308106a356cd84b168152f35b346101d15760406003193601126101d1576105fb611170565b60243567ffffffffffffffff81116101d1578060040160c060031983360301126101d15760209273ffffffffffffffffffffffffffffffffffffffff92610784604051868101906106a481610678608487013588866020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826111e4565b5190209386610f52916107356106f8610709604051986106c68688018b6111e4565b868a52858a0196611487883960446106de8680611193565b9490966106ee60248d0182611193565b93909c0190611193565b916040519b8c968a8801998a611263565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866111e4565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826111e4565b51902060405190848201927fff0000000000000000000000000000000000000000000000000000000000000084523060601b602184015260358301526055820152605581526107d46075826111e4565b51902016604051908152f35b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff61080e611170565b165f526004602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101d1575f6003193601126101d157602060405173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000023a08dbf1f0256890d679c0c2fb3ff828bfc3a74168152f35b346101d15760206003193601126101d1576004356108a76112df565b6040517f6ea101ad00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000004ad40394fb3d669975dd83635308106a356cd84b165afa9081156109b7575f91610985575b5081018082116102bb576127101061095d576020817faec47fc5da4dc821ea9a0514092796c57dc5cbd05121fda1432558d27d8cb8b992600255604051908152a1005b7fe8cdd5bd000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d6020116109af575b816109a0602093836111e4565b810103126101d157518261091a565b3d9150610993565b6040513d5f823e3d90fd5b346101d15760206003193601126101d15773ffffffffffffffffffffffffffffffffffffffff6109f0611170565b165f526005602052602073ffffffffffffffffffffffffffffffffffffffff60405f205416604051908152f35b346101d1575f6003193601126101d1576020600254604051908152f35b346101d1575f6003193601126101d1576020600154604051908152f35b346101d1575f6003193601126101d15760206040516127108152f35b60206003193601126101d15760043567ffffffffffffffff81116101d157806004019160c060031983360301126101d15760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0054146111485760027f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005567ffffffffffffffff5f5460a01c16421061112057610b108380611193565b905015801561110a575b6110e25733602082019081526084830135604083015290610b3e8160608101610678565b519020610b4b8380611193565b9190610b5a6024850186611193565b91906044860194610b6b8689611193565b9060405195610f52948588019488861067ffffffffffffffff8711176110b5578897610b9d976114878a393396611263565b03905ff580156109b75773ffffffffffffffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000008c8795afe3d13e773a8a8942ac9bd52ac0d29ca916916040517f902d55a5000000000000000000000000000000000000000000000000000000008152602081600481885afa9081156109b7575f91611083575b50610c3f81858761132b565b15611006575b506040517f163841c800000000000000000000000000000000000000000000000000000000815284600482015233602482015260a4830135604482015260a08160648134885af19384156109b7575f905f915f915f945f98610fa3575b50610cae5f828b61132b565b15610f26575b5073ffffffffffffffffffffffffffffffffffffffff169182158015610f08575b8015610eea575b610ec25773ffffffffffffffffffffffffffffffffffffffff90885f52600360205260405f208282167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055885f52600460205260405f208285167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055885f52600560205260405f208284167fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790551693845f52600660205260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055600154917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83146102bb57610e70610e327f2321706b31bf18f6df57ea698d54831c8d5cccd710c969152f3acc1dd8f01ddf9360809c60018d9701600155611193565b606473ffffffffffffffffffffffffffffffffffffffff604051958b8752169a8b60208701520135604085015260e0606085015260e0840191611225565b94348b8301528860a083015260c08201528033950390a460017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055604051938452602084015260408301526060820152f35b7f630e9da4000000000000000000000000000000000000000000000000000000005f5260045ffd5b5073ffffffffffffffffffffffffffffffffffffffff821615610cdc565b5073ffffffffffffffffffffffffffffffffffffffff811615610cd5565b610f30818a61139f565b15610f77575f610f40918a611424565b15610f4b5789610cb4565b877f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b887f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9450965050505060a0813d60a011610ffe575b81610fc360a093836111e4565b810103126101d157805190610fda602082016112be565b90610fe7604082016112be565b91608060608301519201519390929193968a610ca2565b3d9150610fb6565b611010848661139f565b1561105757611020908486611424565b1561102b5785610c45565b837f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b847f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90506020813d6020116110ad575b8161109e602093836111e4565b810103126101d1575186610c33565b3d9150611091565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fbcecb64a000000000000000000000000000000000000000000000000000000005f5260045ffd5b506111186024830184611193565b905015610b1a565b7f07b3e48e000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101d157565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101d1570180359067ffffffffffffffff82116101d1576020019181360383136101d157565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110b557604052565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b95906112b79373ffffffffffffffffffffffffffffffffffffffff9561129b6112a993606099969c9b9c60808c5260808c0191611225565b9189830360208b0152611225565b918683036040880152611225565b9416910152565b519073ffffffffffffffffffffffffffffffffffffffff821682036101d157565b73ffffffffffffffffffffffffffffffffffffffff5f541633036112ff57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b929173ffffffffffffffffffffffffffffffffffffffff604051927f095ea7b3000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180875af19260015f511484161561138e575b50604052565b3d15903b151516909216915f611388565b919073ffffffffffffffffffffffffffffffffffffffff604051917f095ea7b3000000000000000000000000000000000000000000000000000000005f52166004525f60245260205f60448180875af19260015f51148416156114025750604052565b6001849294151661141b573b15153d151616915f611388565b833d5f823e3d90fd5b929173ffffffffffffffffffffffffffffffffffffffff604051927f095ea7b3000000000000000000000000000000000000000000000000000000005f521660045260245260205f60448180875af19260015f5114841615611402575060405256fe60c06040523461054757610f52803803806100198161054b565b9283398101906080818303126105475780516001600160401b0381116105475782610045918301610570565b60208201516001600160401b0381116105475783610064918401610570565b60408301519093906001600160401b03811161054757606091610088918501610570565b920151906001600160a01b03821690818303610547578051906001600160401b0382116103605760035490600182811c9216801561053d575b60208310146103425781601f8493116104cf575b50602090601f8311600114610469575f9261045e575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161036057600454600181811c91168015610454575b602082101461034257601f81116103f1575b50602094601f821160011461038e579481929394955f92610383575b50508160011b915f199060031b1c1916176004555b15610374576080523360a05280516001600160401b03811161036057600554600181811c91168015610356575b602082101461034257601f81116102fc575b50602091601f821160011461029c579181925f92610291575b50508160011b915f199060031b1c1916176005555b331561027e576002546b033b2e3c9fd0803ce8000000810180911161026a57600255335f525f60205260405f206b033b2e3c9fd0803ce800000081540190556040516b033b2e3c9fd0803ce800000081525f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a360405161099090816105c28239608051816107a4015260a0518161043d0152f35b634e487b7160e01b5f52601160045260245ffd5b63ec442f0560e01b5f525f60045260245ffd5b015190505f806101bc565b601f1982169260055f52805f20915f5b8581106102e4575083600195106102cc575b505050811b016005556101d1565b01515f1960f88460031b161c191690555f80806102be565b919260206001819286850151815501940192016102ac565b60055f5260205f20601f830160051c81019160208410610338575b601f0160051c01905b81811061032d57506101a3565b5f8155600101610320565b9091508190610317565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610191565b634e487b7160e01b5f52604160045260245ffd5b6332db94d160e21b5f5260045ffd5b015190505f8061014f565b601f1982169560045f52805f20915f5b8881106103d9575083600195969798106103c1575b505050811b01600455610164565b01515f1960f88460031b161c191690555f80806103b3565b9192602060018192868501518155019401920161039e565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101916020841061044a575b601f0160051c01905b81811061043f5750610133565b5f8155600101610432565b9091508190610429565b90607f1690610121565b015190505f806100eb565b60035f9081528281209350601f198516905b8181106104b7575090846001959493921061049f575b505050811b01600355610100565b01515f1960f88460031b161c191690555f8080610491565b9293602060018192878601518155019501930161047b565b60035f529091507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f840160051c81019160208510610533575b90601f859493920160051c01905b81811061052557506100d5565b5f8155849350600101610518565b909150819061050a565b91607f16916100c1565b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761036057604052565b81601f82011215610547578051906001600160401b0382116103605761059f601f8301601f191660200161054b565b928284526020838301011161054757815f9260208093018386015e830101529056fe6080806040526004361015610012575f80fd5b5f3560e01c90816302d05d3f1461077a5750806306fdde031461069e578063095ea7b31461060f57806318160ddd146105f257806323b872dd1461047c578063313ce56714610461578063536dac9b1461041157806370a08231146103cd57806377a4d559146102f1578063902d55a5146102cb57806395d89b411461014e578063a9059cbb1461011d5763dd62ed3e146100ab575f80fd5b34610119576040600319360112610119576100c46107f2565b73ffffffffffffffffffffffffffffffffffffffff6100e1610815565b91165f52600160205273ffffffffffffffffffffffffffffffffffffffff60405f2091165f52602052602060405f2054604051908152f35b5f80fd5b34610119576040600319360112610119576101436101396107f2565b6024359033610838565b602060405160018152f35b34610119575f600319360112610119576040515f600454908160011c600183169283156102c1575b60208210841461029457818552849390811561025257506001146101f6575b5003601f01601f191681019067ffffffffffffffff8211818310176101c957604082905281906101c590826107c8565b0390f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60045f90815291507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b8183106102365750508101602001601f19610195565b6020919350806001915483858801015201910190918392610220565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208581019190915291151560051b84019091019150601f199050610195565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b90607f1690610176565b34610119575f6003193601126101195760206040516b033b2e3c9fd0803ce80000008152f35b34610119575f600319360112610119576040515f600554908160011c600183169283156103c3575b6020821084146102945781855284939081156102525750600114610367575003601f01601f191681019067ffffffffffffffff8211818310176101c957604082905281906101c590826107c8565b60055f90815291507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b8183106103a75750508101602001601f19610195565b6020919350806001915483858801015201910190918392610391565b90607f1690610319565b346101195760206003193601126101195773ffffffffffffffffffffffffffffffffffffffff6103fb6107f2565b165f525f602052602060405f2054604051908152f35b34610119575f60031936011261011957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610119575f60031936011261011957602060405160128152f35b34610119576060600319360112610119576104956107f2565b61049d610815565b6044359073ffffffffffffffffffffffffffffffffffffffff831692835f52600160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f5260205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110610519575b506101439350610838565b8381106105be57841561059257331561056657610143945f52600160205260405f2073ffffffffffffffffffffffffffffffffffffffff33165f526020528360405f20910390558461050e565b7f94280d62000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b83907ffb8f41b2000000000000000000000000000000000000000000000000000000005f523360045260245260445260645ffd5b34610119575f600319360112610119576020600254604051908152f35b34610119576040600319360112610119576106286107f2565b6024359033156105925773ffffffffffffffffffffffffffffffffffffffff1690811561056657335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610119575f600319360112610119576040515f600354908160011c60018316928315610770575b6020821084146102945781855284939081156102525750600114610714575003601f01601f191681019067ffffffffffffffff8211818310176101c957604082905281906101c590826107c8565b60035f90815291507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8183106107545750508101602001601f19610195565b602091935080600191548385880101520191019091839261073e565b90607f16906106c6565b34610119575f6003193601126101195760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b601f19601f602060409481855280519182918282880152018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361011957565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361011957565b73ffffffffffffffffffffffffffffffffffffffff1690811561092e5773ffffffffffffffffffffffffffffffffffffffff1691821561090257815f525f60205260405f20548181106108d057817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b827fe450d38c000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f525f60045260245ffdfea264697066735822122043052297046651819167a69f1b794310d7e68cfdcb61e8f302ea45a759a115bf64736f6c634300081c0033a264697066735822122074566b547bf8399b7956c3d347f6f371b143608f28398c98815b6d4cb5c0454764736f6c634300081c0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0x93a7f8…aedbac | 28 days agoTue, 21 Jul 2026 01:30:08 UTC | 0x232170…1ddf | [0] 0x000000000000…e13b8b7f [1] 0x000000000000…c3c3a613 [2] 0x000000000000…0b83f40e data: 0x000000000000000000…00000000 |
| 0x7ef91b…508730 | 28 days agoTue, 21 Jul 2026 01:23:00 UTC | 0x232170…1ddf | [0] 0x000000000000…5a610244 [1] 0x000000000000…2ac8bb72 [2] 0x000000000000…4b89384a data: 0x000000000000000000…00000000 |
| 0x330e9c…f4d7a2 | 28 days agoTue, 21 Jul 2026 01:13:32 UTC | 0x232170…1ddf | [0] 0x000000000000…e9af9c6c [1] 0x000000000000…d21fb828 [2] 0x000000000000…2db59dd0 data: 0x000000000000000000…00000000 |
| 0xc96d6f…7b325b | 28 days agoTue, 21 Jul 2026 01:12:43 UTC | 0x232170…1ddf | [0] 0x000000000000…c4a9e9a2 [1] 0x000000000000…51b040b6 [2] 0x000000000000…7aa0b150 data: 0x000000000000000000…00000000 |
| 0x5e1b83…81fefb | 28 days agoTue, 21 Jul 2026 01:04:31 UTC | 0x232170…1ddf | [0] 0x000000000000…7ba6e442 [1] 0x000000000000…d6919f36 [2] 0x000000000000…368b6eb8 data: 0x000000000000000000…00000000 |
| 0xffd9c5…63cc05 | 28 days agoTue, 21 Jul 2026 01:01:09 UTC | 0x232170…1ddf | [0] 0x000000000000…c979c099 [1] 0x000000000000…bc3e5c97 [2] 0x000000000000…8bfc3a74 data: 0x000000000000000000…00000000 |
| 0x6d3ca4…ea0cab | 28 days agoTue, 21 Jul 2026 00:59:32 UTC | 0x232170…1ddf | [0] 0x000000000000…a87dc548 [1] 0x000000000000…3d528529 [2] 0x000000000000…243fe1f4 data: 0x000000000000000000…00000000 |
| 0x4e6f6a…4ae8c5 | 28 days agoTue, 21 Jul 2026 00:31:19 UTC | 0x232170…1ddf | [0] 0x000000000000…2042623a [1] 0x000000000000…9886f491 [2] 0x000000000000…9a7dcac6 data: 0x000000000000000000…00000000 |
| 0x8daef6…46e25d | 28 days agoMon, 20 Jul 2026 18:29:42 UTC | 0x232170…1ddf | [0] 0x000000000000…ac544dc2 [1] 0x000000000000…27425058 [2] 0x000000000000…9a7dcac6 data: 0x000000000000000000…00000000 |
| 0x3054b3…d2ba93 | 28 days agoMon, 20 Jul 2026 18:04:12 UTC | 0x8be007…57e0 | [0] 0x000000000000…00000000 [1] 0x000000000000…9a7dcac6 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 15,169,211 | 28 days agoTue, 21 Jul 2026 01:30:08 UTC | 0x93a7f8…aedbac | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.1 ETH |
| 15,169,211 | 28 days agoTue, 21 Jul 2026 01:30:08 UTC | 0x93a7f8…aedbac | CREATE2 | launch | 0x904f…4eec | OUT | 0x4ea9…8b7f | 0 ETH |
| 15,164,931 | 28 days agoTue, 21 Jul 2026 01:23:00 UTC | 0x7ef91b…508730 | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.1 ETH |
| 15,164,931 | 28 days agoTue, 21 Jul 2026 01:23:00 UTC | 0x7ef91b…508730 | CREATE2 | launch | 0x904f…4eec | OUT | 0x2599…0244 | 0 ETH |
| 15,159,260 | 28 days agoTue, 21 Jul 2026 01:13:32 UTC | 0x330e9c…f4d7a2 | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.1 ETH |
| 15,159,260 | 28 days agoTue, 21 Jul 2026 01:13:32 UTC | 0x330e9c…f4d7a2 | CREATE2 | launch | 0x904f…4eec | OUT | 0x5c25…9c6c | 0 ETH |
| 15,158,769 | 28 days agoTue, 21 Jul 2026 01:12:43 UTC | 0xc96d6f…7b325b | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.15 ETH |
| 15,158,769 | 28 days agoTue, 21 Jul 2026 01:12:43 UTC | 0xc96d6f…7b325b | CREATE2 | launch | 0x904f…4eec | OUT | 0x4a49…e9a2 | 0 ETH |
| 15,153,868 | 28 days agoTue, 21 Jul 2026 01:04:31 UTC | 0x5e1b83…81fefb | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.05 ETH |
| 15,153,868 | 28 days agoTue, 21 Jul 2026 01:04:31 UTC | 0x5e1b83…81fefb | CREATE2 | launch | 0x904f…4eec | OUT | 0xeee4…e442 | 0 ETH |
| 15,151,857 | 28 days agoTue, 21 Jul 2026 01:01:09 UTC | 0xffd9c5…63cc05 | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.005 ETH |
| 15,151,857 | 28 days agoTue, 21 Jul 2026 01:01:09 UTC | 0xffd9c5…63cc05 | CREATE2 | launch | 0x904f…4eec | OUT | 0xd93b…c099 | 0 ETH |
| 15,150,885 | 28 days agoTue, 21 Jul 2026 00:59:32 UTC | 0x6d3ca4…ea0cab | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.015 ETH |
| 15,150,885 | 28 days agoTue, 21 Jul 2026 00:59:32 UTC | 0x6d3ca4…ea0cab | CREATE2 | launch | 0x904f…4eec | OUT | 0xf469…c548 | 0 ETH |
| 15,134,016 | 28 days agoTue, 21 Jul 2026 00:31:19 UTC | 0x4e6f6a…4ae8c5 | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.001 ETH |
| 15,134,016 | 28 days agoTue, 21 Jul 2026 00:31:19 UTC | 0x4e6f6a…4ae8c5 | CREATE2 | launch | 0x904f…4eec | OUT | 0x385d…623a | 0 ETH |
| 14,917,423 | 28 days agoMon, 20 Jul 2026 18:29:42 UTC | 0x8daef6…46e25d | CALL | launch | 0x904f…4eec | OUT | 0x8c87…9ca9 | 0.001 ETH |
| 14,917,423 | 28 days agoMon, 20 Jul 2026 18:29:42 UTC | 0x8daef6…46e25d | CREATE2 | launch | 0x904f…4eec | OUT | 0xa5a6…4dc2 | 0 ETH |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x93a7f85b…aedbac | Transfer | 15,169,211 | 28 days agoTue, 21 Jul 2026 01:30:08 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 MENTAL | UntilDeathDefeatIsPsychological (MENTAL) | |
| 0x93a7f85b…aedbac | Transfer | 15,169,211 | 28 days agoTue, 21 Jul 2026 01:30:08 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 MENTAL | UntilDeathDefeatIsPsychological (MENTAL) | |
| 0x7ef91bbc…508730 | Transfer | 15,164,931 | 28 days agoTue, 21 Jul 2026 01:23:00 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 HPUMP | HoodPump (HPUMP) | |
| 0x7ef91bbc…508730 | Transfer | 15,164,931 | 28 days agoTue, 21 Jul 2026 01:23:00 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 HPUMP | HoodPump (HPUMP) | |
| 0x330e9c75…f4d7a2 | Transfer | 15,159,260 | 28 days agoTue, 21 Jul 2026 01:13:32 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 HOODCAT | HOODCAT (HOODCAT) | |
| 0x330e9c75…f4d7a2 | Transfer | 15,159,260 | 28 days agoTue, 21 Jul 2026 01:13:32 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 HOODCAT | HOODCAT (HOODCAT) | |
| 0xc96d6f5b…7b325b | Transfer | 15,158,769 | 28 days agoTue, 21 Jul 2026 01:12:43 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 HIGHER | Higher Together (HIGHER) | |
| 0xc96d6f5b…7b325b | Transfer | 15,158,769 | 28 days agoTue, 21 Jul 2026 01:12:43 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 HIGHER | Higher Together (HIGHER) | |
| 0x5e1b8385…81fefb | Transfer | 15,153,868 | 28 days agoTue, 21 Jul 2026 01:04:31 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 HOODPUMP | HoodPump (HOODPUMP) | |
| 0x5e1b8385…81fefb | Transfer | 15,153,868 | 28 days agoTue, 21 Jul 2026 01:04:31 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 HOODPUMP | HoodPump (HOODPUMP) | |
| 0xffd9c56a…63cc05 | Transfer | 15,151,857 | 28 days agoTue, 21 Jul 2026 01:01:09 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 BANKROLL | BankRoll (BANKROLL) | |
| 0xffd9c56a…63cc05 | Transfer | 15,151,857 | 28 days agoTue, 21 Jul 2026 01:01:09 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 BANKROLL | BankRoll (BANKROLL) | |
| 0x6d3ca46b…ea0cab | Transfer | 15,150,885 | 28 days agoTue, 21 Jul 2026 00:59:32 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 DAKOTA | The HOODPUMP Man (DAKOTA) | |
| 0x6d3ca46b…ea0cab | Transfer | 15,150,885 | 28 days agoTue, 21 Jul 2026 00:59:32 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 DAKOTA | The HOODPUMP Man (DAKOTA) | |
| 0x4e6f6a75…4ae8c5 | Transfer | 15,134,016 | 28 days agoTue, 21 Jul 2026 00:31:19 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 BTR | Bridge to Robinhood (BTR) | |
| 0x4e6f6a75…4ae8c5 | Transfer | 15,134,016 | 28 days agoTue, 21 Jul 2026 00:31:19 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 BTR | Bridge to Robinhood (BTR) | |
| 0x8daef680…46e25d | Transfer | 14,917,423 | 28 days agoMon, 20 Jul 2026 18:29:42 UTC | 0x904f…4eec | OUT | 0x8c87…9ca9 | 1,000,000,000.000000 HPCANARY | HoodPump Production Canary (HPCANARY) | |
| 0x8daef680…46e25d | Transfer | 14,917,423 | 28 days agoMon, 20 Jul 2026 18:29:42 UTC | 0x0000…0000 | IN | 0x904f…4eec | 1,000,000,000.000000 HPCANARY | HoodPump Production Canary (HPCANARY) |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x93a7f8…aedbac | launch | 15,169,211 | 28 days agoTue, 21 Jul 2026 01:30:08 UTC | 0x98dc…f40e | IN | HoodpumpFactory | $189.070.1 ETH | 0.00079902 | |
| 0x7ef91b…508730 | launch | 15,164,931 | 28 days agoTue, 21 Jul 2026 01:23:00 UTC | 0x023c…384a | IN | HoodpumpFactory | $189.070.1 ETH | 0.00079551 | |
| 0x330e9c…f4d7a2 | launch | 15,159,260 | 28 days agoTue, 21 Jul 2026 01:13:32 UTC | 0x5894…9dd0 | IN | HoodpumpFactory | $189.070.1 ETH | 0.00078991 | |
| 0xc96d6f…7b325b | launch | 15,158,769 | 28 days agoTue, 21 Jul 2026 01:12:43 UTC | 0xd4a7…b150 | IN | HoodpumpFactory | $283.610.15 ETH | 0.00078242 | |
| 0x5e1b83…81fefb | launch | 15,153,868 | 28 days agoTue, 21 Jul 2026 01:04:31 UTC | 0x4a3b…6eb8 | IN | HoodpumpFactory | $94.540.05 ETH | 0.00078119 | |
| 0xffd9c5…63cc05 | launch | 15,151,857 | 28 days agoTue, 21 Jul 2026 01:01:09 UTC | 0x23a0…3a74 | IN | HoodpumpFactory | $9.450.005 ETH | 0.00080669 | |
| 0x6d3ca4…ea0cab | launch | 15,150,885 | 28 days agoTue, 21 Jul 2026 00:59:32 UTC | 0x029c…e1f4 | IN | HoodpumpFactory | $28.360.015 ETH | 0.00078222 | |
| 0x4e6f6a…4ae8c5 | launch | 15,134,016 | 28 days agoTue, 21 Jul 2026 00:31:19 UTC | 0x7f5f…cac6 | IN | HoodpumpFactory | $1.890.001 ETH | 0.00080069 | |
| 0x8daef6…46e25d | launch | 14,917,423 | 28 days agoMon, 20 Jul 2026 18:29:42 UTC | 0x7f5f…cac6 | IN | HoodpumpFactory | $1.890.001 ETH | 0.00072365 |