Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 644 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 24401660 | 33 days ago | IN | 0 ETH | 0.00001116 | ||||
| Approve | 24275748 | 50 days ago | IN | 0 ETH | 0.00000334 | ||||
| Approve | 23933803 | 98 days ago | IN | 0 ETH | 0.00005091 | ||||
| Approve | 23603814 | 144 days ago | IN | 0 ETH | 0.00000769 | ||||
| Transfer | 23603803 | 144 days ago | IN | 0 ETH | 0.00000943 | ||||
| Approve | 23385684 | 175 days ago | IN | 0 ETH | 0.00006433 | ||||
| Approve | 23359156 | 178 days ago | IN | 0 ETH | 0.00003034 | ||||
| Approve | 23359153 | 178 days ago | IN | 0 ETH | 0.00005281 | ||||
| Approve | 23358743 | 178 days ago | IN | 0 ETH | 0.00002999 | ||||
| Approve | 23146608 | 208 days ago | IN | 0 ETH | 0.0000409 | ||||
| Approve | 23129396 | 210 days ago | IN | 0 ETH | 0.00005582 | ||||
| Approve | 23121070 | 212 days ago | IN | 0 ETH | 0.00010991 | ||||
| Approve | 23030205 | 224 days ago | IN | 0 ETH | 0.00010351 | ||||
| Approve | 23021554 | 226 days ago | IN | 0 ETH | 0.0000239 | ||||
| Approve | 22971832 | 232 days ago | IN | 0 ETH | 0.00002889 | ||||
| Approve | 22936683 | 237 days ago | IN | 0 ETH | 0.00004598 | ||||
| Approve | 22912353 | 241 days ago | IN | 0 ETH | 0.00030672 | ||||
| Approve | 22912352 | 241 days ago | IN | 0 ETH | 0.00030674 | ||||
| Approve | 22912351 | 241 days ago | IN | 0 ETH | 0.00030552 | ||||
| Approve | 22908100 | 241 days ago | IN | 0 ETH | 0.00004203 | ||||
| Approve | 22907752 | 241 days ago | IN | 0 ETH | 0.00002877 | ||||
| Approve | 22901094 | 242 days ago | IN | 0 ETH | 0.00021459 | ||||
| Approve | 22893491 | 243 days ago | IN | 0 ETH | 0.0001526 | ||||
| Approve | 22893434 | 243 days ago | IN | 0 ETH | 0.00009974 | ||||
| Approve | 22891769 | 244 days ago | IN | 0 ETH | 0.00050783 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 22883144 | 245 days ago | 0.03660904 ETH | ||||
| Transfer | 22883144 | 245 days ago | 0.03660904 ETH | ||||
| Transfer | 22883132 | 245 days ago | 0.00960238 ETH | ||||
| Transfer | 22883132 | 245 days ago | 0.00960238 ETH | ||||
| Transfer | 22883132 | 245 days ago | 0.05819681 ETH | ||||
| Transfer | 22883132 | 245 days ago | 0.05819681 ETH | ||||
| Transfer | 22883124 | 245 days ago | 0.00812861 ETH | ||||
| Transfer | 22883124 | 245 days ago | 0.00812861 ETH | ||||
| Transfer | 22883122 | 245 days ago | 0.03316177 ETH | ||||
| Transfer | 22883122 | 245 days ago | 0.03316177 ETH | ||||
| Transfer | 22883116 | 245 days ago | 0.02308238 ETH | ||||
| Transfer | 22883116 | 245 days ago | 0.02308238 ETH | ||||
| Transfer | 22883114 | 245 days ago | 0.03725495 ETH | ||||
| Transfer | 22883114 | 245 days ago | 0.03725495 ETH | ||||
| Transfer | 22883113 | 245 days ago | 0.03928177 ETH | ||||
| Transfer | 22883113 | 245 days ago | 0.03928177 ETH | ||||
| Transfer | 22883102 | 245 days ago | 0.0557643 ETH | ||||
| Transfer | 22883102 | 245 days ago | 0.0557643 ETH | ||||
| Transfer | 22883098 | 245 days ago | 0.00359322 ETH | ||||
| Transfer | 22883098 | 245 days ago | 0.00359322 ETH | ||||
| Transfer | 22883098 | 245 days ago | 0.03485028 ETH | ||||
| Transfer | 22883098 | 245 days ago | 0.03485028 ETH | ||||
| Transfer | 22883093 | 245 days ago | 0.13330301 ETH | ||||
| Transfer | 22883093 | 245 days ago | 0.13330301 ETH | ||||
| Transfer | 22883088 | 245 days ago | 0.0117226 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Token
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
/*
A decentralized protocol connecting robots to modular, performance-driven intelligence.
Website: https://bingusthecat.com/
X: https://x.com/bingusthecateth/
Telegram : https://t.me/binguscateth/
*/
pragma solidity ^0.8.28;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {IUniswapV2Router02} from "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import {IUniswapV2Factory} from "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
contract Token is ERC20, Ownable {
address public immutable uniswapPair;
address payable private devWallet;
IUniswapV2Router02 private constant uniswapRouter =
IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
address private immutable weth;
uint256 public tradingStartBlock;
uint256 public tradingStartTimestamp;
uint256 public manualFeeBps;
bool public limitsRemoved;
event LimitRemoved(bool value);
event FeeUpdated(uint256 newFeeBps, uint256 oldFeeBps);
mapping(address => bool) private feeExempt;
mapping(address => bool) private maxWalletExempt;
mapping(address => mapping(uint256 => uint256)) private originTxsPerBlock;
uint256 private constant MAX_TXS_PER_BLOCK_PER_ORIGIN = 10;
mapping(uint256 => uint256) private txsPerBlock;
uint256 private constant MAX_TXS_PER_BLOCK = 101;
uint256 private MAX_SUPPLY = 1_000_000_000_000_000 ether;
uint256 private MANUAL_TAX_NONE = 10001;
constructor() ERC20("Bingus Cat", "BINGUS") Ownable(msg.sender) {
manualFeeBps = 3000;
limitsRemoved = true;
weth = uniswapRouter.WETH();
devWallet = payable(msg.sender);
uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), weth);
feeExempt[msg.sender] = true;
feeExempt[address(this)] = true;
feeExempt[uniswapPair] = true;
feeExempt[devWallet] = true;
maxWalletExempt[msg.sender] = true;
maxWalletExempt[address(this)] = true;
maxWalletExempt[uniswapPair] = true;
maxWalletExempt[devWallet] = true;
_mint(msg.sender, MAX_SUPPLY);
_approve(msg.sender, address(uniswapRouter), type(uint256).max);
_approve(address(this), address(uniswapRouter), type(uint256).max);
}
receive() external payable {}
fallback() external payable {}
function enableTrading() external onlyOwner {
require(tradingStartBlock == 0, "Trading already enabled");
tradingStartBlock = block.number;
tradingStartTimestamp = block.timestamp;
}
function getFeeAndMaxWallet() external view returns (uint256 feeBps, uint256 maxWallet) {
return _calculateFeeAndMaxWallet();
}
function _calculateFeeAndMaxWallet() internal view returns (uint256 feeBps, uint256 maxWallet) {
if (tradingStartTimestamp == 0) {
return (0, 0);
}
uint256 elapsed = block.timestamp - tradingStartTimestamp;
if (elapsed < 1800) {
if (elapsed < 60) {
feeBps = 3500; // 35%
maxWallet = MAX_SUPPLY * 5 / 1000; // ~0.5%
} else if (elapsed < 300) {
feeBps = 3000; // 30%
maxWallet = MAX_SUPPLY * 10 / 1000; // 1%
} else if (elapsed < 480) {
feeBps = 2500; // 25%
maxWallet = MAX_SUPPLY * 12 / 1000; // 1.2%
} else if (elapsed < 720) {
feeBps = 2000; // 20%
maxWallet = MAX_SUPPLY * 15 / 1000; // 1.5%
} else if (elapsed < 900) {
feeBps = 1000; // 10%
maxWallet = MAX_SUPPLY * 20 / 1000; // 2%
} else {
feeBps = 500; // 5%
maxWallet = MAX_SUPPLY * 20 / 1000; // 2%
}
} else {
feeBps = 0;
maxWallet = MAX_SUPPLY;
}
if (manualFeeBps != MANUAL_TAX_NONE) {
feeBps = manualFeeBps;
}
if (limitsRemoved) {
maxWallet = MAX_SUPPLY;
}
}
function _update(address sender, address recipient, uint256 amount) internal override {
(uint256 feeBps, uint256 maxWallet) = _calculateFeeAndMaxWallet();
bool isBuy = sender == uniswapPair;
bool isSell = recipient == uniswapPair;
if (isBuy || isSell) {
require(tradingStartBlock > 0 || feeExempt[recipient], "Trading not enabled");
if (feeBps > 0) {
if (isBuy && !feeExempt[recipient]) {
// Limit buy txs per block per origin in first 3 minutes after trading start
if (tradingStartTimestamp > 0 && block.timestamp - tradingStartTimestamp < 180 && !limitsRemoved) {
require(originTxsPerBlock[tx.origin][block.number] < MAX_TXS_PER_BLOCK_PER_ORIGIN,
"Exceeded max txs per block per origin");
originTxsPerBlock[tx.origin][block.number]++;
require(txsPerBlock[block.number] < MAX_TXS_PER_BLOCK, "Exceeded max txs per block");
txsPerBlock[block.number]++;
}
uint256 fee = (amount * feeBps) / 10000;
amount -= fee;
super._update(sender, address(this), fee);
}
if (isSell && !feeExempt[sender]) {
uint256 fee = (amount * feeBps) / 10000;
amount -= fee;
super._update(sender, address(this), fee);
_swapTokensForETH();
}
} else if (isSell && !feeExempt[sender]) {
_swapTokensForETH();
}
}
require(maxWalletExempt[recipient] ||
amount + balanceOf(recipient) <= maxWallet,
"Max wallet size exceeded"
);
super._update(sender, recipient, amount);
}
function _swapTokensForETH() internal {
if (block.timestamp - tradingStartTimestamp < 300) {
return; // Do not swap within first 5 minutes
}
uint256 tokenBalance = balanceOf(address(this));
if (tokenBalance == 0) {
return;
}
address[] memory path = new address[](2);
path[0] = weth;
path[1] = address(this);
// Get max token amount for 1 ETH to limit slippage
uint256 maxTokens = uniswapRouter.getAmountsOut(1 ether, path)[1];
if (tokenBalance > maxTokens) {
tokenBalance = maxTokens;
}
path[0] = address(this);
path[1] = weth;
uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenBalance,
0,
path,
address(this),
block.timestamp
);
uint256 ethBalance = address(this).balance;
bool success;
if (ethBalance > 0) {
(success, ) = devWallet.call{value: ethBalance}("");
}
}
function setManualFee(uint256 feeBps) external onlyOwner {
require(feeBps < 10000 || feeBps == MANUAL_TAX_NONE, "Invalid fee");
uint256 oldFee = manualFeeBps;
manualFeeBps = feeBps;
emit FeeUpdated(feeBps, oldFee);
}
function removeLimits(bool value) external onlyOwner {
limitsRemoved = value;
emit LimitRemoved(value);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @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);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (interfaces/draft-IERC6093.sol)
pragma solidity ^0.8.20;
/**
* @dev Standard ERC-20 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-20 tokens.
*/
interface IERC20Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC20InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC20InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
* @param spender Address that may be allowed to operate on tokens without being their owner.
* @param allowance Amount of tokens a `spender` is allowed to operate with.
* @param needed Minimum amount required to perform a transfer.
*/
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC20InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `spender` to be approved. Used in approvals.
* @param spender Address that may be allowed to operate on tokens without being their owner.
*/
error ERC20InvalidSpender(address spender);
}
/**
* @dev Standard ERC-721 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-721 tokens.
*/
interface IERC721Errors {
/**
* @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in ERC-20.
* Used in balance queries.
* @param owner Address of the current owner of a token.
*/
error ERC721InvalidOwner(address owner);
/**
* @dev Indicates a `tokenId` whose `owner` is the zero address.
* @param tokenId Identifier number of a token.
*/
error ERC721NonexistentToken(uint256 tokenId);
/**
* @dev Indicates an error related to the ownership over a particular token. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param tokenId Identifier number of a token.
* @param owner Address of the current owner of a token.
*/
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC721InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC721InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param tokenId Identifier number of a token.
*/
error ERC721InsufficientApproval(address operator, uint256 tokenId);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC721InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC721InvalidOperator(address operator);
}
/**
* @dev Standard ERC-1155 Errors
* Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC-1155 tokens.
*/
interface IERC1155Errors {
/**
* @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
* @param balance Current balance for the interacting account.
* @param needed Minimum amount required to perform a transfer.
* @param tokenId Identifier number of a token.
*/
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
/**
* @dev Indicates a failure with the token `sender`. Used in transfers.
* @param sender Address whose tokens are being transferred.
*/
error ERC1155InvalidSender(address sender);
/**
* @dev Indicates a failure with the token `receiver`. Used in transfers.
* @param receiver Address to which tokens are being transferred.
*/
error ERC1155InvalidReceiver(address receiver);
/**
* @dev Indicates a failure with the `operator`’s approval. Used in transfers.
* @param operator Address that may be allowed to operate on tokens without being their owner.
* @param owner Address of the current owner of a token.
*/
error ERC1155MissingApprovalForAll(address operator, address owner);
/**
* @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
* @param approver Address initiating an approval operation.
*/
error ERC1155InvalidApprover(address approver);
/**
* @dev Indicates a failure with the `operator` to be approved. Used in approvals.
* @param operator Address that may be allowed to operate on tokens without being their owner.
*/
error ERC1155InvalidOperator(address operator);
/**
* @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.
* Used in batch transfers.
* @param idsLength Length of the array of token identifiers
* @param valuesLength Length of the array of token amounts
*/
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.20;
import {IERC20} from "./IERC20.sol";
import {IERC20Metadata} from "./extensions/IERC20Metadata.sol";
import {Context} from "../../utils/Context.sol";
import {IERC20Errors} from "../../interfaces/draft-IERC6093.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC-20
* applications.
*/
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
mapping(address account => uint256) private _balances;
mapping(address account => mapping(address spender => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* Both values are immutable: they can only be set once during construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `value`.
*/
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `value` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Skips emitting an {Approval} event indicating an allowance update. This is not
* required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve].
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `value`.
* - the caller must have allowance for ``from``'s tokens of at least
* `value`.
*/
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
/**
* @dev Moves a `value` amount of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
/**
* @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from`
* (or `to`) is the zero address. All customizations to transfers, mints, and burns should be done by overriding
* this function.
*
* Emits a {Transfer} event.
*/
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
// Overflow check required: The rest of the code assumes that totalSupply never overflows
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
// Overflow not possible: value <= fromBalance <= totalSupply.
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
// Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
_totalSupply -= value;
}
} else {
unchecked {
// Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
/**
* @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
* Relies on the `_update` mechanism
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead.
*/
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
/**
* @dev Destroys a `value` amount of tokens from `account`, lowering the total supply.
* Relies on the `_update` mechanism.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* NOTE: This function is not virtual, {_update} should be overridden instead
*/
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
/**
* @dev Sets `value` as the allowance of `spender` over the `owner`'s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
/**
* @dev Variant of {_approve} with an optional flag to enable or disable the {Approval} event.
*
* By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
* `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
* `Approval` event during `transferFrom` operations.
*
* Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to
* true using the following override:
*
* ```solidity
* function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
* super._approve(owner, spender, value, true);
* }
* ```
*
* Requirements are the same as {_approve}.
*/
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
/**
* @dev Updates `owner`'s allowance for `spender` based on spent `value`.
*
* Does not update the allowance value in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Does not emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.20;
import {IERC20} from "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC-20 standard.
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 value) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 value) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
}pragma solidity >=0.5.0;
interface IUniswapV2Factory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}pragma solidity >=0.6.2;
import './IUniswapV2Router01.sol';
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newFeeBps","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldFeeBps","type":"uint256"}],"name":"FeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"LimitRemoved","type":"event"},{"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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFeeAndMaxWallet","outputs":[{"internalType":"uint256","name":"feeBps","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualFeeBps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeBps","type":"uint256"}],"name":"setManualFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c06040526d314dc6448d9338c15b0a00000000600f5561271160105534801561002857600080fd5b50336040518060400160405280600a815260200169109a5b99dd5cc810d85d60b21b8152506040518060400160405280600681526020016542494e47555360d01b815250816003908161007b9190610de2565b5060046100888282610de2565b5050506001600160a01b0381166100ba57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100c381610331565b50610bb8600955600a805460ff19166001179055604080516315ab88c960e31b815290516000805160206126fb8339815191529163ad5c46489160048083019260209291908290030181865afa158015610121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101459190610ea0565b6001600160a01b031660a052600680546001600160a01b031916331790556040805163c45a015560e01b815290516000805160206126fb8339815191529163c45a01559160048083019260209291908290030181865afa1580156101ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d19190610ea0565b60a0516040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015610222573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102469190610ea0565b6001600160a01b039081166080819052336000818152600b602090815260408083208054600160ff1991821681179092553080865283862080548316841790558786528386208054831684179055600680548a1687528487208054841685179055878752600c90955283862080548316841790558552828520805482168317905595845281842080548716821790559154909516825293902080549092169092179055600f546102f69190610383565b610311336000805160206126fb8339815191526000196103bd565b61032c306000805160206126fb8339815191526000196103bd565b6110e8565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166103ad5760405163ec442f0560e01b8152600060048201526024016100b1565b6103b9600083836103cf565b5050565b6103ca8383836001610782565b505050565b6000806103da610858565b60805191935091506001600160a01b0390811686821681149186161481806103ff5750805b156106d3576000600754118061042d57506001600160a01b0386166000908152600b602052604090205460ff165b6104795760405162461bcd60e51b815260206004820152601360248201527f54726164696e67206e6f7420656e61626c65640000000000000000000000000060448201526064016100b1565b83156106a0578180156104a557506001600160a01b0386166000908152600b602052604090205460ff16155b156106345760006008541180156104c9575060b4600854426104c79190610ee6565b105b80156104d85750600a5460ff16155b1561060057326000908152600d60209081526040808320438452909152902054600a116105555760405162461bcd60e51b815260206004820152602560248201527f4578636565646564206d6178207478732070657220626c6f636b20706572206f6044820152643934b3b4b760d91b60648201526084016100b1565b326000908152600d60209081526040808320438452909152812080549161057b83610eff565b9091555050436000908152600e60205260409020546065116105df5760405162461bcd60e51b815260206004820152601a60248201527f4578636565646564206d6178207478732070657220626c6f636b00000000000060448201526064016100b1565b436000908152600e602052604081208054916105fa83610eff565b91905055505b600061271061060f8688610f18565b6106199190610f2f565b90506106258187610ee6565b9550610632883083610987565b505b80801561065a57506001600160a01b0387166000908152600b602052604090205460ff16155b1561069b57600061271061066e8688610f18565b6106789190610f2f565b90506106848187610ee6565b9550610691883083610987565b610699610ab1565b505b6106d3565b8080156106c657506001600160a01b0387166000908152600b602052604090205460ff16155b156106d3576106d3610ab1565b6001600160a01b0386166000908152600c602052604090205460ff1680610722575082610715876001600160a01b031660009081526020819052604090205490565b61071f9087610f51565b11155b61076e5760405162461bcd60e51b815260206004820152601860248201527f4d61782077616c6c65742073697a65206578636565646564000000000000000060448201526064016100b1565b610779878787610987565b50505050505050565b6001600160a01b0384166107ac5760405163e602df0560e01b8152600060048201526024016100b1565b6001600160a01b0383166107d657604051634a1406b160e11b8152600060048201526024016100b1565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561085257826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161084991815260200190565b60405180910390a35b50505050565b60008060085460000361086e5750600091829150565b60006008544261087e9190610ee6565b905061070881101561095657603c8110156108bb57610dac92506103e8600f5460056108aa9190610f18565b6108b49190610f2f565b9150610960565b61012c8110156108dc57610bb892506103e8600f54600a6108aa9190610f18565b6101e08110156108fd576109c492506103e8600f54600c6108aa9190610f18565b6102d081101561091e576107d092506103e8600f54600f6108aa9190610f18565b61038481101561093f576103e892506103e8600f5460146108aa9190610f18565b6101f492506103e8600f5460146108aa9190610f18565b60009250600f5491505b601054600954146109715760095492505b600a5460ff161561098257600f5491505b509091565b6001600160a01b0383166109b25780600260008282546109a79190610f51565b90915550610a249050565b6001600160a01b03831660009081526020819052604090205481811015610a055760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016100b1565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610a4057600280548290039055610a5f565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aa491815260200190565b60405180910390a3505050565b61012c60085442610ac29190610ee6565b1015610aca57565b3060009081526020819052604081205490819003610ae55750565b60408051600280825260608201835260009260208301908036833701905050905060a05181600081518110610b1c57610b1c610f64565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610b5057610b50610f64565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b81526000906000805160206126fb8339815191529063d06ca61f90610ba690670de0b6b3a7640000908690600401610fbf565b600060405180830381865afa158015610bc3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610beb9190810190610fe0565b600181518110610bfd57610bfd610f64565b6020026020010151905080831115610c13578092505b3082600081518110610c2757610c27610f64565b60200260200101906001600160a01b031690816001600160a01b03168152505060a05182600181518110610c5d57610c5d610f64565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b81526000805160206126fb8339815191529063791ac94790610caf9086906000908790309042906004016110ac565b600060405180830381600087803b158015610cc957600080fd5b505af1158015610cdd573d6000803e3d6000fd5b5047925060009150508115610d44576006546040516001600160a01b03909116908390600081818185875af1925050503d8060008114610d39576040519150601f19603f3d011682016040523d82523d6000602084013e610d3e565b606091505b50909150505b5050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680610d7557607f821691505b602082108103610d9557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103ca57806000526020600020601f840160051c81016020851015610dc25750805b601f840160051c820191505b81811015610d445760008155600101610dce565b81516001600160401b03811115610dfb57610dfb610d4b565b610e0f81610e098454610d61565b84610d9b565b6020601f821160018114610e435760008315610e2b5750848201515b600019600385901b1c1916600184901b178455610d44565b600084815260208120601f198516915b82811015610e735787850151825560209485019460019092019101610e53565b5084821015610e915786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b600060208284031215610eb257600080fd5b81516001600160a01b0381168114610ec957600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ef957610ef9610ed0565b92915050565b600060018201610f1157610f11610ed0565b5060010190565b8082028115828204841417610ef957610ef9610ed0565b600082610f4c57634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ef957610ef9610ed0565b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b82811015610fb55781516001600160a01b0316865260209586019590910190600101610f8e565b5093949350505050565b828152604060208201526000610fd86040830184610f7a565b949350505050565b600060208284031215610ff257600080fd5b81516001600160401b0381111561100857600080fd5b8201601f8101841361101957600080fd5b80516001600160401b0381111561103257611032610d4b565b604051600582901b90603f8201601f191681016001600160401b038111828210171561106057611060610d4b565b60405291825260208184018101929081018784111561107e57600080fd5b6020850194505b838510156110a157845180825260209586019590935001611085565b509695505050505050565b85815284602082015260a0604082015260006110cb60a0830186610f7a565b6001600160a01b0394909416606083015250608001529392505050565b60805160a0516115e061111b60003960008181610f5b01526110c00152600081816103380152610a3001526115e06000f3fe6080604052600436106101215760003560e01c8063715018a6116100a5578063a9059cbb1161006c578063a9059cbb14610306578063c816841b14610326578063d798cbd21461035a578063dd62ed3e14610370578063e56334fd146103b6578063f2fde38b146103e057005b8063715018a61461027f5780637a47c3ca146102945780638a8c523c146102aa5780638da5cb5b146102bf57806395d89b41146102f157005b806323b872dd116100e957806323b872dd146101d7578063313ce567146101f75780635e8c4a47146102135780636bb1231e1461022957806370a082311461024957005b806306fdde0314610123578063095ea7b31461014e57806317090ec81461017e57806318160ddd1461019e5780631d6f9655146101bd575b005b34801561012f57600080fd5b50610138610400565b60405161014591906111e6565b60405180910390f35b34801561015a57600080fd5b5061016e610169366004611250565b610492565b6040519015158152602001610145565b34801561018a57600080fd5b5061012161019936600461127a565b6104ac565b3480156101aa57600080fd5b506002545b604051908152602001610145565b3480156101c957600080fd5b50600a5461016e9060ff1681565b3480156101e357600080fd5b5061016e6101f23660046112a3565b6104fb565b34801561020357600080fd5b5060405160128152602001610145565b34801561021f57600080fd5b506101af60085481565b34801561023557600080fd5b506101216102443660046112e0565b61051f565b34801561025557600080fd5b506101af6102643660046112f9565b6001600160a01b031660009081526020819052604090205490565b34801561028b57600080fd5b506101216105bc565b3480156102a057600080fd5b506101af60095481565b3480156102b657600080fd5b506101216105d0565b3480156102cb57600080fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610145565b3480156102fd57600080fd5b50610138610632565b34801561031257600080fd5b5061016e610321366004611250565b610641565b34801561033257600080fd5b506102d97f000000000000000000000000000000000000000000000000000000000000000081565b34801561036657600080fd5b506101af60075481565b34801561037c57600080fd5b506101af61038b366004611314565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156103c257600080fd5b506103cb61064f565b60408051928352602083019190915201610145565b3480156103ec57600080fd5b506101216103fb3660046112f9565b610662565b60606003805461040f90611347565b80601f016020809104026020016040519081016040528092919081815260200182805461043b90611347565b80156104885780601f1061045d57610100808354040283529160200191610488565b820191906000526020600020905b81548152906001019060200180831161046b57829003601f168201915b5050505050905090565b6000336104a08185856106a0565b60019150505b92915050565b6104b46106b2565b600a805460ff19168215159081179091556040519081527f548bafd1a33a492155dcade6c5856b70634b1e8a4ac32b79af409f9fa8f3bec59060200160405180910390a150565b6000336105098582856106df565b61051485858561075e565b506001949350505050565b6105276106b2565b612710811080610538575060105481145b6105775760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b60448201526064015b60405180910390fd5b600980549082905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6105c46106b2565b6105ce60006107bd565b565b6105d86106b2565b600754156106285760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c6564000000000000000000604482015260640161056e565b4360075542600855565b60606004805461040f90611347565b6000336104a081858561075e565b60008061065a61080f565b915091509091565b61066a6106b2565b6001600160a01b03811661069457604051631e4fbdf760e01b81526000600482015260240161056e565b61069d816107bd565b50565b6106ad838383600161093e565b505050565b6005546001600160a01b031633146105ce5760405163118cdaa760e01b815233600482015260240161056e565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811015610758578181101561074957604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161056e565b6107588484848403600061093e565b50505050565b6001600160a01b03831661078857604051634b637e8f60e11b81526000600482015260240161056e565b6001600160a01b0382166107b25760405163ec442f0560e01b81526000600482015260240161056e565b6106ad838383610a13565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806008546000036108255750600091829150565b6000600854426108359190611397565b905061070881101561090d57603c81101561087257610dac92506103e8600f54600561086191906113aa565b61086b91906113c1565b9150610917565b61012c81101561089357610bb892506103e8600f54600a61086191906113aa565b6101e08110156108b4576109c492506103e8600f54600c61086191906113aa565b6102d08110156108d5576107d092506103e8600f54600f61086191906113aa565b6103848110156108f6576103e892506103e8600f54601461086191906113aa565b6101f492506103e8600f54601461086191906113aa565b60009250600f5491505b601054600954146109285760095492505b600a5460ff161561093957600f5491505b509091565b6001600160a01b0384166109685760405163e602df0560e01b81526000600482015260240161056e565b6001600160a01b03831661099257604051634a1406b160e11b81526000600482015260240161056e565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561075857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a0591815260200190565b60405180910390a350505050565b600080610a1e61080f565b90925090506001600160a01b038581167f00000000000000000000000000000000000000000000000000000000000000008216908114918616148180610a615750805b15610d2b5760006007541180610a8f57506001600160a01b0386166000908152600b602052604090205460ff165b610ad15760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b604482015260640161056e565b8315610cf857818015610afd57506001600160a01b0386166000908152600b602052604090205460ff16155b15610c8c576000600854118015610b21575060b460085442610b1f9190611397565b105b8015610b305750600a5460ff16155b15610c5857326000908152600d60209081526040808320438452909152902054600a11610bad5760405162461bcd60e51b815260206004820152602560248201527f4578636565646564206d6178207478732070657220626c6f636b20706572206f6044820152643934b3b4b760d91b606482015260840161056e565b326000908152600d602090815260408083204384529091528120805491610bd3836113e3565b9091555050436000908152600e6020526040902054606511610c375760405162461bcd60e51b815260206004820152601a60248201527f4578636565646564206d6178207478732070657220626c6f636b000000000000604482015260640161056e565b436000908152600e60205260408120805491610c52836113e3565b91905055505b6000612710610c6786886113aa565b610c7191906113c1565b9050610c7d8187611397565b9550610c8a883083610dda565b505b808015610cb257506001600160a01b0387166000908152600b602052604090205460ff16155b15610cf3576000612710610cc686886113aa565b610cd091906113c1565b9050610cdc8187611397565b9550610ce9883083610dda565b610cf1610f04565b505b610d2b565b808015610d1e57506001600160a01b0387166000908152600b602052604090205460ff16155b15610d2b57610d2b610f04565b6001600160a01b0386166000908152600c602052604090205460ff1680610d7a575082610d6d876001600160a01b031660009081526020819052604090205490565b610d7790876113fc565b11155b610dc65760405162461bcd60e51b815260206004820152601860248201527f4d61782077616c6c65742073697a652065786365656465640000000000000000604482015260640161056e565b610dd1878787610dda565b50505050505050565b6001600160a01b038316610e05578060026000828254610dfa91906113fc565b90915550610e779050565b6001600160a01b03831660009081526020819052604090205481811015610e585760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161056e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610e9357600280548290039055610eb2565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ef791815260200190565b60405180910390a3505050565b61012c60085442610f159190611397565b1015610f1d57565b3060009081526020819052604081205490819003610f385750565b6040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110610f8d57610f8d611425565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610fc157610fc1611425565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f9061101d90670de0b6b3a7640000908690600401611480565b600060405180830381865afa15801561103a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261106291908101906114a1565b60018151811061107457611074611425565b602002602001015190508083111561108a578092505b308260008151811061109e5761109e611425565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000000000000000000000000000000000000000000000826001815181106110f2576110f2611425565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac9479061114a90869060009087903090429060040161156e565b600060405180830381600087803b15801561116457600080fd5b505af1158015611178573d6000803e3d6000fd5b50479250600091505081156111df576006546040516001600160a01b03909116908390600081818185875af1925050503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b50909150505b5050505050565b602081526000825180602084015260005b8181101561121457602081860181015160408684010152016111f7565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461124b57600080fd5b919050565b6000806040838503121561126357600080fd5b61126c83611234565b946020939093013593505050565b60006020828403121561128c57600080fd5b8135801515811461129c57600080fd5b9392505050565b6000806000606084860312156112b857600080fd5b6112c184611234565b92506112cf60208501611234565b929592945050506040919091013590565b6000602082840312156112f257600080fd5b5035919050565b60006020828403121561130b57600080fd5b61129c82611234565b6000806040838503121561132757600080fd5b61133083611234565b915061133e60208401611234565b90509250929050565b600181811c9082168061135b57607f821691505b60208210810361137b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156104a6576104a6611381565b80820281158282048414176104a6576104a6611381565b6000826113de57634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113f5576113f5611381565b5060010190565b808201808211156104a6576104a6611381565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b828110156114765781516001600160a01b031686526020958601959091019060010161144f565b5093949350505050565b828152604060208201526000611499604083018461143b565b949350505050565b6000602082840312156114b357600080fd5b815167ffffffffffffffff8111156114ca57600080fd5b8201601f810184136114db57600080fd5b805167ffffffffffffffff8111156114f5576114f561140f565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156115225761152261140f565b60405291825260208184018101929081018784111561154057600080fd5b6020850194505b8385101561156357845180825260209586019590935001611547565b509695505050505050565b85815284602082015260a06040820152600061158d60a083018661143b565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206f0aaf5d59f5afad55a93c7a8a2c85cad1ca329413aa3fa81be6a1b7aca3a2c764736f6c634300081c00330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Deployed Bytecode
0x6080604052600436106101215760003560e01c8063715018a6116100a5578063a9059cbb1161006c578063a9059cbb14610306578063c816841b14610326578063d798cbd21461035a578063dd62ed3e14610370578063e56334fd146103b6578063f2fde38b146103e057005b8063715018a61461027f5780637a47c3ca146102945780638a8c523c146102aa5780638da5cb5b146102bf57806395d89b41146102f157005b806323b872dd116100e957806323b872dd146101d7578063313ce567146101f75780635e8c4a47146102135780636bb1231e1461022957806370a082311461024957005b806306fdde0314610123578063095ea7b31461014e57806317090ec81461017e57806318160ddd1461019e5780631d6f9655146101bd575b005b34801561012f57600080fd5b50610138610400565b60405161014591906111e6565b60405180910390f35b34801561015a57600080fd5b5061016e610169366004611250565b610492565b6040519015158152602001610145565b34801561018a57600080fd5b5061012161019936600461127a565b6104ac565b3480156101aa57600080fd5b506002545b604051908152602001610145565b3480156101c957600080fd5b50600a5461016e9060ff1681565b3480156101e357600080fd5b5061016e6101f23660046112a3565b6104fb565b34801561020357600080fd5b5060405160128152602001610145565b34801561021f57600080fd5b506101af60085481565b34801561023557600080fd5b506101216102443660046112e0565b61051f565b34801561025557600080fd5b506101af6102643660046112f9565b6001600160a01b031660009081526020819052604090205490565b34801561028b57600080fd5b506101216105bc565b3480156102a057600080fd5b506101af60095481565b3480156102b657600080fd5b506101216105d0565b3480156102cb57600080fd5b506005546001600160a01b03165b6040516001600160a01b039091168152602001610145565b3480156102fd57600080fd5b50610138610632565b34801561031257600080fd5b5061016e610321366004611250565b610641565b34801561033257600080fd5b506102d97f00000000000000000000000090dbbf164e71f678184c17e4aa04894974df600d81565b34801561036657600080fd5b506101af60075481565b34801561037c57600080fd5b506101af61038b366004611314565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156103c257600080fd5b506103cb61064f565b60408051928352602083019190915201610145565b3480156103ec57600080fd5b506101216103fb3660046112f9565b610662565b60606003805461040f90611347565b80601f016020809104026020016040519081016040528092919081815260200182805461043b90611347565b80156104885780601f1061045d57610100808354040283529160200191610488565b820191906000526020600020905b81548152906001019060200180831161046b57829003601f168201915b5050505050905090565b6000336104a08185856106a0565b60019150505b92915050565b6104b46106b2565b600a805460ff19168215159081179091556040519081527f548bafd1a33a492155dcade6c5856b70634b1e8a4ac32b79af409f9fa8f3bec59060200160405180910390a150565b6000336105098582856106df565b61051485858561075e565b506001949350505050565b6105276106b2565b612710811080610538575060105481145b6105775760405162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b60448201526064015b60405180910390fd5b600980549082905560408051838152602081018390527f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df61302910160405180910390a15050565b6105c46106b2565b6105ce60006107bd565b565b6105d86106b2565b600754156106285760405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c6564000000000000000000604482015260640161056e565b4360075542600855565b60606004805461040f90611347565b6000336104a081858561075e565b60008061065a61080f565b915091509091565b61066a6106b2565b6001600160a01b03811661069457604051631e4fbdf760e01b81526000600482015260240161056e565b61069d816107bd565b50565b6106ad838383600161093e565b505050565b6005546001600160a01b031633146105ce5760405163118cdaa760e01b815233600482015260240161056e565b6001600160a01b03838116600090815260016020908152604080832093861683529290522054600019811015610758578181101561074957604051637dc7a0d960e11b81526001600160a01b0384166004820152602481018290526044810183905260640161056e565b6107588484848403600061093e565b50505050565b6001600160a01b03831661078857604051634b637e8f60e11b81526000600482015260240161056e565b6001600160a01b0382166107b25760405163ec442f0560e01b81526000600482015260240161056e565b6106ad838383610a13565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000806008546000036108255750600091829150565b6000600854426108359190611397565b905061070881101561090d57603c81101561087257610dac92506103e8600f54600561086191906113aa565b61086b91906113c1565b9150610917565b61012c81101561089357610bb892506103e8600f54600a61086191906113aa565b6101e08110156108b4576109c492506103e8600f54600c61086191906113aa565b6102d08110156108d5576107d092506103e8600f54600f61086191906113aa565b6103848110156108f6576103e892506103e8600f54601461086191906113aa565b6101f492506103e8600f54601461086191906113aa565b60009250600f5491505b601054600954146109285760095492505b600a5460ff161561093957600f5491505b509091565b6001600160a01b0384166109685760405163e602df0560e01b81526000600482015260240161056e565b6001600160a01b03831661099257604051634a1406b160e11b81526000600482015260240161056e565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561075857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a0591815260200190565b60405180910390a350505050565b600080610a1e61080f565b90925090506001600160a01b038581167f00000000000000000000000090dbbf164e71f678184c17e4aa04894974df600d8216908114918616148180610a615750805b15610d2b5760006007541180610a8f57506001600160a01b0386166000908152600b602052604090205460ff165b610ad15760405162461bcd60e51b8152602060048201526013602482015272151c98591a5b99c81b9bdd08195b98589b1959606a1b604482015260640161056e565b8315610cf857818015610afd57506001600160a01b0386166000908152600b602052604090205460ff16155b15610c8c576000600854118015610b21575060b460085442610b1f9190611397565b105b8015610b305750600a5460ff16155b15610c5857326000908152600d60209081526040808320438452909152902054600a11610bad5760405162461bcd60e51b815260206004820152602560248201527f4578636565646564206d6178207478732070657220626c6f636b20706572206f6044820152643934b3b4b760d91b606482015260840161056e565b326000908152600d602090815260408083204384529091528120805491610bd3836113e3565b9091555050436000908152600e6020526040902054606511610c375760405162461bcd60e51b815260206004820152601a60248201527f4578636565646564206d6178207478732070657220626c6f636b000000000000604482015260640161056e565b436000908152600e60205260408120805491610c52836113e3565b91905055505b6000612710610c6786886113aa565b610c7191906113c1565b9050610c7d8187611397565b9550610c8a883083610dda565b505b808015610cb257506001600160a01b0387166000908152600b602052604090205460ff16155b15610cf3576000612710610cc686886113aa565b610cd091906113c1565b9050610cdc8187611397565b9550610ce9883083610dda565b610cf1610f04565b505b610d2b565b808015610d1e57506001600160a01b0387166000908152600b602052604090205460ff16155b15610d2b57610d2b610f04565b6001600160a01b0386166000908152600c602052604090205460ff1680610d7a575082610d6d876001600160a01b031660009081526020819052604090205490565b610d7790876113fc565b11155b610dc65760405162461bcd60e51b815260206004820152601860248201527f4d61782077616c6c65742073697a652065786365656465640000000000000000604482015260640161056e565b610dd1878787610dda565b50505050505050565b6001600160a01b038316610e05578060026000828254610dfa91906113fc565b90915550610e779050565b6001600160a01b03831660009081526020819052604090205481811015610e585760405163391434e360e21b81526001600160a01b0385166004820152602481018290526044810183905260640161056e565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610e9357600280548290039055610eb2565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ef791815260200190565b60405180910390a3505050565b61012c60085442610f159190611397565b1015610f1d57565b3060009081526020819052604081205490819003610f385750565b6040805160028082526060820183526000926020830190803683370190505090507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600081518110610f8d57610f8d611425565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610fc157610fc1611425565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f9061101d90670de0b6b3a7640000908690600401611480565b600060405180830381865afa15801561103a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261106291908101906114a1565b60018151811061107457611074611425565b602002602001015190508083111561108a578092505b308260008151811061109e5761109e611425565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2826001815181106110f2576110f2611425565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac9479061114a90869060009087903090429060040161156e565b600060405180830381600087803b15801561116457600080fd5b505af1158015611178573d6000803e3d6000fd5b50479250600091505081156111df576006546040516001600160a01b03909116908390600081818185875af1925050503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b50909150505b5050505050565b602081526000825180602084015260005b8181101561121457602081860181015160408684010152016111f7565b506000604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b038116811461124b57600080fd5b919050565b6000806040838503121561126357600080fd5b61126c83611234565b946020939093013593505050565b60006020828403121561128c57600080fd5b8135801515811461129c57600080fd5b9392505050565b6000806000606084860312156112b857600080fd5b6112c184611234565b92506112cf60208501611234565b929592945050506040919091013590565b6000602082840312156112f257600080fd5b5035919050565b60006020828403121561130b57600080fd5b61129c82611234565b6000806040838503121561132757600080fd5b61133083611234565b915061133e60208401611234565b90509250929050565b600181811c9082168061135b57607f821691505b60208210810361137b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156104a6576104a6611381565b80820281158282048414176104a6576104a6611381565b6000826113de57634e487b7160e01b600052601260045260246000fd5b500490565b6000600182016113f5576113f5611381565b5060010190565b808201808211156104a6576104a6611381565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081518084526020840193506020830160005b828110156114765781516001600160a01b031686526020958601959091019060010161144f565b5093949350505050565b828152604060208201526000611499604083018461143b565b949350505050565b6000602082840312156114b357600080fd5b815167ffffffffffffffff8111156114ca57600080fd5b8201601f810184136114db57600080fd5b805167ffffffffffffffff8111156114f5576114f561140f565b8060051b604051601f19603f830116810181811067ffffffffffffffff821117156115225761152261140f565b60405291825260208184018101929081018784111561154057600080fd5b6020850194505b8385101561156357845180825260209586019590935001611547565b509695505050505050565b85815284602082015260a06040820152600061158d60a083018661143b565b6001600160a01b039490941660608301525060800152939250505056fea26469706673582212206f0aaf5d59f5afad55a93c7a8a2c85cad1ca329413aa3fa81be6a1b7aca3a2c764736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.