Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 DAPPSAI
Holders
68
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
7,998.081112616550937756 DAPPSAIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
dAppsAI
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-10 */ /** * SourceUnit: /Users/jmf/dev/dappsAI/contracts/dappsAI.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * SourceUnit: /Users/jmf/dev/dappsAI/contracts/dappsAI.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } /** * SourceUnit: /Users/jmf/dev/dappsAI/contracts/dappsAI.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; ////import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ 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); } /** * SourceUnit: /Users/jmf/dev/dappsAI/contracts/dappsAI.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity 0.8.19; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance( address owner, address spender ) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function burn( address to ) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut( uint256 amountIn, address[] calldata path ) external view returns (uint256[] memory amounts); function getAmountsIn( uint256 amountOut, address[] calldata path ) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } /** * SourceUnit: /Users/jmf/dev/dappsAI/contracts/dappsAI.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; ////import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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 { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * SourceUnit: /Users/jmf/dev/dappsAI/contracts/dappsAI.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; ////import "./IERC20.sol"; ////import "./extensions/IERC20Metadata.sol"; ////import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { 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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address to, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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 += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(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); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - 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 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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * SourceUnit: /Users/jmf/dev/dappsAI/contracts/dappsAI.sol */ // SPDX-License-Identifier: MIT pragma solidity 0.8.19; ////import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; ////import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; ////import "@openzeppelin/contracts/access/Ownable.sol"; ////import "./interfaces/IUniswap.sol"; contract dAppsAI is ERC20, Ownable { mapping(address => bool) public blacklist; mapping(address => bool) public feeExempt; mapping(address => bool) public maxTxExempt; mapping(address => uint) private lastTx; mapping(address => bool) private cooldownWhitelist; mapping(address => bool) public preExemption; mapping(address => bool) public maxWalletExempt; uint8 public constant blockCooldown = 5; address public marketing; address public stakingPool; uint public totalBuyFee; uint public totalSellFee; uint public maxWalletAmount; uint public maxTxAmount; uint public maxBuyTxAmount; uint public maxSellTxAmount; uint public marketingFees; uint public stakingFees; uint public liquidityFees; uint public totalMarketingFees; uint public totalStakingFees; uint public totalLiquidityFees; uint public swapThreshold = 10 ether; uint8[3] public buyFees; uint8[3] public sellFees; uint256 public constant BASE = 100; address public constant DEAD_WALLET = 0x000000000000000000000000000000000000dEaD; bool public tradingOpen = false; bool public limitsRemoved = false; bool private swapping = false; IUniswapV2Pair public pair; IUniswapV2Router02 public router; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); /// @notice Modifier to check if this is an internal swap modifier swapExecuting() { swapping = true; _; swapping = false; } constructor(address _mkt, address _stk) ERC20("Dapps AI", "DAPPSAI") { require(_mkt != address(0) && _stk != address(0), "Invalid address"); marketing = _mkt; stakingPool = _stk; // 100 million tokens _mint(msg.sender, 100_000_000 ether); // max Tx amount is 1% of total supply maxTxAmount = 100_000_000 ether / 100; maxBuyTxAmount = maxTxAmount; maxSellTxAmount = maxTxAmount; // max wallet amount is 3% of total supply maxWalletAmount = maxTxAmount * 3; buyFees[0] = 5; buyFees[1] = 2; buyFees[2] = 1; sellFees[0] = 5; sellFees[1] = 2; sellFees[2] = 1; totalBuyFee = buyFees[0] + buyFees[1] + buyFees[2]; totalSellFee = sellFees[0] + sellFees[1] + sellFees[2]; // Set Uniswap V2 Router for both ETH and ARBITRUM if (block.chainid == 1) { router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); } else if (block.chainid == 42161) { // need to double check this address on ARBITRUM router = IUniswapV2Router02( 0xE54Ca86531e17Ef3616d22Ca28b0D458b6C89106 ); } else revert("Chain not supported"); IUniswapV2Factory factory = IUniswapV2Factory(router.factory()); pair = IUniswapV2Pair(factory.createPair(address(this), router.WETH())); setFeeExempt(address(this), true); setFeeExempt(owner(), true); setMaxTxExempt(address(this), true); setMaxTxExempt(owner(), true); setCooldownWhitelist(address(this), true); setCooldownWhitelist(owner(), true); setCooldownWhitelist(marketing, true); setCooldownWhitelist(address(pair), true); setCooldownWhitelist(address(router), true); setMaxWalletExempt(address(this), true); setMaxWalletExempt(owner(), true); setMaxWalletExempt(marketing, true); setMaxWalletExempt(address(pair), true); setMaxWalletExempt(address(router), true); setPreExemption(address(this), true); setPreExemption(owner(), true); } /// @notice Allowed to receive ETH receive() external payable {} /// @notice Checks before Token Transfer /// @param from Address of sender /// @param to Address of receiver /// @param amount Amount of tokens to transfer /// @dev Checks if the sender and receiver are blacklisted or if amounts are within limits function _beforeTransfer( address from, address to, uint256 amount ) internal { if (limitsRemoved || from == address(0) || to == address(0) || swapping) return; require( !blacklist[from] && !blacklist[to], "BUNAI: Blacklisted address" ); // Only Owner can transfer tokens before trading is open if (!tradingOpen) require(preExemption[from], "BUNAI: Trading blocked"); if (!maxTxExempt[from]) { if (from == address(pair)) { require( amount <= maxBuyTxAmount, "BUNAI: Max buy amount exceeded" ); } else if (to == address(pair)) { require( amount <= maxSellTxAmount, "BUNAI: Max sell amount exceeded" ); } } if (!maxWalletExempt[to]) { require( balanceOf(to) + amount <= maxWalletAmount, "BUNAI: Max wallet amount exceeded" ); } if (!cooldownWhitelist[from]) { require(lastTx[from] <= block.number, "BUNAI: Bot?"); lastTx[from] = block.number + blockCooldown; } } /// @notice Burn tokens from sender address /// @param amount Amount of tokens to burn function burn(uint256 amount) external { _burn(msg.sender, amount); } /// @notice Burn tokens from other owners as long as it is approved /// @param account Address of owner /// @param amount Amount of tokens to burn function burnFrom(address account, uint256 amount) external { require( amount <= allowance(account, msg.sender), "BUNAI: Not enough allowance" ); uint256 decreasedAllowance = allowance(account, msg.sender) - amount; _approve(account, msg.sender, decreasedAllowance); _burn(account, amount); } /// @notice Internal transfer tokens /// @param sender Address of receiver /// @param recipient Address of receiver /// @param amount Amount of tokens to transfer /// @dev calls _beforeTokenTransfer, manages taxes and transfers tokens function _transfer( address sender, address recipient, uint256 amount ) internal override { _beforeTransfer(sender, recipient, amount); if (!swapping) { uint currentTokensHeld = balanceOf(address(this)); if ( currentTokensHeld >= swapThreshold && sender != address(pair) && sender != address(router) ) { _handleSwapAndDistribute(currentTokensHeld); } if ( ((sender == address(pair) && !feeExempt[recipient]) || (recipient == address(pair) && !feeExempt[sender])) ) { uint totalFee = takeFee(amount, sender == address(pair)); super._transfer(sender, address(this), totalFee); amount -= totalFee; } } super._transfer(sender, recipient, amount); } /// @notice Set the fee for a specific transaction type /// @param amount Amount of transaction /// @param isBuy True if transaction is a buy, false if transaction is a sell /// @return totalFee Total fee taken in this transaction function takeFee( uint256 amount, bool isBuy ) internal returns (uint256 totalFee) { uint selectedFee = isBuy ? totalBuyFee : totalSellFee; totalFee = (selectedFee * amount) / BASE; uint8[3] storage fees = isBuy ? buyFees : sellFees; uint marketingFee = (fees[0] * totalFee) / selectedFee; uint poolFee = (fees[1] * totalFee) / selectedFee; uint liqFee = totalFee - marketingFee - poolFee; marketingFees += marketingFee; stakingFees += poolFee; liquidityFees += liqFee; } /// @notice Swap tokens for ETH and distribute to marketing, liquidity and staking /// @param tokensHeld Amount of tokens held in contract to swap /// @dev to make the most out of the liquidity that is added, the contract will swap and add liquidity before swapping the amount to distribute function _handleSwapAndDistribute(uint tokensHeld) private swapExecuting { uint totalFees = marketingFees + stakingFees + liquidityFees; uint mkt = marketingFees; uint stk = stakingFees; uint liq = liquidityFees; if (totalFees != tokensHeld) { mkt = (marketingFees * tokensHeld) / totalFees; stk = (stakingFees * tokensHeld) / totalFees; liq = tokensHeld - mkt - stk; } if (liq > 0) _swapAndLiquify(liq); if (mkt + stk > 0) { swapTokensForEth(mkt + stk); uint ethBalance = address(this).balance; bool succ; if (mkt > 0) { mkt = (mkt * ethBalance) / (mkt + stk); (succ, ) = payable(marketing).call{value: mkt}(""); require(succ); totalMarketingFees += mkt; } if (stk > 0) { stk = ethBalance - mkt; (succ, ) = payable(stakingPool).call{value: stk}(""); require(succ); totalStakingFees += stk; } } marketingFees = 0; stakingFees = 0; liquidityFees = 0; } /// @notice Swap half of tokens for ETH and create liquidity from an external call function swapAndLiquify() public swapExecuting { require( liquidityFees >= balanceOf(address(this)), "BUNAI: Not enough tokens" ); _swapAndLiquify(liquidityFees); liquidityFees = 0; } /// @notice Swap half tokens for ETH and create liquidity internally /// @param tokens Amount of tokens to swap function _swapAndLiquify(uint tokens) private { uint half = tokens / 2; uint otherHalf = tokens - half; uint initialBalance = address(this).balance; swapTokensForEth(half); uint newBalance = address(this).balance - initialBalance; _approve(address(this), address(router), otherHalf); (, , uint liquidity) = router.addLiquidityETH{value: newBalance}( address(this), otherHalf, 0, 0, DEAD_WALLET, block.timestamp ); totalLiquidityFees += liquidity; emit SwapAndLiquify(half, newBalance, liquidity); } /// @notice Swap tokens for ETH function swapTokensForEth(uint tokens) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), tokens); router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokens, 0, path, address(this), block.timestamp ); } // Only Owner section ///@notice Set the fee for buy transactions ///@param _marketing Marketing fee ///@param _pool Staking Pool fee ///@param _liq Liquidity fee ///@dev Fees are in percentage and cant be more than 25% function setBuyFees( uint8 _marketing, uint8 _pool, uint8 _liq ) external onlyOwner { totalBuyFee = _marketing + _pool + _liq; require(totalBuyFee <= 25, "Fees cannot be more than 25%"); buyFees = [_marketing, _pool, _liq]; } ///@notice Set the fee for sell transactions ///@param _marketing Marketing fee ///@param _pool Staking Pool fee ///@param _liq Liquidity fee ///@dev Fees are in percentage and cant be more than 25% function setSellFees( uint8 _marketing, uint8 _pool, uint8 _liq ) external onlyOwner { totalSellFee = _marketing + _pool + _liq; require(totalSellFee <= 25, "Fees cannot be more than 25%"); sellFees = [_marketing, _pool, _liq]; } ///@notice set address to be exempt from fees ///@param _address Address to be exempt ///@param exempt true or false function setFeeExempt(address _address, bool exempt) public onlyOwner { feeExempt[_address] = exempt; } ///@notice set address to be blacklisted ///@param _address Address to be blacklisted ///@param _blacklist true or false function setBlacklist( address _address, bool _blacklist ) external onlyOwner { blacklist[_address] = _blacklist; } ///@notice allow token trading to start function openTrade() external onlyOwner { tradingOpen = true; } ///@notice get tokens sent "mistakenly" to the contract ///@param _token Address of the token to be recovered function recoverToken(address _token) external onlyOwner { require(_token != address(this), "Cannot withdraw BUNAI"); uint256 balance = IERC20(_token).balanceOf(address(this)); IERC20(_token).transfer(msg.sender, balance); } /// @notice recover ETH sent to the contract function recoverETH() external onlyOwner { (bool succ, ) = payable(msg.sender).call{value: address(this).balance}( "" ); require(succ, "Transfer failed"); } ///@notice set the marketing wallet address ///@param _marketing Address of the new marketing wallet ///@dev Marketing wallet address cannot be 0x0 or the current marketing wallet address function setMarketingWallet(address _marketing) external onlyOwner { require( _marketing != address(0) && _marketing != marketing, "Invalid address" ); marketing = _marketing; } ///@notice set the staking pool address ///@param _stakingPool Address of the new staking pool ///@dev Staking pool address cannot be 0x0 or the current staking pool address function setStakingPool(address _stakingPool) external onlyOwner { require( _stakingPool != address(0) && _stakingPool != stakingPool, "Invalid address" ); stakingPool = _stakingPool; } ///@notice set address to be exempt from max buys and sells ///@param _address Address to be exempt ///@param exempt true or false function setMaxTxExempt(address _address, bool exempt) public onlyOwner { maxTxExempt[_address] = exempt; } function setMaxBuy(uint256 _amount) external onlyOwner { require(_amount >= maxTxAmount, "Invalid Max Buy Amount"); maxBuyTxAmount = _amount; } function setMaxSell(uint256 _amount) external onlyOwner { require(_amount >= maxTxAmount, "Invalid Max Sell Amount"); maxSellTxAmount = _amount; } function setMaxTxAmount(uint256 _amount) external onlyOwner { require(_amount >= totalSupply() / 100, "Invalid Max Tx Amount"); maxTxAmount = _amount; } function setMaxWalletAmount(uint256 _amount) external onlyOwner { require(_amount >= totalSupply() / 100, "Invalid Max Wallet Amount"); maxWalletAmount = _amount; } function setSwapThreshold(uint256 _amount) external onlyOwner { require(_amount >= 0, "Invalid Min Token Swap Amount"); swapThreshold = _amount; } function setCooldownWhitelist( address _address, bool _whitelist ) public onlyOwner { cooldownWhitelist[_address] = _whitelist; } function setPreExemption(address _address, bool _exempt) public onlyOwner { preExemption[_address] = _exempt; } function setMaxWalletExempt( address _address, bool _exempt ) public onlyOwner { maxWalletExempt[_address] = _exempt; } function removeAllLimits() external onlyOwner { limitsRemoved = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_mkt","type":"address"},{"internalType":"address","name":"_stk","type":"address"}],"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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"tokensIntoLiqudity","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"},{"inputs":[],"name":"BASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEAD_WALLET","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockCooldown","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"feeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"limitsRemoved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxTxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"maxWalletExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preExemption","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"sellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_blacklist","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_pool","type":"uint8"},{"internalType":"uint8","name":"_liq","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_whitelist","type":"bool"}],"name":"setCooldownWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setMaxTxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"setMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"setPreExemption","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_marketing","type":"uint8"},{"internalType":"uint8","name":"_pool","type":"uint8"},{"internalType":"uint8","name":"_liq","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_stakingPool","type":"address"}],"name":"setStakingPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLiquidityFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052678ac7230489e80000601b55601e805462ffffff191690553480156200002957600080fd5b50604051620035a6380380620035a68339810160408190526200004c91620008a0565b60405180604001604052806008815260200167446170707320414960c01b815250604051806040016040528060078152602001664441505053414960c81b81525081600390816200009e91906200097c565b506004620000ad82826200097c565b505050620000ca620000c4620005fe60201b60201c565b62000602565b6001600160a01b03821615801590620000eb57506001600160a01b03811615155b6200012f5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064015b60405180910390fd5b600d80546001600160a01b038085166001600160a01b031992831617909255600e80549284169290911691909117905562000176336a52b7d2dcc80cd2e400000062000654565b69d3c21bcecceda10000006012819055601381905560148190556200019d90600362000a5e565b601155601c80546201020562ffffff19918216811792839055601d805490921617905560ff620100008204811691620001df9161010090910416600562000a7e565b620001eb919062000a7e565b60ff908116600f55601d54620100008104821691620002139161010081048216911662000a7e565b6200021f919062000a7e565b60ff16601055466001036200025a57601f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620002d9565b4661a4b1036200029057601f80546001600160a01b03191673e54ca86531e17ef3616d22ca28b0d458b6c89106179055620002d9565b60405162461bcd60e51b815260206004820152601360248201527f436861696e206e6f7420737570706f7274656400000000000000000000000000604482015260640162000126565b601f546040805163c45a015560e01b815290516000926001600160a01b03169163c45a01559160048083019260209291908290030181865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a919062000a9a565b9050806001600160a01b031663c9c6539630601f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d6919062000a9a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044a919062000a9a565b601e80546001600160a01b03929092166301000000026301000000600160b81b03199092169190911790556200048230600162000717565b620004a1620004996005546001600160a01b031690565b600162000717565b620004ae3060016200074c565b620004cd620004c56005546001600160a01b031690565b60016200074c565b620004da30600162000781565b620004f9620004f16005546001600160a01b031690565b600162000781565b600d5462000512906001600160a01b0316600162000781565b601e546200053290630100000090046001600160a01b0316600162000781565b601f546200054b906001600160a01b0316600162000781565b62000558306001620007b6565b620005776200056f6005546001600160a01b031690565b6001620007b6565b600d5462000590906001600160a01b03166001620007b6565b601e54620005b090630100000090046001600160a01b03166001620007b6565b601f54620005c9906001600160a01b03166001620007b6565b620005d6306001620007eb565b620005f5620005ed6005546001600160a01b031690565b6001620007eb565b50505062000ad5565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620006ac5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000126565b8060026000828254620006c0919062000abf565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6200072162000825565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6200075662000825565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6200078b62000825565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b620007c062000825565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b620007f562000825565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b505050565b6005546001600160a01b03163314620008815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000126565b565b80516001600160a01b03811681146200089b57600080fd5b919050565b60008060408385031215620008b457600080fd5b620008bf8362000883565b9150620008cf6020840162000883565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200090357607f821691505b6020821081036200092457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200082057600081815260208120601f850160051c81016020861015620009535750805b601f850160051c820191505b8181101562000974578281556001016200095f565b505050505050565b81516001600160401b03811115620009985762000998620008d8565b620009b081620009a98454620008ee565b846200092a565b602080601f831160018114620009e85760008415620009cf5750858301515b600019600386901b1c1916600185901b17855562000974565b600085815260208120601f198616915b8281101562000a1957888601518255948401946001909101908401620009f8565b508582101562000a385787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a785762000a7862000a48565b92915050565b60ff818116838216019081111562000a785762000a7862000a48565b60006020828403121562000aad57600080fd5b62000ab88262000883565b9392505050565b8082018082111562000a785762000a7862000a48565b612ac18062000ae56000396000f3fe6080604052600436106103d25760003560e01c80638c0b5e22116101fd578063d3b895e511610118578063ec342ad0116100ab578063f53bc8351161007a578063f53bc83514610b19578063f887ea4014610b39578063f9f92be414610b59578063fb201b1d14610b89578063ffb54a9914610b9e57600080fd5b8063ec342ad014610aa4578063ec40643414610ab9578063ef998cf014610ad9578063f2fde38b14610af957600080fd5b8063dd62ed3e116100e7578063dd62ed3e14610a2e578063e22b62de14610a4e578063e388d53714610a6e578063ec28438a14610a8457600080fd5b8063d3b895e5146109d7578063d84bf7a8146109ed578063d851fd0d14610a03578063db05e5cb14610a1957600080fd5b8063a01c348311610190578063a9059cbb1161015f578063a9059cbb1461095c578063aa4bde281461097c578063b29ad50a14610992578063b9cb911f146109a757600080fd5b8063a01c3483146108e9578063a457c2d7146108ff578063a87e5da41461091f578063a8aa1b311461093557600080fd5b806395d89b41116101cc57806395d89b411461087e5780639be65a60146108935780639d0014b1146108b35780639d9241ec146108d357600080fd5b80638c0b5e22146107fa5780638da5cb5b146108105780638ebfc7961461082e578063918437971461084e57600080fd5b806335066960116102ed57806359b107b911610280578063715018a61161024f578063715018a6146107855780637537ccb61461079a57806379cc6790146107ba5780637d7d3aaf146107da57600080fd5b806359b107b9146107035780635d098b38146107195780636dca7e7b1461073957806370a082311461074f57600080fd5b806342966c68116102bc57806342966c6814610673578063494f6752146106935780634f0aad4e146106b357806350be7cdb146106e357600080fd5b806335066960146105ed57806339307e161461060d5780633950935114610623578063398daa851461064357600080fd5b806318160ddd116103655780632947c419116103345780632947c419146105725780632d3e474a146105995780633028f63a146105b9578063313ce567146105d957600080fd5b806318160ddd146104fe5780631d6f96551461051357806323b872dd1461053257806327a14fc21461055257600080fd5b80630c56ae3b116103a15780630c56ae3b146104705780630c7d08d3146104a8578063113a8b7b146104be578063153b0d1e146104de57600080fd5b80630445b667146103de5780630614117a1461040757806306fdde031461041e578063095ea7b31461044057600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f4601b5481565b6040519081526020015b60405180910390f35b34801561041357600080fd5b5061041c610bb8565b005b34801561042a57600080fd5b50610433610c52565b6040516103fe91906126e0565b34801561044c57600080fd5b5061046061045b366004612743565b610ce4565b60405190151581526020016103fe565b34801561047c57600080fd5b50600e54610490906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b3480156104b457600080fd5b506103f460195481565b3480156104ca57600080fd5b5061041c6104d936600461277d565b610cfe565b3480156104ea57600080fd5b5061041c6104f936600461277d565b610d31565b34801561050a57600080fd5b506002546103f4565b34801561051f57600080fd5b50601e5461046090610100900460ff1681565b34801561053e57600080fd5b5061046061054d3660046127b6565b610d64565b34801561055e57600080fd5b5061041c61056d3660046127f7565b610d88565b34801561057e57600080fd5b50610587600581565b60405160ff90911681526020016103fe565b3480156105a557600080fd5b50600d54610490906001600160a01b031681565b3480156105c557600080fd5b5061041c6105d4366004612810565b610df9565b3480156105e557600080fd5b506012610587565b3480156105f957600080fd5b506105876106083660046127f7565b610e87565b34801561061957600080fd5b506103f460155481565b34801561062f57600080fd5b5061046061063e366004612743565b610eb1565b34801561064f57600080fd5b5061046061065e366004612810565b60076020526000908152604090205460ff1681565b34801561067f57600080fd5b5061041c61068e3660046127f7565b610ed3565b34801561069f57600080fd5b5061041c6106ae36600461277d565b610edd565b3480156106bf57600080fd5b506104606106ce366004612810565b600c6020526000908152604090205460ff1681565b3480156106ef57600080fd5b5061041c6106fe36600461284a565b610f10565b34801561070f57600080fd5b506103f4600f5481565b34801561072557600080fd5b5061041c610734366004612810565b610fbb565b34801561074557600080fd5b506103f460165481565b34801561075b57600080fd5b506103f461076a366004612810565b6001600160a01b031660009081526020819052604090205490565b34801561079157600080fd5b5061041c611049565b3480156107a657600080fd5b5061041c6107b536600461277d565b61105d565b3480156107c657600080fd5b5061041c6107d5366004612743565b611090565b3480156107e657600080fd5b5061041c6107f536600461277d565b61111c565b34801561080657600080fd5b506103f460125481565b34801561081c57600080fd5b506005546001600160a01b0316610490565b34801561083a57600080fd5b5061041c61084936600461277d565b61114f565b34801561085a57600080fd5b50610460610869366004612810565b60086020526000908152604090205460ff1681565b34801561088a57600080fd5b50610433611182565b34801561089f57600080fd5b5061041c6108ae366004612810565b611191565b3480156108bf57600080fd5b5061041c6108ce3660046127f7565b6112c8565b3480156108df57600080fd5b506103f460105481565b3480156108f557600080fd5b5061049061dead81565b34801561090b57600080fd5b5061046061091a366004612743565b6112d5565b34801561092b57600080fd5b506103f460135481565b34801561094157600080fd5b50601e5461049090630100000090046001600160a01b031681565b34801561096857600080fd5b50610460610977366004612743565b611350565b34801561098857600080fd5b506103f460115481565b34801561099e57600080fd5b5061041c61135e565b3480156109b357600080fd5b506104606109c2366004612810565b600b6020526000908152604090205460ff1681565b3480156109e357600080fd5b506103f4601a5481565b3480156109f957600080fd5b506103f460185481565b348015610a0f57600080fd5b506103f460145481565b348015610a2557600080fd5b5061041c6113ee565b348015610a3a57600080fd5b506103f4610a4936600461288d565b611407565b348015610a5a57600080fd5b5061041c610a6936600461284a565b611432565b348015610a7a57600080fd5b506103f460175481565b348015610a9057600080fd5b5061041c610a9f3660046127f7565b6114d7565b348015610ab057600080fd5b506103f4606481565b348015610ac557600080fd5b50610587610ad43660046127f7565b611540565b348015610ae557600080fd5b5061041c610af43660046127f7565b611550565b348015610b0557600080fd5b5061041c610b14366004612810565b6115af565b348015610b2557600080fd5b5061041c610b343660046127f7565b611625565b348015610b4557600080fd5b50601f54610490906001600160a01b031681565b348015610b6557600080fd5b50610460610b74366004612810565b60066020526000908152604090205460ff1681565b348015610b9557600080fd5b5061041c61167d565b348015610baa57600080fd5b50601e546104609060ff1681565b610bc0611694565b604051600090339047908381818185875af1925050503d8060008114610c02576040519150601f19603f3d011682016040523d82523d6000602084013e610c07565b606091505b5050905080610c4f5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50565b606060038054610c61906128bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d906128bb565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf28185856116ee565b60019150505b92915050565b610d06611694565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610d39611694565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600033610d72858285611812565b610d7d858585611886565b506001949350505050565b610d90611694565b6064610d9b60025490565b610da5919061290b565b811015610df45760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204d61782057616c6c657420416d6f756e74000000000000006044820152606401610c46565b601155565b610e01611694565b6001600160a01b03811615801590610e275750600e546001600160a01b03828116911614155b610e655760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c46565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b601d8160038110610e9757600080fd5b60209182820401919006915054906101000a900460ff1681565b600033610cf2818585610ec48383611407565b610ece919061292d565b6116ee565b610c4f33826119d3565b610ee5611694565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610f18611694565b80610f238385612940565b610f2d9190612940565b60ff16600f81905560191015610f855760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20323525000000006044820152606401610c46565b6040805160608101825260ff80861682528481166020830152831691810191909152610fb590601c906003612638565b50505050565b610fc3611694565b6001600160a01b03811615801590610fe95750600d546001600160a01b03828116911614155b6110275760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c46565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b611051611694565b61105b6000611b05565b565b611065611694565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61109a8233611407565b8111156110e95760405162461bcd60e51b815260206004820152601b60248201527f42554e41493a204e6f7420656e6f75676820616c6c6f77616e636500000000006044820152606401610c46565b6000816110f68433611407565b6111009190612959565b905061110d8333836116ee565b61111783836119d3565b505050565b611124611694565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b611157611694565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b606060048054610c61906128bb565b611199611694565b306001600160a01b038216036111e95760405162461bcd60e51b815260206004820152601560248201527443616e6e6f742077697468647261772042554e414960581b6044820152606401610c46565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611254919061296c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111179190612985565b6112d0611694565b601b55565b600033816112e38286611407565b9050838110156113435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c46565b610d7d82868684036116ee565b600033610cf2818585611886565b601e805462ff00001916620100001790553060009081526020819052604090205460175410156113d05760405162461bcd60e51b815260206004820152601860248201527f42554e41493a204e6f7420656e6f75676820746f6b656e7300000000000000006044820152606401610c46565b6113db601754611b57565b6000601755601e805462ff000019169055565b6113f6611694565b601e805461ff001916610100179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61143a611694565b806114458385612940565b61144f9190612940565b60ff166010819055601910156114a75760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20323525000000006044820152606401610c46565b6040805160608101825260ff80861682528481166020830152831691810191909152610fb590601d906003612638565b6114df611694565b60646114ea60025490565b6114f4919061290b565b81101561153b5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590813585e08151e08105b5bdd5b9d605a1b6044820152606401610c46565b601255565b601c8160038110610e9757600080fd5b611558611694565b6012548110156115aa5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204d61782053656c6c20416d6f756e740000000000000000006044820152606401610c46565b601455565b6115b7611694565b6001600160a01b03811661161c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c46565b610c4f81611b05565b61162d611694565b6012548110156116785760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590813585e08109d5e48105b5bdd5b9d60521b6044820152606401610c46565b601355565b611685611694565b601e805460ff19166001179055565b6005546001600160a01b0316331461105b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c46565b6001600160a01b0383166117505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c46565b6001600160a01b0382166117b15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c46565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061181e8484611407565b90506000198114610fb557818110156118795760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c46565b610fb584848484036116ee565b611891838383611c9d565b601e5462010000900460ff166119c85730600090815260208190526040902054601b5481108015906118d85750601e546001600160a01b0385811663010000009092041614155b80156118f25750601f546001600160a01b03858116911614155b156119005761190081612029565b601e546001600160a01b0385811663010000009092041614801561193d57506001600160a01b03831660009081526007602052604090205460ff16155b806119805750601e546001600160a01b0384811663010000009092041614801561198057506001600160a01b03841660009081526007602052604090205460ff16155b156119c657601e546000906119ab9084906001600160a01b0388811663010000009092041614612242565b90506119b885308361233a565b6119c28184612959565b9250505b505b61111783838361233a565b6001600160a01b038216611a335760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c46565b6001600160a01b03821660009081526020819052604090205481811015611aa75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c46565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611b6460028361290b565b90506000611b728284612959565b905047611b7e836124de565b6000611b8a8247612959565b601f54909150611ba59030906001600160a01b0316856116ee565b601f5460405163f305d71960e01b8152306004820152602481018590526000604482018190526064820181905261dead60848301524260a4830152916001600160a01b03169063f305d71990849060c40160606040518083038185885af1158015611c14573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c3991906129a2565b9250505080601a6000828254611c4f919061292d565b909155505060408051868152602081018490529081018290527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505050565b601e54610100900460ff1680611cba57506001600160a01b038316155b80611ccc57506001600160a01b038216155b80611cdf5750601e5462010000900460ff165b15611ce957505050565b6001600160a01b03831660009081526006602052604090205460ff16158015611d2b57506001600160a01b03821660009081526006602052604090205460ff16155b611d775760405162461bcd60e51b815260206004820152601a60248201527f42554e41493a20426c61636b6c697374656420616464726573730000000000006044820152606401610c46565b601e5460ff16611de2576001600160a01b0383166000908152600b602052604090205460ff16611de25760405162461bcd60e51b815260206004820152601660248201527510955390524e88151c98591a5b99c8189b1bd8dad95960521b6044820152606401610c46565b6001600160a01b03831660009081526008602052604090205460ff16611ee557601e546001600160a01b036301000000909104811690841603611e7657601354811115611e715760405162461bcd60e51b815260206004820152601e60248201527f42554e41493a204d61782062757920616d6f756e7420657863656564656400006044820152606401610c46565b611ee5565b601e546001600160a01b036301000000909104811690831603611ee557601454811115611ee55760405162461bcd60e51b815260206004820152601f60248201527f42554e41493a204d61782073656c6c20616d6f756e74206578636565646564006044820152606401610c46565b6001600160a01b0382166000908152600c602052604090205460ff16611f8a5760115481611f28846001600160a01b031660009081526020819052604090205490565b611f32919061292d565b1115611f8a5760405162461bcd60e51b815260206004820152602160248201527f42554e41493a204d61782077616c6c657420616d6f756e7420657863656564656044820152601960fa1b6064820152608401610c46565b6001600160a01b0383166000908152600a602052604090205460ff16611117576001600160a01b0383166000908152600960205260409020544310156120005760405162461bcd60e51b815260206004820152600b60248201526a42554e41493a20426f743f60a81b6044820152606401610c46565b61200b60054361292d565b6001600160a01b038416600090815260096020526040902055505050565b601e805462ff0000191662010000179055601754601654601554600092916120509161292d565b61205a919061292d565b60155460165460175492935090918484146120bd57838560155461207e91906129d0565b612088919061290b565b9250838560165461209991906129d0565b6120a3919061290b565b9150816120b08487612959565b6120ba9190612959565b90505b80156120cc576120cc81611b57565b60006120d8838561292d565b1115612220576120f06120eb838561292d565b6124de565b476000841561219257612103848661292d565b61210d83876129d0565b612117919061290b565b600d546040519196506001600160a01b0316908690600081818185875af1925050503d8060008114612165576040519150601f19603f3d011682016040523d82523d6000602084013e61216a565b606091505b5050809150508061217a57600080fd5b846018600082825461218c919061292d565b90915550505b831561221d576121a28583612959565b600e546040519195506001600160a01b0316908590600081818185875af1925050503d80600081146121f0576040519150601f19603f3d011682016040523d82523d6000602084013e6121f5565b606091505b5050809150508061220557600080fd5b8360196000828254612217919061292d565b90915550505b50505b50506000601581905560168190556017555050601e805462ff00001916905550565b6000808261225257601054612256565b600f545b9050606461226485836129d0565b61226e919061290b565b915060008361227e57601d612281565b601c5b8054909150600090839061229990869060ff166129d0565b6122a3919061290b565b825490915060009084906122c0908790610100900460ff166129d0565b6122ca919061290b565b90506000816122d98488612959565b6122e39190612959565b905082601560008282546122f7919061292d565b925050819055508160166000828254612310919061292d565b925050819055508060176000828254612329919061292d565b909155509598975050505050505050565b6001600160a01b03831661239e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c46565b6001600160a01b0382166124005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c46565b6001600160a01b038316600090815260208190526040902054818110156124785760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c46565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610fb5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612513576125136129e7565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561256c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259091906129fd565b816001815181106125a3576125a36129e7565b6001600160a01b039283166020918202929092010152601f546125c991309116846116ee565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612602908590600090869030904290600401612a1a565b600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050505050565b6001830191839082156126bb5791602002820160005b8382111561268c57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261264e565b80156126b95782816101000a81549060ff021916905560010160208160000104928301926001030261268c565b505b506126c79291506126cb565b5090565b5b808211156126c757600081556001016126cc565b600060208083528351808285015260005b8181101561270d578581018301518582016040015282016126f1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c4f57600080fd5b6000806040838503121561275657600080fd5b82356127618161272e565b946020939093013593505050565b8015158114610c4f57600080fd5b6000806040838503121561279057600080fd5b823561279b8161272e565b915060208301356127ab8161276f565b809150509250929050565b6000806000606084860312156127cb57600080fd5b83356127d68161272e565b925060208401356127e68161272e565b929592945050506040919091013590565b60006020828403121561280957600080fd5b5035919050565b60006020828403121561282257600080fd5b813561282d8161272e565b9392505050565b803560ff8116811461284557600080fd5b919050565b60008060006060848603121561285f57600080fd5b61286884612834565b925061287660208501612834565b915061288460408501612834565b90509250925092565b600080604083850312156128a057600080fd5b82356128ab8161272e565b915060208301356127ab8161272e565b600181811c908216806128cf57607f821691505b6020821081036128ef57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008261292857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cf857610cf86128f5565b60ff8181168382160190811115610cf857610cf86128f5565b81810381811115610cf857610cf86128f5565b60006020828403121561297e57600080fd5b5051919050565b60006020828403121561299757600080fd5b815161282d8161276f565b6000806000606084860312156129b757600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610cf857610cf86128f5565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a0f57600080fd5b815161282d8161272e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a6a5784516001600160a01b031683529383019391830191600101612a45565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220bcd1043d335ddbfb4289d2ff62901b4be35a7b0484da035fe70a8b8fc89a67e464736f6c63430008130033000000000000000000000000d545457f5ba33bd21ceb51fdfc1e0036527e00f8000000000000000000000000d545457f5ba33bd21ceb51fdfc1e0036527e00f8
Deployed Bytecode
0x6080604052600436106103d25760003560e01c80638c0b5e22116101fd578063d3b895e511610118578063ec342ad0116100ab578063f53bc8351161007a578063f53bc83514610b19578063f887ea4014610b39578063f9f92be414610b59578063fb201b1d14610b89578063ffb54a9914610b9e57600080fd5b8063ec342ad014610aa4578063ec40643414610ab9578063ef998cf014610ad9578063f2fde38b14610af957600080fd5b8063dd62ed3e116100e7578063dd62ed3e14610a2e578063e22b62de14610a4e578063e388d53714610a6e578063ec28438a14610a8457600080fd5b8063d3b895e5146109d7578063d84bf7a8146109ed578063d851fd0d14610a03578063db05e5cb14610a1957600080fd5b8063a01c348311610190578063a9059cbb1161015f578063a9059cbb1461095c578063aa4bde281461097c578063b29ad50a14610992578063b9cb911f146109a757600080fd5b8063a01c3483146108e9578063a457c2d7146108ff578063a87e5da41461091f578063a8aa1b311461093557600080fd5b806395d89b41116101cc57806395d89b411461087e5780639be65a60146108935780639d0014b1146108b35780639d9241ec146108d357600080fd5b80638c0b5e22146107fa5780638da5cb5b146108105780638ebfc7961461082e578063918437971461084e57600080fd5b806335066960116102ed57806359b107b911610280578063715018a61161024f578063715018a6146107855780637537ccb61461079a57806379cc6790146107ba5780637d7d3aaf146107da57600080fd5b806359b107b9146107035780635d098b38146107195780636dca7e7b1461073957806370a082311461074f57600080fd5b806342966c68116102bc57806342966c6814610673578063494f6752146106935780634f0aad4e146106b357806350be7cdb146106e357600080fd5b806335066960146105ed57806339307e161461060d5780633950935114610623578063398daa851461064357600080fd5b806318160ddd116103655780632947c419116103345780632947c419146105725780632d3e474a146105995780633028f63a146105b9578063313ce567146105d957600080fd5b806318160ddd146104fe5780631d6f96551461051357806323b872dd1461053257806327a14fc21461055257600080fd5b80630c56ae3b116103a15780630c56ae3b146104705780630c7d08d3146104a8578063113a8b7b146104be578063153b0d1e146104de57600080fd5b80630445b667146103de5780630614117a1461040757806306fdde031461041e578063095ea7b31461044057600080fd5b366103d957005b600080fd5b3480156103ea57600080fd5b506103f4601b5481565b6040519081526020015b60405180910390f35b34801561041357600080fd5b5061041c610bb8565b005b34801561042a57600080fd5b50610433610c52565b6040516103fe91906126e0565b34801561044c57600080fd5b5061046061045b366004612743565b610ce4565b60405190151581526020016103fe565b34801561047c57600080fd5b50600e54610490906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b3480156104b457600080fd5b506103f460195481565b3480156104ca57600080fd5b5061041c6104d936600461277d565b610cfe565b3480156104ea57600080fd5b5061041c6104f936600461277d565b610d31565b34801561050a57600080fd5b506002546103f4565b34801561051f57600080fd5b50601e5461046090610100900460ff1681565b34801561053e57600080fd5b5061046061054d3660046127b6565b610d64565b34801561055e57600080fd5b5061041c61056d3660046127f7565b610d88565b34801561057e57600080fd5b50610587600581565b60405160ff90911681526020016103fe565b3480156105a557600080fd5b50600d54610490906001600160a01b031681565b3480156105c557600080fd5b5061041c6105d4366004612810565b610df9565b3480156105e557600080fd5b506012610587565b3480156105f957600080fd5b506105876106083660046127f7565b610e87565b34801561061957600080fd5b506103f460155481565b34801561062f57600080fd5b5061046061063e366004612743565b610eb1565b34801561064f57600080fd5b5061046061065e366004612810565b60076020526000908152604090205460ff1681565b34801561067f57600080fd5b5061041c61068e3660046127f7565b610ed3565b34801561069f57600080fd5b5061041c6106ae36600461277d565b610edd565b3480156106bf57600080fd5b506104606106ce366004612810565b600c6020526000908152604090205460ff1681565b3480156106ef57600080fd5b5061041c6106fe36600461284a565b610f10565b34801561070f57600080fd5b506103f4600f5481565b34801561072557600080fd5b5061041c610734366004612810565b610fbb565b34801561074557600080fd5b506103f460165481565b34801561075b57600080fd5b506103f461076a366004612810565b6001600160a01b031660009081526020819052604090205490565b34801561079157600080fd5b5061041c611049565b3480156107a657600080fd5b5061041c6107b536600461277d565b61105d565b3480156107c657600080fd5b5061041c6107d5366004612743565b611090565b3480156107e657600080fd5b5061041c6107f536600461277d565b61111c565b34801561080657600080fd5b506103f460125481565b34801561081c57600080fd5b506005546001600160a01b0316610490565b34801561083a57600080fd5b5061041c61084936600461277d565b61114f565b34801561085a57600080fd5b50610460610869366004612810565b60086020526000908152604090205460ff1681565b34801561088a57600080fd5b50610433611182565b34801561089f57600080fd5b5061041c6108ae366004612810565b611191565b3480156108bf57600080fd5b5061041c6108ce3660046127f7565b6112c8565b3480156108df57600080fd5b506103f460105481565b3480156108f557600080fd5b5061049061dead81565b34801561090b57600080fd5b5061046061091a366004612743565b6112d5565b34801561092b57600080fd5b506103f460135481565b34801561094157600080fd5b50601e5461049090630100000090046001600160a01b031681565b34801561096857600080fd5b50610460610977366004612743565b611350565b34801561098857600080fd5b506103f460115481565b34801561099e57600080fd5b5061041c61135e565b3480156109b357600080fd5b506104606109c2366004612810565b600b6020526000908152604090205460ff1681565b3480156109e357600080fd5b506103f4601a5481565b3480156109f957600080fd5b506103f460185481565b348015610a0f57600080fd5b506103f460145481565b348015610a2557600080fd5b5061041c6113ee565b348015610a3a57600080fd5b506103f4610a4936600461288d565b611407565b348015610a5a57600080fd5b5061041c610a6936600461284a565b611432565b348015610a7a57600080fd5b506103f460175481565b348015610a9057600080fd5b5061041c610a9f3660046127f7565b6114d7565b348015610ab057600080fd5b506103f4606481565b348015610ac557600080fd5b50610587610ad43660046127f7565b611540565b348015610ae557600080fd5b5061041c610af43660046127f7565b611550565b348015610b0557600080fd5b5061041c610b14366004612810565b6115af565b348015610b2557600080fd5b5061041c610b343660046127f7565b611625565b348015610b4557600080fd5b50601f54610490906001600160a01b031681565b348015610b6557600080fd5b50610460610b74366004612810565b60066020526000908152604090205460ff1681565b348015610b9557600080fd5b5061041c61167d565b348015610baa57600080fd5b50601e546104609060ff1681565b610bc0611694565b604051600090339047908381818185875af1925050503d8060008114610c02576040519150601f19603f3d011682016040523d82523d6000602084013e610c07565b606091505b5050905080610c4f5760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064015b60405180910390fd5b50565b606060038054610c61906128bb565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8d906128bb565b8015610cda5780601f10610caf57610100808354040283529160200191610cda565b820191906000526020600020905b815481529060010190602001808311610cbd57829003601f168201915b5050505050905090565b600033610cf28185856116ee565b60019150505b92915050565b610d06611694565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b610d39611694565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b600033610d72858285611812565b610d7d858585611886565b506001949350505050565b610d90611694565b6064610d9b60025490565b610da5919061290b565b811015610df45760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204d61782057616c6c657420416d6f756e74000000000000006044820152606401610c46565b601155565b610e01611694565b6001600160a01b03811615801590610e275750600e546001600160a01b03828116911614155b610e655760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c46565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b601d8160038110610e9757600080fd5b60209182820401919006915054906101000a900460ff1681565b600033610cf2818585610ec48383611407565b610ece919061292d565b6116ee565b610c4f33826119d3565b610ee5611694565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b610f18611694565b80610f238385612940565b610f2d9190612940565b60ff16600f81905560191015610f855760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20323525000000006044820152606401610c46565b6040805160608101825260ff80861682528481166020830152831691810191909152610fb590601c906003612638565b50505050565b610fc3611694565b6001600160a01b03811615801590610fe95750600d546001600160a01b03828116911614155b6110275760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c46565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b611051611694565b61105b6000611b05565b565b611065611694565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61109a8233611407565b8111156110e95760405162461bcd60e51b815260206004820152601b60248201527f42554e41493a204e6f7420656e6f75676820616c6c6f77616e636500000000006044820152606401610c46565b6000816110f68433611407565b6111009190612959565b905061110d8333836116ee565b61111783836119d3565b505050565b611124611694565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b611157611694565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b606060048054610c61906128bb565b611199611694565b306001600160a01b038216036111e95760405162461bcd60e51b815260206004820152601560248201527443616e6e6f742077697468647261772042554e414960581b6044820152606401610c46565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611230573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611254919061296c565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156112a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111179190612985565b6112d0611694565b601b55565b600033816112e38286611407565b9050838110156113435760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610c46565b610d7d82868684036116ee565b600033610cf2818585611886565b601e805462ff00001916620100001790553060009081526020819052604090205460175410156113d05760405162461bcd60e51b815260206004820152601860248201527f42554e41493a204e6f7420656e6f75676820746f6b656e7300000000000000006044820152606401610c46565b6113db601754611b57565b6000601755601e805462ff000019169055565b6113f6611694565b601e805461ff001916610100179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61143a611694565b806114458385612940565b61144f9190612940565b60ff166010819055601910156114a75760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20323525000000006044820152606401610c46565b6040805160608101825260ff80861682528481166020830152831691810191909152610fb590601d906003612638565b6114df611694565b60646114ea60025490565b6114f4919061290b565b81101561153b5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a590813585e08151e08105b5bdd5b9d605a1b6044820152606401610c46565b601255565b601c8160038110610e9757600080fd5b611558611694565b6012548110156115aa5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204d61782053656c6c20416d6f756e740000000000000000006044820152606401610c46565b601455565b6115b7611694565b6001600160a01b03811661161c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c46565b610c4f81611b05565b61162d611694565b6012548110156116785760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a590813585e08109d5e48105b5bdd5b9d60521b6044820152606401610c46565b601355565b611685611694565b601e805460ff19166001179055565b6005546001600160a01b0316331461105b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c46565b6001600160a01b0383166117505760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610c46565b6001600160a01b0382166117b15760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610c46565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061181e8484611407565b90506000198114610fb557818110156118795760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610c46565b610fb584848484036116ee565b611891838383611c9d565b601e5462010000900460ff166119c85730600090815260208190526040902054601b5481108015906118d85750601e546001600160a01b0385811663010000009092041614155b80156118f25750601f546001600160a01b03858116911614155b156119005761190081612029565b601e546001600160a01b0385811663010000009092041614801561193d57506001600160a01b03831660009081526007602052604090205460ff16155b806119805750601e546001600160a01b0384811663010000009092041614801561198057506001600160a01b03841660009081526007602052604090205460ff16155b156119c657601e546000906119ab9084906001600160a01b0388811663010000009092041614612242565b90506119b885308361233a565b6119c28184612959565b9250505b505b61111783838361233a565b6001600160a01b038216611a335760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610c46565b6001600160a01b03821660009081526020819052604090205481811015611aa75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610c46565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611b6460028361290b565b90506000611b728284612959565b905047611b7e836124de565b6000611b8a8247612959565b601f54909150611ba59030906001600160a01b0316856116ee565b601f5460405163f305d71960e01b8152306004820152602481018590526000604482018190526064820181905261dead60848301524260a4830152916001600160a01b03169063f305d71990849060c40160606040518083038185885af1158015611c14573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c3991906129a2565b9250505080601a6000828254611c4f919061292d565b909155505060408051868152602081018490529081018290527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a1505050505050565b601e54610100900460ff1680611cba57506001600160a01b038316155b80611ccc57506001600160a01b038216155b80611cdf5750601e5462010000900460ff165b15611ce957505050565b6001600160a01b03831660009081526006602052604090205460ff16158015611d2b57506001600160a01b03821660009081526006602052604090205460ff16155b611d775760405162461bcd60e51b815260206004820152601a60248201527f42554e41493a20426c61636b6c697374656420616464726573730000000000006044820152606401610c46565b601e5460ff16611de2576001600160a01b0383166000908152600b602052604090205460ff16611de25760405162461bcd60e51b815260206004820152601660248201527510955390524e88151c98591a5b99c8189b1bd8dad95960521b6044820152606401610c46565b6001600160a01b03831660009081526008602052604090205460ff16611ee557601e546001600160a01b036301000000909104811690841603611e7657601354811115611e715760405162461bcd60e51b815260206004820152601e60248201527f42554e41493a204d61782062757920616d6f756e7420657863656564656400006044820152606401610c46565b611ee5565b601e546001600160a01b036301000000909104811690831603611ee557601454811115611ee55760405162461bcd60e51b815260206004820152601f60248201527f42554e41493a204d61782073656c6c20616d6f756e74206578636565646564006044820152606401610c46565b6001600160a01b0382166000908152600c602052604090205460ff16611f8a5760115481611f28846001600160a01b031660009081526020819052604090205490565b611f32919061292d565b1115611f8a5760405162461bcd60e51b815260206004820152602160248201527f42554e41493a204d61782077616c6c657420616d6f756e7420657863656564656044820152601960fa1b6064820152608401610c46565b6001600160a01b0383166000908152600a602052604090205460ff16611117576001600160a01b0383166000908152600960205260409020544310156120005760405162461bcd60e51b815260206004820152600b60248201526a42554e41493a20426f743f60a81b6044820152606401610c46565b61200b60054361292d565b6001600160a01b038416600090815260096020526040902055505050565b601e805462ff0000191662010000179055601754601654601554600092916120509161292d565b61205a919061292d565b60155460165460175492935090918484146120bd57838560155461207e91906129d0565b612088919061290b565b9250838560165461209991906129d0565b6120a3919061290b565b9150816120b08487612959565b6120ba9190612959565b90505b80156120cc576120cc81611b57565b60006120d8838561292d565b1115612220576120f06120eb838561292d565b6124de565b476000841561219257612103848661292d565b61210d83876129d0565b612117919061290b565b600d546040519196506001600160a01b0316908690600081818185875af1925050503d8060008114612165576040519150601f19603f3d011682016040523d82523d6000602084013e61216a565b606091505b5050809150508061217a57600080fd5b846018600082825461218c919061292d565b90915550505b831561221d576121a28583612959565b600e546040519195506001600160a01b0316908590600081818185875af1925050503d80600081146121f0576040519150601f19603f3d011682016040523d82523d6000602084013e6121f5565b606091505b5050809150508061220557600080fd5b8360196000828254612217919061292d565b90915550505b50505b50506000601581905560168190556017555050601e805462ff00001916905550565b6000808261225257601054612256565b600f545b9050606461226485836129d0565b61226e919061290b565b915060008361227e57601d612281565b601c5b8054909150600090839061229990869060ff166129d0565b6122a3919061290b565b825490915060009084906122c0908790610100900460ff166129d0565b6122ca919061290b565b90506000816122d98488612959565b6122e39190612959565b905082601560008282546122f7919061292d565b925050819055508160166000828254612310919061292d565b925050819055508060176000828254612329919061292d565b909155509598975050505050505050565b6001600160a01b03831661239e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610c46565b6001600160a01b0382166124005760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610c46565b6001600160a01b038316600090815260208190526040902054818110156124785760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610c46565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610fb5565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612513576125136129e7565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561256c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061259091906129fd565b816001815181106125a3576125a36129e7565b6001600160a01b039283166020918202929092010152601f546125c991309116846116ee565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612602908590600090869030904290600401612a1a565b600060405180830381600087803b15801561261c57600080fd5b505af1158015612630573d6000803e3d6000fd5b505050505050565b6001830191839082156126bb5791602002820160005b8382111561268c57835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030261264e565b80156126b95782816101000a81549060ff021916905560010160208160000104928301926001030261268c565b505b506126c79291506126cb565b5090565b5b808211156126c757600081556001016126cc565b600060208083528351808285015260005b8181101561270d578581018301518582016040015282016126f1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c4f57600080fd5b6000806040838503121561275657600080fd5b82356127618161272e565b946020939093013593505050565b8015158114610c4f57600080fd5b6000806040838503121561279057600080fd5b823561279b8161272e565b915060208301356127ab8161276f565b809150509250929050565b6000806000606084860312156127cb57600080fd5b83356127d68161272e565b925060208401356127e68161272e565b929592945050506040919091013590565b60006020828403121561280957600080fd5b5035919050565b60006020828403121561282257600080fd5b813561282d8161272e565b9392505050565b803560ff8116811461284557600080fd5b919050565b60008060006060848603121561285f57600080fd5b61286884612834565b925061287660208501612834565b915061288460408501612834565b90509250925092565b600080604083850312156128a057600080fd5b82356128ab8161272e565b915060208301356127ab8161272e565b600181811c908216806128cf57607f821691505b6020821081036128ef57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008261292857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610cf857610cf86128f5565b60ff8181168382160190811115610cf857610cf86128f5565b81810381811115610cf857610cf86128f5565b60006020828403121561297e57600080fd5b5051919050565b60006020828403121561299757600080fd5b815161282d8161276f565b6000806000606084860312156129b757600080fd5b8351925060208401519150604084015190509250925092565b8082028115828204841417610cf857610cf86128f5565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612a0f57600080fd5b815161282d8161272e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a6a5784516001600160a01b031683529383019391830191600101612a45565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220bcd1043d335ddbfb4289d2ff62901b4be35a7b0484da035fe70a8b8fc89a67e464736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000d545457f5ba33bd21ceb51fdfc1e0036527e00f8000000000000000000000000d545457f5ba33bd21ceb51fdfc1e0036527e00f8
-----Decoded View---------------
Arg [0] : _mkt (address): 0xd545457f5Ba33Bd21ceB51FDfc1E0036527e00F8
Arg [1] : _stk (address): 0xd545457f5Ba33Bd21ceB51FDfc1E0036527e00F8
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000d545457f5ba33bd21ceb51fdfc1e0036527e00f8
Arg [1] : 000000000000000000000000d545457f5ba33bd21ceb51fdfc1e0036527e00f8
Deployed Bytecode Sourcemap
31048:16591:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31963:36;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;31963:36:0;;;;;;;;44804:201;;;;;;;;;;;;;:::i;:::-;;19237:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21654:226::-;;;;;;;;;;-1:-1:-1;21654:226:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;21654:226:0;1205:187:1;31525:26:0;;;;;;;;;;-1:-1:-1;31525:26:0;;;;-1:-1:-1;;;;;31525:26:0;;;;;;-1:-1:-1;;;;;1561:32:1;;;1543:51;;1531:2;1516:18;31525:26:0;1397:203:1;31889:28:0;;;;;;;;;;;;;;;;47080:166;;;;;;;;;;-1:-1:-1;47080:166:0;;;;;:::i;:::-;;:::i;44080:152::-;;;;;;;;;;-1:-1:-1;44080:152:0;;;;;:::i;:::-;;:::i;20357:108::-;;;;;;;;;;-1:-1:-1;20445:12:0;;20357:108;;32246:33;;;;;;;;;;-1:-1:-1;32246:33:0;;;;;;;;;;;22460:295;;;;;;;;;;-1:-1:-1;22460:295:0;;;;;:::i;:::-;;:::i;46708:187::-;;;;;;;;;;-1:-1:-1;46708:187:0;;;;;:::i;:::-;;:::i;31446:39::-;;;;;;;;;;;;31484:1;31446:39;;;;;2933:4:1;2921:17;;;2903:36;;2891:2;2876:18;31446:39:0;2761:184:1;31494:24:0;;;;;;;;;;-1:-1:-1;31494:24:0;;;;-1:-1:-1;;;;;31494:24:0;;;45648:243;;;;;;;;;;-1:-1:-1;45648:243:0;;;;;:::i;:::-;;:::i;20199:93::-;;;;;;;;;;-1:-1:-1;20282:2:0;20199:93;;32038:24;;;;;;;;;;-1:-1:-1;32038:24:0;;;;;:::i;:::-;;:::i;31756:25::-;;;;;;;;;;;;;;;;23164:263;;;;;;;;;;-1:-1:-1;23164:263:0;;;;;:::i;:::-;;:::i;31138:41::-;;;;;;;;;;-1:-1:-1;31138:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36720:83;;;;;;;;;;-1:-1:-1;36720:83:0;;;;;:::i;:::-;;:::i;47254:125::-;;;;;;;;;;-1:-1:-1;47254:125:0;;;;;:::i;:::-;;:::i;31390:47::-;;;;;;;;;;-1:-1:-1;31390:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42865:289;;;;;;;;;;-1:-1:-1;42865:289:0;;;;;:::i;:::-;;:::i;31560:23::-;;;;;;;;;;;;;;;;45216:235;;;;;;;;;;-1:-1:-1;45216:235:0;;;;;:::i;:::-;;:::i;31788:23::-;;;;;;;;;;;;;;;;20528:143;;;;;;;;;;-1:-1:-1;20528:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20645:18:0;20618:7;20645:18;;;;;;;;;;;;20528:143;16053:103;;;;;;;;;;;;;:::i;47387:156::-;;;;;;;;;;-1:-1:-1;47387:156:0;;;;;:::i;:::-;;:::i;36973:368::-;;;;;;;;;;-1:-1:-1;36973:368:0;;;;;:::i;:::-;;:::i;46045:121::-;;;;;;;;;;-1:-1:-1;46045:121:0;;;;;:::i;:::-;;:::i;31657:23::-;;;;;;;;;;;;;;;;15405:87;;;;;;;;;;-1:-1:-1;15478:6:0;;-1:-1:-1;;;;;15478:6:0;15405:87;;43819:117;;;;;;;;;;-1:-1:-1;43819:117:0;;;;;:::i;:::-;;:::i;31186:43::-;;;;;;;;;;-1:-1:-1;31186:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19456:104;;;;;;;;;;;;;:::i;44490:256::-;;;;;;;;;;-1:-1:-1;44490:256:0;;;;;:::i;:::-;;:::i;46903:169::-;;;;;;;;;;-1:-1:-1;46903:169:0;;;;;:::i;:::-;;:::i;31590:24::-;;;;;;;;;;;;;;;;32110:89;;;;;;;;;;;;32157:42;32110:89;;23930:498;;;;;;;;;;-1:-1:-1;23930:498:0;;;;;:::i;:::-;;:::i;31687:26::-;;;;;;;;;;;;;;;;32324;;;;;;;;;;-1:-1:-1;32324:26:0;;;;;;;-1:-1:-1;;;;;32324:26:0;;;20877:218;;;;;;;;;;-1:-1:-1;20877:218:0;;;;;:::i;:::-;;:::i;31623:27::-;;;;;;;;;;;;;;;;41069:250;;;;;;;;;;;;;:::i;31339:44::-;;;;;;;;;;-1:-1:-1;31339:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31924:30;;;;;;;;;;;;;;;;31852;;;;;;;;;;;;;;;;31720:27;;;;;;;;;;;;;;;;47551:85;;;;;;;;;;;;;:::i;21158:176::-;;;;;;;;;;-1:-1:-1;21158:176:0;;;;;:::i;:::-;;:::i;43386:293::-;;;;;;;;;;-1:-1:-1;43386:293:0;;;;;:::i;:::-;;:::i;31818:25::-;;;;;;;;;;;;;;;;46525:175;;;;;;;;;;-1:-1:-1;46525:175:0;;;;;:::i;:::-;;:::i;32069:34::-;;;;;;;;;;;;32100:3;32069:34;;32008:23;;;;;;;;;;-1:-1:-1;32008:23:0;;;;;:::i;:::-;;:::i;46348:169::-;;;;;;;;;;-1:-1:-1;46348:169:0;;;;;:::i;:::-;;:::i;16311:238::-;;;;;;;;;;-1:-1:-1;16311:238:0;;;;;:::i;:::-;;:::i;46174:166::-;;;;;;;;;;-1:-1:-1;46174:166:0;;;;;:::i;:::-;;:::i;32357:32::-;;;;;;;;;;-1:-1:-1;32357:32:0;;;;-1:-1:-1;;;;;32357:32:0;;;31090:41;;;;;;;;;;-1:-1:-1;31090:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;44285:77;;;;;;;;;;;;;:::i;32208:31::-;;;;;;;;;;-1:-1:-1;32208:31:0;;;;;;;;44804:201;15291:13;:11;:13::i;:::-;44872:82:::1;::::0;44857:9:::1;::::0;44880:10:::1;::::0;44904:21:::1;::::0;44857:9;44872:82;44857:9;44872:82;44904:21;44880:10;44872:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44856:98;;;44973:4;44965:32;;;::::0;-1:-1:-1;;;44965:32:0;;4959:2:1;44965:32:0::1;::::0;::::1;4941:21:1::0;4998:2;4978:18;;;4971:30;-1:-1:-1;;;5017:18:1;;;5010:45;5072:18;;44965:32:0::1;;;;;;;;;44845:160;44804:201::o:0;19237:100::-;19291:13;19324:5;19317:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19237:100;:::o;21654:226::-;21762:4;839:10;21818:32;839:10;21834:7;21843:6;21818:8;:32::i;:::-;21868:4;21861:11;;;21654:226;;;;;:::o;47080:166::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;47198:27:0;;;::::1;;::::0;;;:17:::1;:27;::::0;;;;:40;;-1:-1:-1;;47198:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47080:166::o;44080:152::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;44192:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:32;;-1:-1:-1;;44192:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44080:152::o;22460:295::-;22591:4;839:10;22649:38;22665:4;839:10;22680:6;22649:15;:38::i;:::-;22698:27;22708:4;22714:2;22718:6;22698:9;:27::i;:::-;-1:-1:-1;22743:4:0;;22460:295;-1:-1:-1;;;;22460:295:0:o;46708:187::-;15291:13;:11;:13::i;:::-;46818:3:::1;46802:13;20445:12:::0;;;20357:108;46802:13:::1;:19;;;;:::i;:::-;46791:7;:30;;46783:68;;;::::0;-1:-1:-1;;;46783:68:0;;6042:2:1;46783:68:0::1;::::0;::::1;6024:21:1::0;6081:2;6061:18;;;6054:30;6120:27;6100:18;;;6093:55;6165:18;;46783:68:0::1;5840:349:1::0;46783:68:0::1;46862:15;:25:::0;46708:187::o;45648:243::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;45746:26:0;::::1;::::0;;::::1;::::0;:57:::1;;-1:-1:-1::0;45792:11:0::1;::::0;-1:-1:-1;;;;;45776:27:0;;::::1;45792:11:::0;::::1;45776:27;;45746:57;45724:122;;;::::0;-1:-1:-1;;;45724:122:0;;6396:2:1;45724:122:0::1;::::0;::::1;6378:21:1::0;6435:2;6415:18;;;6408:30;-1:-1:-1;;;6454:18:1;;;6447:45;6509:18;;45724:122:0::1;6194:339:1::0;45724:122:0::1;45857:11;:26:::0;;-1:-1:-1;;;;;;45857:26:0::1;-1:-1:-1::0;;;;;45857:26:0;;;::::1;::::0;;;::::1;::::0;;45648:243::o;32038:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23164:263::-;23277:4;839:10;23333:64;839:10;23349:7;23386:10;23358:25;839:10;23349:7;23358:9;:25::i;:::-;:38;;;;:::i;:::-;23333:8;:64::i;36720:83::-;36770:25;36776:10;36788:6;36770:5;:25::i;47254:125::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;47339:22:0;;;::::1;;::::0;;;:12:::1;:22;::::0;;;;:32;;-1:-1:-1;;47339:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47254:125::o;42865:289::-;15291:13;:11;:13::i;:::-;43027:4;43006:18:::1;43019:5:::0;43006:10;:18:::1;:::i;:::-;:25;;;;:::i;:::-;42992:39;;:11;:39:::0;;;43065:2:::1;-1:-1:-1::0;43050:17:0::1;43042:58;;;::::0;-1:-1:-1;;;43042:58:0;;7023:2:1;43042:58:0::1;::::0;::::1;7005:21:1::0;7062:2;7042:18;;;7035:30;7101;7081:18;;;7074:58;7149:18;;43042:58:0::1;6821:352:1::0;43042:58:0::1;43111:35;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;::::1;::::0;:7:::1;::::0;:35:::1;;:::i;:::-;;42865:289:::0;;;:::o;45216:235::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;45316:24:0;::::1;::::0;;::::1;::::0;:51:::1;;-1:-1:-1::0;45358:9:0::1;::::0;-1:-1:-1;;;;;45344:23:0;;::::1;45358:9:::0;::::1;45344:23;;45316:51;45294:116;;;::::0;-1:-1:-1;;;45294:116:0;;6396:2:1;45294:116:0::1;::::0;::::1;6378:21:1::0;6435:2;6415:18;;;6408:30;-1:-1:-1;;;6454:18:1;;;6447:45;6509:18;;45294:116:0::1;6194:339:1::0;45294:116:0::1;45421:9;:22:::0;;-1:-1:-1;;;;;;45421:22:0::1;-1:-1:-1::0;;;;;45421:22:0;;;::::1;::::0;;;::::1;::::0;;45216:235::o;16053:103::-;15291:13;:11;:13::i;:::-;16118:30:::1;16145:1;16118:18;:30::i;:::-;16053:103::o:0;47387:156::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;47500:25:0;;;::::1;;::::0;;;:15:::1;:25;::::0;;;;:35;;-1:-1:-1;;47500:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47387:156::o;36973:368::-;37076:30;37086:7;37095:10;37076:9;:30::i;:::-;37066:6;:40;;37044:117;;;;-1:-1:-1;;;37044:117:0;;7380:2:1;37044:117:0;;;7362:21:1;7419:2;7399:18;;;7392:30;7458:29;7438:18;;;7431:57;7505:18;;37044:117:0;7178:351:1;37044:117:0;37172:26;37234:6;37201:30;37211:7;37220:10;37201:9;:30::i;:::-;:39;;;;:::i;:::-;37172:68;;37251:49;37260:7;37269:10;37281:18;37251:8;:49::i;:::-;37311:22;37317:7;37326:6;37311:5;:22::i;:::-;37033:308;36973:368;;:::o;46045:121::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;46128:21:0;;;::::1;;::::0;;;:11:::1;:21;::::0;;;;:30;;-1:-1:-1;;46128:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46045:121::o;43819:117::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;43900:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28;;-1:-1:-1;;43900:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43819:117::o;19456:104::-;19512:13;19545:7;19538:14;;;;;:::i;44490:256::-;15291:13;:11;:13::i;:::-;44584:4:::1;-1:-1:-1::0;;;;;44566:23:0;::::1;::::0;44558:57:::1;;;::::0;-1:-1:-1;;;44558:57:0;;7869:2:1;44558:57:0::1;::::0;::::1;7851:21:1::0;7908:2;7888:18;;;7881:30;-1:-1:-1;;;7927:18:1;;;7920:51;7988:18;;44558:57:0::1;7667:345:1::0;44558:57:0::1;44644:39;::::0;-1:-1:-1;;;44644:39:0;;44677:4:::1;44644:39;::::0;::::1;1543:51:1::0;44626:15:0::1;::::0;-1:-1:-1;;;;;44644:24:0;::::1;::::0;::::1;::::0;1516:18:1;;44644:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44694:44;::::0;-1:-1:-1;;;44694:44:0;;44718:10:::1;44694:44;::::0;::::1;8380:51:1::0;8447:18;;;8440:34;;;44626:57:0;;-1:-1:-1;;;;;;44694:23:0;::::1;::::0;::::1;::::0;8353:18:1;;44694:44:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;46903:169::-:0;15291:13;:11;:13::i;:::-;47041::::1;:23:::0;46903:169::o;23930:498::-;24048:4;839:10;24048:4;24131:25;839:10;24148:7;24131:9;:25::i;:::-;24104:52;;24209:15;24189:16;:35;;24167:122;;;;-1:-1:-1;;;24167:122:0;;9295:2:1;24167:122:0;;;9277:21:1;9334:2;9314:18;;;9307:30;9373:34;9353:18;;;9346:62;-1:-1:-1;;;9424:18:1;;;9417:35;9469:19;;24167:122:0;9093:401:1;24167:122:0;24325:60;24334:5;24341:7;24369:15;24350:16;:34;24325:8;:60::i;20877:218::-;20981:4;839:10;21037:28;839:10;21054:2;21058:6;21037:9;:28::i;41069:250::-;32632:8;:15;;-1:-1:-1;;32632:15:0;;;;;41184:4:::1;-1:-1:-1::0;20645:18:0;;;;;;;;;;;41149:13:::1;;:41;;41127:115;;;::::0;-1:-1:-1;;;41127:115:0;;9701:2:1;41127:115:0::1;::::0;::::1;9683:21:1::0;9740:2;9720:18;;;9713:30;9779:26;9759:18;;;9752:54;9823:18;;41127:115:0::1;9499:348:1::0;41127:115:0::1;41253:30;41269:13;;41253:15;:30::i;:::-;41310:1;41294:13;:17:::0;32670:8;:16;;-1:-1:-1;;32670:16:0;;;41069:250::o;47551:85::-;15291:13;:11;:13::i;:::-;47608::::1;:20:::0;;-1:-1:-1;;47608:20:0::1;;;::::0;;47551:85::o;21158:176::-;-1:-1:-1;;;;;21299:18:0;;;21272:7;21299:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21158:176::o;43386:293::-;15291:13;:11;:13::i;:::-;43550:4;43529:18:::1;43542:5:::0;43529:10;:18:::1;:::i;:::-;:25;;;;:::i;:::-;43514:40;;:12;:40:::0;;;43589:2:::1;-1:-1:-1::0;43573:18:0::1;43565:59;;;::::0;-1:-1:-1;;;43565:59:0;;7023:2:1;43565:59:0::1;::::0;::::1;7005:21:1::0;7062:2;7042:18;;;7035:30;7101;7081:18;;;7074:58;7149:18;;43565:59:0::1;6821:352:1::0;43565:59:0::1;43635:36;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;::::1;::::0;:8:::1;::::0;:36:::1;;:::i;46525:175::-:0;15291:13;:11;:13::i;:::-;46631:3:::1;46615:13;20445:12:::0;;;20357:108;46615:13:::1;:19;;;;:::i;:::-;46604:7;:30;;46596:64;;;::::0;-1:-1:-1;;;46596:64:0;;10054:2:1;46596:64:0::1;::::0;::::1;10036:21:1::0;10093:2;10073:18;;;10066:30;-1:-1:-1;;;10112:18:1;;;10105:51;10173:18;;46596:64:0::1;9852:345:1::0;46596:64:0::1;46671:11;:21:::0;46525:175::o;32008:23::-;;;;;;;;;;;46348:169;15291:13;:11;:13::i;:::-;46434:11:::1;;46423:7;:22;;46415:58;;;::::0;-1:-1:-1;;;46415:58:0;;10404:2:1;46415:58:0::1;::::0;::::1;10386:21:1::0;10443:2;10423:18;;;10416:30;10482:25;10462:18;;;10455:53;10525:18;;46415:58:0::1;10202:347:1::0;46415:58:0::1;46484:15;:25:::0;46348:169::o;16311:238::-;15291:13;:11;:13::i;:::-;-1:-1:-1;;;;;16414:22:0;::::1;16392:110;;;::::0;-1:-1:-1;;;16392:110:0;;10756:2:1;16392:110:0::1;::::0;::::1;10738:21:1::0;10795:2;10775:18;;;10768:30;10834:34;10814:18;;;10807:62;-1:-1:-1;;;10885:18:1;;;10878:36;10931:19;;16392:110:0::1;10554:402:1::0;16392:110:0::1;16513:28;16532:8;16513:18;:28::i;46174:166::-:0;15291:13;:11;:13::i;:::-;46259:11:::1;;46248:7;:22;;46240:57;;;::::0;-1:-1:-1;;;46240:57:0;;11163:2:1;46240:57:0::1;::::0;::::1;11145:21:1::0;11202:2;11182:18;;;11175:30;-1:-1:-1;;;11221:18:1;;;11214:52;11283:18;;46240:57:0::1;10961:346:1::0;46240:57:0::1;46308:14;:24:::0;46174:166::o;44285:77::-;15291:13;:11;:13::i;:::-;44336:11:::1;:18:::0;;-1:-1:-1;;44336:18:0::1;44350:4;44336:18;::::0;;44285:77::o;15570:132::-;15478:6;;-1:-1:-1;;;;;15478:6:0;839:10;15634:23;15626:68;;;;-1:-1:-1;;;15626:68:0;;11514:2:1;15626:68:0;;;11496:21:1;;;11533:18;;;11526:30;11592:34;11572:18;;;11565:62;11644:18;;15626:68:0;11312:356:1;28056:380:0;-1:-1:-1;;;;;28192:19:0;;28184:68;;;;-1:-1:-1;;;28184:68:0;;11875:2:1;28184:68:0;;;11857:21:1;11914:2;11894:18;;;11887:30;11953:34;11933:18;;;11926:62;-1:-1:-1;;;12004:18:1;;;11997:34;12048:19;;28184:68:0;11673:400:1;28184:68:0;-1:-1:-1;;;;;28271:21:0;;28263:68;;;;-1:-1:-1;;;28263:68:0;;12280:2:1;28263:68:0;;;12262:21:1;12319:2;12299:18;;;12292:30;12358:34;12338:18;;;12331:62;-1:-1:-1;;;12409:18:1;;;12402:32;12451:19;;28263:68:0;12078:398:1;28263:68:0;-1:-1:-1;;;;;28344:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28396:32;;160:25:1;;;28396:32:0;;133:18:1;28396:32:0;;;;;;;28056:380;;;:::o;28727:502::-;28862:24;28889:25;28899:5;28906:7;28889:9;:25::i;:::-;28862:52;;-1:-1:-1;;28929:16:0;:37;28925:297;;29029:6;29009:16;:26;;28983:117;;;;-1:-1:-1;;;28983:117:0;;12683:2:1;28983:117:0;;;12665:21:1;12722:2;12702:18;;;12695:30;12761:31;12741:18;;;12734:59;12810:18;;28983:117:0;12481:353:1;28983:117:0;29144:51;29153:5;29160:7;29188:6;29169:16;:25;29144:8;:51::i;37609:969::-;37742:42;37758:6;37766:9;37777:6;37742:15;:42::i;:::-;37800:8;;;;;;;37795:721;;37868:4;37825:22;20645:18;;;;;;;;;;;37932:13;;37911:34;;;;;:78;;-1:-1:-1;37984:4:0;;-1:-1:-1;;;;;37966:23:0;;;37984:4;;;;;37966:23;;37911:78;:124;;;;-1:-1:-1;38028:6:0;;-1:-1:-1;;;;;38010:25:0;;;38028:6;;38010:25;;37911:124;37889:240;;;38070:43;38095:17;38070:24;:43::i;:::-;38187:4;;-1:-1:-1;;;;;38169:23:0;;;38187:4;;;;;38169:23;:48;;;;-1:-1:-1;;;;;;38197:20:0;;;;;;:9;:20;;;;;;;;38196:21;38169:48;38168:125;;;-1:-1:-1;38265:4:0;;-1:-1:-1;;;;;38244:26:0;;;38265:4;;;;;38244:26;:48;;;;-1:-1:-1;;;;;;38275:17:0;;;;;;:9;:17;;;;;;;;38274:18;38244:48;38145:360;;;38379:4;;38329:13;;38345:40;;38353:6;;-1:-1:-1;;;;;38361:23:0;;;38379:4;;;;;38361:23;38345:7;:40::i;:::-;38329:56;;38404:48;38420:6;38436:4;38443:8;38404:15;:48::i;:::-;38471:18;38481:8;38471:18;;:::i;:::-;;;38310:195;38145:360;37810:706;37795:721;38528:42;38544:6;38552:9;38563:6;38528:15;:42::i;26943:675::-;-1:-1:-1;;;;;27027:21:0;;27019:67;;;;-1:-1:-1;;;27019:67:0;;13041:2:1;27019:67:0;;;13023:21:1;13080:2;13060:18;;;13053:30;13119:34;13099:18;;;13092:62;-1:-1:-1;;;13170:18:1;;;13163:31;13211:19;;27019:67:0;12839:397:1;27019:67:0;-1:-1:-1;;;;;27186:18:0;;27161:22;27186:18;;;;;;;;;;;27223:24;;;;27215:71;;;;-1:-1:-1;;;27215:71:0;;13443:2:1;27215:71:0;;;13425:21:1;13482:2;13462:18;;;13455:30;13521:34;13501:18;;;13494:62;-1:-1:-1;;;13572:18:1;;;13565:32;13614:19;;27215:71:0;13241:398:1;27215:71:0;-1:-1:-1;;;;;27322:18:0;;:9;:18;;;;;;;;;;;27343:23;;;27322:44;;27461:12;:22;;;;;;;27512:37;160:25:1;;;27322:9:0;;:18;27512:37;;133:18:1;27512:37:0;;;;;;;37033:308;36973:368;;:::o;16709:191::-;16802:6;;;-1:-1:-1;;;;;16819:17:0;;;-1:-1:-1;;;;;;16819:17:0;;;;;;;16852:40;;16802:6;;;16819:17;16802:6;;16852:40;;16783:16;;16852:40;16772:128;16709:191;:::o;41449:683::-;41506:9;41518:10;41527:1;41518:6;:10;:::i;:::-;41506:22;-1:-1:-1;41539:14:0;41556:13;41506:22;41556:6;:13;:::i;:::-;41539:30;-1:-1:-1;41604:21:0;41638:22;41655:4;41638:16;:22::i;:::-;41673:15;41691:38;41715:14;41691:21;:38;:::i;:::-;41774:6;;41673:56;;-1:-1:-1;41742:51:0;;41759:4;;-1:-1:-1;;;;;41774:6:0;41783:9;41742:8;:51::i;:::-;41827:6;;:192;;-1:-1:-1;;;41827:192:0;;41891:4;41827:192;;;13985:34:1;14035:18;;;14028:34;;;41809:14:0;14078:18:1;;;14071:34;;;14121:18;;;14114:34;;;32157:42:0;14164:19:1;;;14157:44;41993:15:0;14217:19:1;;;14210:35;41809:14:0;-1:-1:-1;;;;;41827:6:0;;:22;;41857:10;;13919:19:1;;41827:192:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41804:215;;;;42054:9;42032:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;42081:43:0;;;14769:25:1;;;14825:2;14810:18;;14803:34;;;14853:18;;;14846:34;;;42081:43:0;;14757:2:1;14742:18;42081:43:0;;;;;;;41495:637;;;;;41449:683;:::o;35301:1314::-;35426:13;;;;;;;;:35;;-1:-1:-1;;;;;;35443:18:0;;;35426:35;:55;;;-1:-1:-1;;;;;;35465:16:0;;;35426:55;:67;;;-1:-1:-1;35485:8:0;;;;;;;35426:67;35422:93;;;35301:1314;;;:::o;35422:93::-;-1:-1:-1;;;;;35548:15:0;;;;;;:9;:15;;;;;;;;35547:16;:34;;;;-1:-1:-1;;;;;;35568:13:0;;;;;;:9;:13;;;;;;;;35567:14;35547:34;35525:110;;;;-1:-1:-1;;;35525:110:0;;15093:2:1;35525:110:0;;;15075:21:1;15132:2;15112:18;;;15105:30;15171:28;15151:18;;;15144:56;15217:18;;35525:110:0;14891:350:1;35525:110:0;35717:11;;;;35712:71;;-1:-1:-1;;;;;35738:18:0;;;;;;:12;:18;;;;;;;;35730:53;;;;-1:-1:-1;;;35730:53:0;;15448:2:1;35730:53:0;;;15430:21:1;15487:2;15467:18;;;15460:30;-1:-1:-1;;;15506:18:1;;;15499:52;15568:18;;35730:53:0;15246:346:1;35730:53:0;-1:-1:-1;;;;;35801:17:0;;;;;;:11;:17;;;;;;;;35796:436;;35855:4;;-1:-1:-1;;;;;35855:4:0;;;;;;35839:21;;;;35835:386;;35921:14;;35911:6;:24;;35881:128;;;;-1:-1:-1;;;35881:128:0;;15799:2:1;35881:128:0;;;15781:21:1;15838:2;15818:18;;;15811:30;15877:32;15857:18;;;15850:60;15927:18;;35881:128:0;15597:354:1;35881:128:0;35835:386;;;36049:4;;-1:-1:-1;;;;;36049:4:0;;;;;;36035:19;;;;36031:190;;36115:15;;36105:6;:25;;36075:130;;;;-1:-1:-1;;;36075:130:0;;16158:2:1;36075:130:0;;;16140:21:1;16197:2;16177:18;;;16170:30;16236:33;16216:18;;;16209:61;16287:18;;36075:130:0;15956:355:1;36075:130:0;-1:-1:-1;;;;;36247:19:0;;;;;;:15;:19;;;;;;;;36242:189;;36335:15;;36325:6;36309:13;36319:2;-1:-1:-1;;;;;20645:18:0;20618:7;20645:18;;;;;;;;;;;;20528:143;36309:13;:22;;;;:::i;:::-;:41;;36283:136;;;;-1:-1:-1;;;36283:136:0;;16518:2:1;36283:136:0;;;16500:21:1;16557:2;16537:18;;;16530:30;16596:34;16576:18;;;16569:62;-1:-1:-1;;;16647:18:1;;;16640:31;16688:19;;36283:136:0;16316:397:1;36283:136:0;-1:-1:-1;;;;;36446:23:0;;;;;;:17;:23;;;;;;;;36441:167;;-1:-1:-1;;;;;36494:12:0;;;;;;:6;:12;;;;;;36510;-1:-1:-1;36494:28:0;36486:52;;;;-1:-1:-1;;;36486:52:0;;16920:2:1;36486:52:0;;;16902:21:1;16959:2;16939:18;;;16932:30;-1:-1:-1;;;16978:18:1;;;16971:41;17029:18;;36486:52:0;16718:335:1;36486:52:0;36568:28;31484:1;36568:12;:28;:::i;:::-;-1:-1:-1;;;;;36553:12:0;;;;;;:6;:12;;;;;:43;35301:1314;;;:::o;39737:1236::-;32632:8;:15;;-1:-1:-1;;32632:15:0;;;;;39868:13:::1;::::0;39854:11:::1;::::0;39838:13:::1;::::0;32632:15;;39868:13;39838:27:::1;::::0;::::1;:::i;:::-;:43;;;;:::i;:::-;39905:13;::::0;39940:11:::1;::::0;39973:13:::1;::::0;39821:60;;-1:-1:-1;39905:13:0;;40003:23;;::::1;39999:204;;40080:9;40066:10;40050:13;;:26;;;;:::i;:::-;40049:40;;;;:::i;:::-;40043:46;;40139:9;40125:10;40111:11;;:24;;;;:::i;:::-;40110:38;;;;:::i;:::-;40104:44:::0;-1:-1:-1;40104:44:0;40169:16:::1;40182:3:::0;40169:10;:16:::1;:::i;:::-;:22;;;;:::i;:::-;40163:28;;39999:204;40217:7:::0;;40213:33:::1;;40226:20;40242:3;40226:15;:20::i;:::-;40275:1;40263:9;40269:3:::0;40263;:9:::1;:::i;:::-;:13;40259:625;;;40293:27;40310:9;40316:3:::0;40310;:9:::1;:::i;:::-;40293:16;:27::i;:::-;40353:21;40335:15;40417:7:::0;;40413:231:::1;;40473:9;40479:3:::0;40473;:9:::1;:::i;:::-;40452:16;40458:10:::0;40452:3;:16:::1;:::i;:::-;40451:32;;;;:::i;:::-;40521:9;::::0;40513:39:::1;::::0;40445:38;;-1:-1:-1;;;;;;40521:9:0::1;::::0;40445:38;;40513:39:::1;::::0;;;40445:38;40521:9;40513:39:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40502:50;;;;;40579:4;40571:13;;;::::0;::::1;;40625:3;40603:18;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;40413:231:0::1;40662:7:::0;;40658:215:::1;;40696:16;40709:3:::0;40696:10;:16:::1;:::i;:::-;40750:11;::::0;40742:41:::1;::::0;40690:22;;-1:-1:-1;;;;;;40750:11:0::1;::::0;40690:22;;40742:41:::1;::::0;;;40690:22;40750:11;40742:41:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40731:52;;;;;40810:4;40802:13;;;::::0;::::1;;40854:3;40834:16;;:23;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;40658:215:0::1;40278:606;;40259:625;-1:-1:-1::0;;40910:1:0::1;40894:13;:17:::0;;;40922:11:::1;:15:::0;;;40948:13:::1;:17:::0;-1:-1:-1;;32670:8:0;:16;;-1:-1:-1;;32670:16:0;;;-1:-1:-1;39737:1236:0:o;38837:586::-;38925:16;38954;38973:5;:34;;38995:12;;38973:34;;;38981:11;;38973:34;38954:53;-1:-1:-1;32100:3:0;39030:20;39044:6;38954:53;39030:20;:::i;:::-;39029:29;;;;:::i;:::-;39018:40;;39071:21;39095:5;:26;;39113:8;39095:26;;;39103:7;39095:26;39155:7;;39071:50;;-1:-1:-1;39134:17:0;;39177:11;;39155:18;;39165:8;;39155:7;;:18;:::i;:::-;39154:34;;;;:::i;:::-;39215:7;;39134:54;;-1:-1:-1;39199:12:0;;39237:11;;39215:18;;39225:8;;39215:7;;;;;:18;:::i;:::-;39214:34;;;;:::i;:::-;39199:49;-1:-1:-1;39259:11:0;39199:49;39273:23;39284:12;39273:8;:23;:::i;:::-;:33;;;;:::i;:::-;39259:47;;39336:12;39319:13;;:29;;;;;;;:::i;:::-;;;;;;;;39374:7;39359:11;;:22;;;;;;;:::i;:::-;;;;;;;;39409:6;39392:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;38837:586:0;;;-1:-1:-1;;;;;;;;38837:586:0:o;24898:877::-;-1:-1:-1;;;;;25029:18:0;;25021:68;;;;-1:-1:-1;;;25021:68:0;;17565:2:1;25021:68:0;;;17547:21:1;17604:2;17584:18;;;17577:30;17643:34;17623:18;;;17616:62;-1:-1:-1;;;17694:18:1;;;17687:35;17739:19;;25021:68:0;17363:401:1;25021:68:0;-1:-1:-1;;;;;25108:16:0;;25100:64;;;;-1:-1:-1;;;25100:64:0;;17971:2:1;25100:64:0;;;17953:21:1;18010:2;17990:18;;;17983:30;18049:34;18029:18;;;18022:62;-1:-1:-1;;;18100:18:1;;;18093:33;18143:19;;25100:64:0;17769:399:1;25100:64:0;-1:-1:-1;;;;;25250:15:0;;25228:19;25250:15;;;;;;;;;;;25298:21;;;;25276:109;;;;-1:-1:-1;;;25276:109:0;;18375:2:1;25276:109:0;;;18357:21:1;18414:2;18394:18;;;18387:30;18453:34;18433:18;;;18426:62;-1:-1:-1;;;18504:18:1;;;18497:36;18550:19;;25276:109:0;18173:402:1;25276:109:0;-1:-1:-1;;;;;25421:15:0;;;:9;:15;;;;;;;;;;;25439:20;;;25421:38;;25639:13;;;;;;;;;;:23;;;;;;25691:26;;160:25:1;;;25639:13:0;;25691:26;;133:18:1;25691:26:0;;;;;;;25730:37;36973:368;42177:430;42259:16;;;42273:1;42259:16;;;;;;;;42235:21;;42259:16;;;;;;;;;;-1:-1:-1;42259:16:0;42235:40;;42304:4;42286;42291:1;42286:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42286:23:0;;;:7;;;;;;;;;;:23;;;;42330:6;;:13;;;-1:-1:-1;;;42330:13:0;;;;:6;;;;;:11;;:13;;;;;42286:7;;42330:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42320:4;42325:1;42320:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;42320:23:0;;;:7;;;;;;;;;:23;42388:6;;42356:48;;42373:4;;42388:6;42397;42356:8;:48::i;:::-;42417:6;;:182;;-1:-1:-1;;;42417:182:0;;-1:-1:-1;;;;;42417:6:0;;;;:57;;:182;;42489:6;;42417;;42526:4;;42553;;42573:15;;42417:182;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42224:383;42177:430;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:548:1;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1605:118::-;1691:5;1684:13;1677:21;1670:5;1667:32;1657:60;;1713:1;1710;1703:12;1728:382;1793:6;1801;1854:2;1842:9;1833:7;1829:23;1825:32;1822:52;;;1870:1;1867;1860:12;1822:52;1909:9;1896:23;1928:31;1953:5;1928:31;:::i;:::-;1978:5;-1:-1:-1;2035:2:1;2020:18;;2007:32;2048:30;2007:32;2048:30;:::i;:::-;2097:7;2087:17;;;1728:382;;;;;:::o;2115:456::-;2192:6;2200;2208;2261:2;2249:9;2240:7;2236:23;2232:32;2229:52;;;2277:1;2274;2267:12;2229:52;2316:9;2303:23;2335:31;2360:5;2335:31;:::i;:::-;2385:5;-1:-1:-1;2442:2:1;2427:18;;2414:32;2455:33;2414:32;2455:33;:::i;:::-;2115:456;;2507:7;;-1:-1:-1;;;2561:2:1;2546:18;;;;2533:32;;2115:456::o;2576:180::-;2635:6;2688:2;2676:9;2667:7;2663:23;2659:32;2656:52;;;2704:1;2701;2694:12;2656:52;-1:-1:-1;2727:23:1;;2576:180;-1:-1:-1;2576:180:1:o;2950:247::-;3009:6;3062:2;3050:9;3041:7;3037:23;3033:32;3030:52;;;3078:1;3075;3068:12;3030:52;3117:9;3104:23;3136:31;3161:5;3136:31;:::i;:::-;3186:5;2950:247;-1:-1:-1;;;2950:247:1:o;3202:156::-;3268:20;;3328:4;3317:16;;3307:27;;3297:55;;3348:1;3345;3338:12;3297:55;3202:156;;;:::o;3363:322::-;3434:6;3442;3450;3503:2;3491:9;3482:7;3478:23;3474:32;3471:52;;;3519:1;3516;3509:12;3471:52;3542:27;3559:9;3542:27;:::i;:::-;3532:37;;3588:36;3620:2;3609:9;3605:18;3588:36;:::i;:::-;3578:46;;3643:36;3675:2;3664:9;3660:18;3643:36;:::i;:::-;3633:46;;3363:322;;;;;:::o;3920:388::-;3988:6;3996;4049:2;4037:9;4028:7;4024:23;4020:32;4017:52;;;4065:1;4062;4055:12;4017:52;4104:9;4091:23;4123:31;4148:5;4123:31;:::i;:::-;4173:5;-1:-1:-1;4230:2:1;4215:18;;4202:32;4243:33;4202:32;4243:33;:::i;5101:380::-;5180:1;5176:12;;;;5223;;;5244:61;;5298:4;5290:6;5286:17;5276:27;;5244:61;5351:2;5343:6;5340:14;5320:18;5317:38;5314:161;;5397:10;5392:3;5388:20;5385:1;5378:31;5432:4;5429:1;5422:15;5460:4;5457:1;5450:15;5314:161;;5101:380;;;:::o;5486:127::-;5547:10;5542:3;5538:20;5535:1;5528:31;5578:4;5575:1;5568:15;5602:4;5599:1;5592:15;5618:217;5658:1;5684;5674:132;;5728:10;5723:3;5719:20;5716:1;5709:31;5763:4;5760:1;5753:15;5791:4;5788:1;5781:15;5674:132;-1:-1:-1;5820:9:1;;5618:217::o;6538:125::-;6603:9;;;6624:10;;;6621:36;;;6637:18;;:::i;6668:148::-;6756:4;6735:12;;;6749;;;6731:31;;6774:13;;6771:39;;;6790:18;;:::i;7534:128::-;7601:9;;;7622:11;;;7619:37;;;7636:18;;:::i;8017:184::-;8087:6;8140:2;8128:9;8119:7;8115:23;8111:32;8108:52;;;8156:1;8153;8146:12;8108:52;-1:-1:-1;8179:16:1;;8017:184;-1:-1:-1;8017:184:1:o;8485:245::-;8552:6;8605:2;8593:9;8584:7;8580:23;8576:32;8573:52;;;8621:1;8618;8611:12;8573:52;8653:9;8647:16;8672:28;8694:5;8672:28;:::i;14256:306::-;14344:6;14352;14360;14413:2;14401:9;14392:7;14388:23;14384:32;14381:52;;;14429:1;14426;14419:12;14381:52;14458:9;14452:16;14442:26;;14508:2;14497:9;14493:18;14487:25;14477:35;;14552:2;14541:9;14537:18;14531:25;14521:35;;14256:306;;;;;:::o;17058:168::-;17131:9;;;17162;;17179:15;;;17173:22;;17159:37;17149:71;;17200:18;;:::i;17231:127::-;17292:10;17287:3;17283:20;17280:1;17273:31;17323:4;17320:1;17313:15;17347:4;17344:1;17337:15;18712:251;18782:6;18835:2;18823:9;18814:7;18810:23;18806:32;18803:52;;;18851:1;18848;18841:12;18803:52;18883:9;18877:16;18902:31;18927:5;18902:31;:::i;18968:980::-;19230:4;19278:3;19267:9;19263:19;19309:6;19298:9;19291:25;19335:2;19373:6;19368:2;19357:9;19353:18;19346:34;19416:3;19411:2;19400:9;19396:18;19389:31;19440:6;19475;19469:13;19506:6;19498;19491:22;19544:3;19533:9;19529:19;19522:26;;19583:2;19575:6;19571:15;19557:29;;19604:1;19614:195;19628:6;19625:1;19622:13;19614:195;;;19693:13;;-1:-1:-1;;;;;19689:39:1;19677:52;;19784:15;;;;19749:12;;;;19725:1;19643:9;19614:195;;;-1:-1:-1;;;;;;;19865:32:1;;;;19860:2;19845:18;;19838:60;-1:-1:-1;;;19929:3:1;19914:19;19907:35;19826:3;18968:980;-1:-1:-1;;;18968:980:1:o
Swarm Source
ipfs://bcd1043d335ddbfb4289d2ff62901b4be35a7b0484da035fe70a8b8fc89a67e4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.