Source Code
Overview
S Balance
Token Holdings
More Info
ContractCreator
Latest 18 from a total of 18 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 25642351 | 39 hrs ago | IN | 0 S | 0.00050972 | ||||
Unstake | 25642227 | 39 hrs ago | IN | 0 S | 0.00020937 | ||||
Stake | 25635914 | 40 hrs ago | IN | 0 S | 0.00050972 | ||||
Unstake | 25633897 | 40 hrs ago | IN | 0 S | 0.00020937 | ||||
Unstake | 25572865 | 2 days ago | IN | 0 S | 0.00015526 | ||||
Stake | 25572751 | 2 days ago | IN | 0 S | 0.00048209 | ||||
Stake | 25572744 | 2 days ago | IN | 0 S | 0.00048209 | ||||
Claim_reward | 25506775 | 2 days ago | IN | 0 S | 0.00013926 | ||||
Stake | 25494614 | 2 days ago | IN | 0 S | 0.0004782 | ||||
Unstake | 25494569 | 2 days ago | IN | 0 S | 0.00021156 | ||||
Unstake | 25492014 | 2 days ago | IN | 0 S | 0.00019497 | ||||
Stake | 25491993 | 2 days ago | IN | 0 S | 0.0004545 | ||||
Stake | 25491895 | 2 days ago | IN | 0 S | 0.00047824 | ||||
Stake | 25490314 | 2 days ago | IN | 0 S | 0.00056525 | ||||
Set_min_stake_am... | 25490260 | 2 days ago | IN | 0 S | 0.00004045 | ||||
Stake | 25490133 | 2 days ago | IN | 0 S | 0.00030126 | ||||
Init_ERC20 | 25488371 | 2 days ago | IN | 0 S | 0.00004055 | ||||
Init_NFT | 25488303 | 2 days ago | IN | 0 S | 0.00006369 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
25642351 | 39 hrs ago | 0 S | ||||
25642351 | 39 hrs ago | 0 S | ||||
25642227 | 39 hrs ago | 0 S | ||||
25642227 | 39 hrs ago | 0 S | ||||
25642227 | 39 hrs ago | 0 S | ||||
25642227 | 39 hrs ago | 0 S | ||||
25642227 | 39 hrs ago | 0 S | ||||
25635914 | 40 hrs ago | 0 S | ||||
25635914 | 40 hrs ago | 0 S | ||||
25633897 | 40 hrs ago | 0 S | ||||
25633897 | 40 hrs ago | 0 S | ||||
25633897 | 40 hrs ago | 0 S | ||||
25633897 | 40 hrs ago | 0 S | ||||
25633897 | 40 hrs ago | 0 S | ||||
25572865 | 2 days ago | 0 S | ||||
25572865 | 2 days ago | 0 S | ||||
25572865 | 2 days ago | 0 S | ||||
25572865 | 2 days ago | 0 S | ||||
25572865 | 2 days ago | 0 S | ||||
25572751 | 2 days ago | 0 S | ||||
25572751 | 2 days ago | 0 S | ||||
25572744 | 2 days ago | 0 S | ||||
25572744 | 2 days ago | 0 S | ||||
25506775 | 2 days ago | 0 S | ||||
25506775 | 2 days ago | 0 S |
Loading...
Loading
Contract Name:
TreasuryStaking
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity Standard Json-Input format)
// File: contracts\openzeppelin\contracts\utils\Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: contracts\openzeppelin\contracts\access\Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.19; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts\openzeppelin\contracts\utils\ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.19; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // File: contracts\openzeppelin\contracts\token\ERC20\IERC20.sol pragma solidity ^0.8.19; interface IERC20 { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); } // File: contracts\openzeppelin\contracts\utils\introspection\IERC165.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.19; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[ERC section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: contracts\openzeppelin\contracts\token\ERC721\IERC721.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.19; /** * @dev Required interface of an ERC-721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC-721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or * {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon * a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC-721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the address zero. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: contracts\openzeppelin\contracts\token\ERC721\extensions\IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.19; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: contracts/sdaemon0x/treasury/TreasuryStakeMarker.sol pragma solidity ^0.8.19; interface TreasuryStakeMarker is IERC721Enumerable { function mint(address to) external returns (uint256); function burn(address to, uint256 tokenId) external; function checkClaimableDatetime(uint256 tokenId) external; function rarity(uint256 tokenId) external view returns (uint256); } interface TreasuryHolding { function sync() external; function getStakerVolume(address staker) external view returns (uint256); function totalStaked() external view returns (uint256); function get_nb_stake() external view returns (uint256); function get_active(uint256 tokenId) external view returns (bool); function get_amount(uint256 tokenId) external view returns (uint256); } contract TreasuryStaking is TreasuryHolding, ReentrancyGuard, Ownable { IERC20 public sdeamon = IERC20(0x16a0BfC1C6e331788E0A5096911cDCd9943D2C9c); TreasuryStakeMarker public nftContract; uint256 public constant MATURATION_PERIOD = 15 days; uint256 public min_stake_amount = 2000000 * 10 ** 18; uint256 public totalStaked = 0; uint256 public rewardPosition = 0; uint256 public rewardBank = 0; uint256 public bps_reward_exit = 500; struct StakePosition { uint256 amount; uint256 rewardDebt; uint256 stakeStartTime; uint256 duration_lock; bool active; } mapping(uint256 => StakePosition) public stakerPositions; uint256[] public tokenIdsStaked; event Staked(address indexed user, uint256 amount, uint256 tokenId); event Unstaked(address indexed user, uint256 amount, uint256 tokenId); event RewardClaimed(address indexed user, uint256 amount, uint256 tokenId); constructor() Ownable(0x88524E752144C15dc1a12BA3978c2d700dc97498) {} function init_NFT(address nftContract_) external onlyOwner { nftContract = TreasuryStakeMarker(nftContract_); } function init_ERC20(address erc20_) external onlyOwner { sdeamon = IERC20(erc20_); } function set_min_stake_amount(uint256 amount_) external onlyOwner { min_stake_amount = amount_; } function stake(uint256 amount_, uint256 duration_lock) nonReentrant external { require(address(nftContract) != address(0), "not init"); require(duration_lock <= 90 days, "useless value"); require(amount_ > min_stake_amount, "insufficient stake amount"); uint256 id = nftContract.mint(msg.sender); totalStaked += amount_; stakerPositions[id] = StakePosition(amount_, rewardPosition, block.timestamp, duration_lock, true); tokenIdsStaked.push(id); sdeamon.transferFrom(msg.sender, address(this), amount_); emit Staked(msg.sender, amount_, id); } function compute_unstake_price(uint256 amount_) public view returns (uint256, uint256) { uint256 fee = amount_ * bps_reward_exit / 10000; return (amount_ - fee, fee); } function unstake(uint256 tokenId) external { _claim_reward(tokenId); require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == msg.sender, "not your nft"); StakePosition storage position = stakerPositions[tokenId]; require(position.active, "Position already unstaked"); require(position.stakeStartTime < block.timestamp, "Too early"); if (position.duration_lock > 0) { uint256 age = block.timestamp - position.stakeStartTime; require(position.duration_lock < age, "locked"); } position.active = false; nftContract.burn(msg.sender, tokenId); for (uint256 i = 0; i < tokenIdsStaked.length; i++) { if (tokenIdsStaked[i] == tokenId) { if (i < tokenIdsStaked.length - 1) tokenIdsStaked[i] = tokenIdsStaked[tokenIdsStaked.length - 1]; tokenIdsStaked.pop(); break; } } uint256 amount_ = position.amount; totalStaked -= amount_; (uint256 totalAmoutToPay, uint256 fee) = compute_unstake_price(amount_); sdeamon.transfer(msg.sender, totalAmoutToPay); rewardPosition += fee; rewardBank += fee; emit Unstaked(msg.sender, amount_, tokenId); } function compute_maturation_time(uint256 duration_) public pure returns (uint256) { if (duration_ >= MATURATION_PERIOD) return (10 ** 18); return (duration_ * 10 ** 18) / MATURATION_PERIOD; } function compute_current_time(uint256 stakeStartTime) public view returns (uint256) { require(stakeStartTime <= block.timestamp); uint256 duration = block.timestamp - stakeStartTime; return compute_maturation_time(duration); } function compute_multiplier(uint256 stakeStartTime, uint256 duration_lock) public view returns (uint256) { uint256 multiplier = 0; if (duration_lock > 0) { multiplier += compute_maturation_time(duration_lock); } multiplier += compute_current_time(stakeStartTime); return multiplier; } function get_active(uint256 tokenId) external view returns (bool) { return stakerPositions[tokenId].active; } function get_amount(uint256 tokenId) external view returns (uint256) { return stakerPositions[tokenId].amount; } function get_nb_stake() external view returns (uint256) { return tokenIdsStaked.length; } function compute_reward(uint256 position, uint256 amount, uint256 stakeStartTime, uint256 duration_lock, uint256 reward_position, uint256 total_staked) public view returns (uint256) { uint256 multiplier = compute_multiplier(stakeStartTime, duration_lock); if (multiplier > 10 ** 18) multiplier = 10 ** 18; uint256 posRel = reward_position - position; uint256 volume = amount * 10 ** 18 / total_staked; return posRel * volume * multiplier / 10 ** 36; } function getStakerVolume(address staker) external view returns (uint256) { uint256 volume = 0; for (uint256 i = 0; i < tokenIdsStaked.length; i++) { uint256 tid = tokenIdsStaked[i]; StakePosition storage position = stakerPositions[tid]; if (nftContract.ownerOf(tid) == staker && position.active) { volume += position.amount; } } return volume; } function estimate_reward(address who, uint256 tokenId) public view returns (uint256) { require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == who, "not your nft"); StakePosition storage position = stakerPositions[tokenId]; require(position.active, "Position is not active"); return compute_reward(position.rewardDebt, position.amount, position.stakeStartTime, position.duration_lock, rewardPosition, totalStaked); } function claim_reward(uint256 tokenId) public { nftContract.checkClaimableDatetime(tokenId); _claim_reward(tokenId); } function _claim_reward(uint256 tokenId) internal { require(address(nftContract) != address(0), "not init"); require(nftContract.ownerOf(tokenId) == msg.sender, "not your nft"); StakePosition storage position = stakerPositions[tokenId]; require(position.active, "Position is not active"); uint256 reward = compute_reward(position.rewardDebt, position.amount, position.stakeStartTime, position.duration_lock, rewardPosition, totalStaked); position.rewardDebt = rewardPosition; require(rewardBank >= reward, "no sufficient fund"); rewardBank -= reward; sdeamon.transfer(msg.sender, reward); emit RewardClaimed(msg.sender, reward, tokenId); } // allows to retrieve the rewards of all sdeamon tokens received out of staking function sync() external { uint256 amount_ = sdeamon.balanceOf(address(this)); uint256 newRewardBank = 0; if (amount_ > totalStaked) { newRewardBank = amount_ - totalStaked; } if (newRewardBank > rewardBank) { uint256 diff = newRewardBank - rewardBank; rewardPosition += diff; } rewardBank = newRewardBank; } function estimate_WAGMI(address who) public view returns (uint256) { uint256 totalRewarded = 0; uint256 reward = 0; uint256 amount_ = 0; for (uint256 i = 0; i < tokenIdsStaked.length; i++) { uint256 tid = tokenIdsStaked[i]; totalRewarded += estimate_reward(who, tid); if (nftContract.ownerOf(tid) == who) { reward += estimate_reward(who, tid); amount_ += stakerPositions[tid].amount; } } uint256 rest = rewardBank - totalRewarded; reward += (amount_ * rest) / totalStaked; return reward; } function WAGMI() external onlyOwner { require(totalStaked > 0, "No stakers"); for (uint256 i = 0; i < tokenIdsStaked.length; i++) { claim_reward(tokenIdsStaked[i]); } uint256 totalReward = rewardBank; if (totalReward > 0) { rewardBank = 0; for (uint256 i = 0; i < tokenIdsStaked.length; i++) { uint256 tid = tokenIdsStaked[i]; StakePosition storage position = stakerPositions[tid]; if (position.active) { address gowner = nftContract.ownerOf(tid); uint256 reward = (position.amount * totalReward) / totalStaked; sdeamon.transfer(gowner, reward); emit RewardClaimed(gowner, reward, tid); } } } } }
{ "metadata": { "appendCBOR": true, "bytecodeHash": "ipfs", "useLiteralContent": false }, "optimizer": { "enabled": true, "runs": 1000000 }, "viaIR": true, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"MATURATION_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WAGMI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bps_reward_exit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"claim_reward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeStartTime","type":"uint256"}],"name":"compute_current_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration_","type":"uint256"}],"name":"compute_maturation_time","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeStartTime","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"}],"name":"compute_multiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"position","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"stakeStartTime","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"},{"internalType":"uint256","name":"reward_position","type":"uint256"},{"internalType":"uint256","name":"total_staked","type":"uint256"}],"name":"compute_reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"compute_unstake_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"estimate_WAGMI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"estimate_reward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"get_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"get_nb_stake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20_","type":"address"}],"name":"init_ERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract_","type":"address"}],"name":"init_NFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"min_stake_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContract","outputs":[{"internalType":"contract TreasuryStakeMarker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardBank","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPosition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sdeamon","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"set_min_stake_amount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakerPositions","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"stakeStartTime","type":"uint256"},{"internalType":"uint256","name":"duration_lock","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdsStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608080604052346100b4576001600081815581546001600160a01b03198082167388524e752144c15dc1a12ba3978c2d700dc9749890811790945591927316a0bfc1c6e331788e0a5096911cdcd9943d2c9c92916001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a360025416176002556a01a784379d99db4200000060045580600555806006556007556101f460085561220f90816100ba8239f35b600080fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816316466a981461195b5750806328768b3a1461190d5780632be8c3e11461188b5780632e17de781461137457806336a29cf91461132257806340009cf1146112cc578063431d431e146112855780634d262dad1461114a5780634ff026911461110e578063562714c4146110d35780635deb9fc714610dfc5780636237a1c414610db05780636298ae5c14610d73578063715018a614610cd457806373600bda14610cb8578063745dfec614610c7a5780637b0472f0146108a2578063817b1cd2146108655780638da0fc82146108285780638da5cb5b146107d557806392d149ca1461079857806397ed1ed314610716578063b3a1ebba1461058e578063bc2130f914610531578063bc242430146104f4578063c9d0ba85146104b6578063d56d229d14610463578063e3d7d40f1461041e578063e4f73373146103de578063e573edcc14610387578063f2fde38b146102a25763fff6cae91461018357600080fd5b3461029e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57602073ffffffffffffffffffffffffffffffffffffffff600254169160248451809481937f70a0823100000000000000000000000000000000000000000000000000000000835230908301525afa9182156102955750829161025f575b50600554829181811161024e575b5050600754808211610230575b5060075580f35b61023d6102459183611c66565b600654611bc6565b60065538610229565b6102589250611c66565b388061021c565b90506020813d821161028d575b8161027960209383611b85565b8101031261028857513861020e565b600080fd5b3d915061026c565b513d84823e3d90fd5b8280fd5b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e576102da6119cf565b906102e3611a8c565b73ffffffffffffffffffffffffffffffffffffffff809216928315610358575050600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b5080fd5b8382346103da5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da57610417611a8c565b8035905580f35b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e5760209282913581526009845220549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b8382346103da5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576104f19035611f59565b80f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906008549051908152f35b50823461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b57503561057e61271061057660085484611c1a565b048092611c66565b9082519182526020820152f35b80fd5b50913461058b57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576105c96119cf565b90829083809381600a549273ffffffffffffffffffffffffffffffffffffffff806003541695818516925b86811061063157508b8b61062a8c61062461061b8e6106158f600754611c66565b90611c1a565b60055490611c2d565b90611bc6565b9051908152f35b61064f61063d826119f2565b90549060031b1c996106248b89611e70565b988d8d51907f6352211e0000000000000000000000000000000000000000000000000000000082528285830152816024818d5afa90811561070c578f91869088928a916106df575b5016146106af575b50506106aa90611d04565b6105f4565b9a60096106aa939c6106c9849f6106246106d7968d611e70565b9e8952528d87205490611bc6565b99908d61069f565b6106ff9150843d8611610705575b6106f78183611b85565b810190611c73565b38610697565b503d6106ed565b8e513d89823e3d90fd5b833461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b5773ffffffffffffffffffffffffffffffffffffffff6107636119cf565b61076b611a8c565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025580f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da57602090600a549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906007549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906005549051908152f35b509190346103da576108b336611a58565b6002849392935414610c52576002845573ffffffffffffffffffffffffffffffffffffffff8060035416916108e9831515611add565b6276a7008111610bf5578654851115610b98579085918451937f6a62784200000000000000000000000000000000000000000000000000000000855233898601528460248160209687945af1938415610b8e578794610b5f575b5061095086600554611bc6565b6005556006549085519060a0820182811067ffffffffffffffff821117610b3157908a9291885288825285820193845287820142815260608301918252608083019460018652888c5260098852898c2093518455516001840155516002830155516003820155019051151560ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169116179055600a5468010000000000000000811015610b05579660648392610a4a86610a148c60018d9e01600a556119f2565b9091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83549160031b92831b921b1916179055565b6002541691865198899384927f23b872dd00000000000000000000000000000000000000000000000000000000845233908401523060248401528960448401525af1948515610afb577f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee909495610ace575b5082519485528401523392a26001815580f35b610aed90823d8411610af4575b610ae58183611b85565b810190611c02565b5038610abb565b503d610adb565b83513d88823e3d90fd5b60248760418a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60418b7f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b9093508281813d8311610b87575b610b778183611b85565b8101031261028857519238610943565b503d610b6d565b85513d89823e3d90fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601960248201527f696e73756666696369656e74207374616b6520616d6f756e74000000000000006044820152fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600d60248201527f7573656c6573732076616c7565000000000000000000000000000000000000006044820152fd5b8482517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b50913461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b575061062a60209235611d31565b5050346103da5760209061062a610cce36611a58565b90611d6a565b833461058b57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b57610d0b611a8c565b600073ffffffffffffffffffffffffffffffffffffffff6001547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906006549051908152f35b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57808260209460ff93358152600986522001541690519015158152f35b503461029e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57610e33611a8c565b60059081541561107657835b600a54811015610e6f5780610e65610e59610e6a936119f2565b90549060031b1c611f59565b611d04565b610e3f565b5090916007549283610e7f578480f35b846007959293949555815b600a5481101561106857610e9d816119f2565b9054600391821b1c808552602090600982528686209160ff8984015416610ed1575b50505050610ecc90611d04565b610e8a565b73ffffffffffffffffffffffffffffffffffffffff8094541692818360248c8c5197889384927f6352211e0000000000000000000000000000000000000000000000000000000084528301525afa93841561105e57898c8a97969594938d93899761102b575b509186610f55610f4d610fb39694889654611c1a565b8d5490611c2d565b998a938a600254169351968795869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af180156110215792610ecc979695927ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e273174395928c95611004575b5084519687528601521692a290388080610ebf565b61101a90823d8411610af457610ae58183611b85565b5038610fef565b8a513d8b823e3d90fd5b610fb39492975090610f55610f4d611051889694873d8911610705576106f78183611b85565b9994965050509092610f37565b89513d8a823e3d90fd5b505092505050388080808480f35b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600a60248201527f4e6f207374616b657273000000000000000000000000000000000000000000006044820152fd5b503461029e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e5760209250549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da57602090516213c6808152f35b50903461029e57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b576111856119cf565b819382600a549273ffffffffffffffffffffffffffffffffffffffff90600382808254169216935b8681106111bd578a8a8a51908152f35b6111c6816119f2565b905490831b1c80895260098c52898920908a51907f6352211e000000000000000000000000000000000000000000000000000000008252888201528c81602481885afa90811561127b57879187918f8d9261125e575b5050161480611251575b61123a575b5061123590611d04565b6111ad565b611235919a61124a915490611bc6565b999061122b565b5060ff8782015416611226565b6112749250803d10610705576106f78183611b85565b388f61121c565b8b513d8c823e3d90fd5b5050346103da57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209061062a6112c36119cf565b60243590611e70565b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e573591600a5483101561058b57506113146020926119f2565b91905490519160031b1c8152f35b50913461058b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b575061062a60209260a435906084359060643590604435906024359035611d9f565b503461029e57602091827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611887578135906113b282611fd9565b73ffffffffffffffffffffffffffffffffffffffff91846003848154166113da811515611add565b8451978880927f6352211e000000000000000000000000000000000000000000000000000000008252868a83015260249a8b915afa90811561187d579061142c918a91611860575b5086163314611c9f565b8288526009825283882090868201805460ff811615611805576002840154428110156117aa57838501549081611738575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558581541689813b1561058b5786517f9dc29fac00000000000000000000000000000000000000000000000000000000815233818b01908152602081018890529092839182908490829060400103925af1801561172e5761171b575b50885b600a80548083101561170657866114f7846119f2565b905490861b1c1461151257505061150d90611d04565b6114e1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a91939495969798999a928382019182116116db578181106116b9575b5050825490811561168f5750918186949261160896940192611571846119f2565b81939154921b1b19169055555b549561158c87600554611c66565b60055561271061159e60085489611c1a565b04976115aa8989611c66565b9160025416908a88518096819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452339084016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af180156116855795611657917f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e9697611668575b5061164c81600654611bc6565b600655600754611bc6565b60075582519485528401523392a280f35b61167e90843d8611610af457610ae58183611b85565b503861163f565b84513d89823e3d90fd5b8b60318c7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b610a146116c86116d4936119f2565b905490881b1c916119f2565b3880611550565b828d60118e7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5050505081929394959650906116089161157e565b61172790999199611b42565b97386114de565b86513d8c823e3d90fd5b6117429042611c66565b111561174f57388061145d565b60648960068c888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f6c6f636b656400000000000000000000000000000000000000000000000000006044820152fd5b60648a60098d898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f546f6f206561726c7900000000000000000000000000000000000000000000006044820152fd5b60648960198c888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f506f736974696f6e20616c726561647920756e7374616b6564000000000000006044820152fd5b6118779150843d8611610705576106f78183611b85565b38611422565b85513d8b823e3d90fd5b8380fd5b833461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b5773ffffffffffffffffffffffffffffffffffffffff6118d86119cf565b6118e0611a8c565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035580f35b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57359142831161058b575061062a61195660209342611c66565b611d31565b92919050346118875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611887578160a0948235815260096020522090815492600183015460ff6002850154936003860154950154169486526020860152840152606083015215156080820152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361028857565b600a54811015611a2957600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610288576004359060243590565b73ffffffffffffffffffffffffffffffffffffffff600154163303611aad57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b15611ae457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f7420696e69740000000000000000000000000000000000000000000000006044820152fd5b67ffffffffffffffff8111611b5657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611b5657604052565b91908201809211611bd357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90816020910312610288575180151581036102885790565b81810292918115918404141715611bd357565b8115611c37570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b91908203918211611bd357565b90816020910312610288575173ffffffffffffffffffffffffffffffffffffffff811681036102885790565b15611ca657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420796f7572206e667400000000000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611bd35760010190565b6213c6809081811015611d5c57670de0b6b3a764000090818102918183041490151715611bd3570490565b5050670de0b6b3a764000090565b9060009080611d8f575b5042821161028857610624611956611d8c9342611c66565b90565b611d999150611d31565b38611d74565b92611dab919592611d6a565b91670de0b6b3a764000093848411611e03575b90611dc891611c66565b93838102938185041490151715611bd3576ec097ce7bc90715b34b9f100000000093610615611dfa92611dff95611c2d565b611c1a565b0490565b849350611dbe565b15611e1257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f506f736974696f6e206973206e6f7420616374697665000000000000000000006044820152fd5b60249073ffffffffffffffffffffffffffffffffffffffff60208160035416611e9a811515611add565b604051948580927f6352211e0000000000000000000000000000000000000000000000000000000082528860048301525afa918215611f4d57611eea93600093611f2b575b508116911614611c9f565b6000526009602052611d8c6040600020611f0a60ff600483015416611e0b565b60018101549080549060036002820154910154906006549260055494611d9f565b82919350611f469060203d8111610705576106f78183611b85565b9290611edf565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff6003541690813b1561028857600080926024604051809581937f3e46314f0000000000000000000000000000000000000000000000000000000083528660048401525af1918215611f4d57611fc892611fca575b50611fd9565b565b611fd390611b42565b38611fc2565b9073ffffffffffffffffffffffffffffffffffffffff806003541692612000841515611add565b604090815180957f6352211e00000000000000000000000000000000000000000000000000000000825282600483015281602460209889935afa9081156121545790612058916000916121bc575b5084163314611c9f565b8060005260098552816000209261207560ff600486015416611e0b565b600184019361209a855482546003600285015494015460065494859260055494611d9f565b945560075484811061215f57846120b091611c66565b60075560025483517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529691829188916044918391600091165af1958615612154577ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e2731743949596612137575b5082519485528401523392a2565b61214d90823d8411610af457610ae58183611b85565b5038612129565b83513d6000823e3d90fd5b6064878551907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f2073756666696369656e742066756e6400000000000000000000000000006044820152fd5b6121d39150873d8911610705576106f78183611b85565b3861204e56fea26469706673582212206ccc1eccfea64903a9e3e63ef49ec5d82035ad215d2db68dec46a0e1d46552ab64736f6c63430008130033
Deployed Bytecode
0x6080604081815260048036101561001557600080fd5b600092833560e01c90816316466a981461195b5750806328768b3a1461190d5780632be8c3e11461188b5780632e17de781461137457806336a29cf91461132257806340009cf1146112cc578063431d431e146112855780634d262dad1461114a5780634ff026911461110e578063562714c4146110d35780635deb9fc714610dfc5780636237a1c414610db05780636298ae5c14610d73578063715018a614610cd457806373600bda14610cb8578063745dfec614610c7a5780637b0472f0146108a2578063817b1cd2146108655780638da0fc82146108285780638da5cb5b146107d557806392d149ca1461079857806397ed1ed314610716578063b3a1ebba1461058e578063bc2130f914610531578063bc242430146104f4578063c9d0ba85146104b6578063d56d229d14610463578063e3d7d40f1461041e578063e4f73373146103de578063e573edcc14610387578063f2fde38b146102a25763fff6cae91461018357600080fd5b3461029e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57602073ffffffffffffffffffffffffffffffffffffffff600254169160248451809481937f70a0823100000000000000000000000000000000000000000000000000000000835230908301525afa9182156102955750829161025f575b50600554829181811161024e575b5050600754808211610230575b5060075580f35b61023d6102459183611c66565b600654611bc6565b60065538610229565b6102589250611c66565b388061021c565b90506020813d821161028d575b8161027960209383611b85565b8101031261028857513861020e565b600080fd5b3d915061026c565b513d84823e3d90fd5b8280fd5b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e576102da6119cf565b906102e3611a8c565b73ffffffffffffffffffffffffffffffffffffffff809216928315610358575050600154827fffffffffffffffffffffffff0000000000000000000000000000000000000000821617600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a380f35b908460249251917f1e4fbdf7000000000000000000000000000000000000000000000000000000008352820152fd5b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b5080fd5b8382346103da5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da57610417611a8c565b8035905580f35b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e5760209282913581526009845220549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209073ffffffffffffffffffffffffffffffffffffffff600354169051908152f35b8382346103da5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576104f19035611f59565b80f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906008549051908152f35b50823461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b57503561057e61271061057660085484611c1a565b048092611c66565b9082519182526020820152f35b80fd5b50913461058b57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576105c96119cf565b90829083809381600a549273ffffffffffffffffffffffffffffffffffffffff806003541695818516925b86811061063157508b8b61062a8c61062461061b8e6106158f600754611c66565b90611c1a565b60055490611c2d565b90611bc6565b9051908152f35b61064f61063d826119f2565b90549060031b1c996106248b89611e70565b988d8d51907f6352211e0000000000000000000000000000000000000000000000000000000082528285830152816024818d5afa90811561070c578f91869088928a916106df575b5016146106af575b50506106aa90611d04565b6105f4565b9a60096106aa939c6106c9849f6106246106d7968d611e70565b9e8952528d87205490611bc6565b99908d61069f565b6106ff9150843d8611610705575b6106f78183611b85565b810190611c73565b38610697565b503d6106ed565b8e513d89823e3d90fd5b833461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b5773ffffffffffffffffffffffffffffffffffffffff6107636119cf565b61076b611a8c565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600254161760025580f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da57602090600a549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906007549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906005549051908152f35b509190346103da576108b336611a58565b6002849392935414610c52576002845573ffffffffffffffffffffffffffffffffffffffff8060035416916108e9831515611add565b6276a7008111610bf5578654851115610b98579085918451937f6a62784200000000000000000000000000000000000000000000000000000000855233898601528460248160209687945af1938415610b8e578794610b5f575b5061095086600554611bc6565b6005556006549085519060a0820182811067ffffffffffffffff821117610b3157908a9291885288825285820193845287820142815260608301918252608083019460018652888c5260098852898c2093518455516001840155516002830155516003820155019051151560ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008354169116179055600a5468010000000000000000811015610b05579660648392610a4a86610a148c60018d9e01600a556119f2565b9091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83549160031b92831b921b1916179055565b6002541691865198899384927f23b872dd00000000000000000000000000000000000000000000000000000000845233908401523060248401528960448401525af1948515610afb577f1449c6dd7851abc30abf37f57715f492010519147cc2652fbc38202c18a6ee909495610ace575b5082519485528401523392a26001815580f35b610aed90823d8411610af4575b610ae58183611b85565b810190611c02565b5038610abb565b503d610adb565b83513d88823e3d90fd5b60248760418a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b60418b7f4e487b71000000000000000000000000000000000000000000000000000000006000525260246000fd5b9093508281813d8311610b87575b610b778183611b85565b8101031261028857519238610943565b503d610b6d565b85513d89823e3d90fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601960248201527f696e73756666696369656e74207374616b6520616d6f756e74000000000000006044820152fd5b60648760208651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600d60248201527f7573656c6573732076616c7565000000000000000000000000000000000000006044820152fd5b8482517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b50913461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b575061062a60209235611d31565b5050346103da5760209061062a610cce36611a58565b90611d6a565b833461058b57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b57610d0b611a8c565b600073ffffffffffffffffffffffffffffffffffffffff6001547fffffffffffffffffffffffff00000000000000000000000000000000000000008116600155167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da576020906006549051908152f35b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57808260209460ff93358152600986522001541690519015158152f35b503461029e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57610e33611a8c565b60059081541561107657835b600a54811015610e6f5780610e65610e59610e6a936119f2565b90549060031b1c611f59565b611d04565b610e3f565b5090916007549283610e7f578480f35b846007959293949555815b600a5481101561106857610e9d816119f2565b9054600391821b1c808552602090600982528686209160ff8984015416610ed1575b50505050610ecc90611d04565b610e8a565b73ffffffffffffffffffffffffffffffffffffffff8094541692818360248c8c5197889384927f6352211e0000000000000000000000000000000000000000000000000000000084528301525afa93841561105e57898c8a97969594938d93899761102b575b509186610f55610f4d610fb39694889654611c1a565b8d5490611c2d565b998a938a600254169351968795869485937fa9059cbb00000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af180156110215792610ecc979695927ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e273174395928c95611004575b5084519687528601521692a290388080610ebf565b61101a90823d8411610af457610ae58183611b85565b5038610fef565b8a513d8b823e3d90fd5b610fb39492975090610f55610f4d611051889694873d8911610705576106f78183611b85565b9994965050509092610f37565b89513d8a823e3d90fd5b505092505050388080808480f35b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600a60248201527f4e6f207374616b657273000000000000000000000000000000000000000000006044820152fd5b503461029e57827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e5760209250549051908152f35b5050346103da57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da57602090516213c6808152f35b50903461029e57602092837ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b576111856119cf565b819382600a549273ffffffffffffffffffffffffffffffffffffffff90600382808254169216935b8681106111bd578a8a8a51908152f35b6111c6816119f2565b905490831b1c80895260098c52898920908a51907f6352211e000000000000000000000000000000000000000000000000000000008252888201528c81602481885afa90811561127b57879187918f8d9261125e575b5050161480611251575b61123a575b5061123590611d04565b6111ad565b611235919a61124a915490611bc6565b999061122b565b5060ff8782015416611226565b6112749250803d10610705576106f78183611b85565b388f61121c565b8b513d8c823e3d90fd5b5050346103da57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103da5760209061062a6112c36119cf565b60243590611e70565b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e573591600a5483101561058b57506113146020926119f2565b91905490519160031b1c8152f35b50913461058b5760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b575061062a60209260a435906084359060643590604435906024359035611d9f565b503461029e57602091827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611887578135906113b282611fd9565b73ffffffffffffffffffffffffffffffffffffffff91846003848154166113da811515611add565b8451978880927f6352211e000000000000000000000000000000000000000000000000000000008252868a83015260249a8b915afa90811561187d579061142c918a91611860575b5086163314611c9f565b8288526009825283882090868201805460ff811615611805576002840154428110156117aa57838501549081611738575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558581541689813b1561058b5786517f9dc29fac00000000000000000000000000000000000000000000000000000000815233818b01908152602081018890529092839182908490829060400103925af1801561172e5761171b575b50885b600a80548083101561170657866114f7846119f2565b905490861b1c1461151257505061150d90611d04565b6114e1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9a91939495969798999a928382019182116116db578181106116b9575b5050825490811561168f5750918186949261160896940192611571846119f2565b81939154921b1b19169055555b549561158c87600554611c66565b60055561271061159e60085489611c1a565b04976115aa8989611c66565b9160025416908a88518096819582947fa9059cbb000000000000000000000000000000000000000000000000000000008452339084016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af180156116855795611657917f7fc4727e062e336010f2c282598ef5f14facb3de68cf8195c2f23e1454b2b74e9697611668575b5061164c81600654611bc6565b600655600754611bc6565b60075582519485528401523392a280f35b61167e90843d8611610af457610ae58183611b85565b503861163f565b84513d89823e3d90fd5b8b60318c7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b610a146116c86116d4936119f2565b905490881b1c916119f2565b3880611550565b828d60118e7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5050505081929394959650906116089161157e565b61172790999199611b42565b97386114de565b86513d8c823e3d90fd5b6117429042611c66565b111561174f57388061145d565b60648960068c888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f6c6f636b656400000000000000000000000000000000000000000000000000006044820152fd5b60648a60098d898c51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f546f6f206561726c7900000000000000000000000000000000000000000000006044820152fd5b60648960198c888b51937f08c379a00000000000000000000000000000000000000000000000000000000085528401528201527f506f736974696f6e20616c726561647920756e7374616b6564000000000000006044820152fd5b6118779150843d8611610705576106f78183611b85565b38611422565b85513d8b823e3d90fd5b8380fd5b833461058b5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261058b5773ffffffffffffffffffffffffffffffffffffffff6118d86119cf565b6118e0611a8c565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600354161760035580f35b503461029e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261029e57359142831161058b575061062a61195660209342611c66565b611d31565b92919050346118875760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112611887578160a0948235815260096020522090815492600183015460ff6002850154936003860154950154169486526020860152840152606083015215156080820152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361028857565b600a54811015611a2957600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610288576004359060243590565b73ffffffffffffffffffffffffffffffffffffffff600154163303611aad57565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b15611ae457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f6e6f7420696e69740000000000000000000000000000000000000000000000006044820152fd5b67ffffffffffffffff8111611b5657604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611b5657604052565b91908201809211611bd357565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90816020910312610288575180151581036102885790565b81810292918115918404141715611bd357565b8115611c37570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b91908203918211611bd357565b90816020910312610288575173ffffffffffffffffffffffffffffffffffffffff811681036102885790565b15611ca657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6e6f7420796f7572206e667400000000000000000000000000000000000000006044820152fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611bd35760010190565b6213c6809081811015611d5c57670de0b6b3a764000090818102918183041490151715611bd3570490565b5050670de0b6b3a764000090565b9060009080611d8f575b5042821161028857610624611956611d8c9342611c66565b90565b611d999150611d31565b38611d74565b92611dab919592611d6a565b91670de0b6b3a764000093848411611e03575b90611dc891611c66565b93838102938185041490151715611bd3576ec097ce7bc90715b34b9f100000000093610615611dfa92611dff95611c2d565b611c1a565b0490565b849350611dbe565b15611e1257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f506f736974696f6e206973206e6f7420616374697665000000000000000000006044820152fd5b60249073ffffffffffffffffffffffffffffffffffffffff60208160035416611e9a811515611add565b604051948580927f6352211e0000000000000000000000000000000000000000000000000000000082528860048301525afa918215611f4d57611eea93600093611f2b575b508116911614611c9f565b6000526009602052611d8c6040600020611f0a60ff600483015416611e0b565b60018101549080549060036002820154910154906006549260055494611d9f565b82919350611f469060203d8111610705576106f78183611b85565b9290611edf565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff6003541690813b1561028857600080926024604051809581937f3e46314f0000000000000000000000000000000000000000000000000000000083528660048401525af1918215611f4d57611fc892611fca575b50611fd9565b565b611fd390611b42565b38611fc2565b9073ffffffffffffffffffffffffffffffffffffffff806003541692612000841515611add565b604090815180957f6352211e00000000000000000000000000000000000000000000000000000000825282600483015281602460209889935afa9081156121545790612058916000916121bc575b5084163314611c9f565b8060005260098552816000209261207560ff600486015416611e0b565b600184019361209a855482546003600285015494015460065494859260055494611d9f565b945560075484811061215f57846120b091611c66565b60075560025483517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690529691829188916044918391600091165af1958615612154577ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e2731743949596612137575b5082519485528401523392a2565b61214d90823d8411610af457610ae58183611b85565b5038612129565b83513d6000823e3d90fd5b6064878551907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f2073756666696369656e742066756e6400000000000000000000000000006044820152fd5b6121d39150873d8911610705576106f78183611b85565b3861204e56fea26469706673582212206ccc1eccfea64903a9e3e63ef49ec5d82035ad215d2db68dec46a0e1d46552ab64736f6c63430008130033
Deployed Bytecode Sourcemap
16190:9201:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23498:32;16190:9201;23498:7;16190:9201;;;;;;23498:32;;;;16190:9201;23498:32;;23524:4;23498:32;;;16190:9201;23498:32;;;;;;;;;;;;16190:9201;-1:-1:-1;23591:11:0;16190:9201;23541:25;;23581:21;;;23577:91;;16190:9201;;;23698:10;16190:9201;23682:26;;;23678:145;;16190:9201;;23698:10;16190:9201;;;23678:145;23744:26;23789:22;23744:26;;;:::i;:::-;23789:22;16190:9201;23789:22;:::i;:::-;;16190:9201;23678:145;;;23577:91;23635:21;;;;:::i;:::-;23577:91;;;;23498:32;;;;;;;;;;;;;;;;;:::i;:::-;;;16190:9201;;;;;23498:32;;;16190:9201;;;;23498:32;;;-1:-1:-1;23498:32:0;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2488:65;;;:::i;:::-;16190:9201;;;;3644:22;;;3640:93;;16190:9201;;4030:6;16190:9201;;;;;;4030:6;16190:9201;;4080:40;16190:9201;4080:40;;16190:9201;;3640:93;16190:9201;;;;;3690:31;;;;;;16190:9201;3690:31;16190:9201;;;;;;;;;;;;;;;;16267:74;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;2488:65;;:::i;:::-;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;20838:15;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;16348:38;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;16623:36;16190:9201;;;;;;;;;;;;;;;;;;;;;;18399:13;18375:5;18347:25;18357:15;16190:9201;18347:25;;:::i;:::-;16190:9201;18399:13;;;:::i;:::-;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23951:25;;23987:18;;24016:19;24051:13;;24070:14;16190:9201;;;;24220:11;16190:9201;;;;;;24046:345;24066:25;;;;;;16190:9201;;;24453:40;16190:9201;24463:30;24464:14;16190:9201;24416:26;16190:9201;24416:10;16190:9201;24416:26;:::i;:::-;24464:14;;:::i;:::-;24482:11;16190:9201;24463:30;;:::i;:::-;24453:40;;:::i;:::-;16190:9201;;;;;;24093:3;24159:42;24127:17;;;:::i;:::-;16190:9201;;;24220:11;16190:9201;;24176:25;;;;;:::i;24159:42::-;16190:9201;;;;24220:24;16190:9201;24220:24;;;;;;16190:9201;24220:24;16190:9201;24220:24;;;;;;;;;;;;;;;;;;;24093:3;16190:9201;;24220:31;24216:164;;24093:3;;;;;;:::i;:::-;24051:13;;24216:164;24282:25;24337:15;24093:3;24282:25;;24272:35;24282:25;;;24326:38;24282:25;;;:::i;24272:35::-;16190:9201;;;;;;;;24326:38;;:::i;:::-;24216:164;;;;;24220:24;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2488:65;;:::i;:::-;16190:9201;;17445:24;16190:9201;;;17445:24;16190:9201;;;;;;;;;;;;;;;;;;20957:14;16190:9201;;;;;;;;;;;;;;;;;;;;;;;2705:6;16190:9201;;;;;;;;;;;;;;;;;;;;;;;16587:29;16190:9201;;;;;;;;;;;;;;;;;;;;;;16510:30;16190:9201;;;;;;;;;;;;;;;;;:::i;:::-;6099:1;16190:9201;;;;;6920:18;6916:88;;6099:1;16190:9201;;;;17704:11;16190:9201;;17696:34;17688:55;17696:34;;;17688:55;:::i;:::-;17779:7;17762:24;;16190:9201;;;;17823:26;;16190:9201;;;;;;;;17903:28;16190:9201;17903:28;;17920:10;17903:28;;;16190:9201;17903:28;16190:9201;17903:28;;;;;;;;;;;;;;;;16190:9201;;17942:22;16190:9201;17942:22;16190:9201;17942:22;:::i;:::-;;16190:9201;18020:14;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;17997:76;;;16190:9201;;;17997:76;;;18036:15;16190:9201;;17997:76;;;16190:9201;;;17997:76;;;16190:9201;18068:4;16190:9201;;;;;17975:15;16190:9201;;;;;;;;;;18068:4;16190:9201;;;;6099:1;16190:9201;;;;17704:11;16190:9201;;;;;;;;;;;;;;;;;;18084:14;16190:9201;;;;;;;;;;;;;;;18068:4;16190:9201;;;18084:14;16190:9201;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;6099:1;16190:9201;;;;;18118:56;;;;;16190:9201;18118:56;;17920:10;18118:56;;;16190:9201;18159:4;16190:9201;;;;;;;;;18118:56;;;;;;;18190:31;18118:56;;;;16190:9201;;;;;;;;;;17920:10;18190:31;;18068:4;16190:9201;;;;18118:56;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17903:28;;;;;;;;;;;;;;;;;:::i;:::-;;;16190:9201;;;;;17903:28;;;;;;;;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6916:88;16190:9201;;;6962:30;;;;16190:9201;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;2488:65;;:::i;:::-;16190:9201;;4030:6;16190:9201;;;;4030:6;16190:9201;;4080:40;;;;16190:9201;;;;;;;;;;;;;;;;;16547:33;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;20706:15;16190:9201;;;20706:31;16190:9201;;;;;;;;;;;;;;;;;;;;;;2488:65;;:::i;:::-;24586:11;16190:9201;;;24586:15;16190:9201;;24632:13;24674:3;24651:14;16190:9201;24647:25;;;;;24707:17;;;24674:3;24707:17;;:::i;:::-;16190:9201;;;;;;24707:17;:::i;:::-;24674:3;:::i;:::-;24632:13;;24647:25;;;;24769:10;16190:9201;24794:15;;24790:591;;16190:9201;;;24790:591;16190:9201;24769:10;16190:9201;;;;;;24860:13;24902:3;24651:14;16190:9201;24875:25;;;;;24940:17;;;:::i;:::-;16190:9201;;;;;;;;;;;;25009:15;16190:9201;;;;;25052:15;16190:9201;25052:15;;;16190:9201;;25048:307;;24902:3;;;;;;;;:::i;:::-;24860:13;;25048:307;16190:9201;;;;;;;;;;;;25109:24;;;;;16190:9201;25109:24;;;;16190:9201;25109:24;;;;;;;;;;;;;;;;;;;;;25048:307;16190:9201;;;25173:45;25174:29;25241:32;16190:9201;;;;;25174:29;:::i;:::-;16190:9201;;25173:45;;:::i;:::-;16190:9201;;;;25241:7;16190:9201;;;;25241:32;;;;;;;16190:9201;25241:32;;;;16190:9201;;;;;;;;;;;;;;;;;25241:32;;;;;;;;;;24902:3;25241:32;;;;25301:34;25241:32;;;;;;25048:307;16190:9201;;;;;;;;;;25301:34;;25048:307;;;;;;25241:32;;;;;;;;;;;;;:::i;:::-;;;;;;16190:9201;;;;;;;;;25109:24;25241:32;25109:24;;;;;25173:45;25174:29;25109:24;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;16190:9201;;;;;;;;;24875:25;;;;;;;24790:591;;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16437:7;16190:9201;;;;;;;;;;;;;;;;;;;;:::i;:::-;21583:18;21617:13;;21636:14;16190:9201;;;21797:11;;16190:9201;;;;;;;21612:311;21632:25;;;;;;16190:9201;;;;;;;;21659:3;21693:17;;;:::i;:::-;16190:9201;;;;;;;;;21758:15;16190:9201;;;;;;;;21797:24;16190:9201;21797:24;;;;;16190:9201;21797:24;;16190:9201;21797:24;;;;;;;;;;;;;;;;;;21659:3;16190:9201;;;21797:34;:53;;;21659:3;21793:119;;21659:3;;;;;:::i;:::-;21617:13;;21793:119;21659:3;16190:9201;;21871:25;16190:9201;;21871:25;;:::i;:::-;21793:119;;;;21797:53;21835:15;16190:9201;21835:15;;;16190:9201;;21797:53;;:24;;;;;;-1:-1:-1;21797:24:0;;;;;;:::i;:::-;;;;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;16905:31;16190:9201;16905:31;;;;;;;16190:9201;16905:31;;:::i;:::-;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;18500:7;;;;:::i;:::-;16190:9201;18535:11;;;16190:9201;;;;18519:55;18527:34;;;18519:55;:::i;:::-;16190:9201;;18593:28;;;;16190:9201;18593:28;;;;;;16190:9201;;18593:28;;;;;;;;;;;18585:67;18593:28;;;;;16190:9201;-1:-1:-1;16190:9201:0;;18625:10;18593:42;18585:67;:::i;:::-;16190:9201;;;18696:15;16190:9201;;;;;18739:15;;;;16190:9201;;;;;;;;18803:23;;;16190:9201;18829:15;18803:41;;16190:9201;;;18873:22;;;16190:9201;18873:26;;18869:176;;16190:9201;;;;;;;;;;;19089:37;;;;;;16190:9201;;;19089:37;;18625:10;19089:37;;;16190:9201;;;;;;;;;;;;;;;;;;;;;19089:37;;;;;;;;;;16190:9201;19142:13;;19184:3;19161:14;16190:9201;;19157:25;;;;;;19208:17;;;;:::i;:::-;16190:9201;;;;;;19208:28;19204:228;;19184:3;;;;;:::i;:::-;19142:13;;19204:228;16190:9201;;;;;;;;;;;;;;;;;;;;19261:29;;;19257:96;;19204:228;16190:9201;;;;;;;;;;;;;;;19612:45;16190:9201;;;;;;;:::i;:::-;;;;;;;;;;;;;19137:306;16190:9201;;19497:22;16190:9201;19497:22;16190:9201;19497:22;:::i;:::-;;16190:9201;18375:5;18347:25;18357:15;16190:9201;18347:25;;:::i;:::-;16190:9201;18399:13;;;;;:::i;:::-;16190:9201;18803:23;16190:9201;;;;;;19612:45;;;;;;16190:9201;19612:45;;18625:10;19612:45;;;16190:9201;;;;;;;;;;;;;;;;;19612:45;;;;;;;;;;19700:17;19612:45;19733:38;19612:45;;;;19137:306;16190:9201;19668:21;16190:9201;19668:21;16190:9201;19668:21;:::i;:::-;;16190:9201;19700:17;16190:9201;19700:17;:::i;:::-;;16190:9201;;;;;;;;;18625:10;19733:38;;16190:9201;;19612:45;;;;;;;;;;;;;:::i;:::-;;;;;;16190:9201;;;;;;;;;;;;;;;;;;19257:96;19292:17;19312:41;19292:61;19312:41;;:::i;:::-;16190:9201;;;;;;19292:17;;:::i;:61::-;19257:96;;;;16190:9201;;;;;;;;;;19157:25;;;;;;;;;;;;;19612:45;19157:25;;;19089:37;;;;;;;:::i;:::-;;;;;;16190:9201;;;;;;;;;18869:176;18930:41;18829:15;;18930:41;:::i;:::-;-1:-1:-1;16190:9201:0;;;18869:176;;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;18696:15;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18593:28;;;;;;;;;;;;;;:::i;:::-;;;;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2488:65;;:::i;:::-;16190:9201;;17318:47;16190:9201;;;17318:47;16190:9201;;;;;;;;;;;;;;;;20126:15;;20108:33;;16190:9201;;20126:15;20222:33;20172:32;16190:9201;20126:15;;20172:32;:::i;:::-;20222:33;:::i;16190:9201::-;;;;;;;;;;;;;;;;;;;;;;16842:56;16190:9201;;;;;;16842:56;16190:9201;16842:56;;16190:9201;;16842:56;;;16190:9201;16842:56;;;;16190:9201;16842:56;;16190:9201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;19161:14;16190:9201;;;;;;19161:14;-1:-1:-1;16190:9201:0;;;;-1:-1:-1;16190:9201:0;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;2795:166::-;16190:9201;2705:6;16190:9201;;740:10;2855:23;2851:103;;2795:166::o;2851:103::-;16190:9201;;;2902:40;;;740:10;2902:40;;;16190:9201;2902:40;16190:9201;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19785:214::-;16437:7;19882:30;;;;;19878:53;;19962:8;16190:9201;;;;;;;;;;;;;;;;19785:214;:::o;19878:53::-;19914:17;;19922:8;19914:17;:::o;20269:347::-;;20406:1;20422:17;;20418:102;;20269:347;20126:15;;20108:33;;16190:9201;;20222:33;20172:32;20530:50;20126:15;;20172:32;:::i;20530:50::-;20269:347;:::o;20418:102::-;20470:38;;;;:::i;:::-;20418:102;;;20992:501;;21206:49;20992:501;;;21206:49;:::i;:::-;21283:8;;21270:21;;;;21266:48;;20992:501;21342:26;;;;:::i;:::-;16190:9201;;;;;;;;;;;;;;;21477:8;21396:32;;21446:15;21396:32;21446:28;21396:32;;:::i;21446:15::-;:28;:::i;:::-;16190:9201;20992:501;:::o;21266:48::-;21293:21;;-1:-1:-1;21266:48:0;;16190:9201;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;21960:507;16190:9201;21960:507;16190:9201;22130:28;16190:9201;22072:11;16190:9201;;22056:55;22064:34;;;22056:55;:::i;:::-;16190:9201;;22130:28;;;;16190:9201;22130:28;;;;;;16190:9201;22130:28;;;;;;;22122:60;22130:28;-1:-1:-1;22130:28:0;;;21960:507;16190:9201;;;;;22130:35;22122:60;:::i;:::-;-1:-1:-1;16190:9201:0;22226:15;22130:28;16190:9201;22329:130;16190:9201;-1:-1:-1;16190:9201:0;22261:50;16190:9201;22130:28;22269:15;;16190:9201;;22261:50;:::i;:::-;22344:19;;;16190:9201;;;;22382:23;22072:11;22382:23;;;16190:9201;22407:22;;16190:9201;;22431:14;16190:9201;;22447:11;16190:9201;22329:130;;:::i;22130:28::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;16190:9201;;;-1:-1:-1;16190:9201:0;;;;;22473:141;16190:9201;22530:11;16190:9201;;22530:43;;;;;;-1:-1:-1;16190:9201:0;;;;;22530:43;;;;16190:9201;22530:43;;;;;;16190:9201;22530:43;;;;;;;22598:7;22530:43;;;22473:141;22598:7;;:::i;:::-;22473:141::o;22530:43::-;;;;:::i;:::-;;;;22620:733;;16190:9201;;22696:11;16190:9201;;22688:34;22680:55;22688:34;;;22680:55;:::i;:::-;16190:9201;;;;22754:28;;16190:9201;22754:28;;;;;;16190:9201;22754:28;16190:9201;22754:28;;;;;;;;;;;;22746:67;22754:28;-1:-1:-1;22754:28:0;;;22620:733;-1:-1:-1;16190:9201:0;;22786:10;22754:42;22746:67;:::i;:::-;16190:9201;-1:-1:-1;16190:9201:0;22857:15;16190:9201;;;-1:-1:-1;16190:9201:0;22900:15;22892:50;16190:9201;22754:28;22900:15;;16190:9201;;22892:50;:::i;:::-;22985:19;;;16190:9201;22970:130;16190:9201;;;;22696:11;23023:23;;;16190:9201;23048:22;;16190:9201;23072:14;16190:9201;;;;23088:11;16190:9201;22970:130;;:::i;:::-;16190:9201;;23166:10;16190:9201;23166:20;;;16190:9201;;23220:20;;;;:::i;:::-;23166:10;16190:9201;23023:23;16190:9201;;;;23251:36;;22786:10;22754:28;23251:36;;16190:9201;;;;;;;;;;;;;;;;;-1:-1:-1;;16190:9201:0;23251:36;;;;;;;23303:42;23251:36;;;;;22620:733;16190:9201;;;;;;;;;22786:10;23303:42;;22620:733::o;23251:36::-;;;;;;;;;;;;;:::i;:::-;;;;;;16190:9201;;;-1:-1:-1;16190:9201:0;;;;;;;;;;;;;;22754:28;16190:9201;;;;;;;;;;;;;;22754:28;;;;;;;;;;;;;;:::i;:::-;;;
Swarm Source
ipfs://6ccc1eccfea64903a9e3e63ef49ec5d82035ad215d2db68dec46a0e1d46552ab
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.