More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 274 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 17102790 | 613 days ago | IN | 0 ETH | 0.0010522 | ||||
Transfer | 16278784 | 729 days ago | IN | 0 ETH | 0.00043474 | ||||
Approve | 16067995 | 758 days ago | IN | 0 ETH | 0.00032054 | ||||
Approve | 15985506 | 770 days ago | IN | 0 ETH | 0.00077667 | ||||
Approve | 15962146 | 773 days ago | IN | 0 ETH | 0.00037075 | ||||
Approve | 15925190 | 778 days ago | IN | 0 ETH | 0.00072228 | ||||
Approve | 15860557 | 787 days ago | IN | 0 ETH | 0.00034702 | ||||
Approve | 15826254 | 792 days ago | IN | 0 ETH | 0.00166868 | ||||
Approve | 15823129 | 792 days ago | IN | 0 ETH | 0.0006094 | ||||
Approve | 15817146 | 793 days ago | IN | 0 ETH | 0.00052819 | ||||
Approve | 15816171 | 793 days ago | IN | 0 ETH | 0.00054083 | ||||
Approve | 15815610 | 794 days ago | IN | 0 ETH | 0.00053044 | ||||
Approve | 15814960 | 794 days ago | IN | 0 ETH | 0.00054225 | ||||
Approve | 15814209 | 794 days ago | IN | 0 ETH | 0.00044705 | ||||
Approve | 15811961 | 794 days ago | IN | 0 ETH | 0.00073539 | ||||
Transfer | 15811481 | 794 days ago | IN | 0 ETH | 0.00072563 | ||||
Approve | 15811311 | 794 days ago | IN | 0 ETH | 0.00066691 | ||||
Approve | 15810548 | 794 days ago | IN | 0 ETH | 0.00056299 | ||||
Transfer | 15810540 | 794 days ago | IN | 0 ETH | 0.00030344 | ||||
Transfer | 15810537 | 794 days ago | IN | 0 ETH | 0.00036579 | ||||
Approve | 15810507 | 794 days ago | IN | 0 ETH | 0.00047203 | ||||
Approve | 15810503 | 794 days ago | IN | 0 ETH | 0.00046564 | ||||
Approve | 15810499 | 794 days ago | IN | 0 ETH | 0.0005029 | ||||
Approve | 15810492 | 794 days ago | IN | 0 ETH | 0.00050446 | ||||
Transfer | 15810492 | 794 days ago | IN | 0 ETH | 0.00036642 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
15837498 | 790 days ago | 0.00211547 ETH | ||||
15837498 | 790 days ago | 0.00211547 ETH | ||||
15823139 | 792 days ago | 0.00232692 ETH | ||||
15823139 | 792 days ago | 0.00232692 ETH | ||||
15817028 | 793 days ago | 0.0025435 ETH | ||||
15817028 | 793 days ago | 0.0025435 ETH | ||||
15816193 | 793 days ago | 0.00179586 ETH | ||||
15816193 | 793 days ago | 0.00179586 ETH | ||||
15814962 | 794 days ago | 0.00281794 ETH | ||||
15814962 | 794 days ago | 0.00281794 ETH | ||||
15812996 | 794 days ago | 0.0031176 ETH | ||||
15812996 | 794 days ago | 0.0031176 ETH | ||||
15812408 | 794 days ago | 0.00325401 ETH | ||||
15812408 | 794 days ago | 0.00325401 ETH | ||||
15812046 | 794 days ago | 0.00358296 ETH | ||||
15812046 | 794 days ago | 0.00358296 ETH | ||||
15811918 | 794 days ago | 0.00257516 ETH | ||||
15811918 | 794 days ago | 0.00257516 ETH | ||||
15811912 | 794 days ago | 0.00403782 ETH | ||||
15811912 | 794 days ago | 0.00403782 ETH | ||||
15810902 | 794 days ago | 0.00439878 ETH | ||||
15810902 | 794 days ago | 0.00439878 ETH | ||||
15810669 | 794 days ago | 0.00511483 ETH | ||||
15810669 | 794 days ago | 0.00511483 ETH | ||||
15810661 | 794 days ago | 0.0057014 ETH |
Loading...
Loading
Contract Name:
AOTD
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-22 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.17; 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 allPairsLength() external view returns (uint256); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); 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 Mint(address indexed sender, uint256 amount0, uint256 amount1); 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 mint(address to) external returns (uint256 liquidity); 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; } 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; } /** * @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); } /** * @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 decimals places of the token. */ function decimals() external view returns (uint8); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); } /** * @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; } } /** * @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); } } /** * @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 internal _totalSupply; string private _name; string private _symbol; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() external view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @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() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @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) external virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @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) external 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 ) external virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); 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) external 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 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) external virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** @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"); _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); } /** * @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"); 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); } /** * @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); } } } 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"); 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); } } /** * @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 AOTD is ERC20, Ownable { // TOKENOMICS START ==========================================================> string private _name = "APE of the DAY"; string private _symbol = "AOTD"; uint8 private _decimals = 18; uint256 private _supply = 800000000; uint256 public buyTaxForLiquidity = 1; uint256 public buyTaxForMarketing = 1; uint256 public buyTaxForBurning = 1; uint256 public sellTaxForLiquidity = 3; uint256 public sellTaxForMarketing = 5; uint256 public sellTaxForBurning = 2; address public marketingWallet = 0xC829160E98F1ad30d973D2888095bEa87b5A1589; uint256 public maxTxAmount = 8000000 * 10**_decimals; uint256 public maxWalletAmount = 8000000 * 10**_decimals; uint256 private _numTokensSellToAddToLiquidity = 800000 * 10**_decimals; uint256 private _numTokensSellToAddToETH = 600000 * 10**_decimals; // TOKENOMICS END ============================================================> IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address _burnAddress = 0x000000000000000000000000000000000000dEaD; uint256 private _marketingReserves = 0; mapping(address => bool) private _isExcludedFromFee; bool inSwapAndLiquify; event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } /** * @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() ERC20(_name, _symbol) { _mint(msg.sender, (_supply * 10**_decimals)); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; _isExcludedFromFee[address(uniswapV2Router)] = true; _isExcludedFromFee[msg.sender] = true; _isExcludedFromFee[marketingWallet] = 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 override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require( balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance" ); if ( (from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify ) { if (from != uniswapV2Pair) { uint256 contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves; if ( contractLiquidityBalance >= _numTokensSellToAddToLiquidity ) { _swapAndLiquify(_numTokensSellToAddToLiquidity); } if ((_marketingReserves) >= _numTokensSellToAddToETH) { _swapTokensForEth(_numTokensSellToAddToETH); _marketingReserves -= _numTokensSellToAddToETH; bool sent = payable(marketingWallet).send( address(this).balance ); require(sent, "Failed to send ETH"); } } uint256 transferAmount; if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { transferAmount = amount; } else { require( amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount" ); uint256 marketingShare; uint256 liquidityShare; uint256 burningShare; if (from == uniswapV2Pair) { require( (amount + balanceOf(to)) <= maxWalletAmount, "ERC20: balance amount exceeded max wallet amount limit" ); marketingShare = ((amount * buyTaxForMarketing) / 100); liquidityShare = ((amount * buyTaxForLiquidity) / 100); burningShare = ((amount * buyTaxForBurning) / 100); } else { marketingShare = ((amount * sellTaxForMarketing) / 100); liquidityShare = ((amount * sellTaxForLiquidity) / 100); burningShare = ((amount * sellTaxForBurning) / 100); } transferAmount = amount - (marketingShare + liquidityShare + burningShare); _marketingReserves += marketingShare; _totalSupply -= burningShare; if ((marketingShare + liquidityShare) > 0) { super._transfer( from, address(this), (marketingShare + liquidityShare) ); } if (burningShare > 0) { super._transfer(from, _burnAddress, burningShare); } } super._transfer(from, to, transferAmount); } else { super._transfer(from, to, amount); } } function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = (contractTokenBalance / 2); uint256 otherHalf = (contractTokenBalance - half); uint256 initialBalance = address(this).balance; _swapTokensForEth(half); uint256 newBalance = (address(this).balance - initialBalance); _addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), (block.timestamp + 300) ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private lockTheSwap { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); } /** * @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 override returns (uint8) { return _decimals; } function changeMarketingWallet(address newWallet) public onlyOwner returns (bool) { marketingWallet = newWallet; return true; } function changeBuyTaxForLiquidityMarketingBurning( uint256 _buyTaxForLiquidity, uint256 _buyTaxForMarketing, uint256 _buyTaxForBurning ) public onlyOwner returns (bool) { require( (_buyTaxForLiquidity + _buyTaxForMarketing + _buyTaxForBurning) <= 100, "ERC20: total tax must not be greater than 100" ); buyTaxForLiquidity = _buyTaxForLiquidity; buyTaxForMarketing = _buyTaxForMarketing; buyTaxForBurning = _buyTaxForBurning; return true; } function changeSellTaxForLiquidityMarketingBurning( uint256 _sellTaxForLiquidity, uint256 _sellTaxForMarketing, uint256 _sellTaxForBurning ) public onlyOwner returns (bool) { require( (_sellTaxForLiquidity + _sellTaxForMarketing + _sellTaxForBurning) <= 100, "ERC20: total tax must not be greater than 100" ); sellTaxForLiquidity = _sellTaxForLiquidity; sellTaxForMarketing = _sellTaxForMarketing; sellTaxForBurning = _sellTaxForBurning; return true; } function changeMaxTxAmount(uint256 _maxTxAmount) public onlyOwner returns (bool) { maxTxAmount = _maxTxAmount; return true; } function changeMaxWalletAmount(uint256 _maxWalletAmount) public onlyOwner returns (bool) { maxWalletAmount = _maxWalletAmount; return true; } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"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":[{"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":[],"name":"buyTaxForBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTaxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_buyTaxForMarketing","type":"uint256"},{"internalType":"uint256","name":"_buyTaxForBurning","type":"uint256"}],"name":"changeBuyTaxForLiquidityMarketingBurning","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellTaxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_sellTaxForMarketing","type":"uint256"},{"internalType":"uint256","name":"_sellTaxForBurning","type":"uint256"}],"name":"changeSellTaxForLiquidityMarketingBurning","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxForBurning","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526040518060400160405280600e81526020017f415045206f662074686520444159000000000000000000000000000000000000815250600690816200004a919062000b92565b506040518060400160405280600481526020017f414f5444000000000000000000000000000000000000000000000000000000008152506007908162000091919062000b92565b506012600860006101000a81548160ff021916908360ff160217905550632faf08006009556001600a556001600b556001600c556003600d556005600e556002600f5573c829160e98f1ad30d973d2888095bea87b5a1589601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900460ff16600a62000147919062000e09565b627a120062000157919062000e5a565b601155600860009054906101000a900460ff16600a62000178919062000e09565b627a120062000188919062000e5a565b601255600860009054906101000a900460ff16600a620001a9919062000e09565b620c3500620001b9919062000e5a565b601355600860009054906101000a900460ff16600a620001da919062000e09565b620927c0620001ea919062000e5a565b60145561dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006016553480156200024257600080fd5b5060068054620002529062000981565b80601f0160208091040260200160405190810160405280929190818152602001828054620002809062000981565b8015620002d15780601f10620002a557610100808354040283529160200191620002d1565b820191906000526020600020905b815481529060010190602001808311620002b357829003601f168201915b505050505060078054620002e59062000981565b80601f0160208091040260200160405190810160405280929190818152602001828054620003139062000981565b8015620003645780601f10620003385761010080835404028352916020019162000364565b820191906000526020600020905b8154815290600101906020018083116200034657829003601f168201915b505050505081600390816200037a919062000b92565b5080600490816200038c919062000b92565b505050620003af620003a36200070560201b60201c565b6200070d60201b60201c565b620003ed33600860009054906101000a900460ff16600a620003d2919062000e09565b600954620003e1919062000e5a565b620007d360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000478919062000f0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000506919062000f0f565b6040518363ffffffff1660e01b81526004016200052592919062000f52565b6020604051808303816000875af115801562000545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056b919062000f0f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016017600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200106b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000845576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083c9062000fe0565b60405180910390fd5b806002600082825462000859919062001002565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200090c91906200104e565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099a57607f821691505b602082108103620009b057620009af62000952565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009db565b62000a268683620009db565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a7362000a6d62000a678462000a3e565b62000a48565b62000a3e565b9050919050565b6000819050919050565b62000a8f8362000a52565b62000aa762000a9e8262000a7a565b848454620009e8565b825550505050565b600090565b62000abe62000aaf565b62000acb81848462000a84565b505050565b5b8181101562000af35762000ae760008262000ab4565b60018101905062000ad1565b5050565b601f82111562000b425762000b0c81620009b6565b62000b1784620009cb565b8101602085101562000b27578190505b62000b3f62000b3685620009cb565b83018262000ad0565b50505b505050565b600082821c905092915050565b600062000b676000198460080262000b47565b1980831691505092915050565b600062000b82838362000b54565b9150826002028217905092915050565b62000b9d8262000918565b67ffffffffffffffff81111562000bb95762000bb862000923565b5b62000bc5825462000981565b62000bd282828562000af7565b600060209050601f83116001811462000c0a576000841562000bf5578287015190505b62000c01858262000b74565b86555062000c71565b601f19841662000c1a86620009b6565b60005b8281101562000c445784890151825560018201915060208501945060208101905062000c1d565b8683101562000c64578489015162000c60601f89168262000b54565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d075780860481111562000cdf5762000cde62000c79565b5b600185161562000cef5780820291505b808102905062000cff8562000ca8565b945062000cbf565b94509492505050565b60008262000d22576001905062000df5565b8162000d32576000905062000df5565b816001811462000d4b576002811462000d565762000d8c565b600191505062000df5565b60ff84111562000d6b5762000d6a62000c79565b5b8360020a91508482111562000d855762000d8462000c79565b5b5062000df5565b5060208310610133831016604e8410600b841016171562000dc65782820a90508381111562000dc05762000dbf62000c79565b5b62000df5565b62000dd5848484600162000cb5565b9250905081840481111562000def5762000dee62000c79565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e168262000a3e565b915062000e238362000dfc565b925062000e527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d10565b905092915050565b600062000e678262000a3e565b915062000e748362000a3e565b925082820262000e848162000a3e565b9150828204841483151762000e9e5762000e9d62000c79565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed78262000eaa565b9050919050565b62000ee98162000eca565b811462000ef557600080fd5b50565b60008151905062000f098162000ede565b92915050565b60006020828403121562000f285762000f2762000ea5565b5b600062000f388482850162000ef8565b91505092915050565b62000f4c8162000eca565b82525050565b600060408201905062000f69600083018562000f41565b62000f78602083018462000f41565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fc8601f8362000f7f565b915062000fd58262000f90565b602082019050919050565b6000602082019050818103600083015262000ffb8162000fb9565b9050919050565b60006200100f8262000a3e565b91506200101c8362000a3e565b925082820190508082111562001037576200103662000c79565b5b92915050565b620010488162000a3e565b82525050565b60006020820190506200106560008301846200103d565b92915050565b60805160a051612e57620010d06000396000818161091701528181611157015281816111ac0152818161121a01526114660152600081816108660152818161195a01528181611a3b01528181611a6201528181611da10152611dc80152612e576000f3fe6080604052600436106101d15760003560e01c80637f9fda84116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106db578063ed4b8dae14610718578063ee340f5014610755578063f2fde38b14610780576101d8565b8063a9059cbb1461060b578063aa4bde2814610648578063aac539ad14610673578063bb85c6d11461069e576101d8565b80638c0b5e22116100d15780638c0b5e221461054d5780638da5cb5b1461057857806395d89b41146105a3578063a457c2d7146105ce576101d8565b80637f9fda84146104a8578063814e8e16146104d357806381bfdcca14610510576101d8565b8063313ce5671161016f57806370a082311161013e57806370a08231146103fe578063715018a61461043b57806375f0a874146104525780637df573101461047d576101d8565b8063313ce5671461032e578063395093511461035957806349bd5a5e14610396578063677daa57146103c1576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b5780631e0b376e146102c657806323b872dd146102f1576101d8565b8063029e8399146101dd57806306fdde0314610208578063095ea7b314610233576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f26107a9565b6040516101ff9190611eb0565b60405180910390f35b34801561021457600080fd5b5061021d6107af565b60405161022a9190611f5b565b60405180910390f35b34801561023f57600080fd5b5061025a6004803603810190610255919061200c565b610841565b6040516102679190612067565b60405180910390f35b34801561027c57600080fd5b50610285610864565b60405161029291906120e1565b60405180910390f35b3480156102a757600080fd5b506102b0610888565b6040516102bd9190611eb0565b60405180910390f35b3480156102d257600080fd5b506102db610892565b6040516102e89190611eb0565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906120fc565b610898565b6040516103259190612067565b60405180910390f35b34801561033a57600080fd5b506103436108c7565b604051610350919061216b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061200c565b6108de565b60405161038d9190612067565b60405180910390f35b3480156103a257600080fd5b506103ab610915565b6040516103b89190612195565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906121b0565b610939565b6040516103f59190612067565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906121dd565b610953565b6040516104329190611eb0565b60405180910390f35b34801561044757600080fd5b5061045061099b565b005b34801561045e57600080fd5b506104676109af565b6040516104749190612195565b60405180910390f35b34801561048957600080fd5b506104926109d5565b60405161049f9190611eb0565b60405180910390f35b3480156104b457600080fd5b506104bd6109db565b6040516104ca9190611eb0565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f5919061220a565b6109e1565b6040516105079190612067565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906121b0565b610a65565b6040516105449190612067565b60405180910390f35b34801561055957600080fd5b50610562610a7f565b60405161056f9190611eb0565b60405180910390f35b34801561058457600080fd5b5061058d610a85565b60405161059a9190612195565b60405180910390f35b3480156105af57600080fd5b506105b8610aaf565b6040516105c59190611f5b565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061200c565b610b41565b6040516106029190612067565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061200c565b610bb8565b60405161063f9190612067565b60405180910390f35b34801561065457600080fd5b5061065d610bdb565b60405161066a9190611eb0565b60405180910390f35b34801561067f57600080fd5b50610688610be1565b6040516106959190611eb0565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906121dd565b610be7565b6040516106d29190612067565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd919061225d565b610c3b565b60405161070f9190611eb0565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061220a565b610cc2565b60405161074c9190612067565b60405180910390f35b34801561076157600080fd5b5061076a610d46565b6040516107779190611eb0565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906121dd565b610d4c565b005b600e5481565b6060600380546107be906122cc565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea906122cc565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b60008061084c610dcf565b9050610859818585610dd7565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600b5481565b6000806108a3610dcf565b90506108b0858285610fa0565b6108bb85858561102c565b60019150509392505050565b6000600860009054906101000a900460ff16905090565b6000806108e9610dcf565b905061090a8185856108fb8589610c3b565b610905919061232c565b610dd7565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061094361169b565b8160118190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109a361169b565b6109ad6000611719565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600f5481565b60006109eb61169b565b60648284866109fa919061232c565b610a04919061232c565b1115610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906123d2565b60405180910390fd5b83600a8190555082600b8190555081600c81905550600190509392505050565b6000610a6f61169b565b8160128190555060019050919050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610abe906122cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906122cc565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b600080610b4c610dcf565b90506000610b5a8286610c3b565b905083811015610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690612464565b60405180910390fd5b610bac8286868403610dd7565b60019250505092915050565b600080610bc3610dcf565b9050610bd081858561102c565b600191505092915050565b60125481565b600c5481565b6000610bf161169b565b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610ccc61169b565b6064828486610cdb919061232c565b610ce5919061232c565b1115610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d906123d2565b60405180910390fd5b83600d8190555082600e8190555081600f81905550600190509392505050565b600a5481565b610d5461169b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba906124f6565b60405180910390fd5b610dcc81611719565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90612588565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac9061261a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f939190611eb0565b60405180910390a3505050565b6000610fac8484610c3b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110265781811015611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612686565b60405180910390fd5b6110258484848403610dd7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906127aa565b60405180910390fd5b8061111484610953565b1015611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c9061283c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111fa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156112135750601860009054906101000a900460ff16155b1561168a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461136a57600060165461127930610953565b611283919061285c565b9050601354811061129a576112996013546117df565b5b60145460165410611368576112b06014546118a0565b601454601660008282546112c4919061285c565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d906128dc565b60405180910390fd5b505b505b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061140d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561141a57819050611679565b60115482111561145f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114569061296e565b60405180910390fd5b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611568576012546114c387610953565b866114ce919061232c565b111561150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690612a00565b60405180910390fd5b6064600b548661151f9190612a20565b6115299190612a91565b92506064600a548661153b9190612a20565b6115459190612a91565b91506064600c54866115579190612a20565b6115619190612a91565b90506115bd565b6064600e54866115789190612a20565b6115829190612a91565b92506064600d54866115949190612a20565b61159e9190612a91565b91506064600f54866115b09190612a20565b6115ba9190612a91565b90505b8082846115ca919061232c565b6115d4919061232c565b856115df919061285c565b935082601660008282546115f3919061232c565b92505081905550806002600082825461160c919061285c565b9250508190555060008284611621919061232c565b111561163e5761163d87308486611638919061232c565b611b20565b5b60008111156116755761167487601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b20565b5b5050505b611684848483611b20565b50611696565b611695838383611b20565b5b505050565b6116a3610dcf565b73ffffffffffffffffffffffffffffffffffffffff166116c1610a85565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90612b0e565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601860006101000a81548160ff02191690831515021790555060006002826118099190612a91565b905060008183611819919061285c565b90506000479050611829836118a0565b60008147611837919061285c565b90506118438382611d80565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161187693929190612b2e565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156118d8576118d7612b65565b5b6040519080825280602002602001820160405280156119065781602001602082028036833780820191505090505b509050308160008151811061191e5761191d612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612bd8565b816001815181106119fb576119fa612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611a60307f000000000000000000000000000000000000000000000000000000000000000084610dd7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611aaf919061232c565b6040518663ffffffff1660e01b8152600401611acf959493929190612cfe565b600060405180830381600087803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50505050506000601860006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906127aa565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b9061283c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d729190611eb0565b60405180910390a350505050565b6001601860006101000a81548160ff021916908315150217905550611dc6307f000000000000000000000000000000000000000000000000000000000000000084610dd7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e10610a85565b426040518863ffffffff1660e01b8152600401611e3296959493929190612d58565b60606040518083038185885af1158015611e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e759190612dce565b5050506000601860006101000a81548160ff0219169083151502179055505050565b6000819050919050565b611eaa81611e97565b82525050565b6000602082019050611ec56000830184611ea1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f05578082015181840152602081019050611eea565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f2d82611ecb565b611f378185611ed6565b9350611f47818560208601611ee7565b611f5081611f11565b840191505092915050565b60006020820190508181036000830152611f758184611f22565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fad82611f82565b9050919050565b611fbd81611fa2565b8114611fc857600080fd5b50565b600081359050611fda81611fb4565b92915050565b611fe981611e97565b8114611ff457600080fd5b50565b60008135905061200681611fe0565b92915050565b6000806040838503121561202357612022611f7d565b5b600061203185828601611fcb565b925050602061204285828601611ff7565b9150509250929050565b60008115159050919050565b6120618161204c565b82525050565b600060208201905061207c6000830184612058565b92915050565b6000819050919050565b60006120a76120a261209d84611f82565b612082565b611f82565b9050919050565b60006120b98261208c565b9050919050565b60006120cb826120ae565b9050919050565b6120db816120c0565b82525050565b60006020820190506120f660008301846120d2565b92915050565b60008060006060848603121561211557612114611f7d565b5b600061212386828701611fcb565b935050602061213486828701611fcb565b925050604061214586828701611ff7565b9150509250925092565b600060ff82169050919050565b6121658161214f565b82525050565b6000602082019050612180600083018461215c565b92915050565b61218f81611fa2565b82525050565b60006020820190506121aa6000830184612186565b92915050565b6000602082840312156121c6576121c5611f7d565b5b60006121d484828501611ff7565b91505092915050565b6000602082840312156121f3576121f2611f7d565b5b600061220184828501611fcb565b91505092915050565b60008060006060848603121561222357612222611f7d565b5b600061223186828701611ff7565b935050602061224286828701611ff7565b925050604061225386828701611ff7565b9150509250925092565b6000806040838503121561227457612273611f7d565b5b600061228285828601611fcb565b925050602061229385828601611fcb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122e457607f821691505b6020821081036122f7576122f661229d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061233782611e97565b915061234283611e97565b925082820190508082111561235a576123596122fd565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b60006123bc602d83611ed6565b91506123c782612360565b604082019050919050565b600060208201905081810360008301526123eb816123af565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061244e602583611ed6565b9150612459826123f2565b604082019050919050565b6000602082019050818103600083015261247d81612441565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124e0602683611ed6565b91506124eb82612484565b604082019050919050565b6000602082019050818103600083015261250f816124d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612572602483611ed6565b915061257d82612516565b604082019050919050565b600060208201905081810360008301526125a181612565565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612604602283611ed6565b915061260f826125a8565b604082019050919050565b60006020820190508181036000830152612633816125f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612670601d83611ed6565b915061267b8261263a565b602082019050919050565b6000602082019050818103600083015261269f81612663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612702602583611ed6565b915061270d826126a6565b604082019050919050565b60006020820190508181036000830152612731816126f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612794602383611ed6565b915061279f82612738565b604082019050919050565b600060208201905081810360008301526127c381612787565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612826602683611ed6565b9150612831826127ca565b604082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b600061286782611e97565b915061287283611e97565b925082820390508181111561288a576128896122fd565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006128c6601283611ed6565b91506128d182612890565b602082019050919050565b600060208201905081810360008301526128f5816128b9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612958603983611ed6565b9150612963826128fc565b604082019050919050565b600060208201905081810360008301526129878161294b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006129ea603683611ed6565b91506129f58261298e565b604082019050919050565b60006020820190508181036000830152612a19816129dd565b9050919050565b6000612a2b82611e97565b9150612a3683611e97565b9250828202612a4481611e97565b91508282048414831517612a5b57612a5a6122fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a9c82611e97565b9150612aa783611e97565b925082612ab757612ab6612a62565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612af8602083611ed6565b9150612b0382612ac2565b602082019050919050565b60006020820190508181036000830152612b2781612aeb565b9050919050565b6000606082019050612b436000830186611ea1565b612b506020830185611ea1565b612b5d6040830184611ea1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612bd281611fb4565b92915050565b600060208284031215612bee57612bed611f7d565b5b6000612bfc84828501612bc3565b91505092915050565b6000819050919050565b6000612c2a612c25612c2084612c05565b612082565b611e97565b9050919050565b612c3a81612c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c7581611fa2565b82525050565b6000612c878383612c6c565b60208301905092915050565b6000602082019050919050565b6000612cab82612c40565b612cb58185612c4b565b9350612cc083612c5c565b8060005b83811015612cf1578151612cd88882612c7b565b9750612ce383612c93565b925050600181019050612cc4565b5085935050505092915050565b600060a082019050612d136000830188611ea1565b612d206020830187612c31565b8181036040830152612d328186612ca0565b9050612d416060830185612186565b612d4e6080830184611ea1565b9695505050505050565b600060c082019050612d6d6000830189612186565b612d7a6020830188611ea1565b612d876040830187612c31565b612d946060830186612c31565b612da16080830185612186565b612dae60a0830184611ea1565b979650505050505050565b600081519050612dc881611fe0565b92915050565b600080600060608486031215612de757612de6611f7d565b5b6000612df586828701612db9565b9350506020612e0686828701612db9565b9250506040612e1786828701612db9565b915050925092509256fea2646970667358221220885c2f8973932a59cc012316bfc86bf8a482d52eb244d6fd3a0ec71ca831e19a64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101d15760003560e01c80637f9fda84116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106db578063ed4b8dae14610718578063ee340f5014610755578063f2fde38b14610780576101d8565b8063a9059cbb1461060b578063aa4bde2814610648578063aac539ad14610673578063bb85c6d11461069e576101d8565b80638c0b5e22116100d15780638c0b5e221461054d5780638da5cb5b1461057857806395d89b41146105a3578063a457c2d7146105ce576101d8565b80637f9fda84146104a8578063814e8e16146104d357806381bfdcca14610510576101d8565b8063313ce5671161016f57806370a082311161013e57806370a08231146103fe578063715018a61461043b57806375f0a874146104525780637df573101461047d576101d8565b8063313ce5671461032e578063395093511461035957806349bd5a5e14610396578063677daa57146103c1576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b5780631e0b376e146102c657806323b872dd146102f1576101d8565b8063029e8399146101dd57806306fdde0314610208578063095ea7b314610233576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f26107a9565b6040516101ff9190611eb0565b60405180910390f35b34801561021457600080fd5b5061021d6107af565b60405161022a9190611f5b565b60405180910390f35b34801561023f57600080fd5b5061025a6004803603810190610255919061200c565b610841565b6040516102679190612067565b60405180910390f35b34801561027c57600080fd5b50610285610864565b60405161029291906120e1565b60405180910390f35b3480156102a757600080fd5b506102b0610888565b6040516102bd9190611eb0565b60405180910390f35b3480156102d257600080fd5b506102db610892565b6040516102e89190611eb0565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906120fc565b610898565b6040516103259190612067565b60405180910390f35b34801561033a57600080fd5b506103436108c7565b604051610350919061216b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061200c565b6108de565b60405161038d9190612067565b60405180910390f35b3480156103a257600080fd5b506103ab610915565b6040516103b89190612195565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906121b0565b610939565b6040516103f59190612067565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906121dd565b610953565b6040516104329190611eb0565b60405180910390f35b34801561044757600080fd5b5061045061099b565b005b34801561045e57600080fd5b506104676109af565b6040516104749190612195565b60405180910390f35b34801561048957600080fd5b506104926109d5565b60405161049f9190611eb0565b60405180910390f35b3480156104b457600080fd5b506104bd6109db565b6040516104ca9190611eb0565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f5919061220a565b6109e1565b6040516105079190612067565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906121b0565b610a65565b6040516105449190612067565b60405180910390f35b34801561055957600080fd5b50610562610a7f565b60405161056f9190611eb0565b60405180910390f35b34801561058457600080fd5b5061058d610a85565b60405161059a9190612195565b60405180910390f35b3480156105af57600080fd5b506105b8610aaf565b6040516105c59190611f5b565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061200c565b610b41565b6040516106029190612067565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061200c565b610bb8565b60405161063f9190612067565b60405180910390f35b34801561065457600080fd5b5061065d610bdb565b60405161066a9190611eb0565b60405180910390f35b34801561067f57600080fd5b50610688610be1565b6040516106959190611eb0565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906121dd565b610be7565b6040516106d29190612067565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd919061225d565b610c3b565b60405161070f9190611eb0565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061220a565b610cc2565b60405161074c9190612067565b60405180910390f35b34801561076157600080fd5b5061076a610d46565b6040516107779190611eb0565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906121dd565b610d4c565b005b600e5481565b6060600380546107be906122cc565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea906122cc565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b60008061084c610dcf565b9050610859818585610dd7565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600b5481565b6000806108a3610dcf565b90506108b0858285610fa0565b6108bb85858561102c565b60019150509392505050565b6000600860009054906101000a900460ff16905090565b6000806108e9610dcf565b905061090a8185856108fb8589610c3b565b610905919061232c565b610dd7565b600191505092915050565b7f000000000000000000000000d3a176565ec12fe4a232d98849c86a2ac914573a81565b600061094361169b565b8160118190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109a361169b565b6109ad6000611719565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600f5481565b60006109eb61169b565b60648284866109fa919061232c565b610a04919061232c565b1115610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906123d2565b60405180910390fd5b83600a8190555082600b8190555081600c81905550600190509392505050565b6000610a6f61169b565b8160128190555060019050919050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610abe906122cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906122cc565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b600080610b4c610dcf565b90506000610b5a8286610c3b565b905083811015610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690612464565b60405180910390fd5b610bac8286868403610dd7565b60019250505092915050565b600080610bc3610dcf565b9050610bd081858561102c565b600191505092915050565b60125481565b600c5481565b6000610bf161169b565b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610ccc61169b565b6064828486610cdb919061232c565b610ce5919061232c565b1115610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d906123d2565b60405180910390fd5b83600d8190555082600e8190555081600f81905550600190509392505050565b600a5481565b610d5461169b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba906124f6565b60405180910390fd5b610dcc81611719565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90612588565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac9061261a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f939190611eb0565b60405180910390a3505050565b6000610fac8484610c3b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110265781811015611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612686565b60405180910390fd5b6110258484848403610dd7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906127aa565b60405180910390fd5b8061111484610953565b1015611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c9061283c565b60405180910390fd5b7f000000000000000000000000d3a176565ec12fe4a232d98849c86a2ac914573a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111fa57507f000000000000000000000000d3a176565ec12fe4a232d98849c86a2ac914573a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156112135750601860009054906101000a900460ff16155b1561168a577f000000000000000000000000d3a176565ec12fe4a232d98849c86a2ac914573a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461136a57600060165461127930610953565b611283919061285c565b9050601354811061129a576112996013546117df565b5b60145460165410611368576112b06014546118a0565b601454601660008282546112c4919061285c565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d906128dc565b60405180910390fd5b505b505b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061140d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561141a57819050611679565b60115482111561145f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114569061296e565b60405180910390fd5b60008060007f000000000000000000000000d3a176565ec12fe4a232d98849c86a2ac914573a73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611568576012546114c387610953565b866114ce919061232c565b111561150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690612a00565b60405180910390fd5b6064600b548661151f9190612a20565b6115299190612a91565b92506064600a548661153b9190612a20565b6115459190612a91565b91506064600c54866115579190612a20565b6115619190612a91565b90506115bd565b6064600e54866115789190612a20565b6115829190612a91565b92506064600d54866115949190612a20565b61159e9190612a91565b91506064600f54866115b09190612a20565b6115ba9190612a91565b90505b8082846115ca919061232c565b6115d4919061232c565b856115df919061285c565b935082601660008282546115f3919061232c565b92505081905550806002600082825461160c919061285c565b9250508190555060008284611621919061232c565b111561163e5761163d87308486611638919061232c565b611b20565b5b60008111156116755761167487601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b20565b5b5050505b611684848483611b20565b50611696565b611695838383611b20565b5b505050565b6116a3610dcf565b73ffffffffffffffffffffffffffffffffffffffff166116c1610a85565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90612b0e565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601860006101000a81548160ff02191690831515021790555060006002826118099190612a91565b905060008183611819919061285c565b90506000479050611829836118a0565b60008147611837919061285c565b90506118438382611d80565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161187693929190612b2e565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156118d8576118d7612b65565b5b6040519080825280602002602001820160405280156119065781602001602082028036833780820191505090505b509050308160008151811061191e5761191d612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612bd8565b816001815181106119fb576119fa612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611a60307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610dd7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611aaf919061232c565b6040518663ffffffff1660e01b8152600401611acf959493929190612cfe565b600060405180830381600087803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50505050506000601860006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906127aa565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b9061283c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d729190611eb0565b60405180910390a350505050565b6001601860006101000a81548160ff021916908315150217905550611dc6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610dd7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e10610a85565b426040518863ffffffff1660e01b8152600401611e3296959493929190612d58565b60606040518083038185885af1158015611e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e759190612dce565b5050506000601860006101000a81548160ff0219169083151502179055505050565b6000819050919050565b611eaa81611e97565b82525050565b6000602082019050611ec56000830184611ea1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f05578082015181840152602081019050611eea565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f2d82611ecb565b611f378185611ed6565b9350611f47818560208601611ee7565b611f5081611f11565b840191505092915050565b60006020820190508181036000830152611f758184611f22565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fad82611f82565b9050919050565b611fbd81611fa2565b8114611fc857600080fd5b50565b600081359050611fda81611fb4565b92915050565b611fe981611e97565b8114611ff457600080fd5b50565b60008135905061200681611fe0565b92915050565b6000806040838503121561202357612022611f7d565b5b600061203185828601611fcb565b925050602061204285828601611ff7565b9150509250929050565b60008115159050919050565b6120618161204c565b82525050565b600060208201905061207c6000830184612058565b92915050565b6000819050919050565b60006120a76120a261209d84611f82565b612082565b611f82565b9050919050565b60006120b98261208c565b9050919050565b60006120cb826120ae565b9050919050565b6120db816120c0565b82525050565b60006020820190506120f660008301846120d2565b92915050565b60008060006060848603121561211557612114611f7d565b5b600061212386828701611fcb565b935050602061213486828701611fcb565b925050604061214586828701611ff7565b9150509250925092565b600060ff82169050919050565b6121658161214f565b82525050565b6000602082019050612180600083018461215c565b92915050565b61218f81611fa2565b82525050565b60006020820190506121aa6000830184612186565b92915050565b6000602082840312156121c6576121c5611f7d565b5b60006121d484828501611ff7565b91505092915050565b6000602082840312156121f3576121f2611f7d565b5b600061220184828501611fcb565b91505092915050565b60008060006060848603121561222357612222611f7d565b5b600061223186828701611ff7565b935050602061224286828701611ff7565b925050604061225386828701611ff7565b9150509250925092565b6000806040838503121561227457612273611f7d565b5b600061228285828601611fcb565b925050602061229385828601611fcb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122e457607f821691505b6020821081036122f7576122f661229d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061233782611e97565b915061234283611e97565b925082820190508082111561235a576123596122fd565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b60006123bc602d83611ed6565b91506123c782612360565b604082019050919050565b600060208201905081810360008301526123eb816123af565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061244e602583611ed6565b9150612459826123f2565b604082019050919050565b6000602082019050818103600083015261247d81612441565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124e0602683611ed6565b91506124eb82612484565b604082019050919050565b6000602082019050818103600083015261250f816124d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612572602483611ed6565b915061257d82612516565b604082019050919050565b600060208201905081810360008301526125a181612565565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612604602283611ed6565b915061260f826125a8565b604082019050919050565b60006020820190508181036000830152612633816125f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612670601d83611ed6565b915061267b8261263a565b602082019050919050565b6000602082019050818103600083015261269f81612663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612702602583611ed6565b915061270d826126a6565b604082019050919050565b60006020820190508181036000830152612731816126f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612794602383611ed6565b915061279f82612738565b604082019050919050565b600060208201905081810360008301526127c381612787565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612826602683611ed6565b9150612831826127ca565b604082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b600061286782611e97565b915061287283611e97565b925082820390508181111561288a576128896122fd565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006128c6601283611ed6565b91506128d182612890565b602082019050919050565b600060208201905081810360008301526128f5816128b9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612958603983611ed6565b9150612963826128fc565b604082019050919050565b600060208201905081810360008301526129878161294b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006129ea603683611ed6565b91506129f58261298e565b604082019050919050565b60006020820190508181036000830152612a19816129dd565b9050919050565b6000612a2b82611e97565b9150612a3683611e97565b9250828202612a4481611e97565b91508282048414831517612a5b57612a5a6122fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a9c82611e97565b9150612aa783611e97565b925082612ab757612ab6612a62565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612af8602083611ed6565b9150612b0382612ac2565b602082019050919050565b60006020820190508181036000830152612b2781612aeb565b9050919050565b6000606082019050612b436000830186611ea1565b612b506020830185611ea1565b612b5d6040830184611ea1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612bd281611fb4565b92915050565b600060208284031215612bee57612bed611f7d565b5b6000612bfc84828501612bc3565b91505092915050565b6000819050919050565b6000612c2a612c25612c2084612c05565b612082565b611e97565b9050919050565b612c3a81612c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c7581611fa2565b82525050565b6000612c878383612c6c565b60208301905092915050565b6000602082019050919050565b6000612cab82612c40565b612cb58185612c4b565b9350612cc083612c5c565b8060005b83811015612cf1578151612cd88882612c7b565b9750612ce383612c93565b925050600181019050612cc4565b5085935050505092915050565b600060a082019050612d136000830188611ea1565b612d206020830187612c31565b8181036040830152612d328186612ca0565b9050612d416060830185612186565b612d4e6080830184611ea1565b9695505050505050565b600060c082019050612d6d6000830189612186565b612d7a6020830188611ea1565b612d876040830187612c31565b612d946060830186612c31565b612da16080830185612186565b612dae60a0830184611ea1565b979650505050505050565b600081519050612dc881611fe0565b92915050565b600080600060608486031215612de757612de6611f7d565b5b6000612df586828701612db9565b9350506020612e0686828701612db9565b9250506040612e1786828701612db9565b915050925092509256fea2646970667358221220885c2f8973932a59cc012316bfc86bf8a482d52eb244d6fd3a0ec71ca831e19a64736f6c63430008110033
Deployed Bytecode Sourcemap
28144:10214:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28606:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17637:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20137:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29139:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19001:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28475:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20961:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36444:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22677:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29197:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37930:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18027:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15120:103;;;;;;;;;;;;;:::i;:::-;;28696:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28561:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28651:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36734:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38120:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28780:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14472:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17858:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21761:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19581:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28839:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28519:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36544:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19174:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37317:605;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28431:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15378:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28606:38;;;;:::o;17637:102::-;17693:13;17726:5;17719:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17637:102;:::o;20137:244::-;20258:4;20280:13;20296:12;:10;:12::i;:::-;20280:28;;20319:32;20328:5;20335:7;20344:6;20319:8;:32::i;:::-;20369:4;20362:11;;;20137:244;;;;:::o;29139:51::-;;;:::o;19001:110::-;19064:7;19091:12;;19084:19;;19001:110;:::o;28475:37::-;;;;:::o;20961:297::-;21094:4;21111:15;21129:12;:10;:12::i;:::-;21111:30;;21152:38;21168:4;21174:7;21183:6;21152:15;:38::i;:::-;21201:27;21211:4;21217:2;21221:6;21201:9;:27::i;:::-;21246:4;21239:11;;;20961:297;;;;;:::o;36444:92::-;36494:5;36519:9;;;;;;;;;;;36512:16;;36444:92;:::o;22677:272::-;22794:4;22816:13;22832:12;:10;:12::i;:::-;22816:28;;22855:64;22864:5;22871:7;22908:10;22880:25;22890:5;22897:7;22880:9;:25::i;:::-;:38;;;;:::i;:::-;22855:8;:64::i;:::-;22937:4;22930:11;;;22677:272;;;;:::o;29197:38::-;;;:::o;37930:182::-;38032:4;14358:13;:11;:13::i;:::-;38068:12:::1;38054:11;:26;;;;38100:4;38093:11;;37930:182:::0;;;:::o;18027:177::-;18146:7;18178:9;:18;18188:7;18178:18;;;;;;;;;;;;;;;;18171:25;;18027:177;;;:::o;15120:103::-;14358:13;:11;:13::i;:::-;15185:30:::1;15212:1;15185:18;:30::i;:::-;15120:103::o:0;28696:75::-;;;;;;;;;;;;;:::o;28561:38::-;;;;:::o;28651:36::-;;;;:::o;36734:575::-;36929:4;14358:13;:11;:13::i;:::-;37052:3:::1;37013:17;36991:19;36969;:41;;;;:::i;:::-;:61;;;;:::i;:::-;36968:87;;36946:182;;;;;;;;;;;;:::i;:::-;;;;;;;;;37160:19;37139:18;:40;;;;37211:19;37190:18;:40;;;;37260:17;37241:16;:36;;;;37297:4;37290:11;;36734:575:::0;;;;;:::o;38120:198::-;38230:4;14358:13;:11;:13::i;:::-;38270:16:::1;38252:15;:34;;;;38306:4;38299:11;;38120:198:::0;;;:::o;28780:52::-;;;;:::o;14472:87::-;14518:7;14545:6;;;;;;;;;;;14538:13;;14472:87;:::o;17858:106::-;17916:13;17949:7;17942:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17858:106;:::o;21761:507::-;21883:4;21905:13;21921:12;:10;:12::i;:::-;21905:28;;21944:24;21971:25;21981:5;21988:7;21971:9;:25::i;:::-;21944:52;;22049:15;22029:16;:35;;22007:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22165:60;22174:5;22181:7;22209:15;22190:16;:34;22165:8;:60::i;:::-;22256:4;22249:11;;;;21761:507;;;;:::o;19581:236::-;19698:4;19720:13;19736:12;:10;:12::i;:::-;19720:28;;19759;19769:5;19776:2;19780:6;19759:9;:28::i;:::-;19805:4;19798:11;;;19581:236;;;;:::o;28839:56::-;;;;:::o;28519:35::-;;;;:::o;36544:182::-;36647:4;14358:13;:11;:13::i;:::-;36687:9:::1;36669:15;;:27;;;;;;;;;;;;;;;;;;36714:4;36707:11;;36544:182:::0;;;:::o;19174:201::-;19308:7;19340:11;:18;19352:5;19340:18;;;;;;;;;;;;;;;:27;19359:7;19340:27;;;;;;;;;;;;;;;;19333:34;;19174:201;;;;:::o;37317:605::-;37516:4;14358:13;:11;:13::i;:::-;37659:3:::1;37636:18;37596:20;37556;:60;;;;:::i;:::-;:98;;;;:::i;:::-;37555:107;;37533:202;;;;;;;;;;;;:::i;:::-;;;;;;;;;37768:20;37746:19;:42;;;;37821:20;37799:19;:42;;;;37872:18;37852:17;:38;;;;37910:4;37903:11;;37317:605:::0;;;;;:::o;28431:37::-;;;;:::o;15378:238::-;14358:13;:11;:13::i;:::-;15501:1:::1;15481:22;;:8;:22;;::::0;15459:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15580:28;15599:8;15580:18;:28::i;:::-;15378:238:::0;:::o;13265:98::-;13318:7;13345:10;13338:17;;13265:98;:::o;24984:380::-;25137:1;25120:19;;:5;:19;;;25112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:1;25199:21;;:7;:21;;;25191:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25302:6;25272:11;:18;25284:5;25272:18;;;;;;;;;;;;;;;:27;25291:7;25272:27;;;;;;;;;;;;;;;:36;;;;25340:7;25324:32;;25333:5;25324:32;;;25349:6;25324:32;;;;;;:::i;:::-;;;;;;;;24984:380;;;:::o;25655:502::-;25790:24;25817:25;25827:5;25834:7;25817:9;:25::i;:::-;25790:52;;25877:17;25857:16;:37;25853:297;;25957:6;25937:16;:26;;25911:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:51;26081:5;26088:7;26116:6;26097:16;:25;26072:8;:51::i;:::-;25853:297;25779:378;25655:502;;;:::o;31077:3336::-;31225:1;31209:18;;:4;:18;;;31201:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31302:1;31288:16;;:2;:16;;;31280:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31396:6;31377:15;31387:4;31377:9;:15::i;:::-;:25;;31355:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;31508:13;31500:21;;:4;:21;;;:44;;;;31531:13;31525:19;;:2;:19;;;31500:44;31499:67;;;;;31550:16;;;;;;;;;;;31549:17;31499:67;31481:2925;;;31605:13;31597:21;;:4;:21;;;31593:795;;31639:32;31722:18;;31674:24;31692:4;31674:9;:24::i;:::-;:66;;;;:::i;:::-;31639:101;;31813:30;;31785:24;:58;31759:194;;31886:47;31902:30;;31886:15;:47::i;:::-;31759:194;31999:24;;31976:18;;31975:48;31971:402;;32048:43;32066:24;;32048:17;:43::i;:::-;32136:24;;32114:18;;:46;;;;;;;:::i;:::-;;;;;;;;32183:9;32203:15;;;;;;;;;;;32195:29;;:100;32251:21;32195:100;;;;;;;;;;;;;;;;;;;;;;;32183:112;;32326:4;32318:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;32025:348;31971:402;31620:768;31593:795;32404:22;32445:18;:24;32464:4;32445:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;32473:18;:22;32492:2;32473:22;;;;;;;;;;;;;;;;;;;;;;;;;32445:50;32441:1832;;;32533:6;32516:23;;32441:1832;;;32620:11;;32610:6;:21;;32580:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;32753:22;32794;32835:20;32888:13;32880:21;;:4;:21;;;32876:738;;32988:15;;32970:13;32980:2;32970:9;:13::i;:::-;32961:6;:22;;;;:::i;:::-;32960:43;;32926:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;33184:3;33162:18;;33153:6;:27;;;;:::i;:::-;33152:35;;;;:::i;:::-;33134:54;;33261:3;33239:18;;33230:6;:27;;;;:::i;:::-;33229:35;;;;:::i;:::-;33211:54;;33334:3;33314:16;;33305:6;:25;;;;:::i;:::-;33304:33;;;;:::i;:::-;33288:50;;32876:738;;;33438:3;33415:19;;33406:6;:28;;;;:::i;:::-;33405:36;;;;:::i;:::-;33387:55;;33516:3;33493:19;;33484:6;:28;;;;:::i;:::-;33483:36;;;;:::i;:::-;33465:55;;33590:3;33569:17;;33560:6;:26;;;;:::i;:::-;33559:34;;;;:::i;:::-;33543:51;;32876:738;33735:12;33718:14;33701;:31;;;;:::i;:::-;:46;;;;:::i;:::-;33670:6;:78;;;;:::i;:::-;33632:116;;33789:14;33767:18;;:36;;;;;;;:::i;:::-;;;;;;;;33838:12;33822;;:28;;;;;;;:::i;:::-;;;;;;;;33911:1;33893:14;33876;:31;;;;:::i;:::-;33875:37;33871:255;;;33937:169;33979:4;34018;34068:14;34051;:31;;;;:::i;:::-;33937:15;:169::i;:::-;33871:255;34163:1;34148:12;:16;34144:114;;;34189:49;34205:4;34211:12;;;;;;;;;;;34225;34189:15;:49::i;:::-;34144:114;32561:1712;;;32441:1832;34287:41;34303:4;34309:2;34313:14;34287:15;:41::i;:::-;31578:2762;31481:2925;;;34361:33;34377:4;34383:2;34387:6;34361:15;:33::i;:::-;31481:2925;31077:3336;;;:::o;14637:132::-;14712:12;:10;:12::i;:::-;14701:23;;:7;:5;:7::i;:::-;:23;;;14693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14637:132::o;15776:191::-;15850:16;15869:6;;;;;;;;;;;15850:25;;15895:8;15886:6;;:17;;;;;;;;;;;;;;;;;;15950:8;15919:40;;15940:8;15919:40;;;;;;;;;;;;15839:128;15776:191;:::o;34421:474::-;29635:4;29616:16;;:23;;;;;;;;;;;;;;;;;;34507:12:::1;34546:1;34523:20;:24;;;;:::i;:::-;34507:41;;34559:17;34603:4;34580:20;:27;;;;:::i;:::-;34559:49;;34621:22;34646:21;34621:46;;34680:23;34698:4;34680:17;:23::i;:::-;34716:18;34762:14;34738:21;:38;;;;:::i;:::-;34716:61;;34790:36;34804:9;34815:10;34790:13;:36::i;:::-;34844:43;34859:4;34865:10;34877:9;34844:43;;;;;;;;:::i;:::-;;;;;;;;34496:399;;;;29681:5:::0;29662:16;;:24;;;;;;;;;;;;;;;;;;34421:474;:::o;34903:496::-;29635:4;29616:16;;:23;;;;;;;;;;;;;;;;;;34982:21:::1;35020:1;35006:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34982:40;;35051:4;35033;35038:1;35033:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;35077:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35067:4;35072:1;35067:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;35112:62;35129:4;35144:15;35162:11;35112:8;:62::i;:::-;35187:15;:66;;;35268:11;35294:1;35310:4;35337;35376:3;35358:15;:21;;;;:::i;:::-;35187:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34971:428;29681:5:::0;29662:16;;:24;;;;;;;;;;;;;;;;;;34903:496;:::o;26165:776::-;26312:1;26296:18;;:4;:18;;;26288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26389:1;26375:16;;:2;:16;;;26367:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26444:19;26466:9;:15;26476:4;26466:15;;;;;;;;;;;;;;;;26444:37;;26529:6;26514:11;:21;;26492:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;26669:6;26655:11;:20;26637:9;:15;26647:4;26637:15;;;;;;;;;;;;;;;:38;;;;26872:6;26855:9;:13;26865:2;26855:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26922:2;26907:26;;26916:4;26907:26;;;26926:6;26907:26;;;;;;:::i;:::-;;;;;;;;26277:664;26165:776;;;:::o;35407:398::-;29635:4;29616:16;;:23;;;;;;;;;;;;;;;;;;35524:62:::1;35541:4;35556:15;35574:11;35524:8;:62::i;:::-;35599:15;:31;;;35638:9;35671:4;35691:11;35717:1;35733::::0;35749:7:::1;:5;:7::i;:::-;35771:15;35599:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29681:5:::0;29662:16;;:24;;;;;;;;;;;;;;;;;;35407:398;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:118::-;5913:24;5931:5;5913:24;:::i;:::-;5908:3;5901:37;5826:118;;:::o;5950:222::-;6043:4;6081:2;6070:9;6066:18;6058:26;;6094:71;6162:1;6151:9;6147:17;6138:6;6094:71;:::i;:::-;5950:222;;;;:::o;6178:329::-;6237:6;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6178:329;;;;:::o;6513:::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:619::-;6925:6;6933;6941;6990:2;6978:9;6969:7;6965:23;6961:32;6958:119;;;6996:79;;:::i;:::-;6958:119;7116:1;7141:53;7186:7;7177:6;7166:9;7162:22;7141:53;:::i;:::-;7131:63;;7087:117;7243:2;7269:53;7314:7;7305:6;7294:9;7290:22;7269:53;:::i;:::-;7259:63;;7214:118;7371:2;7397:53;7442:7;7433:6;7422:9;7418:22;7397:53;:::i;:::-;7387:63;;7342:118;6848:619;;;;;:::o;7473:474::-;7541:6;7549;7598:2;7586:9;7577:7;7573:23;7569:32;7566:119;;;7604:79;;:::i;:::-;7566:119;7724:1;7749:53;7794:7;7785:6;7774:9;7770:22;7749:53;:::i;:::-;7739:63;;7695:117;7851:2;7877:53;7922:7;7913:6;7902:9;7898:22;7877:53;:::i;:::-;7867:63;;7822:118;7473:474;;;;;:::o;7953:180::-;8001:77;7998:1;7991:88;8098:4;8095:1;8088:15;8122:4;8119:1;8112:15;8139:320;8183:6;8220:1;8214:4;8210:12;8200:22;;8267:1;8261:4;8257:12;8288:18;8278:81;;8344:4;8336:6;8332:17;8322:27;;8278:81;8406:2;8398:6;8395:14;8375:18;8372:38;8369:84;;8425:18;;:::i;:::-;8369:84;8190:269;8139:320;;;:::o;8465:180::-;8513:77;8510:1;8503:88;8610:4;8607:1;8600:15;8634:4;8631:1;8624:15;8651:191;8691:3;8710:20;8728:1;8710:20;:::i;:::-;8705:25;;8744:20;8762:1;8744:20;:::i;:::-;8739:25;;8787:1;8784;8780:9;8773:16;;8808:3;8805:1;8802:10;8799:36;;;8815:18;;:::i;:::-;8799:36;8651:191;;;;:::o;8848:232::-;8988:34;8984:1;8976:6;8972:14;8965:58;9057:15;9052:2;9044:6;9040:15;9033:40;8848:232;:::o;9086:366::-;9228:3;9249:67;9313:2;9308:3;9249:67;:::i;:::-;9242:74;;9325:93;9414:3;9325:93;:::i;:::-;9443:2;9438:3;9434:12;9427:19;;9086:366;;;:::o;9458:419::-;9624:4;9662:2;9651:9;9647:18;9639:26;;9711:9;9705:4;9701:20;9697:1;9686:9;9682:17;9675:47;9739:131;9865:4;9739:131;:::i;:::-;9731:139;;9458:419;;;:::o;9883:224::-;10023:34;10019:1;10011:6;10007:14;10000:58;10092:7;10087:2;10079:6;10075:15;10068:32;9883:224;:::o;10113:366::-;10255:3;10276:67;10340:2;10335:3;10276:67;:::i;:::-;10269:74;;10352:93;10441:3;10352:93;:::i;:::-;10470:2;10465:3;10461:12;10454:19;;10113:366;;;:::o;10485:419::-;10651:4;10689:2;10678:9;10674:18;10666:26;;10738:9;10732:4;10728:20;10724:1;10713:9;10709:17;10702:47;10766:131;10892:4;10766:131;:::i;:::-;10758:139;;10485:419;;;:::o;10910:225::-;11050:34;11046:1;11038:6;11034:14;11027:58;11119:8;11114:2;11106:6;11102:15;11095:33;10910:225;:::o;11141:366::-;11283:3;11304:67;11368:2;11363:3;11304:67;:::i;:::-;11297:74;;11380:93;11469:3;11380:93;:::i;:::-;11498:2;11493:3;11489:12;11482:19;;11141:366;;;:::o;11513:419::-;11679:4;11717:2;11706:9;11702:18;11694:26;;11766:9;11760:4;11756:20;11752:1;11741:9;11737:17;11730:47;11794:131;11920:4;11794:131;:::i;:::-;11786:139;;11513:419;;;:::o;11938:223::-;12078:34;12074:1;12066:6;12062:14;12055:58;12147:6;12142:2;12134:6;12130:15;12123:31;11938:223;:::o;12167:366::-;12309:3;12330:67;12394:2;12389:3;12330:67;:::i;:::-;12323:74;;12406:93;12495:3;12406:93;:::i;:::-;12524:2;12519:3;12515:12;12508:19;;12167:366;;;:::o;12539:419::-;12705:4;12743:2;12732:9;12728:18;12720:26;;12792:9;12786:4;12782:20;12778:1;12767:9;12763:17;12756:47;12820:131;12946:4;12820:131;:::i;:::-;12812:139;;12539:419;;;:::o;12964:221::-;13104:34;13100:1;13092:6;13088:14;13081:58;13173:4;13168:2;13160:6;13156:15;13149:29;12964:221;:::o;13191:366::-;13333:3;13354:67;13418:2;13413:3;13354:67;:::i;:::-;13347:74;;13430:93;13519:3;13430:93;:::i;:::-;13548:2;13543:3;13539:12;13532:19;;13191:366;;;:::o;13563:419::-;13729:4;13767:2;13756:9;13752:18;13744:26;;13816:9;13810:4;13806:20;13802:1;13791:9;13787:17;13780:47;13844:131;13970:4;13844:131;:::i;:::-;13836:139;;13563:419;;;:::o;13988:179::-;14128:31;14124:1;14116:6;14112:14;14105:55;13988:179;:::o;14173:366::-;14315:3;14336:67;14400:2;14395:3;14336:67;:::i;:::-;14329:74;;14412:93;14501:3;14412:93;:::i;:::-;14530:2;14525:3;14521:12;14514:19;;14173:366;;;:::o;14545:419::-;14711:4;14749:2;14738:9;14734:18;14726:26;;14798:9;14792:4;14788:20;14784:1;14773:9;14769:17;14762:47;14826:131;14952:4;14826:131;:::i;:::-;14818:139;;14545:419;;;:::o;14970:224::-;15110:34;15106:1;15098:6;15094:14;15087:58;15179:7;15174:2;15166:6;15162:15;15155:32;14970:224;:::o;15200:366::-;15342:3;15363:67;15427:2;15422:3;15363:67;:::i;:::-;15356:74;;15439:93;15528:3;15439:93;:::i;:::-;15557:2;15552:3;15548:12;15541:19;;15200:366;;;:::o;15572:419::-;15738:4;15776:2;15765:9;15761:18;15753:26;;15825:9;15819:4;15815:20;15811:1;15800:9;15796:17;15789:47;15853:131;15979:4;15853:131;:::i;:::-;15845:139;;15572:419;;;:::o;15997:222::-;16137:34;16133:1;16125:6;16121:14;16114:58;16206:5;16201:2;16193:6;16189:15;16182:30;15997:222;:::o;16225:366::-;16367:3;16388:67;16452:2;16447:3;16388:67;:::i;:::-;16381:74;;16464:93;16553:3;16464:93;:::i;:::-;16582:2;16577:3;16573:12;16566:19;;16225:366;;;:::o;16597:419::-;16763:4;16801:2;16790:9;16786:18;16778:26;;16850:9;16844:4;16840:20;16836:1;16825:9;16821:17;16814:47;16878:131;17004:4;16878:131;:::i;:::-;16870:139;;16597:419;;;:::o;17022:225::-;17162:34;17158:1;17150:6;17146:14;17139:58;17231:8;17226:2;17218:6;17214:15;17207:33;17022:225;:::o;17253:366::-;17395:3;17416:67;17480:2;17475:3;17416:67;:::i;:::-;17409:74;;17492:93;17581:3;17492:93;:::i;:::-;17610:2;17605:3;17601:12;17594:19;;17253:366;;;:::o;17625:419::-;17791:4;17829:2;17818:9;17814:18;17806:26;;17878:9;17872:4;17868:20;17864:1;17853:9;17849:17;17842:47;17906:131;18032:4;17906:131;:::i;:::-;17898:139;;17625:419;;;:::o;18050:194::-;18090:4;18110:20;18128:1;18110:20;:::i;:::-;18105:25;;18144:20;18162:1;18144:20;:::i;:::-;18139:25;;18188:1;18185;18181:9;18173:17;;18212:1;18206:4;18203:11;18200:37;;;18217:18;;:::i;:::-;18200:37;18050:194;;;;:::o;18250:168::-;18390:20;18386:1;18378:6;18374:14;18367:44;18250:168;:::o;18424:366::-;18566:3;18587:67;18651:2;18646:3;18587:67;:::i;:::-;18580:74;;18663:93;18752:3;18663:93;:::i;:::-;18781:2;18776:3;18772:12;18765:19;;18424:366;;;:::o;18796:419::-;18962:4;19000:2;18989:9;18985:18;18977:26;;19049:9;19043:4;19039:20;19035:1;19024:9;19020:17;19013:47;19077:131;19203:4;19077:131;:::i;:::-;19069:139;;18796:419;;;:::o;19221:244::-;19361:34;19357:1;19349:6;19345:14;19338:58;19430:27;19425:2;19417:6;19413:15;19406:52;19221:244;:::o;19471:366::-;19613:3;19634:67;19698:2;19693:3;19634:67;:::i;:::-;19627:74;;19710:93;19799:3;19710:93;:::i;:::-;19828:2;19823:3;19819:12;19812:19;;19471:366;;;:::o;19843:419::-;20009:4;20047:2;20036:9;20032:18;20024:26;;20096:9;20090:4;20086:20;20082:1;20071:9;20067:17;20060:47;20124:131;20250:4;20124:131;:::i;:::-;20116:139;;19843:419;;;:::o;20268:241::-;20408:34;20404:1;20396:6;20392:14;20385:58;20477:24;20472:2;20464:6;20460:15;20453:49;20268:241;:::o;20515:366::-;20657:3;20678:67;20742:2;20737:3;20678:67;:::i;:::-;20671:74;;20754:93;20843:3;20754:93;:::i;:::-;20872:2;20867:3;20863:12;20856:19;;20515:366;;;:::o;20887:419::-;21053:4;21091:2;21080:9;21076:18;21068:26;;21140:9;21134:4;21130:20;21126:1;21115:9;21111:17;21104:47;21168:131;21294:4;21168:131;:::i;:::-;21160:139;;20887:419;;;:::o;21312:410::-;21352:7;21375:20;21393:1;21375:20;:::i;:::-;21370:25;;21409:20;21427:1;21409:20;:::i;:::-;21404:25;;21464:1;21461;21457:9;21486:30;21504:11;21486:30;:::i;:::-;21475:41;;21665:1;21656:7;21652:15;21649:1;21646:22;21626:1;21619:9;21599:83;21576:139;;21695:18;;:::i;:::-;21576:139;21360:362;21312:410;;;;:::o;21728:180::-;21776:77;21773:1;21766:88;21873:4;21870:1;21863:15;21897:4;21894:1;21887:15;21914:185;21954:1;21971:20;21989:1;21971:20;:::i;:::-;21966:25;;22005:20;22023:1;22005:20;:::i;:::-;22000:25;;22044:1;22034:35;;22049:18;;:::i;:::-;22034:35;22091:1;22088;22084:9;22079:14;;21914:185;;;;:::o;22105:182::-;22245:34;22241:1;22233:6;22229:14;22222:58;22105:182;:::o;22293:366::-;22435:3;22456:67;22520:2;22515:3;22456:67;:::i;:::-;22449:74;;22532:93;22621:3;22532:93;:::i;:::-;22650:2;22645:3;22641:12;22634:19;;22293:366;;;:::o;22665:419::-;22831:4;22869:2;22858:9;22854:18;22846:26;;22918:9;22912:4;22908:20;22904:1;22893:9;22889:17;22882:47;22946:131;23072:4;22946:131;:::i;:::-;22938:139;;22665:419;;;:::o;23090:442::-;23239:4;23277:2;23266:9;23262:18;23254:26;;23290:71;23358:1;23347:9;23343:17;23334:6;23290:71;:::i;:::-;23371:72;23439:2;23428:9;23424:18;23415:6;23371:72;:::i;:::-;23453;23521:2;23510:9;23506:18;23497:6;23453:72;:::i;:::-;23090:442;;;;;;:::o;23538:180::-;23586:77;23583:1;23576:88;23683:4;23680:1;23673:15;23707:4;23704:1;23697:15;23724:180;23772:77;23769:1;23762:88;23869:4;23866:1;23859:15;23893:4;23890:1;23883:15;23910:143;23967:5;23998:6;23992:13;23983:22;;24014:33;24041:5;24014:33;:::i;:::-;23910:143;;;;:::o;24059:351::-;24129:6;24178:2;24166:9;24157:7;24153:23;24149:32;24146:119;;;24184:79;;:::i;:::-;24146:119;24304:1;24329:64;24385:7;24376:6;24365:9;24361:22;24329:64;:::i;:::-;24319:74;;24275:128;24059:351;;;;:::o;24416:85::-;24461:7;24490:5;24479:16;;24416:85;;;:::o;24507:158::-;24565:9;24598:61;24616:42;24625:32;24651:5;24625:32;:::i;:::-;24616:42;:::i;:::-;24598:61;:::i;:::-;24585:74;;24507:158;;;:::o;24671:147::-;24766:45;24805:5;24766:45;:::i;:::-;24761:3;24754:58;24671:147;;:::o;24824:114::-;24891:6;24925:5;24919:12;24909:22;;24824:114;;;:::o;24944:184::-;25043:11;25077:6;25072:3;25065:19;25117:4;25112:3;25108:14;25093:29;;24944:184;;;;:::o;25134:132::-;25201:4;25224:3;25216:11;;25254:4;25249:3;25245:14;25237:22;;25134:132;;;:::o;25272:108::-;25349:24;25367:5;25349:24;:::i;:::-;25344:3;25337:37;25272:108;;:::o;25386:179::-;25455:10;25476:46;25518:3;25510:6;25476:46;:::i;:::-;25554:4;25549:3;25545:14;25531:28;;25386:179;;;;:::o;25571:113::-;25641:4;25673;25668:3;25664:14;25656:22;;25571:113;;;:::o;25720:732::-;25839:3;25868:54;25916:5;25868:54;:::i;:::-;25938:86;26017:6;26012:3;25938:86;:::i;:::-;25931:93;;26048:56;26098:5;26048:56;:::i;:::-;26127:7;26158:1;26143:284;26168:6;26165:1;26162:13;26143:284;;;26244:6;26238:13;26271:63;26330:3;26315:13;26271:63;:::i;:::-;26264:70;;26357:60;26410:6;26357:60;:::i;:::-;26347:70;;26203:224;26190:1;26187;26183:9;26178:14;;26143:284;;;26147:14;26443:3;26436:10;;25844:608;;;25720:732;;;;:::o;26458:831::-;26721:4;26759:3;26748:9;26744:19;26736:27;;26773:71;26841:1;26830:9;26826:17;26817:6;26773:71;:::i;:::-;26854:80;26930:2;26919:9;26915:18;26906:6;26854:80;:::i;:::-;26981:9;26975:4;26971:20;26966:2;26955:9;26951:18;26944:48;27009:108;27112:4;27103:6;27009:108;:::i;:::-;27001:116;;27127:72;27195:2;27184:9;27180:18;27171:6;27127:72;:::i;:::-;27209:73;27277:3;27266:9;27262:19;27253:6;27209:73;:::i;:::-;26458:831;;;;;;;;:::o;27295:807::-;27544:4;27582:3;27571:9;27567:19;27559:27;;27596:71;27664:1;27653:9;27649:17;27640:6;27596:71;:::i;:::-;27677:72;27745:2;27734:9;27730:18;27721:6;27677:72;:::i;:::-;27759:80;27835:2;27824:9;27820:18;27811:6;27759:80;:::i;:::-;27849;27925:2;27914:9;27910:18;27901:6;27849:80;:::i;:::-;27939:73;28007:3;27996:9;27992:19;27983:6;27939:73;:::i;:::-;28022;28090:3;28079:9;28075:19;28066:6;28022:73;:::i;:::-;27295:807;;;;;;;;;:::o;28108:143::-;28165:5;28196:6;28190:13;28181:22;;28212:33;28239:5;28212:33;:::i;:::-;28108:143;;;;:::o;28257:663::-;28345:6;28353;28361;28410:2;28398:9;28389:7;28385:23;28381:32;28378:119;;;28416:79;;:::i;:::-;28378:119;28536:1;28561:64;28617:7;28608:6;28597:9;28593:22;28561:64;:::i;:::-;28551:74;;28507:128;28674:2;28700:64;28756:7;28747:6;28736:9;28732:22;28700:64;:::i;:::-;28690:74;;28645:129;28813:2;28839:64;28895:7;28886:6;28875:9;28871:22;28839:64;:::i;:::-;28829:74;;28784:129;28257:663;;;;;:::o
Swarm Source
ipfs://885c2f8973932a59cc012316bfc86bf8a482d52eb244d6fd3a0ec71ca831e19a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.