Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 1,992 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 24692556 | 2 days ago | IN | 0 ETH | 0.00001923 | ||||
| Transfer | 24692365 | 2 days ago | IN | 0 ETH | 0.00017143 | ||||
| Approve | 24684942 | 3 days ago | IN | 0 ETH | 0.00006287 | ||||
| Transfer | 24676193 | 4 days ago | IN | 0 ETH | 0.00000656 | ||||
| Transfer | 24667953 | 6 days ago | IN | 0 ETH | 0.00000513 | ||||
| Approve | 24665117 | 6 days ago | IN | 0 ETH | 0.00005411 | ||||
| Approve | 24665116 | 6 days ago | IN | 0 ETH | 0.00009444 | ||||
| Transfer | 24644486 | 9 days ago | IN | 0 ETH | 0.00004109 | ||||
| Approve | 24641507 | 9 days ago | IN | 0 ETH | 0.00010484 | ||||
| Transfer | 24622768 | 12 days ago | IN | 0 ETH | 0.00001018 | ||||
| Approve | 24571066 | 19 days ago | IN | 0 ETH | 0.00008432 | ||||
| Transfer | 24571063 | 19 days ago | IN | 0 ETH | 0.00006255 | ||||
| Transfer | 24570949 | 19 days ago | IN | 0 ETH | 0.00004132 | ||||
| Transfer | 24570764 | 19 days ago | IN | 0 ETH | 0.00022419 | ||||
| Approve | 24569103 | 19 days ago | IN | 0 ETH | 0.00009562 | ||||
| Approve | 24567312 | 20 days ago | IN | 0 ETH | 0.00000635 | ||||
| Approve | 24553982 | 21 days ago | IN | 0 ETH | 0.00005363 | ||||
| Approve | 24551376 | 22 days ago | IN | 0 ETH | 0.00001113 | ||||
| Approve | 24534878 | 24 days ago | IN | 0 ETH | 0.00005738 | ||||
| Transfer | 24534874 | 24 days ago | IN | 0 ETH | 0.00003464 | ||||
| Approve | 24534557 | 24 days ago | IN | 0 ETH | 0.00000931 | ||||
| Transfer | 24531141 | 25 days ago | IN | 0 ETH | 0.00000457 | ||||
| Transfer | 24505469 | 28 days ago | IN | 0 ETH | 0.00000279 | ||||
| Transfer | 24505309 | 28 days ago | IN | 0 ETH | 0.00014617 | ||||
| Transfer | 24499657 | 29 days ago | IN | 0 ETH | 0.00000849 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 22911104 | 251 days ago | 0.88027549 ETH | ||||
| Transfer | 22911104 | 251 days ago | 0.88027549 ETH | ||||
| Transfer | 22852763 | 259 days ago | 1.13180067 ETH | ||||
| Transfer | 22852763 | 259 days ago | 1.13180067 ETH | ||||
| Transfer | 22747286 | 274 days ago | 1.07918371 ETH | ||||
| Transfer | 22747286 | 274 days ago | 1.07918371 ETH | ||||
| Transfer | 22595077 | 295 days ago | 1.78054645 ETH | ||||
| Transfer | 22595077 | 295 days ago | 1.78054645 ETH | ||||
| Transfer | 22560121 | 300 days ago | 1.74537182 ETH | ||||
| Transfer | 22560121 | 300 days ago | 1.74537182 ETH | ||||
| Transfer | 22451792 | 315 days ago | 2.33661664 ETH | ||||
| Transfer | 22451792 | 315 days ago | 2.33365007 ETH | ||||
| Transfer | 22371039 | 327 days ago | 2.69456839 ETH | ||||
| Transfer | 22371039 | 327 days ago | 2.69456839 ETH | ||||
| Transfer | 22334990 | 332 days ago | 2.20143075 ETH | ||||
| Transfer | 22334990 | 332 days ago | 2.20143075 ETH | ||||
| Transfer | 22301940 | 336 days ago | 1.62590009 ETH | ||||
| Transfer | 22301940 | 336 days ago | 1.62590009 ETH | ||||
| Transfer | 22247166 | 344 days ago | 1.4431669 ETH | ||||
| Transfer | 22247166 | 344 days ago | 1.4431669 ETH | ||||
| Transfer | 22226383 | 347 days ago | 1.07614864 ETH | ||||
| Transfer | 22226383 | 347 days ago | 1.07614864 ETH | ||||
| Transfer | 22161556 | 356 days ago | 0.8073987 ETH | ||||
| Transfer | 22161556 | 356 days ago | 0.8073987 ETH | ||||
| Transfer | 22081028 | 367 days ago | 0.82685014 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Contract
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-12-17
*/
/**
// https://shiryo.com
// https://x.com/Shiryo_Official
// https://t.me/Shiryo_Official
*/
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.17;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IUniswapV2Pair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(
address owner,
address spender
) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(
address from,
address to,
uint value
) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(
address owner,
address spender,
uint value,
uint deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(
address indexed sender,
uint amount0,
uint amount1,
address indexed to
);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(
uint amount0Out,
uint amount1Out,
address to,
bytes calldata data
) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
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;
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) 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 `amount` 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 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @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
);
}
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);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
using SafeMath for uint256;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these 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 override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override 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 value {ERC20} uses, unless this function is
* 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 override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(
sender,
_msgSender(),
_allowances[sender][_msgSender()].sub(
amount,
"ERC20: transfer amount exceeds allowance"
)
);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].add(addedValue)
);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender].sub(
subtractedValue,
"ERC20: decreased allowance below zero"
)
);
return true;
}
/**
* @dev Moves tokens `amount` from `sender` to `recipient`.
*
* This is internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `sender` cannot be the zero address.
* - `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
*/
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(
amount,
"ERC20: transfer amount exceeds balance"
);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
_balances[account] = _balances[account].sub(
amount,
"ERC20: burn amount exceeds balance"
);
_totalSupply = _totalSupply.sub(amount);
emit Transfer(account, address(0), amount);
}
/**
* @dev Sets `amount` 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.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = 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 {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
/**
* @dev Multiplies two int256 variables and fails on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
// Detect overflow when multiplying MIN_INT256 with -1
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
/**
* @dev Division of two int256 variables and fails on overflow.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
// Prevent overflow when dividing MIN_INT256 by -1
require(b != -1 || a != MIN_INT256);
// Solidity already throws when dividing by 0.
return a / b;
}
/**
* @dev Subtracts two int256 variables and fails on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
/**
* @dev Adds two int256 variables and fails on overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
/**
* @dev Converts to absolute value, and fails on overflow.
*/
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
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);
}
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;
}
contract Contract is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public immutable uniswapV2Pair;
bool private swapping;
address public feeWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
// Anti-bot and anti-whale mappings and variables
mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
// Seller Map
mapping(address => uint256) private _holderFirstBuyTimestamp;
// Blacklist Map
mapping(address => bool) private _blacklist;
bool public transferDelayEnabled = true;
uint256 public buyTotalFees;
uint256 public sellTotalFees;
// block number of opened trading
uint256 launchedAt;
/******************/
// exclude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping(address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event feeWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
event AutoNukeLP();
event ManualNukeLP();
address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
uint256 slippage = 50;
constructor() ERC20(unicode"Shiryo", unicode"SHIRYO") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);
// #################################################################
feeWallet = address(0xE7bd7Ad246abD89964732A0783bbe1f629f557Ad); // set as marketing wallet
// #################################################################
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
excludeFromMaxTransaction(address(uniswapV2Pair), true);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 totalSupply = 150_000_000 * (10**18);
maxTransactionAmount = (totalSupply * 20) / 1000; // 2% maxtransaction
maxWallet = (totalSupply * 20) / 1000; // 2% maxwallet
swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapwallet
buyTotalFees = 25;
sellTotalFees = 25;
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(0xdead), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, totalSupply);
}
receive() external payable {}
// once enabled, can never be turned off
function enableTrading() external onlyOwner {
tradingActive = true;
swapEnabled = true;
launchedAt = block.number;
}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool) {
limitsInEffect = false;
return true;
}
// disable Transfer delay - cannot be reenabled
function disableTransferDelay() external onlyOwner returns (bool) {
transferDelayEnabled = false;
return true;
}
// change the minimum amount of tokens to sell from fees
function updateSwapTokensAtAmount(
uint256 newAmount
) external onlyOwner returns (bool) {
require(
newAmount >= (totalSupply() * 1) / 100000,
"Swap amount cannot be lower than 0.001% total supply."
);
require(
newAmount <= (totalSupply() * 5) / 1000,
"Swap amount cannot be higher than 0.5% total supply."
);
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 5) / 1000) / 1e18,
"Cannot set maxTransactionAmount lower than 0.5%"
);
maxTransactionAmount = newNum * (10 ** 18);
}
function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 15) / 1000) / 1e18,
"Cannot set maxWallet lower than 1.5%"
);
maxWallet = newNum * (10 ** 18);
}
function excludeFromMaxTransaction(
address updAds,
bool isEx
) public onlyOwner {
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
// only use to disable contract sales if absolutely necessary (emergency use only)
function updateSwapEnabled(bool enabled) external onlyOwner {
swapEnabled = enabled;
}
function updateBuyFees(
uint256 _fee
) external onlyOwner {
buyTotalFees = _fee;
require(buyTotalFees <= 40, "Must keep fees at 40% or less");
}
function updateSellFees(
uint256 _fee
) external onlyOwner {
sellTotalFees = _fee;
require(sellTotalFees <= 40, "Must keep fees at 40% or less");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function blacklistAccount(
address account,
bool isBlacklisted
) public onlyOwner {
_blacklist[account] = isBlacklisted;
}
function setAutomatedMarketMakerPair(
address pair,
bool value
) public onlyOwner {
require(
pair != uniswapV2Pair,
"The pair cannot be removed from automatedMarketMakerPairs"
);
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function updateFeeWallet(
address newFeeWallet
) external onlyOwner {
emit feeWalletUpdated(newFeeWallet, feeWallet);
feeWallet = newFeeWallet;
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
event BoughtEarly(address indexed sniper);
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(
!_blacklist[to] && !_blacklist[from],
"You have been blacklisted from transfering tokens"
);
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsInEffect) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
) {
if (!tradingActive) {
require(
_isExcludedFromFees[from] || _isExcludedFromFees[to],
"Trading is not active."
);
}
// at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
if (transferDelayEnabled) {
if (
to != owner() &&
to != address(uniswapV2Router) &&
to != address(uniswapV2Pair)
) {
require(
_holderLastTransferTimestamp[tx.origin] <
block.number,
"_transfer:: Transfer Delay enabled. Only one purchase per block allowed."
);
_holderLastTransferTimestamp[tx.origin] = block.number;
}
}
//when buy
if (
automatedMarketMakerPairs[from] &&
!_isExcludedMaxTransactionAmount[to]
) {
require(
amount <= maxTransactionAmount,
"Buy transfer amount exceeds the maxTransactionAmount."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] &&
!_isExcludedMaxTransactionAmount[from]
) {
require(
amount <= maxTransactionAmount,
"Sell transfer amount exceeds the maxTransactionAmount."
);
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
}
}
// anti bot logic
if (
block.number <= (launchedAt + 0) &&
to != uniswapV2Pair &&
to != address(router)
) {
_blacklist[to] = true;
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
// only take fees on buys/sells, do not take on wallet transfers
uint256 fee;
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
fee = amount.mul(sellTotalFees).div(100);
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fee = amount.mul(buyTotalFees).div(100);
}
if (fee > 0) {
super._transfer(from, address(this), fee);
amount -= fee;
}
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
// Get the expected amount of ETH out
uint256[] memory amountsOut = uniswapV2Router.getAmountsOut(tokenAmount, path);
uint256 _slippage = amountsOut[1] * slippage / 100;
uint256 amountOutMin = amountsOut[1] - _slippage;
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
amountOutMin, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
bool success;
// Prevent swapping too many tokens in one TX
if (contractBalance > swapTokensAtAmount * 20) {
contractBalance = swapTokensAtAmount * 20;
}
if(contractBalance > 0){
swapTokensForEth(contractBalance);
}
if(address(this).balance > 0) {
(success, ) = address(feeWallet).call{
value: address(this).balance
}("");
require(success, "Transfer to fee wallet failed.");
}
}
function setSlippage (uint256 _s) external onlyOwner {
require(_s <= 50, "Slippage must be less than 50%");
slippage = _s;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_s","type":"uint256"}],"name":"setSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newFeeWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c0604052600a805462ffffff19166001908117909155600e805460ff191690911790556032601555348015610033575f80fd5b506040518060400160405280600681526020016553686972796f60d01b8152506040518060400160405280600681526020016553484952594f60d01b815250816003908161008191906106d4565b50600461008e82826106d4565b5050505f6100a061038360201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b03191673e7bd7ad246abd89964732a0783bbe1f629f557ad179055737a250d5630b4cf539739df2c5dacb4c659f2488d610133816001610387565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561017b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061019f919061078e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061020e919061078e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061027c919061078e565b6001600160a01b031660a0819052610295906001610387565b60a0516102a39060016103fd565b6a7c13bc4b2c133c560000006103e86102bd8260146107c8565b6102c791906107df565b6007556103e86102d88260146107c8565b6102e291906107df565b6009556127106102f38260056107c8565b6102fd91906107df565b6008556019600f81905560105561032661031f6005546001600160a01b031690565b6001610450565b610331306001610450565b61033e61dead6001610450565b61035a6103536005546001600160a01b031690565b6001610387565b610365306001610387565b61037261dead6001610387565b61037c33826104f5565b5050610811565b3390565b6005546001600160a01b031633146103d35760405162461bcd60e51b815260206004820181905260248201525f805160206130f283398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260146020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146104975760405162461bcd60e51b815260206004820181905260248201525f805160206130f283398151915260448201526064016103ca565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b03821661054b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016103ca565b60025461055890826105d6565b6002556001600160a01b0382165f9081526020819052604090205461057d90826105d6565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b5f806105e283856107fe565b9050838110156106345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103ca565b90505b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061066557607f821691505b60208210810361068357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156105d157805f5260205f20601f840160051c810160208510156106ae5750805b601f840160051c820191505b818110156106cd575f81556001016106ba565b5050505050565b81516001600160401b038111156106ed576106ed61063d565b610701816106fb8454610651565b84610689565b6020601f821160018114610733575f831561071c5750848201515b5f19600385901b1c1916600184901b1784556106cd565b5f84815260208120601f198516915b828110156107625787850151825560209485019460019092019101610742565b508482101561077f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f6020828403121561079e575f80fd5b81516001600160a01b0381168114610634575f80fd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610637576106376107b4565b5f826107f957634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610637576106376107b4565b60805160a05161288861086a5f395f818161041201528181610d8d0152818161170d0152611a6601525f8181610310015281816116cf015281816120eb015281816121a30152818161228301526122bf01526128885ff3fe60806040526004361061026d575f3560e01c80638da5cb5b1161014a578063c8c8ebe4116100be578063eba4c33311610078578063eba4c3331461078b578063f0fa55a9146107aa578063f25f4b56146107c9578063f2fde38b146107e8578063f887ea4014610807578063f8b45b051461082e575f80fd5b8063c8c8ebe4146106d5578063d257b34f146106ea578063d85ba06314610709578063dd62ed3e1461071e578063e2f4560514610762578063e884f26014610777575f80fd5b8063a9059cbb1161010f578063a9059cbb14610613578063b62496f514610632578063bbc0c74214610660578063c02466681461067e578063c18bc1951461069d578063c876d0b9146106bc575f80fd5b80638da5cb5b14610585578063924de9b7146105a257806395d89b41146105c15780639a7a23d6146105d5578063a457c2d7146105f4575f80fd5b80634a62bb65116101e157806370a08231116101a657806370a08231146104d7578063715018a61461050b57806371fc46881461051f578063751039fc1461053e5780637571336a146105525780638a8c523c14610571575f80fd5b80634a62bb65146104345780634fbee1931461044d57806366718524146104845780636a486a8e146104a35780636ddd1713146104b8575f80fd5b8063203e727e11610232578063203e727e1461036857806323b872dd146103895780632d5a5d34146103a8578063313ce567146103c757806339509351146103e257806349bd5a5e14610401575f80fd5b806306fdde0314610278578063095ea7b3146102a257806310d5de53146102d15780631694505e146102ff57806318160ddd1461034a575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610843565b604051610299919061235c565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc3660046123a5565b6108d3565b6040519015158152602001610299565b3480156102dc575f80fd5b506102c16102eb3660046123cf565b60136020525f908152604090205460ff1681565b34801561030a575f80fd5b506103327f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610299565b348015610355575f80fd5b506002545b604051908152602001610299565b348015610373575f80fd5b506103876103823660046123ea565b6108e9565b005b348015610394575f80fd5b506102c16103a3366004612401565b6109cf565b3480156103b3575f80fd5b506103876103c236600461244e565b610a36565b3480156103d2575f80fd5b5060405160128152602001610299565b3480156103ed575f80fd5b506102c16103fc3660046123a5565b610a8a565b34801561040c575f80fd5b506103327f000000000000000000000000000000000000000000000000000000000000000081565b34801561043f575f80fd5b50600a546102c19060ff1681565b348015610458575f80fd5b506102c16104673660046123cf565b6001600160a01b03165f9081526012602052604090205460ff1690565b34801561048f575f80fd5b5061038761049e3660046123cf565b610abf565b3480156104ae575f80fd5b5061035a60105481565b3480156104c3575f80fd5b50600a546102c19062010000900460ff1681565b3480156104e2575f80fd5b5061035a6104f13660046123cf565b6001600160a01b03165f9081526020819052604090205490565b348015610516575f80fd5b50610387610b45565b34801561052a575f80fd5b506103876105393660046123ea565b610bb8565b348015610549575f80fd5b506102c1610c3b565b34801561055d575f80fd5b5061038761056c36600461244e565b610c77565b34801561057c575f80fd5b50610387610ccb565b348015610590575f80fd5b506005546001600160a01b0316610332565b3480156105ad575f80fd5b506103876105bc366004612481565b610d0c565b3480156105cc575f80fd5b5061028c610d52565b3480156105e0575f80fd5b506103876105ef36600461244e565b610d61565b3480156105ff575f80fd5b506102c161060e3660046123a5565b610e40565b34801561061e575f80fd5b506102c161062d3660046123a5565b610e8d565b34801561063d575f80fd5b506102c161064c3660046123cf565b60146020525f908152604090205460ff1681565b34801561066b575f80fd5b50600a546102c190610100900460ff1681565b348015610689575f80fd5b5061038761069836600461244e565b610e99565b3480156106a8575f80fd5b506103876106b73660046123ea565b610f21565b3480156106c7575f80fd5b50600e546102c19060ff1681565b3480156106e0575f80fd5b5061035a60075481565b3480156106f5575f80fd5b506102c16107043660046123ea565b610ff2565b348015610714575f80fd5b5061035a600f5481565b348015610729575f80fd5b5061035a61073836600461249a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561076d575f80fd5b5061035a60085481565b348015610782575f80fd5b506102c1611148565b348015610796575f80fd5b506103876107a53660046123ea565b611184565b3480156107b5575f80fd5b506103876107c43660046123ea565b611204565b3480156107d4575f80fd5b50600654610332906001600160a01b031681565b3480156107f3575f80fd5b506103876108023660046123cf565b611284565b348015610812575f80fd5b50610332737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610839575f80fd5b5061035a60095481565b606060038054610852906124d1565b80601f016020809104026020016040519081016040528092919081815260200182805461087e906124d1565b80156108c95780601f106108a0576101008083540402835291602001916108c9565b820191905f5260205f20905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b5f6108df33848461136e565b5060015b92915050565b6005546001600160a01b0316331461091c5760405162461bcd60e51b815260040161091390612509565b60405180910390fd5b670de0b6b3a76400006103e861093160025490565b61093c906005612552565b6109469190612569565b6109509190612569565b8110156109b75760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610913565b6109c981670de0b6b3a7640000612552565b60075550565b5f6109db848484611492565b610a2c8433610a2785604051806060016040528060288152602001612806602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611cf2565b61136e565b5060019392505050565b6005546001600160a01b03163314610a605760405162461bcd60e51b815260040161091390612509565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108df918590610a279086611d2a565b6005546001600160a01b03163314610ae95760405162461bcd60e51b815260040161091390612509565b6006546040516001600160a01b03918216918316907f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce8664928905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b6f5760405162461bcd60e51b815260040161091390612509565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610be25760405162461bcd60e51b815260040161091390612509565b600f8190556028811115610c385760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610913565b50565b6005545f906001600160a01b03163314610c675760405162461bcd60e51b815260040161091390612509565b50600a805460ff19169055600190565b6005546001600160a01b03163314610ca15760405162461bcd60e51b815260040161091390612509565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cf55760405162461bcd60e51b815260040161091390612509565b600a805462ffff0019166201010017905543601155565b6005546001600160a01b03163314610d365760405162461bcd60e51b815260040161091390612509565b600a8054911515620100000262ff000019909216919091179055565b606060048054610852906124d1565b6005546001600160a01b03163314610d8b5760405162461bcd60e51b815260040161091390612509565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610e325760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610913565b610e3c8282611d8f565b5050565b5f6108df3384610a278560405180606001604052806025815260200161282e60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611cf2565b5f6108df338484611492565b6005546001600160a01b03163314610ec35760405162461bcd60e51b815260040161091390612509565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610f4b5760405162461bcd60e51b815260040161091390612509565b670de0b6b3a76400006103e8610f6060025490565b610f6b90600f612552565b610f759190612569565b610f7f9190612569565b811015610fda5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610913565b610fec81670de0b6b3a7640000612552565b60095550565b6005545f906001600160a01b0316331461101e5760405162461bcd60e51b815260040161091390612509565b620186a061102b60025490565b611036906001612552565b6110409190612569565b8210156110ad5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610913565b6103e86110b960025490565b6110c4906005612552565b6110ce9190612569565b82111561113a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610913565b50600881905560015b919050565b6005545f906001600160a01b031633146111745760405162461bcd60e51b815260040161091390612509565b50600e805460ff19169055600190565b6005546001600160a01b031633146111ae5760405162461bcd60e51b815260040161091390612509565b60108190556028811115610c385760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610913565b6005546001600160a01b0316331461122e5760405162461bcd60e51b815260040161091390612509565b603281111561127f5760405162461bcd60e51b815260206004820152601e60248201527f536c697070616765206d757374206265206c657373207468616e2035302500006044820152606401610913565b601555565b6005546001600160a01b031633146112ae5760405162461bcd60e51b815260040161091390612509565b6001600160a01b0381166113135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610913565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166113d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610913565b6001600160a01b0382166114315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610913565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b815260040161091390612588565b6001600160a01b0382166114de5760405162461bcd60e51b8152600401610913906125cd565b6001600160a01b0382165f908152600d602052604090205460ff1615801561151e57506001600160a01b0383165f908152600d602052604090205460ff16155b6115845760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610913565b805f0361159b5761159683835f611de2565b505050565b600a5460ff1615611a4d576005546001600160a01b038481169116148015906115d257506005546001600160a01b03838116911614155b80156115e657506001600160a01b03821615155b80156115fd57506001600160a01b03821661dead14155b80156116135750600554600160a01b900460ff16155b15611a4d57600a54610100900460ff166116a9576001600160a01b0383165f9081526012602052604090205460ff168061166457506001600160a01b0382165f9081526012602052604090205460ff165b6116a95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610913565b600e5460ff16156117ee576005546001600160a01b0383811691161480159061170457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561174257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156117ee57325f908152600b602052604090205443116117dc5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610913565b325f908152600b602052604090204390555b6001600160a01b0383165f9081526014602052604090205460ff16801561182d57506001600160a01b0382165f9081526013602052604090205460ff16155b15611910576007548111156118a25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610913565b6009546001600160a01b0383165f908152602081905260409020546118c79083612610565b111561190b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610913565b611a4d565b6001600160a01b0382165f9081526014602052604090205460ff16801561194f57506001600160a01b0383165f9081526013602052604090205460ff16155b156119c55760075481111561190b5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610913565b6001600160a01b0382165f9081526013602052604090205460ff16611a4d576009546001600160a01b0383165f90815260208190526040902054611a099083612610565b1115611a4d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610913565b601154611a5a905f612610565b4311158015611a9b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611ac457506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611aec576001600160a01b0382165f908152600d60205260409020805460ff191660011790555b305f9081526020819052604090205460085481108015908190611b175750600a5462010000900460ff165b8015611b2d5750600554600160a01b900460ff16155b8015611b5157506001600160a01b0385165f9081526014602052604090205460ff16155b8015611b7557506001600160a01b0385165f9081526012602052604090205460ff16155b8015611b9957506001600160a01b0384165f9081526012602052604090205460ff16155b15611bc7576005805460ff60a01b1916600160a01b179055611bb9611ee8565b6005805460ff60a01b191690555b6005546001600160a01b0386165f9081526012602052604090205460ff600160a01b909204821615911680611c1357506001600160a01b0385165f9081526012602052604090205460ff165b15611c1b57505f5b5f8115611cde576001600160a01b0386165f9081526014602052604090205460ff168015611c4a57505f601054115b15611c7657611c6f6064611c6960105488611fd790919063ffffffff16565b90612055565b9050611cc0565b6001600160a01b0387165f9081526014602052604090205460ff168015611c9e57505f600f54115b15611cc057611cbd6064611c69600f5488611fd790919063ffffffff16565b90505b8015611cde57611cd1873083611de2565b611cdb8186612623565b94505b611ce9878787611de2565b50505050505050565b5f8184841115611d155760405162461bcd60e51b8152600401610913919061235c565b505f611d218486612623565b95945050505050565b5f80611d368385612610565b905083811015611d885760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610913565b9392505050565b6001600160a01b0382165f81815260146020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611e085760405162461bcd60e51b815260040161091390612588565b6001600160a01b038216611e2e5760405162461bcd60e51b8152600401610913906125cd565b611e6a816040518060600160405280602681526020016127e0602691396001600160a01b0386165f908152602081905260409020549190611cf2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611e989082611d2a565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611485565b305f90815260208190526040812054600854909190611f08906014612552565b821115611f2057600854611f1d906014612552565b91505b8115611f2f57611f2f82612096565b4715610e3c576006546040516001600160a01b039091169047905f81818185875af1925050503d805f8114611f7f576040519150601f19603f3d011682016040523d82523d5f602084013e611f84565b606091505b50508091505080610e3c5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f206665652077616c6c6574206661696c65642e00006044820152606401610913565b5f825f03611fe657505f6108e3565b5f611ff18385612552565b905082611ffe8583612569565b14611d885760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610913565b5f611d8883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612330565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106120c9576120c961264a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612145573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612169919061265e565b8160018151811061217c5761217c61264a565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81525f917f0000000000000000000000000000000000000000000000000000000000000000169063d06ca61f906121da90869086906004016126bc565b5f60405180830381865afa1580156121f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261221b91908101906126dc565b90505f6064601554836001815181106122365761223661264a565b60200260200101516122489190612552565b6122529190612569565b90505f81836001815181106122695761226961264a565b602002602001015161227b9190612623565b90506122a8307f00000000000000000000000000000000000000000000000000000000000000008761136e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122fc90889085908990309042906004016127a4565b5f604051808303815f87803b158015612313575f80fd5b505af1158015612325573d5f803e3d5ffd5b505050505050505050565b5f81836123505760405162461bcd60e51b8152600401610913919061235c565b505f611d218486612569565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610c38575f80fd5b5f80604083850312156123b6575f80fd5b82356123c181612391565b946020939093013593505050565b5f602082840312156123df575f80fd5b8135611d8881612391565b5f602082840312156123fa575f80fd5b5035919050565b5f805f60608486031215612413575f80fd5b833561241e81612391565b9250602084013561242e81612391565b929592945050506040919091013590565b80358015158114611143575f80fd5b5f806040838503121561245f575f80fd5b823561246a81612391565b91506124786020840161243f565b90509250929050565b5f60208284031215612491575f80fd5b611d888261243f565b5f80604083850312156124ab575f80fd5b82356124b681612391565b915060208301356124c681612391565b809150509250929050565b600181811c908216806124e557607f821691505b60208210810361250357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108e3576108e361253e565b5f8261258357634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808201808211156108e3576108e361253e565b818103818111156108e3576108e361253e565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561266e575f80fd5b8151611d8881612391565b5f8151808452602084019350602083015f5b828110156126b25781516001600160a01b031686526020958601959091019060010161268b565b5093949350505050565b828152604060208201525f6126d46040830184612679565b949350505050565b5f602082840312156126ec575f80fd5b815167ffffffffffffffff811115612702575f80fd5b8201601f81018413612712575f80fd5b805167ffffffffffffffff81111561272c5761272c612636565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561275957612759612636565b604052918252602081840181019290810187841115612776575f80fd5b6020850194505b838510156127995784518082526020958601959093500161277d565b509695505050505050565b85815284602082015260a060408201525f6127c260a0830186612679565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3a50e912269664f8924f28b50fd6bb677d659204a30ce2ae8248e62d6802bf164736f6c634300081a00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x60806040526004361061026d575f3560e01c80638da5cb5b1161014a578063c8c8ebe4116100be578063eba4c33311610078578063eba4c3331461078b578063f0fa55a9146107aa578063f25f4b56146107c9578063f2fde38b146107e8578063f887ea4014610807578063f8b45b051461082e575f80fd5b8063c8c8ebe4146106d5578063d257b34f146106ea578063d85ba06314610709578063dd62ed3e1461071e578063e2f4560514610762578063e884f26014610777575f80fd5b8063a9059cbb1161010f578063a9059cbb14610613578063b62496f514610632578063bbc0c74214610660578063c02466681461067e578063c18bc1951461069d578063c876d0b9146106bc575f80fd5b80638da5cb5b14610585578063924de9b7146105a257806395d89b41146105c15780639a7a23d6146105d5578063a457c2d7146105f4575f80fd5b80634a62bb65116101e157806370a08231116101a657806370a08231146104d7578063715018a61461050b57806371fc46881461051f578063751039fc1461053e5780637571336a146105525780638a8c523c14610571575f80fd5b80634a62bb65146104345780634fbee1931461044d57806366718524146104845780636a486a8e146104a35780636ddd1713146104b8575f80fd5b8063203e727e11610232578063203e727e1461036857806323b872dd146103895780632d5a5d34146103a8578063313ce567146103c757806339509351146103e257806349bd5a5e14610401575f80fd5b806306fdde0314610278578063095ea7b3146102a257806310d5de53146102d15780631694505e146102ff57806318160ddd1461034a575f80fd5b3661027457005b5f80fd5b348015610283575f80fd5b5061028c610843565b604051610299919061235c565b60405180910390f35b3480156102ad575f80fd5b506102c16102bc3660046123a5565b6108d3565b6040519015158152602001610299565b3480156102dc575f80fd5b506102c16102eb3660046123cf565b60136020525f908152604090205460ff1681565b34801561030a575f80fd5b506103327f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610299565b348015610355575f80fd5b506002545b604051908152602001610299565b348015610373575f80fd5b506103876103823660046123ea565b6108e9565b005b348015610394575f80fd5b506102c16103a3366004612401565b6109cf565b3480156103b3575f80fd5b506103876103c236600461244e565b610a36565b3480156103d2575f80fd5b5060405160128152602001610299565b3480156103ed575f80fd5b506102c16103fc3660046123a5565b610a8a565b34801561040c575f80fd5b506103327f0000000000000000000000007b5cf553b5150261dbda2fb6a918da41a1eb380981565b34801561043f575f80fd5b50600a546102c19060ff1681565b348015610458575f80fd5b506102c16104673660046123cf565b6001600160a01b03165f9081526012602052604090205460ff1690565b34801561048f575f80fd5b5061038761049e3660046123cf565b610abf565b3480156104ae575f80fd5b5061035a60105481565b3480156104c3575f80fd5b50600a546102c19062010000900460ff1681565b3480156104e2575f80fd5b5061035a6104f13660046123cf565b6001600160a01b03165f9081526020819052604090205490565b348015610516575f80fd5b50610387610b45565b34801561052a575f80fd5b506103876105393660046123ea565b610bb8565b348015610549575f80fd5b506102c1610c3b565b34801561055d575f80fd5b5061038761056c36600461244e565b610c77565b34801561057c575f80fd5b50610387610ccb565b348015610590575f80fd5b506005546001600160a01b0316610332565b3480156105ad575f80fd5b506103876105bc366004612481565b610d0c565b3480156105cc575f80fd5b5061028c610d52565b3480156105e0575f80fd5b506103876105ef36600461244e565b610d61565b3480156105ff575f80fd5b506102c161060e3660046123a5565b610e40565b34801561061e575f80fd5b506102c161062d3660046123a5565b610e8d565b34801561063d575f80fd5b506102c161064c3660046123cf565b60146020525f908152604090205460ff1681565b34801561066b575f80fd5b50600a546102c190610100900460ff1681565b348015610689575f80fd5b5061038761069836600461244e565b610e99565b3480156106a8575f80fd5b506103876106b73660046123ea565b610f21565b3480156106c7575f80fd5b50600e546102c19060ff1681565b3480156106e0575f80fd5b5061035a60075481565b3480156106f5575f80fd5b506102c16107043660046123ea565b610ff2565b348015610714575f80fd5b5061035a600f5481565b348015610729575f80fd5b5061035a61073836600461249a565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561076d575f80fd5b5061035a60085481565b348015610782575f80fd5b506102c1611148565b348015610796575f80fd5b506103876107a53660046123ea565b611184565b3480156107b5575f80fd5b506103876107c43660046123ea565b611204565b3480156107d4575f80fd5b50600654610332906001600160a01b031681565b3480156107f3575f80fd5b506103876108023660046123cf565b611284565b348015610812575f80fd5b50610332737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610839575f80fd5b5061035a60095481565b606060038054610852906124d1565b80601f016020809104026020016040519081016040528092919081815260200182805461087e906124d1565b80156108c95780601f106108a0576101008083540402835291602001916108c9565b820191905f5260205f20905b8154815290600101906020018083116108ac57829003601f168201915b5050505050905090565b5f6108df33848461136e565b5060015b92915050565b6005546001600160a01b0316331461091c5760405162461bcd60e51b815260040161091390612509565b60405180910390fd5b670de0b6b3a76400006103e861093160025490565b61093c906005612552565b6109469190612569565b6109509190612569565b8110156109b75760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610913565b6109c981670de0b6b3a7640000612552565b60075550565b5f6109db848484611492565b610a2c8433610a2785604051806060016040528060288152602001612806602891396001600160a01b038a165f9081526001602090815260408083203384529091529020549190611cf2565b61136e565b5060019392505050565b6005546001600160a01b03163314610a605760405162461bcd60e51b815260040161091390612509565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916108df918590610a279086611d2a565b6005546001600160a01b03163314610ae95760405162461bcd60e51b815260040161091390612509565b6006546040516001600160a01b03918216918316907f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce8664928905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610b6f5760405162461bcd60e51b815260040161091390612509565b6005546040515f916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610be25760405162461bcd60e51b815260040161091390612509565b600f8190556028811115610c385760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610913565b50565b6005545f906001600160a01b03163314610c675760405162461bcd60e51b815260040161091390612509565b50600a805460ff19169055600190565b6005546001600160a01b03163314610ca15760405162461bcd60e51b815260040161091390612509565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610cf55760405162461bcd60e51b815260040161091390612509565b600a805462ffff0019166201010017905543601155565b6005546001600160a01b03163314610d365760405162461bcd60e51b815260040161091390612509565b600a8054911515620100000262ff000019909216919091179055565b606060048054610852906124d1565b6005546001600160a01b03163314610d8b5760405162461bcd60e51b815260040161091390612509565b7f0000000000000000000000007b5cf553b5150261dbda2fb6a918da41a1eb38096001600160a01b0316826001600160a01b031603610e325760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610913565b610e3c8282611d8f565b5050565b5f6108df3384610a278560405180606001604052806025815260200161282e60259139335f9081526001602090815260408083206001600160a01b038d1684529091529020549190611cf2565b5f6108df338484611492565b6005546001600160a01b03163314610ec35760405162461bcd60e51b815260040161091390612509565b6001600160a01b0382165f81815260126020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03163314610f4b5760405162461bcd60e51b815260040161091390612509565b670de0b6b3a76400006103e8610f6060025490565b610f6b90600f612552565b610f759190612569565b610f7f9190612569565b811015610fda5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610913565b610fec81670de0b6b3a7640000612552565b60095550565b6005545f906001600160a01b0316331461101e5760405162461bcd60e51b815260040161091390612509565b620186a061102b60025490565b611036906001612552565b6110409190612569565b8210156110ad5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610913565b6103e86110b960025490565b6110c4906005612552565b6110ce9190612569565b82111561113a5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610913565b50600881905560015b919050565b6005545f906001600160a01b031633146111745760405162461bcd60e51b815260040161091390612509565b50600e805460ff19169055600190565b6005546001600160a01b031633146111ae5760405162461bcd60e51b815260040161091390612509565b60108190556028811115610c385760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420343025206f72206c6573730000006044820152606401610913565b6005546001600160a01b0316331461122e5760405162461bcd60e51b815260040161091390612509565b603281111561127f5760405162461bcd60e51b815260206004820152601e60248201527f536c697070616765206d757374206265206c657373207468616e2035302500006044820152606401610913565b601555565b6005546001600160a01b031633146112ae5760405162461bcd60e51b815260040161091390612509565b6001600160a01b0381166113135760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610913565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166113d05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610913565b6001600160a01b0382166114315760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610913565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166114b85760405162461bcd60e51b815260040161091390612588565b6001600160a01b0382166114de5760405162461bcd60e51b8152600401610913906125cd565b6001600160a01b0382165f908152600d602052604090205460ff1615801561151e57506001600160a01b0383165f908152600d602052604090205460ff16155b6115845760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610913565b805f0361159b5761159683835f611de2565b505050565b600a5460ff1615611a4d576005546001600160a01b038481169116148015906115d257506005546001600160a01b03838116911614155b80156115e657506001600160a01b03821615155b80156115fd57506001600160a01b03821661dead14155b80156116135750600554600160a01b900460ff16155b15611a4d57600a54610100900460ff166116a9576001600160a01b0383165f9081526012602052604090205460ff168061166457506001600160a01b0382165f9081526012602052604090205460ff165b6116a95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610913565b600e5460ff16156117ee576005546001600160a01b0383811691161480159061170457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561174257507f0000000000000000000000007b5cf553b5150261dbda2fb6a918da41a1eb38096001600160a01b0316826001600160a01b031614155b156117ee57325f908152600b602052604090205443116117dc5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610913565b325f908152600b602052604090204390555b6001600160a01b0383165f9081526014602052604090205460ff16801561182d57506001600160a01b0382165f9081526013602052604090205460ff16155b15611910576007548111156118a25760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610913565b6009546001600160a01b0383165f908152602081905260409020546118c79083612610565b111561190b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610913565b611a4d565b6001600160a01b0382165f9081526014602052604090205460ff16801561194f57506001600160a01b0383165f9081526013602052604090205460ff16155b156119c55760075481111561190b5760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610913565b6001600160a01b0382165f9081526013602052604090205460ff16611a4d576009546001600160a01b0383165f90815260208190526040902054611a099083612610565b1115611a4d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610913565b601154611a5a905f612610565b4311158015611a9b57507f0000000000000000000000007b5cf553b5150261dbda2fb6a918da41a1eb38096001600160a01b0316826001600160a01b031614155b8015611ac457506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15611aec576001600160a01b0382165f908152600d60205260409020805460ff191660011790555b305f9081526020819052604090205460085481108015908190611b175750600a5462010000900460ff165b8015611b2d5750600554600160a01b900460ff16155b8015611b5157506001600160a01b0385165f9081526014602052604090205460ff16155b8015611b7557506001600160a01b0385165f9081526012602052604090205460ff16155b8015611b9957506001600160a01b0384165f9081526012602052604090205460ff16155b15611bc7576005805460ff60a01b1916600160a01b179055611bb9611ee8565b6005805460ff60a01b191690555b6005546001600160a01b0386165f9081526012602052604090205460ff600160a01b909204821615911680611c1357506001600160a01b0385165f9081526012602052604090205460ff165b15611c1b57505f5b5f8115611cde576001600160a01b0386165f9081526014602052604090205460ff168015611c4a57505f601054115b15611c7657611c6f6064611c6960105488611fd790919063ffffffff16565b90612055565b9050611cc0565b6001600160a01b0387165f9081526014602052604090205460ff168015611c9e57505f600f54115b15611cc057611cbd6064611c69600f5488611fd790919063ffffffff16565b90505b8015611cde57611cd1873083611de2565b611cdb8186612623565b94505b611ce9878787611de2565b50505050505050565b5f8184841115611d155760405162461bcd60e51b8152600401610913919061235c565b505f611d218486612623565b95945050505050565b5f80611d368385612610565b905083811015611d885760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610913565b9392505050565b6001600160a01b0382165f81815260146020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611e085760405162461bcd60e51b815260040161091390612588565b6001600160a01b038216611e2e5760405162461bcd60e51b8152600401610913906125cd565b611e6a816040518060600160405280602681526020016127e0602691396001600160a01b0386165f908152602081905260409020549190611cf2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611e989082611d2a565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611485565b305f90815260208190526040812054600854909190611f08906014612552565b821115611f2057600854611f1d906014612552565b91505b8115611f2f57611f2f82612096565b4715610e3c576006546040516001600160a01b039091169047905f81818185875af1925050503d805f8114611f7f576040519150601f19603f3d011682016040523d82523d5f602084013e611f84565b606091505b50508091505080610e3c5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f206665652077616c6c6574206661696c65642e00006044820152606401610913565b5f825f03611fe657505f6108e3565b5f611ff18385612552565b905082611ffe8583612569565b14611d885760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610913565b5f611d8883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612330565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106120c9576120c961264a565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612145573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612169919061265e565b8160018151811061217c5761217c61264a565b6001600160a01b03928316602091820292909201015260405163d06ca61f60e01b81525f917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063d06ca61f906121da90869086906004016126bc565b5f60405180830381865afa1580156121f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261221b91908101906126dc565b90505f6064601554836001815181106122365761223661264a565b60200260200101516122489190612552565b6122529190612569565b90505f81836001815181106122695761226961264a565b602002602001015161227b9190612623565b90506122a8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8761136e565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122fc90889085908990309042906004016127a4565b5f604051808303815f87803b158015612313575f80fd5b505af1158015612325573d5f803e3d5ffd5b505050505050505050565b5f81836123505760405162461bcd60e51b8152600401610913919061235c565b505f611d218486612569565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610c38575f80fd5b5f80604083850312156123b6575f80fd5b82356123c181612391565b946020939093013593505050565b5f602082840312156123df575f80fd5b8135611d8881612391565b5f602082840312156123fa575f80fd5b5035919050565b5f805f60608486031215612413575f80fd5b833561241e81612391565b9250602084013561242e81612391565b929592945050506040919091013590565b80358015158114611143575f80fd5b5f806040838503121561245f575f80fd5b823561246a81612391565b91506124786020840161243f565b90509250929050565b5f60208284031215612491575f80fd5b611d888261243f565b5f80604083850312156124ab575f80fd5b82356124b681612391565b915060208301356124c681612391565b809150509250929050565b600181811c908216806124e557607f821691505b60208210810361250357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176108e3576108e361253e565b5f8261258357634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808201808211156108e3576108e361253e565b818103818111156108e3576108e361253e565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561266e575f80fd5b8151611d8881612391565b5f8151808452602084019350602083015f5b828110156126b25781516001600160a01b031686526020958601959091019060010161268b565b5093949350505050565b828152604060208201525f6126d46040830184612679565b949350505050565b5f602082840312156126ec575f80fd5b815167ffffffffffffffff811115612702575f80fd5b8201601f81018413612712575f80fd5b805167ffffffffffffffff81111561272c5761272c612636565b8060051b604051601f19603f830116810181811067ffffffffffffffff8211171561275957612759612636565b604052918252602081840181019290810187841115612776575f80fd5b6020850194505b838510156127995784518082526020958601959093500161277d565b509695505050505050565b85815284602082015260a060408201525f6127c260a0830186612679565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d3a50e912269664f8924f28b50fd6bb677d659204a30ce2ae8248e62d6802bf164736f6c634300081a0033
Deployed Bytecode Sourcemap
30903:13602:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8031:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10264:194;;;;;;;;;;-1:-1:-1;10264:194:0;;;;;:::i;:::-;;:::i;:::-;;;1110:14:1;;1103:22;1085:41;;1073:2;1058:18;10264:194:0;945:187:1;32049:63:0;;;;;;;;;;-1:-1:-1;32049:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30981:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1580:32:1;;;1562:51;;1550:2;1535:18;30981:51:0;1389:230:1;9151:108:0;;;;;;;;;;-1:-1:-1;9239:12:0;;9151:108;;;1770:25:1;;;1758:2;1743:18;9151:108:0;1624:177:1;35881:277:0;;;;;;;;;;-1:-1:-1;35881:277:0;;;;;:::i;:::-;;:::i;:::-;;10940:454;;;;;;;;;;-1:-1:-1;10940:454:0;;;;;:::i;:::-;;:::i;37377:159::-;;;;;;;;;;-1:-1:-1;37377:159:0;;;;;:::i;:::-;;:::i;8993:93::-;;;;;;;;;;-1:-1:-1;8993:93:0;;9076:2;3177:36:1;;3165:2;3150:18;8993:93:0;3035:184:1;11803:293:0;;;;;;;;;;-1:-1:-1;11803:293:0;;;;;:::i;:::-;;:::i;31039:38::-;;;;;;;;;;;;;;;31264:33;;;;;;;;;;-1:-1:-1;31264:33:0;;;;;;;;38244:126;;;;;;;;;;-1:-1:-1;38244:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;38334:28:0;38310:4;38334:28;;;:19;:28;;;;;;;;;38244:126;38054:182;;;;;;;;;;-1:-1:-1;38054:182:0;;;;;:::i;:::-;;:::i;31806:28::-;;;;;;;;;;;;;;;;31344:31;;;;;;;;;;-1:-1:-1;31344:31:0;;;;;;;;;;;9322:143;;;;;;;;;;-1:-1:-1;9322:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;9439:18:0;9412:7;9439:18;;;;;;;;;;;;9322:143;23081:148;;;;;;;;;;;;;:::i;36806:181::-;;;;;;;;;;-1:-1:-1;36806:181:0;;;;;:::i;:::-;;:::i;35005:121::-;;;;;;;;;;;;;:::i;36433:169::-;;;;;;;;;;-1:-1:-1;36433:169:0;;;;;:::i;:::-;;:::i;34805:148::-;;;;;;;;;;;;;:::i;22439:79::-;;;;;;;;;;-1:-1:-1;22504:6:0;;-1:-1:-1;;;;;22504:6:0;22439:79;;36698:100;;;;;;;;;;-1:-1:-1;36698:100:0;;;;;:::i;:::-;;:::i;8250:104::-;;;;;;;;;;;;;:::i;37544:306::-;;;;;;;;;;-1:-1:-1;37544:306:0;;;;;:::i;:::-;;:::i;12599:393::-;;;;;;;;;;-1:-1:-1;12599:393:0;;;;;:::i;:::-;;:::i;9678:200::-;;;;;;;;;;-1:-1:-1;9678:200:0;;;;;:::i;:::-;;:::i;32270:57::-;;;;;;;;;;-1:-1:-1;32270:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31304:33;;;;;;;;;;-1:-1:-1;31304:33:0;;;;;;;;;;;37187:182;;;;;;;;;;-1:-1:-1;37187:182:0;;;;;:::i;:::-;;:::i;36166:259::-;;;;;;;;;;-1:-1:-1;36166:259:0;;;;;:::i;:::-;;:::i;31724:39::-;;;;;;;;;;-1:-1:-1;31724:39:0;;;;;;;;31149:35;;;;;;;;;;;;;;;;35392:481;;;;;;;;;;-1:-1:-1;35392:481:0;;;;;:::i;:::-;;:::i;31772:27::-;;;;;;;;;;;;;;;;9941:176;;;;;;;;;;-1:-1:-1;9941:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10082:18:0;;;10055:7;10082:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9941:176;31191:33;;;;;;;;;;;;;;;;35187:135;;;;;;;;;;;;;:::i;36995:184::-;;;;;;;;;;-1:-1:-1;36995:184:0;;;;;:::i;:::-;;:::i;44370:132::-;;;;;;;;;;-1:-1:-1;44370:132:0;;;;;:::i;:::-;;:::i;31116:24::-;;;;;;;;;;-1:-1:-1;31116:24:0;;;;-1:-1:-1;;;;;31116:24:0;;;23384:281;;;;;;;;;;-1:-1:-1;23384:281:0;;;;;:::i;:::-;;:::i;32910:75::-;;;;;;;;;;;;32943:42;32910:75;;31231:24;;;;;;;;;;;;;;;;8031:100;8085:13;8118:5;8111:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8031:100;:::o;10264:194::-;10372:4;10389:39;282:10;10412:7;10421:6;10389:8;:39::i;:::-;-1:-1:-1;10446:4:0;10264:194;;;;;:::o;35881:277::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;;;;;;;;;36018:4:::1;36010;35989:13;9239:12:::0;;;9151:108;35989:13:::1;:17;::::0;36005:1:::1;35989:17;:::i;:::-;35988:26;;;;:::i;:::-;35987:35;;;;:::i;:::-;35977:6;:45;;35955:142;;;::::0;-1:-1:-1;;;35955:142:0;;5485:2:1;35955:142:0::1;::::0;::::1;5467:21:1::0;5524:2;5504:18;;;5497:30;5563:34;5543:18;;;5536:62;-1:-1:-1;;;5614:18:1;;;5607:45;5669:19;;35955:142:0::1;5283:411:1::0;35955:142:0::1;36131:19;:6:::0;36141:8:::1;36131:19;:::i;:::-;36108:20;:42:::0;-1:-1:-1;35881:277:0:o;10940:454::-;11080:4;11097:36;11107:6;11115:9;11126:6;11097:9;:36::i;:::-;11144:220;11167:6;282:10;11215:138;11271:6;11215:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11215:19:0;;;;;;:11;:19;;;;;;;;282:10;11215:33;;;;;;;;;;:37;:138::i;:::-;11144:8;:220::i;:::-;-1:-1:-1;11382:4:0;10940:454;;;;;:::o;37377:159::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37493:19:0;;;::::1;;::::0;;;:10:::1;:19;::::0;;;;:35;;-1:-1:-1;;37493:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37377:159::o;11803:293::-;282:10;11916:4;12005:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12005:34:0;;;;;;;;;;11916:4;;11933:133;;11983:7;;12005:50;;12044:10;12005:38;:50::i;38054:182::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;38183:9:::1;::::0;38152:41:::1;::::0;-1:-1:-1;;;;;38183:9:0;;::::1;::::0;38152:41;::::1;::::0;::::1;::::0;38183:9:::1;::::0;38152:41:::1;38204:9;:24:::0;;-1:-1:-1;;;;;;38204:24:0::1;-1:-1:-1::0;;;;;38204:24:0;;;::::1;::::0;;;::::1;::::0;;38054:182::o;23081:148::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;23172:6:::1;::::0;23151:40:::1;::::0;23188:1:::1;::::0;-1:-1:-1;;;;;23172:6:0::1;::::0;23151:40:::1;::::0;23188:1;;23151:40:::1;23202:6;:19:::0;;-1:-1:-1;;;;;;23202:19:0::1;::::0;;23081:148::o;36806:181::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;36889:12:::1;:19:::0;;;36943:2:::1;36927:18:::0;::::1;;36919:60;;;::::0;-1:-1:-1;;;36919:60:0;;5901:2:1;36919:60:0::1;::::0;::::1;5883:21:1::0;5940:2;5920:18;;;5913:30;5979:31;5959:18;;;5952:59;6028:18;;36919:60:0::1;5699:353:1::0;36919:60:0::1;36806:181:::0;:::o;35005:121::-;22651:6;;35057:4;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;-1:-1:-1;35074:14:0::1;:22:::0;;-1:-1:-1;;35074:22:0::1;::::0;;;35005:121;:::o;36433:169::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36548:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36548:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36433:169::o;34805:148::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;34860:13:::1;:20:::0;;-1:-1:-1;;34891:18:0;;;;;34933:12:::1;34920:10;:25:::0;34805:148::o;36698:100::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;36769:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36769:21:0;;::::1;::::0;;;::::1;::::0;;36698:100::o;8250:104::-;8306:13;8339:7;8332:14;;;;;:::i;37544:306::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;37690:13:::1;-1:-1:-1::0;;;;;37682:21:0::1;:4;-1:-1:-1::0;;;;;37682:21:0::1;::::0;37660:128:::1;;;::::0;-1:-1:-1;;;37660:128:0;;6259:2:1;37660:128:0::1;::::0;::::1;6241:21:1::0;6298:2;6278:18;;;6271:30;6337:34;6317:18;;;6310:62;6408:27;6388:18;;;6381:55;6453:19;;37660:128:0::1;6057:421:1::0;37660:128:0::1;37801:41;37830:4;37836:5;37801:28;:41::i;:::-;37544:306:::0;;:::o;12599:393::-;12717:4;12734:228;282:10;12784:7;12806:145;12863:15;12806:145;;;;;;;;;;;;;;;;;282:10;12806:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12806:34:0;;;;;;;;;;;;:38;:145::i;9678:200::-;9789:4;9806:42;282:10;9830:9;9841:6;9806:9;:42::i;37187:182::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37272:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37272:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37327:34;;1085:41:1;;;37327:34:0::1;::::0;1058:18:1;37327:34:0::1;;;;;;;37187:182:::0;;:::o;36166:259::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;36307:4:::1;36299;36277:13;9239:12:::0;;;9151:108;36277:13:::1;:18;::::0;36293:2:::1;36277:18;:::i;:::-;36276:27;;;;:::i;:::-;36275:36;;;;:::i;:::-;36265:6;:46;;36243:132;;;::::0;-1:-1:-1;;;36243:132:0;;6685:2:1;36243:132:0::1;::::0;::::1;6667:21:1::0;6724:2;6704:18;;;6697:30;6763:34;6743:18;;;6736:62;-1:-1:-1;;;6814:18:1;;;6807:34;6858:19;;36243:132:0::1;6483:400:1::0;36243:132:0::1;36398:19;:6:::0;36408:8:::1;36398:19;:::i;:::-;36386:9;:31:::0;-1:-1:-1;36166:259:0:o;35392:481::-;22651:6;;35489:4;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;35563:6:::1;35542:13;9239:12:::0;;;9151:108;35542:13:::1;:17;::::0;35558:1:::1;35542:17;:::i;:::-;35541:28;;;;:::i;:::-;35528:9;:41;;35506:144;;;::::0;-1:-1:-1;;;35506:144:0;;7090:2:1;35506:144:0::1;::::0;::::1;7072:21:1::0;7129:2;7109:18;;;7102:30;7168:34;7148:18;;;7141:62;-1:-1:-1;;;7219:18:1;;;7212:51;7280:19;;35506:144:0::1;6888:417:1::0;35506:144:0::1;35718:4;35697:13;9239:12:::0;;;9151:108;35697:13:::1;:17;::::0;35713:1:::1;35697:17;:::i;:::-;35696:26;;;;:::i;:::-;35683:9;:39;;35661:141;;;::::0;-1:-1:-1;;;35661:141:0;;7512:2:1;35661:141:0::1;::::0;::::1;7494:21:1::0;7551:2;7531:18;;;7524:30;7590:34;7570:18;;;7563:62;-1:-1:-1;;;7641:18:1;;;7634:50;7701:19;;35661:141:0::1;7310:416:1::0;35661:141:0::1;-1:-1:-1::0;35813:18:0::1;:30:::0;;;35861:4:::1;22721:1;35392:481:::0;;;:::o;35187:135::-;22651:6;;35247:4;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;-1:-1:-1;35264:20:0::1;:28:::0;;-1:-1:-1;;35264:28:0::1;::::0;;;35187:135;:::o;36995:184::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;37079:13:::1;:20:::0;;;37135:2:::1;37118:19:::0;::::1;;37110:61;;;::::0;-1:-1:-1;;;37110:61:0;;5901:2:1;37110:61:0::1;::::0;::::1;5883:21:1::0;5940:2;5920:18;;;5913:30;5979:31;5959:18;;;5952:59;6028:18;;37110:61:0::1;5699:353:1::0;44370:132:0;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;44442:2:::1;44436;:8;;44428:51;;;::::0;-1:-1:-1;;;44428:51:0;;7933:2:1;44428:51:0::1;::::0;::::1;7915:21:1::0;7972:2;7952:18;;;7945:30;8011:32;7991:18;;;7984:60;8061:18;;44428:51:0::1;7731:354:1::0;44428:51:0::1;44484:8;:13:::0;44370:132::o;23384:281::-;22651:6;;-1:-1:-1;;;;;22651:6:0;282:10;22651:22;22643:67;;;;-1:-1:-1;;;22643:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23487:22:0;::::1;23465:110;;;::::0;-1:-1:-1;;;23465:110:0;;8292:2:1;23465:110:0::1;::::0;::::1;8274:21:1::0;8331:2;8311:18;;;8304:30;8370:34;8350:18;;;8343:62;-1:-1:-1;;;8421:18:1;;;8414:36;8467:19;;23465:110:0::1;8090:402:1::0;23465:110:0::1;23612:6;::::0;23591:38:::1;::::0;-1:-1:-1;;;;;23591:38:0;;::::1;::::0;23612:6:::1;::::0;23591:38:::1;::::0;23612:6:::1;::::0;23591:38:::1;23640:6;:17:::0;;-1:-1:-1;;;;;;23640:17:0::1;-1:-1:-1::0;;;;;23640:17:0;;;::::1;::::0;;;::::1;::::0;;23384:281::o;15983:380::-;-1:-1:-1;;;;;16119:19:0;;16111:68;;;;-1:-1:-1;;;16111:68:0;;8699:2:1;16111:68:0;;;8681:21:1;8738:2;8718:18;;;8711:30;8777:34;8757:18;;;8750:62;-1:-1:-1;;;8828:18:1;;;8821:34;8872:19;;16111:68:0;8497:400:1;16111:68:0;-1:-1:-1;;;;;16198:21:0;;16190:68;;;;-1:-1:-1;;;16190:68:0;;9104:2:1;16190:68:0;;;9086:21:1;9143:2;9123:18;;;9116:30;9182:34;9162:18;;;9155:62;-1:-1:-1;;;9233:18:1;;;9226:32;9275:19;;16190:68:0;8902:398:1;16190:68:0;-1:-1:-1;;;;;16271:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16323:32;;1770:25:1;;;16323:32:0;;1743:18:1;16323:32:0;;;;;;;;15983:380;;;:::o;38428:4596::-;-1:-1:-1;;;;;38560:18:0;;38552:68;;;;-1:-1:-1;;;38552:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38639:16:0;;38631:64;;;;-1:-1:-1;;;38631:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38729:14:0;;;;;;:10;:14;;;;;;;;38728:15;:36;;;;-1:-1:-1;;;;;;38748:16:0;;;;;;:10;:16;;;;;;;;38747:17;38728:36;38706:135;;;;-1:-1:-1;;;38706:135:0;;10317:2:1;38706:135:0;;;10299:21:1;10356:2;10336:18;;;10329:30;10395:34;10375:18;;;10368:62;-1:-1:-1;;;10446:18:1;;;10439:47;10503:19;;38706:135:0;10115:413:1;38706:135:0;38856:6;38866:1;38856:11;38852:93;;38884:28;38900:4;38906:2;38910:1;38884:15;:28::i;:::-;38428:4596;;;:::o;38852:93::-;38961:14;;;;38957:2487;;;22504:6;;-1:-1:-1;;;;;39014:15:0;;;22504:6;;39014:15;;;;:49;;-1:-1:-1;22504:6:0;;-1:-1:-1;;;;;39050:13:0;;;22504:6;;39050:13;;39014:49;:86;;;;-1:-1:-1;;;;;;39084:16:0;;;;39014:86;:128;;;;-1:-1:-1;;;;;;39121:21:0;;39135:6;39121:21;;39014:128;:158;;;;-1:-1:-1;39164:8:0;;-1:-1:-1;;;39164:8:0;;;;39163:9;39014:158;38992:2441;;;39212:13;;;;;;;39207:223;;-1:-1:-1;;;;;39284:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;39313:23:0;;;;;;:19;:23;;;;;;;;39284:52;39250:160;;;;-1:-1:-1;;;39250:160:0;;10735:2:1;39250:160:0;;;10717:21:1;10774:2;10754:18;;;10747:30;-1:-1:-1;;;10793:18:1;;;10786:52;10855:18;;39250:160:0;10533:346:1;39250:160:0;39586:20;;;;39582:641;;;22504:6;;-1:-1:-1;;;;;39661:13:0;;;22504:6;;39661:13;;;;:72;;;39717:15;-1:-1:-1;;;;;39703:30:0;:2;-1:-1:-1;;;;;39703:30:0;;;39661:72;:129;;;;;39776:13;-1:-1:-1;;;;;39762:28:0;:2;-1:-1:-1;;;;;39762:28:0;;;39661:129;39631:573;;;39908:9;39879:39;;;;:28;:39;;;;;;39954:12;-1:-1:-1;39841:258:0;;;;-1:-1:-1;;;39841:258:0;;11086:2:1;39841:258:0;;;11068:21:1;11125:2;11105:18;;;11098:30;11164:34;11144:18;;;11137:62;11235:34;11215:18;;;11208:62;-1:-1:-1;;;11286:19:1;;;11279:40;11336:19;;39841:258:0;10884:477:1;39841:258:0;40155:9;40126:39;;;;:28;:39;;;;;40168:12;40126:54;;39631:573;-1:-1:-1;;;;;40297:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;40354:35:0;;;;;;:31;:35;;;;;;;;40353:36;40297:92;40271:1147;;;40476:20;;40466:6;:30;;40432:169;;;;-1:-1:-1;;;40432:169:0;;11568:2:1;40432:169:0;;;11550:21:1;11607:2;11587:18;;;11580:30;11646:34;11626:18;;;11619:62;-1:-1:-1;;;11697:18:1;;;11690:51;11758:19;;40432:169:0;11366:417:1;40432:169:0;40684:9;;-1:-1:-1;;;;;9439:18:0;;9412:7;9439:18;;;;;;;;;;;40658:22;;:6;:22;:::i;:::-;:35;;40624:140;;;;-1:-1:-1;;;40624:140:0;;12120:2:1;40624:140:0;;;12102:21:1;12159:2;12139:18;;;12132:30;-1:-1:-1;;;12178:18:1;;;12171:49;12237:18;;40624:140:0;11918:343:1;40624:140:0;40271:1147;;;-1:-1:-1;;;;;40862:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;40917:37:0;;;;;;:31;:37;;;;;;;;40916:38;40862:92;40836:582;;;41041:20;;41031:6;:30;;40997:170;;;;-1:-1:-1;;;40997:170:0;;12468:2:1;40997:170:0;;;12450:21:1;12507:2;12487:18;;;12480:30;12546:34;12526:18;;;12519:62;-1:-1:-1;;;12597:18:1;;;12590:52;12659:19;;40997:170:0;12266:418:1;40836:582:0;-1:-1:-1;;;;;41198:35:0;;;;;;:31;:35;;;;;;;;41193:225;;41318:9;;-1:-1:-1;;;;;9439:18:0;;9412:7;9439:18;;;;;;;;;;;41292:22;;:6;:22;:::i;:::-;:35;;41258:140;;;;-1:-1:-1;;;41258:140:0;;12120:2:1;41258:140:0;;;12102:21:1;12159:2;12139:18;;;12132:30;-1:-1:-1;;;12178:18:1;;;12171:49;12237:18;;41258:140:0;11918:343:1;41258:140:0;41518:10;;:14;;41531:1;41518:14;:::i;:::-;41501:12;:32;;:68;;;;;41556:13;-1:-1:-1;;;;;41550:19:0;:2;-1:-1:-1;;;;;41550:19:0;;;41501:68;:106;;;;-1:-1:-1;;;;;;41586:21:0;;32943:42;41586:21;;41501:106;41483:184;;;-1:-1:-1;;;;;41634:14:0;;;;;;:10;:14;;;;;:21;;-1:-1:-1;;41634:21:0;41651:4;41634:21;;;41483:184;41728:4;41679:28;9439:18;;;;;;;;;;;41786;;41762:42;;;;;;;41835:35;;-1:-1:-1;41859:11:0;;;;;;;41835:35;:61;;;;-1:-1:-1;41888:8:0;;-1:-1:-1;;;41888:8:0;;;;41887:9;41835:61;:110;;;;-1:-1:-1;;;;;;41914:31:0;;;;;;:25;:31;;;;;;;;41913:32;41835:110;:153;;;;-1:-1:-1;;;;;;41963:25:0;;;;;;:19;:25;;;;;;;;41962:26;41835:153;:194;;;;-1:-1:-1;;;;;;42006:23:0;;;;;;:19;:23;;;;;;;;42005:24;41835:194;41817:326;;;42056:8;:15;;-1:-1:-1;;;;42056:15:0;-1:-1:-1;;;42056:15:0;;;42088:10;:8;:10::i;:::-;42115:8;:16;;-1:-1:-1;;;;42115:16:0;;;41817:326;42171:8;;-1:-1:-1;;;;;42281:25:0;;42155:12;42281:25;;;:19;:25;;;;;;42171:8;-1:-1:-1;;;42171:8:0;;;;;42170:9;;42281:25;;:52;;-1:-1:-1;;;;;;42310:23:0;;;;;;:19;:23;;;;;;;;42281:52;42277:100;;;-1:-1:-1;42360:5:0;42277:100;42457:11;42483:7;42479:492;;;-1:-1:-1;;;;;42535:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;42584:1;42568:13;;:17;42535:50;42531:304;;;42612:34;42642:3;42612:25;42623:13;;42612:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;42606:40;;42531:304;;;-1:-1:-1;;;;;42708:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;42758:1;42743:12;;:16;42708:51;42704:131;;;42786:33;42815:3;42786:24;42797:12;;42786:6;:10;;:24;;;;:::i;:33::-;42780:39;;42704:131;42855:7;;42851:109;;42883:41;42899:4;42913;42920:3;42883:15;:41::i;:::-;42931:13;42941:3;42931:13;;:::i;:::-;;;42851:109;42983:33;42999:4;43005:2;43009:6;42983:15;:33::i;:::-;38541:4483;;;;38428:4596;;;:::o;18264:226::-;18384:7;18420:12;18412:6;;;;18404:29;;;;-1:-1:-1;;;18404:29:0;;;;;;;;:::i;:::-;-1:-1:-1;18444:9:0;18456:5;18460:1;18456;:5;:::i;:::-;18444:17;18264:226;-1:-1:-1;;;;;18264:226:0:o;17361:181::-;17419:7;;17451:5;17455:1;17451;:5;:::i;:::-;17439:17;;17480:1;17475;:6;;17467:46;;;;-1:-1:-1;;;17467:46:0;;13024:2:1;17467:46:0;;;13006:21:1;13063:2;13043:18;;;13036:30;13102:29;13082:18;;;13075:57;13149:18;;17467:46:0;12822:351:1;17467:46:0;17533:1;17361:181;-1:-1:-1;;;17361:181:0:o;37858:188::-;-1:-1:-1;;;;;37941:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37941:39:0;;;;;;;;;;37998:40;;37941:39;;:31;37998:40;;;37858:188;;:::o;13482:610::-;-1:-1:-1;;;;;13622:20:0;;13614:70;;;;-1:-1:-1;;;13614:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13703:23:0;;13695:71;;;;-1:-1:-1;;;13695:71:0;;;;;;;:::i;:::-;13859:108;13895:6;13859:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13859:17:0;;:9;:17;;;;;;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;13839:17:0;;;:9;:17;;;;;;;;;;;:128;;;;14001:20;;;;;;;:32;;14026:6;14001:24;:32::i;:::-;-1:-1:-1;;;;;13978:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;14049:35;1770:25:1;;;13978:20:0;;14049:35;;;;;;1743:18:1;14049:35:0;1624:177:1;43794:571:0;43877:4;43833:23;9439:18;;;;;;;;;;;43990;;9439;;43833:23;43990;;44011:2;43990:23;:::i;:::-;43972:15;:41;43968:115;;;44048:18;;:23;;44069:2;44048:23;:::i;:::-;44030:41;;43968:115;44092:19;;44089:68;;44118:33;44135:15;44118:16;:33::i;:::-;44166:21;:25;44163:195;;44221:9;;44213:83;;-1:-1:-1;;;;;44221:9:0;;;;44259:21;;44213:83;;;;44259:21;44221:9;44213:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44199:97;;;;;44310:7;44302:50;;;;-1:-1:-1;;;44302:50:0;;13590:2:1;44302:50:0;;;13572:21:1;13629:2;13609:18;;;13602:30;13668:32;13648:18;;;13641:60;13718:18;;44302:50:0;13388:354:1;18749:471:0;18807:7;19052:1;19057;19052:6;19048:47;;-1:-1:-1;19082:1:0;19075:8;;19048:47;19107:9;19119:5;19123:1;19119;:5;:::i;:::-;19107:17;-1:-1:-1;19152:1:0;19143:5;19147:1;19107:17;19143:5;:::i;:::-;:10;19135:56;;;;-1:-1:-1;;;19135:56:0;;13949:2:1;19135:56:0;;;13931:21:1;13988:2;13968:18;;;13961:30;14027:34;14007:18;;;14000:62;-1:-1:-1;;;14078:18:1;;;14071:31;14119:19;;19135:56:0;13747:397:1;19696:132:0;19754:7;19781:39;19785:1;19788;19781:39;;;;;;;;;;;;;;;;;:3;:39::i;43032:754::-;43122:16;;;43136:1;43122:16;;;;;;;;43098:21;;43122:16;;;;;;;;;;-1:-1:-1;43122:16:0;43098:40;;43167:4;43149;43154:1;43149:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;43149:23:0;;;-1:-1:-1;;;;;43149:23:0;;;;;43193:15;-1:-1:-1;;;;;43193:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43183:4;43188:1;43183:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;43183:32:0;;;:7;;;;;;;;;:32;43296:48;;-1:-1:-1;;;43296:48:0;;43266:27;;43296:15;:29;;;;:48;;43326:11;;43339:4;;43296:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43296:48:0;;;;;;;;;;;;:::i;:::-;43266:78;;43349:17;43396:3;43385:8;;43369:10;43380:1;43369:13;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;:30;;;;:::i;:::-;43349:50;;43407:20;43446:9;43430:10;43441:1;43430:13;;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;43407:48;;43468:62;43485:4;43500:15;43518:11;43468:8;:62::i;:::-;43543:235;;-1:-1:-1;;;43543:235:0;;-1:-1:-1;;;;;43543:15:0;:66;;;;:235;;43624:11;;43650:12;;43705:4;;43732;;43752:15;;43543:235;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43087:699;;;;43032:754;:::o;20324:312::-;20444:7;20479:12;20472:5;20464:28;;;;-1:-1:-1;;;20464:28:0;;;;;;;;:::i;:::-;-1:-1:-1;20503:9:0;20515:5;20519:1;20515;:5;:::i;14:418:1:-;163:2;152:9;145:21;126:4;195:6;189:13;238:6;233:2;222:9;218:18;211:34;297:6;292:2;284:6;280:15;275:2;264:9;260:18;254:50;353:1;348:2;339:6;328:9;324:22;320:31;313:42;423:2;416;412:7;407:2;399:6;395:15;391:29;380:9;376:45;372:54;364:62;;;14:418;;;;:::o;437:131::-;-1:-1:-1;;;;;512:31:1;;502:42;;492:70;;558:1;555;548:12;573:367;641:6;649;702:2;690:9;681:7;677:23;673:32;670:52;;;718:1;715;708:12;670:52;757:9;744:23;776:31;801:5;776:31;:::i;:::-;826:5;904:2;889:18;;;;876:32;;-1:-1:-1;;;573:367:1:o;1137:247::-;1196:6;1249:2;1237:9;1228:7;1224:23;1220:32;1217:52;;;1265:1;1262;1255:12;1217:52;1304:9;1291:23;1323:31;1348:5;1323:31;:::i;1806:226::-;1865:6;1918:2;1906:9;1897:7;1893:23;1889:32;1886:52;;;1934:1;1931;1924:12;1886:52;-1:-1:-1;1979:23:1;;1806:226;-1:-1:-1;1806:226:1:o;2037:508::-;2114:6;2122;2130;2183:2;2171:9;2162:7;2158:23;2154:32;2151:52;;;2199:1;2196;2189:12;2151:52;2238:9;2225:23;2257:31;2282:5;2257:31;:::i;:::-;2307:5;-1:-1:-1;2364:2:1;2349:18;;2336:32;2377:33;2336:32;2377:33;:::i;:::-;2037:508;;2429:7;;-1:-1:-1;;;2509:2:1;2494:18;;;;2481:32;;2037:508::o;2550:160::-;2615:20;;2671:13;;2664:21;2654:32;;2644:60;;2700:1;2697;2690:12;2715:315;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2896:9;2883:23;2915:31;2940:5;2915:31;:::i;:::-;2965:5;-1:-1:-1;2989:35:1;3020:2;3005:18;;2989:35;:::i;:::-;2979:45;;2715:315;;;;;:::o;3432:180::-;3488:6;3541:2;3529:9;3520:7;3516:23;3512:32;3509:52;;;3557:1;3554;3547:12;3509:52;3580:26;3596:9;3580:26;:::i;3617:388::-;3685:6;3693;3746:2;3734:9;3725:7;3721:23;3717:32;3714:52;;;3762:1;3759;3752:12;3714:52;3801:9;3788:23;3820:31;3845:5;3820:31;:::i;:::-;3870:5;-1:-1:-1;3927:2:1;3912:18;;3899:32;3940:33;3899:32;3940:33;:::i;:::-;3992:7;3982:17;;;3617:388;;;;;:::o;4010:380::-;4089:1;4085:12;;;;4132;;;4153:61;;4207:4;4199:6;4195:17;4185:27;;4153:61;4260:2;4252:6;4249:14;4229:18;4226:38;4223:161;;4306:10;4301:3;4297:20;4294:1;4287:31;4341:4;4338:1;4331:15;4369:4;4366:1;4359:15;4223:161;;4010:380;;;:::o;4395:356::-;4597:2;4579:21;;;4616:18;;;4609:30;4675:34;4670:2;4655:18;;4648:62;4742:2;4727:18;;4395:356::o;4756:127::-;4817:10;4812:3;4808:20;4805:1;4798:31;4848:4;4845:1;4838:15;4872:4;4869:1;4862:15;4888:168;4961:9;;;4992;;5009:15;;;5003:22;;4989:37;4979:71;;5030:18;;:::i;5061:217::-;5101:1;5127;5117:132;;5171:10;5166:3;5162:20;5159:1;5152:31;5206:4;5203:1;5196:15;5234:4;5231:1;5224:15;5117:132;-1:-1:-1;5263:9:1;;5061:217::o;9305:401::-;9507:2;9489:21;;;9546:2;9526:18;;;9519:30;9585:34;9580:2;9565:18;;9558:62;-1:-1:-1;;;9651:2:1;9636:18;;9629:35;9696:3;9681:19;;9305:401::o;9711:399::-;9913:2;9895:21;;;9952:2;9932:18;;;9925:30;9991:34;9986:2;9971:18;;9964:62;-1:-1:-1;;;10057:2:1;10042:18;;10035:33;10100:3;10085:19;;9711:399::o;11788:125::-;11853:9;;;11874:10;;;11871:36;;;11887:18;;:::i;12689:128::-;12756:9;;;12777:11;;;12774:37;;;12791:18;;:::i;14149:127::-;14210:10;14205:3;14201:20;14198:1;14191:31;14241:4;14238:1;14231:15;14265:4;14262:1;14255:15;14281:127;14342:10;14337:3;14333:20;14330:1;14323:31;14373:4;14370:1;14363:15;14397:4;14394:1;14387:15;14413:251;14483:6;14536:2;14524:9;14515:7;14511:23;14507:32;14504:52;;;14552:1;14549;14542:12;14504:52;14584:9;14578:16;14603:31;14628:5;14603:31;:::i;14669:446::-;14722:3;14760:5;14754:12;14787:6;14782:3;14775:19;14819:4;14814:3;14810:14;14803:21;;14858:4;14851:5;14847:16;14881:1;14891:199;14905:6;14902:1;14899:13;14891:199;;;14970:13;;-1:-1:-1;;;;;14966:39:1;14954:52;;15035:4;15026:14;;;;15063:17;;;;15002:1;14920:9;14891:199;;;-1:-1:-1;15106:3:1;;14669:446;-1:-1:-1;;;;14669:446:1:o;15120:332::-;15327:6;15316:9;15309:25;15370:2;15365;15354:9;15350:18;15343:30;15290:4;15390:56;15442:2;15431:9;15427:18;15419:6;15390:56;:::i;:::-;15382:64;15120:332;-1:-1:-1;;;;15120:332:1:o;15457:1165::-;15552:6;15605:2;15593:9;15584:7;15580:23;15576:32;15573:52;;;15621:1;15618;15611:12;15573:52;15654:9;15648:16;15687:18;15679:6;15676:30;15673:50;;;15719:1;15716;15709:12;15673:50;15742:22;;15795:4;15787:13;;15783:27;-1:-1:-1;15773:55:1;;15824:1;15821;15814:12;15773:55;15857:2;15851:9;15883:18;15875:6;15872:30;15869:56;;;15905:18;;:::i;:::-;15951:6;15948:1;15944:14;15987:2;15981:9;16050:2;16046:7;16041:2;16037;16033:11;16029:25;16021:6;16017:38;16121:6;16109:10;16106:22;16085:18;16073:10;16070:34;16067:62;16064:88;;;16132:18;;:::i;:::-;16168:2;16161:22;16218;;;16268:2;16298:11;;;16294:20;;;16218:22;16256:15;;16326:19;;;16323:39;;;16358:1;16355;16348:12;16323:39;16390:2;16386;16382:11;16371:22;;16402:189;16418:6;16413:3;16410:15;16402:189;;;16508:10;;16531:18;;;16578:2;16435:12;;;;16508:10;;-1:-1:-1;16569:12:1;16402:189;;;-1:-1:-1;16610:6:1;15457:1165;-1:-1:-1;;;;;;15457:1165:1:o;16627:574::-;16918:6;16907:9;16900:25;16961:6;16956:2;16945:9;16941:18;16934:34;17004:3;16999:2;16988:9;16984:18;16977:31;16881:4;17025:57;17077:3;17066:9;17062:19;17054:6;17025:57;:::i;:::-;-1:-1:-1;;;;;17118:32:1;;;;17113:2;17098:18;;17091:60;-1:-1:-1;17182:3:1;17167:19;17160:35;17017:65;16627:574;-1:-1:-1;;;16627:574:1:o
Swarm Source
ipfs://d3a50e912269664f8924f28b50fd6bb677d659204a30ce2ae8248e62d6802bf1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.33
Net Worth in ETH
0.000156
Token Allocations
SHIRYO-INU
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | <$0.000001 | 2,302,342,152,926.8418 | $0.3303 |
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.