Overview
Max Total Supply
987,654,321 $LSVR
Holders
1,002 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
22,321.000658354746104755 $LSVRValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LASREVER
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-21 */ // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } pragma solidity ^0.8.0; contract LASREVER is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; mapping(address => bool) private _isBlacklisted; bool private _swapping; uint256 private _launchTime; uint256 private _launchBlock; address private feeWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public _reduceFee = false; uint256 private _reduceTime; uint256 deadBlocks = 0; mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = false; uint256 private _marketingFee; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedMaxTransactionAmount; mapping(address => uint256) private _holderFirstBuyTimestamp; mapping(address => bool) private automatedMarketMakerPairs; event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event feeWalletUpdated( address indexed newWallet, address indexed oldWallet ); address DAI = 0x6B175474E89094C44Da98b954EedeAC495271d0F; constructor() ERC20("LASREVER", "$LSVR") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), DAI); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 totalSupply = 987_654_321 * 1e18; maxTransactionAmount = (totalSupply * 1) / 100; maxWallet = (totalSupply * 1) / 100; swapTokensAtAmount = (totalSupply * 15) / 10000; _marketingFee = 4; feeWallet = address(owner()); // set as fee wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _approve(owner(), address(_uniswapV2Router), type(uint256).max); ERC20(DAI).approve(address(_uniswapV2Router), type(uint256).max); ERC20(DAI).approve(address(this), type(uint256).max); _mint(owner(), totalSupply); } function readySteadyGo() external onlyOwner { deadBlocks = 0; tradingActive = true; _launchTime = block.timestamp; _launchBlock = block.number; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool) { transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * 1e18; } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * 1e18; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } function updateFees(uint256 marketingFee) external onlyOwner { _marketingFee = marketingFee; _reduceFee = false; require(_marketingFee <= 10, "Must keep fees at 10% or less"); } function updateReduceFee(bool reduceFee) external onlyOwner { _reduceFee = reduceFee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateFeeWallet(address newWallet) external onlyOwner { emit feeWalletUpdated(newWallet, feeWallet); feeWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function getFee() public view returns (uint256) { return _getReducedFee(_marketingFee, 1); } function setBlacklisted(address[] memory blacklisted_) public onlyOwner { for (uint256 i = 0; i < blacklisted_.length; i++) { if (blacklisted_[i] != uniswapV2Pair && blacklisted_[i] != address(uniswapV2Router)) { _isBlacklisted[blacklisted_[i]] = false; } } } function delBlacklisted(address[] memory blacklisted_) public onlyOwner { for (uint256 i = 0; i < blacklisted_.length; i++) { _isBlacklisted[blacklisted_[i]] = false; } } function isSniper(address addr) public view returns (bool) { return _isBlacklisted[addr]; } 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(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap."); if (amount == 0) { super._transfer(from, to, 0); return; } if (tradingActive) { require(block.number >= _launchBlock + deadBlocks, "NOT BOT"); } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !_swapping ) { if (!tradingActive) { require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if (balanceOf(to) == 0 && _holderFirstBuyTimestamp[to] == 0) { _holderFirstBuyTimestamp[to] = block.timestamp; } if (transferDelayEnabled) { if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } // when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } // when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if (!_isExcludedMaxTransactionAmount[to]) { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && !_swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { _swapping = true; swapBack(); _swapping = false; } bool takeFee = !_swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { uint256 totalFees = _getReducedFee(_marketingFee, 1); if (totalFees > 0) { fees = amount.mul(totalFees).div(100); if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } } super._transfer(from, to, amount); } function _getReducedFee(uint256 initial, uint256 minFee) private view returns (uint256){ if (!_reduceFee) { return initial; } uint256 time = block.timestamp - _launchTime; uint256 amountToReduce = time / 10 / 60; if (amountToReduce >= initial) { return minFee; } uint256 reducedAmount = initial - amountToReduce; return reducedAmount > minFee ? reducedAmount : minFee; } function _swapTokensForDai(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = DAI; _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, path, owner(), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) return; if (contractBalance > swapTokensAtAmount) { contractBalance = swapTokensAtAmount; } uint256 amountToSwapForDAI = contractBalance; _swapTokensForDai(contractBalance); } function importantMessageFromTeam(string memory input) external onlyOwner {} function forceSwap() external onlyOwner { _swapTokensForDai(balanceOf(address(this))); } function forceSend() external onlyOwner { uint256 balance = ERC20(DAI).balanceOf(address(this)); _approve(address(this), address(uniswapV2Router), balance); ERC20(DAI).transfer(msg.sender, balance); } 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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[],"name":"_reduceFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"blacklisted_","type":"address[]"}],"name":"delBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"input","type":"string"}],"name":"importantMessageFromTeam","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"readySteadyGo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"reduceFee","type":"bool"}],"name":"updateReduceFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526010805462ffffff1916600117905560006012556014805460ff19169055601a80546001600160a01b031916736b175474e89094c44da98b954eedeac495271d0f1790553480156200005557600080fd5b50604051806040016040528060088152602001672620a9a922ab22a960c11b81525060405180604001604052806005815260200164122629ab2960d91b8152508160039081620000a69190620008c3565b506004620000b58282620008c3565b505050620000d2620000cc6200046360201b60201c565b62000467565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000f4816001620004b9565b600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200014e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017491906200098f565b601a546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015620001c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ec91906200098f565b600780546001600160a01b0319166001600160a01b0392909216918217905562000218906001620004b9565b60075462000231906001600160a01b03166001620004ee565b6b0330f7f0064f1eef5c24000060646200024d826001620009d7565b620002599190620009f9565b600d5560646200026b826001620009d7565b620002779190620009f9565b600f908155612710906200028d908390620009d7565b620002999190620009f9565b600e556004601555600554600c80546001600160a01b0319166001600160a01b039092169182179055620002cf90600162000542565b620002dc30600162000542565b620002eb61dead600162000542565b6200030a620003026005546001600160a01b031690565b6001620004b9565b62000317306001620004b9565b6200032661dead6001620004b9565b620003476200033d6005546001600160a01b031690565b83600019620005ab565b601a5460405163095ea7b360e01b81526001600160a01b03848116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af11580156200039c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c2919062000a1c565b50601a5460405163095ea7b360e01b815230600482015260001960248201526001600160a01b039091169063095ea7b3906044016020604051808303816000875af115801562000416573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043c919062000a1c565b506200045b620004546005546001600160a01b031690565b82620006d7565b505062000a5b565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620004c3620007bc565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6200054c620007bc565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038316620006135760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006765760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200060a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166200072f5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200060a565b806002600082825462000743919062000a40565b90915550506001600160a01b038216600090815260208190526040812080548392906200077290849062000a40565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b03163314620008185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200060a565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200084a57607f821691505b6020821081036200086b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200081a57600081815260208120601f850160051c810160208610156200089a5750805b601f850160051c820191505b81811015620008bb57828155600101620008a6565b505050505050565b81516001600160401b03811115620008df57620008df6200081f565b620008f781620008f0845462000835565b8462000871565b602080601f8311600181146200092f5760008415620009165750858301515b600019600386901b1c1916600185901b178555620008bb565b600085815260208120601f198616915b8281101562000960578886015182559484019460019091019084016200093f565b50858210156200097f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620009a257600080fd5b81516001600160a01b0381168114620009ba57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620009f457620009f4620009c1565b500290565b60008262000a1757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000a2f57600080fd5b81518015158114620009ba57600080fd5b6000821982111562000a565762000a56620009c1565b500190565b61241b8062000a6b6000396000f3fe60806040526004361061024a5760003560e01c80638da5cb5b11610139578063c8c8ebe4116100b6578063e2f456051161007a578063e2f45605146106a4578063e884f260146106ba578063eca224ee146106cf578063f1973575146106ef578063f2fde38b1461070f578063f8b45b051461072f57600080fd5b8063c8c8ebe414610624578063ced72f871461063a578063d257b34f1461064f578063dd62ed3e1461066f578063df778d261461068f57600080fd5b8063bbc0c742116100fd578063bbc0c7421461058b578063c0246668146105aa578063c18bc195146105ca578063c8125e45146105ea578063c876d0b91461060a57600080fd5b80638da5cb5b146104ee57806395d89b41146105165780639a7a23d61461052b578063a457c2d71461054b578063a9059cbb1461056b57600080fd5b806339509351116101c757806370a082311161018b57806370a0823114610464578063715018a614610484578063751039fc146104995780637571336a146104ae57806378dacee1146104ce57600080fd5b806339509351146103bc5780634a62bb65146103dc5780634fbee193146103f6578063667185241461042f57806367f61d0b1461044f57600080fd5b806318160ddd1161020e57806318160ddd14610321578063203e727e1461034057806323b872dd14610360578063313ce56714610380578063327fbb5e1461039c57600080fd5b806306fdde0314610256578063095ea7b3146102815780630b559c6f146102b15780630f3a325f146102d357806312b77e8a1461030c57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610745565b6040516102789190611ea3565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004611f0f565b6107d7565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc366004611f80565b6107f1565b005b3480156102df57600080fd5b506102a16102ee36600461202d565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561031857600080fd5b506102d16108ec565b34801561032d57600080fd5b506002545b604051908152602001610278565b34801561034c57600080fd5b506102d161035b366004612048565b6109f1565b34801561036c57600080fd5b506102a161037b366004612061565b610ab1565b34801561038c57600080fd5b5060405160128152602001610278565b3480156103a857600080fd5b506102d16103b73660046120ab565b610ad5565b3480156103c857600080fd5b506102a16103d7366004611f0f565b610af9565b3480156103e857600080fd5b506010546102a19060ff1681565b34801561040257600080fd5b506102a161041136600461202d565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561043b57600080fd5b506102d161044a36600461202d565b610b1b565b34801561045b57600080fd5b506102d1610b80565b34801561047057600080fd5b5061033261047f36600461202d565b610ba6565b34801561049057600080fd5b506102d1610bc1565b3480156104a557600080fd5b506102a1610bd5565b3480156104ba57600080fd5b506102d16104c93660046120c8565b610bef565b3480156104da57600080fd5b506102d16104e9366004612048565b610c22565b3480156104fa57600080fd5b506005546040516001600160a01b039091168152602001610278565b34801561052257600080fd5b5061026b610c8f565b34801561053757600080fd5b506102d16105463660046120c8565b610c9e565b34801561055757600080fd5b506102a1610566366004611f0f565b610d34565b34801561057757600080fd5b506102a1610586366004611f0f565b610daf565b34801561059757600080fd5b506010546102a190610100900460ff1681565b3480156105b657600080fd5b506102d16105c53660046120c8565b610dbd565b3480156105d657600080fd5b506102d16105e5366004612048565b610e24565b3480156105f657600080fd5b506102d1610605366004611f80565b610ed3565b34801561061657600080fd5b506014546102a19060ff1681565b34801561063057600080fd5b50610332600d5481565b34801561064657600080fd5b50610332610f43565b34801561065b57600080fd5b506102a161066a366004612048565b610f57565b34801561067b57600080fd5b5061033261068a3660046120ff565b61108b565b34801561069b57600080fd5b506102d16110b6565b3480156106b057600080fd5b50610332600e5481565b3480156106c657600080fd5b506102a16110cf565b3480156106db57600080fd5b506102d16106ea366004612132565b6110e9565b3480156106fb57600080fd5b506010546102a19062010000900460ff1681565b34801561071b57600080fd5b506102d161072a36600461202d565b6110f1565b34801561073b57600080fd5b50610332600f5481565b606060038054610754906121c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610780906121c7565b80156107cd5780601f106107a2576101008083540402835291602001916107cd565b820191906000526020600020905b8154815290600101906020018083116107b057829003601f168201915b5050505050905090565b6000336107e5818585611167565b60019150505b92915050565b6107f961128b565b60005b81518110156108e85760075482516001600160a01b039091169083908390811061082857610828612201565b60200260200101516001600160a01b031614158015610879575060065482516001600160a01b039091169083908390811061086557610865612201565b60200260200101516001600160a01b031614155b156108d65760006008600084848151811061089657610896612201565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b806108e08161222d565b9150506107fc565b5050565b6108f461128b565b601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561093d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109619190612246565b60065490915061097c9030906001600160a01b031683611167565b601a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e8919061225f565b6109f961128b565b670de0b6b3a76400006103e8610a0e60025490565b610a1990600161227c565b610a23919061229b565b610a2d919061229b565b811015610a995760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084015b60405180910390fd5b610aab81670de0b6b3a764000061227c565b600d5550565b600033610abf8582856112e5565b610aca85858561135f565b506001949350505050565b610add61128b565b60108054911515620100000262ff000019909216919091179055565b6000336107e5818585610b0c838361108b565b610b1691906122bd565b611167565b610b2361128b565b600c546040516001600160a01b03918216918316907f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492890600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b610b8861128b565b60006012556010805461ff00191661010017905542600a5543600b55565b6001600160a01b031660009081526020819052604090205490565b610bc961128b565b610bd36000611ad0565b565b6000610bdf61128b565b506010805460ff19169055600190565b610bf761128b565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b610c2a61128b565b60158190556010805462ff000019169055600a811115610c8c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a90565b50565b606060048054610754906121c7565b610ca661128b565b6007546001600160a01b0390811690831603610d2a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a90565b6108e88282611b22565b60003381610d42828661108b565b905083811015610da25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a90565b610aca8286868403611167565b6000336107e581858561135f565b610dc561128b565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b610e2c61128b565b670de0b6b3a76400006103e8610e4160025490565b610e4c90600561227c565b610e56919061229b565b610e60919061229b565b811015610ebb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a90565b610ecd81670de0b6b3a764000061227c565b600f5550565b610edb61128b565b60005b81518110156108e857600060086000848481518110610eff57610eff612201565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610f3b8161222d565b915050610ede565b6000610f526015546001611b76565b905090565b6000610f6161128b565b620186a0610f6e60025490565b610f7990600161227c565b610f83919061229b565b821015610ff05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a90565b6103e8610ffc60025490565b61100790600561227c565b611011919061229b565b82111561107d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a90565b50600e81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6110be61128b565b610bd36110ca30610ba6565b611bf5565b60006110d961128b565b506014805460ff19169055600190565b610c8c61128b565b6110f961128b565b6001600160a01b03811661115e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a90565b610c8c81611ad0565b6001600160a01b0383166111c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a90565b6001600160a01b03821661122a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a90565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a90565b60006112f1848461108b565b90506000198114611359578181101561134c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a90565b6113598484848403611167565b50505050565b6001600160a01b0383166113855760405162461bcd60e51b8152600401610a90906122d5565b6001600160a01b0382166113ab5760405162461bcd60e51b8152600401610a909061231a565b6001600160a01b03831660009081526008602052604090205460ff16156114505760405162461bcd60e51b815260206004820152604d60248201527f596f7572206164647265737320686173206265656e206d61726b65642061732060448201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60648201526c39b332b91037b91039bbb0b81760991b608482015260a401610a90565b806000036114695761146483836000611cff565b505050565b601054610100900460ff16156114c257601254600b5461148991906122bd565b4310156114c25760405162461bcd60e51b81526020600482015260076024820152661393d5081093d560ca1b6044820152606401610a90565b60105460ff161561195d576005546001600160a01b038481169116148015906114f957506005546001600160a01b03838116911614155b801561150d57506001600160a01b03821615155b801561152457506001600160a01b03821661dead14155b8015611533575060095460ff16155b1561195d57601054610100900460ff166115cb576001600160a01b03831660009081526016602052604090205460ff168061158657506001600160a01b03821660009081526016602052604090205460ff165b6115cb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a90565b6115d482610ba6565b1580156115f757506001600160a01b038216600090815260186020526040902054155b15611618576001600160a01b03821660009081526018602052604090204290555b60145460ff1615611717576005546001600160a01b0383811691161480159061164f57506006546001600160a01b03838116911614155b801561166957506007546001600160a01b03838116911614155b15611717573260009081526013602052604090205443116117045760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a90565b3260009081526013602052604090204390555b6001600160a01b03831660009081526019602052604090205460ff16801561175857506001600160a01b03821660009081526017602052604090205460ff16155b1561182c57600d548111156117cd5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a90565b600f546117d983610ba6565b6117e390836122bd565b11156118275760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a90565b61195d565b6001600160a01b03821660009081526019602052604090205460ff16801561186d57506001600160a01b03831660009081526017602052604090205460ff16155b156118e357600d548111156118275760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a90565b6001600160a01b03821660009081526017602052604090205460ff1661195d57600f5461190f83610ba6565b61191990836122bd565b111561195d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a90565b600061196830610ba6565b600e5490915081108015908190611982575060095460ff16155b80156119a757506001600160a01b03851660009081526019602052604090205460ff16155b80156119cc57506001600160a01b03851660009081526016602052604090205460ff16155b80156119f157506001600160a01b03841660009081526016602052604090205460ff16155b15611a16576009805460ff19166001179055611a0b611e53565b6009805460ff191690555b6009546001600160a01b03861660009081526016602052604090205460ff91821615911680611a5d57506001600160a01b03851660009081526016602052604090205460ff165b15611a66575060005b60008115611abc576000611a7d6015546001611b76565b90508015611aba57611a9a6064611a948884611e84565b90611e97565b91508115611aad57611aad883084611cff565b611ab7828761235d565b95505b505b611ac7878787611cff565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60105460009062010000900460ff16611b905750816107eb565b6000600a5442611ba0919061235d565b90506000603c611bb1600a8461229b565b611bbb919061229b565b9050848110611bce5783925050506107eb565b6000611bda828761235d565b9050848111611be95784611beb565b805b9695505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c2a57611c2a612201565b6001600160a01b039283166020918202929092010152601a54825191169082906001908110611c5b57611c5b612201565b6001600160a01b039283166020918202929092010152600654611c819130911684611167565b6006546001600160a01b0316635c11d79583600084611ca86005546001600160a01b031690565b426040518663ffffffff1660e01b8152600401611cc9959493929190612374565b600060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050505050565b6001600160a01b038316611d255760405162461bcd60e51b8152600401610a90906122d5565b6001600160a01b038216611d4b5760405162461bcd60e51b8152600401610a909061231a565b6001600160a01b03831660009081526020819052604090205481811015611dc35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a90565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611dfa9084906122bd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e4691815260200190565b60405180910390a3611359565b6000611e5e30610ba6565b905080600003611e6b5750565b600e54811115611e7a5750600e545b806108e881611bf5565b6000611e90828461227c565b9392505050565b6000611e90828461229b565b600060208083528351808285015260005b81811015611ed057858101830151858201604001528201611eb4565b81811115611ee2576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461108657600080fd5b60008060408385031215611f2257600080fd5b611f2b83611ef8565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f7857611f78611f39565b604052919050565b60006020808385031215611f9357600080fd5b823567ffffffffffffffff80821115611fab57600080fd5b818501915085601f830112611fbf57600080fd5b813581811115611fd157611fd1611f39565b8060051b9150611fe2848301611f4f565b8181529183018401918481019088841115611ffc57600080fd5b938501935b838510156120215761201285611ef8565b82529385019390850190612001565b98975050505050505050565b60006020828403121561203f57600080fd5b611e9082611ef8565b60006020828403121561205a57600080fd5b5035919050565b60008060006060848603121561207657600080fd5b61207f84611ef8565b925061208d60208501611ef8565b9150604084013590509250925092565b8015158114610c8c57600080fd5b6000602082840312156120bd57600080fd5b8135611e908161209d565b600080604083850312156120db57600080fd5b6120e483611ef8565b915060208301356120f48161209d565b809150509250929050565b6000806040838503121561211257600080fd5b61211b83611ef8565b915061212960208401611ef8565b90509250929050565b6000602080838503121561214557600080fd5b823567ffffffffffffffff8082111561215d57600080fd5b818501915085601f83011261217157600080fd5b81358181111561218357612183611f39565b612195601f8201601f19168501611f4f565b915080825286848285010111156121ab57600080fd5b8084840185840137600090820190930192909252509392505050565b600181811c908216806121db57607f821691505b6020821081036121fb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161223f5761223f612217565b5060010190565b60006020828403121561225857600080fd5b5051919050565b60006020828403121561227157600080fd5b8151611e908161209d565b600081600019048311821515161561229657612296612217565b500290565b6000826122b857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156122d0576122d0612217565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561236f5761236f612217565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123c45784516001600160a01b03168352938301939183019160010161239f565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205b2916438d29fe69c84bfbef2626c92810edd66576bc7c9baa65c7df2c283eae64736f6c634300080f0033
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80638da5cb5b11610139578063c8c8ebe4116100b6578063e2f456051161007a578063e2f45605146106a4578063e884f260146106ba578063eca224ee146106cf578063f1973575146106ef578063f2fde38b1461070f578063f8b45b051461072f57600080fd5b8063c8c8ebe414610624578063ced72f871461063a578063d257b34f1461064f578063dd62ed3e1461066f578063df778d261461068f57600080fd5b8063bbc0c742116100fd578063bbc0c7421461058b578063c0246668146105aa578063c18bc195146105ca578063c8125e45146105ea578063c876d0b91461060a57600080fd5b80638da5cb5b146104ee57806395d89b41146105165780639a7a23d61461052b578063a457c2d71461054b578063a9059cbb1461056b57600080fd5b806339509351116101c757806370a082311161018b57806370a0823114610464578063715018a614610484578063751039fc146104995780637571336a146104ae57806378dacee1146104ce57600080fd5b806339509351146103bc5780634a62bb65146103dc5780634fbee193146103f6578063667185241461042f57806367f61d0b1461044f57600080fd5b806318160ddd1161020e57806318160ddd14610321578063203e727e1461034057806323b872dd14610360578063313ce56714610380578063327fbb5e1461039c57600080fd5b806306fdde0314610256578063095ea7b3146102815780630b559c6f146102b15780630f3a325f146102d357806312b77e8a1461030c57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b610745565b6040516102789190611ea3565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004611f0f565b6107d7565b6040519015158152602001610278565b3480156102bd57600080fd5b506102d16102cc366004611f80565b6107f1565b005b3480156102df57600080fd5b506102a16102ee36600461202d565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561031857600080fd5b506102d16108ec565b34801561032d57600080fd5b506002545b604051908152602001610278565b34801561034c57600080fd5b506102d161035b366004612048565b6109f1565b34801561036c57600080fd5b506102a161037b366004612061565b610ab1565b34801561038c57600080fd5b5060405160128152602001610278565b3480156103a857600080fd5b506102d16103b73660046120ab565b610ad5565b3480156103c857600080fd5b506102a16103d7366004611f0f565b610af9565b3480156103e857600080fd5b506010546102a19060ff1681565b34801561040257600080fd5b506102a161041136600461202d565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561043b57600080fd5b506102d161044a36600461202d565b610b1b565b34801561045b57600080fd5b506102d1610b80565b34801561047057600080fd5b5061033261047f36600461202d565b610ba6565b34801561049057600080fd5b506102d1610bc1565b3480156104a557600080fd5b506102a1610bd5565b3480156104ba57600080fd5b506102d16104c93660046120c8565b610bef565b3480156104da57600080fd5b506102d16104e9366004612048565b610c22565b3480156104fa57600080fd5b506005546040516001600160a01b039091168152602001610278565b34801561052257600080fd5b5061026b610c8f565b34801561053757600080fd5b506102d16105463660046120c8565b610c9e565b34801561055757600080fd5b506102a1610566366004611f0f565b610d34565b34801561057757600080fd5b506102a1610586366004611f0f565b610daf565b34801561059757600080fd5b506010546102a190610100900460ff1681565b3480156105b657600080fd5b506102d16105c53660046120c8565b610dbd565b3480156105d657600080fd5b506102d16105e5366004612048565b610e24565b3480156105f657600080fd5b506102d1610605366004611f80565b610ed3565b34801561061657600080fd5b506014546102a19060ff1681565b34801561063057600080fd5b50610332600d5481565b34801561064657600080fd5b50610332610f43565b34801561065b57600080fd5b506102a161066a366004612048565b610f57565b34801561067b57600080fd5b5061033261068a3660046120ff565b61108b565b34801561069b57600080fd5b506102d16110b6565b3480156106b057600080fd5b50610332600e5481565b3480156106c657600080fd5b506102a16110cf565b3480156106db57600080fd5b506102d16106ea366004612132565b6110e9565b3480156106fb57600080fd5b506010546102a19062010000900460ff1681565b34801561071b57600080fd5b506102d161072a36600461202d565b6110f1565b34801561073b57600080fd5b50610332600f5481565b606060038054610754906121c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610780906121c7565b80156107cd5780601f106107a2576101008083540402835291602001916107cd565b820191906000526020600020905b8154815290600101906020018083116107b057829003601f168201915b5050505050905090565b6000336107e5818585611167565b60019150505b92915050565b6107f961128b565b60005b81518110156108e85760075482516001600160a01b039091169083908390811061082857610828612201565b60200260200101516001600160a01b031614158015610879575060065482516001600160a01b039091169083908390811061086557610865612201565b60200260200101516001600160a01b031614155b156108d65760006008600084848151811061089657610896612201565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b806108e08161222d565b9150506107fc565b5050565b6108f461128b565b601a546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561093d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109619190612246565b60065490915061097c9030906001600160a01b031683611167565b601a5460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e8919061225f565b6109f961128b565b670de0b6b3a76400006103e8610a0e60025490565b610a1990600161227c565b610a23919061229b565b610a2d919061229b565b811015610a995760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e312560881b60648201526084015b60405180910390fd5b610aab81670de0b6b3a764000061227c565b600d5550565b600033610abf8582856112e5565b610aca85858561135f565b506001949350505050565b610add61128b565b60108054911515620100000262ff000019909216919091179055565b6000336107e5818585610b0c838361108b565b610b1691906122bd565b611167565b610b2361128b565b600c546040516001600160a01b03918216918316907f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492890600090a3600c80546001600160a01b0319166001600160a01b0392909216919091179055565b610b8861128b565b60006012556010805461ff00191661010017905542600a5543600b55565b6001600160a01b031660009081526020819052604090205490565b610bc961128b565b610bd36000611ad0565b565b6000610bdf61128b565b506010805460ff19169055600190565b610bf761128b565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b610c2a61128b565b60158190556010805462ff000019169055600a811115610c8c5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610a90565b50565b606060048054610754906121c7565b610ca661128b565b6007546001600160a01b0390811690831603610d2a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a90565b6108e88282611b22565b60003381610d42828661108b565b905083811015610da25760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a90565b610aca8286868403611167565b6000336107e581858561135f565b610dc561128b565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b610e2c61128b565b670de0b6b3a76400006103e8610e4160025490565b610e4c90600561227c565b610e56919061229b565b610e60919061229b565b811015610ebb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610a90565b610ecd81670de0b6b3a764000061227c565b600f5550565b610edb61128b565b60005b81518110156108e857600060086000848481518110610eff57610eff612201565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610f3b8161222d565b915050610ede565b6000610f526015546001611b76565b905090565b6000610f6161128b565b620186a0610f6e60025490565b610f7990600161227c565b610f83919061229b565b821015610ff05760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a90565b6103e8610ffc60025490565b61100790600561227c565b611011919061229b565b82111561107d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a90565b50600e81905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6110be61128b565b610bd36110ca30610ba6565b611bf5565b60006110d961128b565b506014805460ff19169055600190565b610c8c61128b565b6110f961128b565b6001600160a01b03811661115e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a90565b610c8c81611ad0565b6001600160a01b0383166111c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a90565b6001600160a01b03821661122a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a90565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610bd35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a90565b60006112f1848461108b565b90506000198114611359578181101561134c5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a90565b6113598484848403611167565b50505050565b6001600160a01b0383166113855760405162461bcd60e51b8152600401610a90906122d5565b6001600160a01b0382166113ab5760405162461bcd60e51b8152600401610a909061231a565b6001600160a01b03831660009081526008602052604090205460ff16156114505760405162461bcd60e51b815260206004820152604d60248201527f596f7572206164647265737320686173206265656e206d61726b65642061732060448201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60648201526c39b332b91037b91039bbb0b81760991b608482015260a401610a90565b806000036114695761146483836000611cff565b505050565b601054610100900460ff16156114c257601254600b5461148991906122bd565b4310156114c25760405162461bcd60e51b81526020600482015260076024820152661393d5081093d560ca1b6044820152606401610a90565b60105460ff161561195d576005546001600160a01b038481169116148015906114f957506005546001600160a01b03838116911614155b801561150d57506001600160a01b03821615155b801561152457506001600160a01b03821661dead14155b8015611533575060095460ff16155b1561195d57601054610100900460ff166115cb576001600160a01b03831660009081526016602052604090205460ff168061158657506001600160a01b03821660009081526016602052604090205460ff165b6115cb5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a90565b6115d482610ba6565b1580156115f757506001600160a01b038216600090815260186020526040902054155b15611618576001600160a01b03821660009081526018602052604090204290555b60145460ff1615611717576005546001600160a01b0383811691161480159061164f57506006546001600160a01b03838116911614155b801561166957506007546001600160a01b03838116911614155b15611717573260009081526013602052604090205443116117045760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610a90565b3260009081526013602052604090204390555b6001600160a01b03831660009081526019602052604090205460ff16801561175857506001600160a01b03821660009081526017602052604090205460ff16155b1561182c57600d548111156117cd5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a90565b600f546117d983610ba6565b6117e390836122bd565b11156118275760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a90565b61195d565b6001600160a01b03821660009081526019602052604090205460ff16801561186d57506001600160a01b03831660009081526017602052604090205460ff16155b156118e357600d548111156118275760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610a90565b6001600160a01b03821660009081526017602052604090205460ff1661195d57600f5461190f83610ba6565b61191990836122bd565b111561195d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a90565b600061196830610ba6565b600e5490915081108015908190611982575060095460ff16155b80156119a757506001600160a01b03851660009081526019602052604090205460ff16155b80156119cc57506001600160a01b03851660009081526016602052604090205460ff16155b80156119f157506001600160a01b03841660009081526016602052604090205460ff16155b15611a16576009805460ff19166001179055611a0b611e53565b6009805460ff191690555b6009546001600160a01b03861660009081526016602052604090205460ff91821615911680611a5d57506001600160a01b03851660009081526016602052604090205460ff165b15611a66575060005b60008115611abc576000611a7d6015546001611b76565b90508015611aba57611a9a6064611a948884611e84565b90611e97565b91508115611aad57611aad883084611cff565b611ab7828761235d565b95505b505b611ac7878787611cff565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260196020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b60105460009062010000900460ff16611b905750816107eb565b6000600a5442611ba0919061235d565b90506000603c611bb1600a8461229b565b611bbb919061229b565b9050848110611bce5783925050506107eb565b6000611bda828761235d565b9050848111611be95784611beb565b805b9695505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c2a57611c2a612201565b6001600160a01b039283166020918202929092010152601a54825191169082906001908110611c5b57611c5b612201565b6001600160a01b039283166020918202929092010152600654611c819130911684611167565b6006546001600160a01b0316635c11d79583600084611ca86005546001600160a01b031690565b426040518663ffffffff1660e01b8152600401611cc9959493929190612374565b600060405180830381600087803b158015611ce357600080fd5b505af1158015611cf7573d6000803e3d6000fd5b505050505050565b6001600160a01b038316611d255760405162461bcd60e51b8152600401610a90906122d5565b6001600160a01b038216611d4b5760405162461bcd60e51b8152600401610a909061231a565b6001600160a01b03831660009081526020819052604090205481811015611dc35760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a90565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611dfa9084906122bd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e4691815260200190565b60405180910390a3611359565b6000611e5e30610ba6565b905080600003611e6b5750565b600e54811115611e7a5750600e545b806108e881611bf5565b6000611e90828461227c565b9392505050565b6000611e90828461229b565b600060208083528351808285015260005b81811015611ed057858101830151858201604001528201611eb4565b81811115611ee2576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461108657600080fd5b60008060408385031215611f2257600080fd5b611f2b83611ef8565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611f7857611f78611f39565b604052919050565b60006020808385031215611f9357600080fd5b823567ffffffffffffffff80821115611fab57600080fd5b818501915085601f830112611fbf57600080fd5b813581811115611fd157611fd1611f39565b8060051b9150611fe2848301611f4f565b8181529183018401918481019088841115611ffc57600080fd5b938501935b838510156120215761201285611ef8565b82529385019390850190612001565b98975050505050505050565b60006020828403121561203f57600080fd5b611e9082611ef8565b60006020828403121561205a57600080fd5b5035919050565b60008060006060848603121561207657600080fd5b61207f84611ef8565b925061208d60208501611ef8565b9150604084013590509250925092565b8015158114610c8c57600080fd5b6000602082840312156120bd57600080fd5b8135611e908161209d565b600080604083850312156120db57600080fd5b6120e483611ef8565b915060208301356120f48161209d565b809150509250929050565b6000806040838503121561211257600080fd5b61211b83611ef8565b915061212960208401611ef8565b90509250929050565b6000602080838503121561214557600080fd5b823567ffffffffffffffff8082111561215d57600080fd5b818501915085601f83011261217157600080fd5b81358181111561218357612183611f39565b612195601f8201601f19168501611f4f565b915080825286848285010111156121ab57600080fd5b8084840185840137600090820190930192909252509392505050565b600181811c908216806121db57607f821691505b6020821081036121fb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161223f5761223f612217565b5060010190565b60006020828403121561225857600080fd5b5051919050565b60006020828403121561227157600080fd5b8151611e908161209d565b600081600019048311821515161561229657612296612217565b500290565b6000826122b857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156122d0576122d0612217565b500190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60008282101561236f5761236f612217565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123c45784516001600160a01b03168352938301939183019160010161239f565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212205b2916438d29fe69c84bfbef2626c92810edd66576bc7c9baa65c7df2c283eae64736f6c634300080f0033
Deployed Bytecode Sourcemap
35599:11926:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24768:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27119:201;;;;;;;;;;-1:-1:-1;27119:201:0;;;;;:::i;:::-;;:::i;:::-;;;1218:14:1;;1211:22;1193:41;;1181:2;1166:18;27119:201:0;1053:187:1;41524:325:0;;;;;;;;;;-1:-1:-1;41524:325:0;;;;;:::i;:::-;;:::i;:::-;;42071:105;;;;;;;;;;-1:-1:-1;42071:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;42148:20:0;42124:4;42148:20;;;:14;:20;;;;;;;;;42071:105;47253:232;;;;;;;;;;;;;:::i;25888:108::-;;;;;;;;;;-1:-1:-1;25976:12:0;;25888:108;;;2951:25:1;;;2939:2;2924:18;25888:108:0;2805:177:1;39534:234:0;;;;;;;;;;-1:-1:-1;39534:234:0;;;;;:::i;:::-;;:::i;27900:295::-;;;;;;;;;;-1:-1:-1;27900:295:0;;;;;:::i;:::-;;:::i;25730:93::-;;;;;;;;;;-1:-1:-1;25730:93:0;;25813:2;3647:36:1;;3635:2;3620:18;25730:93:0;3505:184:1;40368:101:0;;;;;;;;;;-1:-1:-1;40368:101:0;;;;;:::i;:::-;;:::i;28604:238::-;;;;;;;;;;-1:-1:-1;28604:238:0;;;;;:::i;:::-;;:::i;36067:33::-;;;;;;;;;;-1:-1:-1;36067:33:0;;;;;;;;41276:126;;;;;;;;;;-1:-1:-1;41276:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;41366:28:0;41342:4;41366:28;;;:19;:28;;;;;;;;;41276:126;41111:157;;;;;;;;;;-1:-1:-1;41111:157:0;;;;;:::i;:::-;;:::i;38511:186::-;;;;;;;;;;;;;:::i;26059:127::-;;;;;;;;;;-1:-1:-1;26059:127:0;;;;;:::i;:::-;;:::i;18191:103::-;;;;;;;;;;;;;:::i;38749:121::-;;;;;;;;;;;;;:::i;39999:144::-;;;;;;;;;;-1:-1:-1;39999:144:0;;;;;:::i;:::-;;:::i;40151:209::-;;;;;;;;;;-1:-1:-1;40151:209:0;;;;;:::i;:::-;;:::i;17543:87::-;;;;;;;;;;-1:-1:-1;17616:6:0;;17543:87;;-1:-1:-1;;;;;17616:6:0;;;4529:51:1;;4517:2;4502:18;17543:87:0;4383:203:1;24987:104:0;;;;;;;;;;;;;:::i;40667:242::-;;;;;;;;;;-1:-1:-1;40667:242:0;;;;;:::i;:::-;;:::i;29345:436::-;;;;;;;;;;-1:-1:-1;29345:436:0;;;;;:::i;:::-;;:::i;26392:193::-;;;;;;;;;;-1:-1:-1;26392:193:0;;;;;:::i;:::-;;:::i;36107:33::-;;;;;;;;;;-1:-1:-1;36107:33:0;;;;;;;;;;;40477:182;;;;;;;;;;-1:-1:-1;40477:182:0;;;;;:::i;:::-;;:::i;39776:215::-;;;;;;;;;;-1:-1:-1;39776:215:0;;;;;:::i;:::-;;:::i;41857:206::-;;;;;;;;;;-1:-1:-1;41857:206:0;;;;;:::i;:::-;;:::i;36320:40::-;;;;;;;;;;-1:-1:-1;36320:40:0;;;;;;;;35952:35;;;;;;;;;;;;;;;;41410:106;;;;;;;;;;;;;:::i;39136:390::-;;;;;;;;;;-1:-1:-1;39136:390:0;;;;;:::i;:::-;;:::i;26648:151::-;;;;;;;;;;-1:-1:-1;26648:151:0;;;;;:::i;:::-;;:::i;47143:102::-;;;;;;;;;;;;;:::i;35994:33::-;;;;;;;;;;;;;;;;38931:135;;;;;;;;;;;;;:::i;47059:76::-;;;;;;;;;;-1:-1:-1;47059:76:0;;;;;:::i;:::-;;:::i;36147:30::-;;;;;;;;;;-1:-1:-1;36147:30:0;;;;;;;;;;;18449:201;;;;;;;;;;-1:-1:-1;18449:201:0;;;;;:::i;:::-;;:::i;36034:24::-;;;;;;;;;;;;;;;;24768:100;24822:13;24855:5;24848:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24768:100;:::o;27119:201::-;27202:4;16174:10;27258:32;16174:10;27274:7;27283:6;27258:8;:32::i;:::-;27308:4;27301:11;;;27119:201;;;;;:::o;41524:325::-;17429:13;:11;:13::i;:::-;41612:9:::1;41607:235;41631:12;:19;41627:1;:23;41607:235;;;41695:13;::::0;41676:15;;-1:-1:-1;;;;;41695:13:0;;::::1;::::0;41676:12;;41689:1;;41676:15;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;41676:32:0::1;;;:79;;;;-1:-1:-1::0;41739:15:0::1;::::0;41712;;-1:-1:-1;;;;;41739:15:0;;::::1;::::0;41712:12;;41725:1;;41712:15;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;41712:43:0::1;;;41676:79;41672:159;;;41810:5;41776:14;:31;41791:12;41804:1;41791:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;41776:31:0::1;-1:-1:-1::0;;;;;41776:31:0::1;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41672:159;41652:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41607:235;;;;41524:325:::0;:::o;47253:232::-;17429:13;:11;:13::i;:::-;47328:3:::1;::::0;47322:35:::1;::::0;-1:-1:-1;;;47322:35:0;;47351:4:::1;47322:35;::::0;::::1;4529:51:1::0;47304:15:0::1;::::0;-1:-1:-1;;;;;47328:3:0::1;::::0;47322:20:::1;::::0;4502:18:1;;47322:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47400:15;::::0;47304:53;;-1:-1:-1;47368:58:0::1;::::0;47385:4:::1;::::0;-1:-1:-1;;;;;47400:15:0::1;47304:53:::0;47368:8:::1;:58::i;:::-;47443:3;::::0;47437:40:::1;::::0;-1:-1:-1;;;47437:40:0;;47457:10:::1;47437:40;::::0;::::1;6777:51:1::0;6844:18;;;6837:34;;;-1:-1:-1;;;;;47443:3:0;;::::1;::::0;47437:19:::1;::::0;6750:18:1;;47437:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39534:234::-:0;17429:13;:11;:13::i;:::-;39657:4:::1;39649;39628:13;25976:12:::0;;;25888:108;39628:13:::1;:17;::::0;39644:1:::1;39628:17;:::i;:::-;39627:26;;;;:::i;:::-;39626:35;;;;:::i;:::-;39616:6;:45;;39608:105;;;::::0;-1:-1:-1;;;39608:105:0;;7729:2:1;39608:105:0::1;::::0;::::1;7711:21:1::0;7768:2;7748:18;;;7741:30;7807:34;7787:18;;;7780:62;-1:-1:-1;;;7858:18:1;;;7851:45;7913:19;;39608:105:0::1;;;;;;;;;39747:13;:6:::0;39756:4:::1;39747:13;:::i;:::-;39724:20;:36:::0;-1:-1:-1;39534:234:0:o;27900:295::-;28031:4;16174:10;28089:38;28105:4;16174:10;28120:6;28089:15;:38::i;:::-;28138:27;28148:4;28154:2;28158:6;28138:9;:27::i;:::-;-1:-1:-1;28183:4:0;;27900:295;-1:-1:-1;;;;27900:295:0:o;40368:101::-;17429:13;:11;:13::i;:::-;40439:10:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;40439:22:0;;::::1;::::0;;;::::1;::::0;;40368:101::o;28604:238::-;28692:4;16174:10;28748:64;16174:10;28764:7;28801:10;28773:25;16174:10;28764:7;28773:9;:25::i;:::-;:38;;;;:::i;:::-;28748:8;:64::i;41111:157::-;17429:13;:11;:13::i;:::-;41218:9:::1;::::0;41190:38:::1;::::0;-1:-1:-1;;;;;41218:9:0;;::::1;::::0;41190:38;::::1;::::0;::::1;::::0;41218:9:::1;::::0;41190:38:::1;41239:9;:21:::0;;-1:-1:-1;;;;;;41239:21:0::1;-1:-1:-1::0;;;;;41239:21:0;;;::::1;::::0;;;::::1;::::0;;41111:157::o;38511:186::-;17429:13;:11;:13::i;:::-;38579:1:::1;38566:10;:14:::0;38591:13:::1;:20:::0;;-1:-1:-1;;38591:20:0::1;;;::::0;;38636:15:::1;38622:11;:29:::0;38677:12:::1;38662;:27:::0;38511:186::o;26059:127::-;-1:-1:-1;;;;;26160:18:0;26133:7;26160:18;;;;;;;;;;;;26059:127::o;18191:103::-;17429:13;:11;:13::i;:::-;18256:30:::1;18283:1;18256:18;:30::i;:::-;18191:103::o:0;38749:121::-;38801:4;17429:13;:11;:13::i;:::-;-1:-1:-1;38818:14:0::1;:22:::0;;-1:-1:-1;;38818:22:0::1;::::0;;;38749:121;:::o;39999:144::-;17429:13;:11;:13::i;:::-;-1:-1:-1;;;;;40089:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;40089:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39999:144::o;40151:209::-;17429:13;:11;:13::i;:::-;40223::::1;:28:::0;;;40262:10:::1;:18:::0;;-1:-1:-1;;40262:18:0::1;::::0;;40316:2:::1;40299:19:::0;::::1;;40291:61;;;::::0;-1:-1:-1;;;40291:61:0;;8278:2:1;40291:61:0::1;::::0;::::1;8260:21:1::0;8317:2;8297:18;;;8290:30;8356:31;8336:18;;;8329:59;8405:18;;40291:61:0::1;8076:353:1::0;40291:61:0::1;40151:209:::0;:::o;24987:104::-;25043:13;25076:7;25069:14;;;;;:::i;40667:242::-;17429:13;:11;:13::i;:::-;40774::::1;::::0;-1:-1:-1;;;;;40774:13:0;;::::1;40766:21:::0;;::::1;::::0;40758:91:::1;;;::::0;-1:-1:-1;;;40758:91:0;;8636:2:1;40758:91:0::1;::::0;::::1;8618:21:1::0;8675:2;8655:18;;;8648:30;8714:34;8694:18;;;8687:62;8785:27;8765:18;;;8758:55;8830:19;;40758:91:0::1;8434:421:1::0;40758:91:0::1;40860:41;40889:4;40895:5;40860:28;:41::i;29345:436::-:0;29438:4;16174:10;29438:4;29521:25;16174:10;29538:7;29521:9;:25::i;:::-;29494:52;;29585:15;29565:16;:35;;29557:85;;;;-1:-1:-1;;;29557:85:0;;9062:2:1;29557:85:0;;;9044:21:1;9101:2;9081:18;;;9074:30;9140:34;9120:18;;;9113:62;-1:-1:-1;;;9191:18:1;;;9184:35;9236:19;;29557:85:0;8860:401:1;29557:85:0;29678:60;29687:5;29694:7;29722:15;29703:16;:34;29678:8;:60::i;26392:193::-;26471:4;16174:10;26527:28;16174:10;26544:2;26548:6;26527:9;:28::i;40477:182::-;17429:13;:11;:13::i;:::-;-1:-1:-1;;;;;40562:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;40562:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40617:34;;1193:41:1;;;40617:34:0::1;::::0;1166:18:1;40617:34:0::1;;;;;;;40477:182:::0;;:::o;39776:215::-;17429:13;:11;:13::i;:::-;39902:4:::1;39894;39873:13;25976:12:::0;;;25888:108;39873:13:::1;:17;::::0;39889:1:::1;39873:17;:::i;:::-;39872:26;;;;:::i;:::-;39871:35;;;;:::i;:::-;39861:6;:45;;39853:94;;;::::0;-1:-1:-1;;;39853:94:0;;9468:2:1;39853:94:0::1;::::0;::::1;9450:21:1::0;9507:2;9487:18;;;9480:30;9546:34;9526:18;;;9519:62;-1:-1:-1;;;9597:18:1;;;9590:34;9641:19;;39853:94:0::1;9266:400:1::0;39853:94:0::1;39970:13;:6:::0;39979:4:::1;39970:13;:::i;:::-;39958:9;:25:::0;-1:-1:-1;39776:215:0:o;41857:206::-;17429:13;:11;:13::i;:::-;41945:9:::1;41940:116;41964:12;:19;41960:1;:23;41940:116;;;42039:5;42005:14;:31;42020:12;42033:1;42020:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;42005:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;42005:31:0;:39;;-1:-1:-1;;42005:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41985:3;::::1;::::0;::::1;:::i;:::-;;;;41940:116;;41410:106:::0;41449:7;41476:32;41491:13;;41506:1;41476:14;:32::i;:::-;41469:39;;41410:106;:::o;39136:390::-;39217:4;17429:13;:11;:13::i;:::-;39276:6:::1;39255:13;25976:12:::0;;;25888:108;39255:13:::1;:17;::::0;39271:1:::1;39255:17;:::i;:::-;39254:28;;;;:::i;:::-;39241:9;:41;;39233:107;;;::::0;-1:-1:-1;;;39233:107:0;;9873:2:1;39233:107:0::1;::::0;::::1;9855:21:1::0;9912:2;9892:18;;;9885:30;9951:34;9931:18;;;9924:62;-1:-1:-1;;;10002:18:1;;;9995:51;10063:19;;39233:107:0::1;9671:417:1::0;39233:107:0::1;39394:4;39373:13;25976:12:::0;;;25888:108;39373:13:::1;:17;::::0;39389:1:::1;39373:17;:::i;:::-;39372:26;;;;:::i;:::-;39359:9;:39;;39351:104;;;::::0;-1:-1:-1;;;39351:104:0;;10295:2:1;39351:104:0::1;::::0;::::1;10277:21:1::0;10334:2;10314:18;;;10307:30;10373:34;10353:18;;;10346:62;-1:-1:-1;;;10424:18:1;;;10417:50;10484:19;;39351:104:0::1;10093:416:1::0;39351:104:0::1;-1:-1:-1::0;39466:18:0::1;:30:::0;;;39514:4:::1;17453:1;39136:390:::0;;;:::o;26648:151::-;-1:-1:-1;;;;;26764:18:0;;;26737:7;26764:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;26648:151::o;47143:102::-;17429:13;:11;:13::i;:::-;47194:43:::1;47212:24;47230:4;47212:9;:24::i;:::-;47194:17;:43::i;38931:135::-:0;38991:4;17429:13;:11;:13::i;:::-;-1:-1:-1;39008:20:0::1;:28:::0;;-1:-1:-1;;39008:28:0::1;::::0;;;38931:135;:::o;47059:76::-;17429:13;:11;:13::i;18449:201::-;17429:13;:11;:13::i;:::-;-1:-1:-1;;;;;18538:22:0;::::1;18530:73;;;::::0;-1:-1:-1;;;18530:73:0;;10716:2:1;18530:73:0::1;::::0;::::1;10698:21:1::0;10755:2;10735:18;;;10728:30;10794:34;10774:18;;;10767:62;-1:-1:-1;;;10845:18:1;;;10838:36;10891:19;;18530:73:0::1;10514:402:1::0;18530:73:0::1;18614:28;18633:8;18614:18;:28::i;32970:380::-:0;-1:-1:-1;;;;;33106:19:0;;33098:68;;;;-1:-1:-1;;;33098:68:0;;11123:2:1;33098:68:0;;;11105:21:1;11162:2;11142:18;;;11135:30;11201:34;11181:18;;;11174:62;-1:-1:-1;;;11252:18:1;;;11245:34;11296:19;;33098:68:0;10921:400:1;33098:68:0;-1:-1:-1;;;;;33185:21:0;;33177:68;;;;-1:-1:-1;;;33177:68:0;;11528:2:1;33177:68:0;;;11510:21:1;11567:2;11547:18;;;11540:30;11606:34;11586:18;;;11579:62;-1:-1:-1;;;11657:18:1;;;11650:32;11699:19;;33177:68:0;11326:398:1;33177:68:0;-1:-1:-1;;;;;33258:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33310:32;;2951:25:1;;;33310:32:0;;2924:18:1;33310:32:0;;;;;;;32970:380;;;:::o;17708:132::-;17616:6;;-1:-1:-1;;;;;17616:6:0;16174:10;17772:23;17764:68;;;;-1:-1:-1;;;17764:68:0;;11931:2:1;17764:68:0;;;11913:21:1;;;11950:18;;;11943:30;12009:34;11989:18;;;11982:62;12061:18;;17764:68:0;11729:356:1;33641:453:0;33776:24;33803:25;33813:5;33820:7;33803:9;:25::i;:::-;33776:52;;-1:-1:-1;;33843:16:0;:37;33839:248;;33925:6;33905:16;:26;;33897:68;;;;-1:-1:-1;;;33897:68:0;;12292:2:1;33897:68:0;;;12274:21:1;12331:2;12311:18;;;12304:30;12370:31;12350:18;;;12343:59;12419:18;;33897:68:0;12090:353:1;33897:68:0;34009:51;34018:5;34025:7;34053:6;34034:16;:25;34009:8;:51::i;:::-;33765:329;33641:453;;;:::o;42184:3563::-;-1:-1:-1;;;;;42316:18:0;;42308:68;;;;-1:-1:-1;;;42308:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42395:16:0;;42387:64;;;;-1:-1:-1;;;42387:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42471:20:0;;;;;;:14;:20;;;;;;;;42470:21;42462:111;;;;-1:-1:-1;;;42462:111:0;;13460:2:1;42462:111:0;;;13442:21:1;13499:2;13479:18;;;13472:30;13538:34;13518:18;;;13511:62;13609:34;13589:18;;;13582:62;-1:-1:-1;;;13660:19:1;;;13653:44;13714:19;;42462:111:0;13258:481:1;42462:111:0;42588:6;42598:1;42588:11;42584:93;;42616:28;42632:4;42638:2;42642:1;42616:15;:28::i;:::-;42184:3563;;;:::o;42584:93::-;42691:13;;;;;;;42687:107;;;42760:10;;42745:12;;:25;;;;:::i;:::-;42729:12;:41;;42721:61;;;;-1:-1:-1;;;42721:61:0;;13946:2:1;42721:61:0;;;13928:21:1;13985:1;13965:18;;;13958:29;-1:-1:-1;;;14003:18:1;;;13996:37;14050:18;;42721:61:0;13744:330:1;42721:61:0;42808:14;;;;42804:1910;;;17616:6;;-1:-1:-1;;;;;42861:15:0;;;17616:6;;42861:15;;;;:49;;-1:-1:-1;17616:6:0;;-1:-1:-1;;;;;42897:13:0;;;17616:6;;42897:13;;42861:49;:86;;;;-1:-1:-1;;;;;;42931:16:0;;;;42861:86;:128;;;;-1:-1:-1;;;;;;42968:21:0;;42982:6;42968:21;;42861:128;:159;;;;-1:-1:-1;43011:9:0;;;;43010:10;42861:159;42839:1864;;;43060:13;;;;;;;43055:150;;-1:-1:-1;;;;;43106:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;43135:23:0;;;;;;:19;:23;;;;;;;;43106:52;43098:87;;;;-1:-1:-1;;;43098:87:0;;14281:2:1;43098:87:0;;;14263:21:1;14320:2;14300:18;;;14293:30;-1:-1:-1;;;14339:18:1;;;14332:52;14401:18;;43098:87:0;14079:346:1;43098:87:0;43229:13;43239:2;43229:9;:13::i;:::-;:18;:55;;;;-1:-1:-1;;;;;;43251:28:0;;;;;;:24;:28;;;;;;:33;43229:55;43225:150;;;-1:-1:-1;;;;;43309:28:0;;;;;;:24;:28;;;;;43340:15;43309:46;;43225:150;43399:20;;;;43395:510;;;17616:6;;-1:-1:-1;;;;;43448:13:0;;;17616:6;;43448:13;;;;:47;;-1:-1:-1;43479:15:0;;-1:-1:-1;;;;;43465:30:0;;;43479:15;;43465:30;;43448:47;:79;;;;-1:-1:-1;43513:13:0;;-1:-1:-1;;;;;43499:28:0;;;43513:13;;43499:28;;43448:79;43444:442;;;43623:9;43594:39;;;;:28;:39;;;;;;43636:12;-1:-1:-1;43556:225:0;;;;-1:-1:-1;;;43556:225:0;;14632:2:1;43556:225:0;;;14614:21:1;14671:2;14651:18;;;14644:30;14710:34;14690:18;;;14683:62;14781:34;14761:18;;;14754:62;-1:-1:-1;;;14832:19:1;;;14825:40;14882:19;;43556:225:0;14430:477:1;43556:225:0;43837:9;43808:39;;;;:28;:39;;;;;43850:12;43808:54;;43444:442;-1:-1:-1;;;;;43958:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;43994:35:0;;;;;;:31;:35;;;;;;;;43993:36;43958:71;43954:734;;;44072:20;;44062:6;:30;;44054:96;;;;-1:-1:-1;;;44054:96:0;;15114:2:1;44054:96:0;;;15096:21:1;15153:2;15133:18;;;15126:30;15192:34;15172:18;;;15165:62;-1:-1:-1;;;15243:18:1;;;15236:51;15304:19;;44054:96:0;14912:417:1;44054:96:0;44207:9;;44190:13;44200:2;44190:9;:13::i;:::-;44181:22;;:6;:22;:::i;:::-;:35;;44173:67;;;;-1:-1:-1;;;44173:67:0;;15536:2:1;44173:67:0;;;15518:21:1;15575:2;15555:18;;;15548:30;-1:-1:-1;;;15594:18:1;;;15587:49;15653:18;;44173:67:0;15334:343:1;44173:67:0;43954:734;;;-1:-1:-1;;;;;44317:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;44351:37:0;;;;;;:31;:37;;;;;;;;44350:38;44317:71;44313:375;;;44431:20;;44421:6;:30;;44413:97;;;;-1:-1:-1;;;44413:97:0;;15884:2:1;44413:97:0;;;15866:21:1;15923:2;15903:18;;;15896:30;15962:34;15942:18;;;15935:62;-1:-1:-1;;;16013:18:1;;;16006:52;16075:19;;44413:97:0;15682:418:1;44313:375:0;-1:-1:-1;;;;;44541:35:0;;;;;;:31;:35;;;;;;;;44536:152;;44635:9;;44618:13;44628:2;44618:9;:13::i;:::-;44609:22;;:6;:22;:::i;:::-;:35;;44601:67;;;;-1:-1:-1;;;44601:67:0;;15536:2:1;44601:67:0;;;15518:21:1;15575:2;15555:18;;;15548:30;-1:-1:-1;;;15594:18:1;;;15587:49;15653:18;;44601:67:0;15334:343:1;44601:67:0;44726:28;44757:24;44775:4;44757:9;:24::i;:::-;44831:18;;44726:55;;-1:-1:-1;44807:42:0;;;;;;;44878:34;;-1:-1:-1;44903:9:0;;;;44902:10;44878:34;:83;;;;-1:-1:-1;;;;;;44930:31:0;;;;;;:25;:31;;;;;;;;44929:32;44878:83;:126;;;;-1:-1:-1;;;;;;44979:25:0;;;;;;:19;:25;;;;;;;;44978:26;44878:126;:167;;;;-1:-1:-1;;;;;;45022:23:0;;;;;;:19;:23;;;;;;;;45021:24;44878:167;44860:297;;;45072:9;:16;;-1:-1:-1;;45072:16:0;45084:4;45072:16;;;45103:10;:8;:10::i;:::-;45128:9;:17;;-1:-1:-1;;45128:17:0;;;44860:297;45185:9;;-1:-1:-1;;;;;45211:25:0;;45169:12;45211:25;;;:19;:25;;;;;;45185:9;;;;45184:10;;45211:25;;:52;;-1:-1:-1;;;;;;45240:23:0;;;;;;:19;:23;;;;;;;;45211:52;45207:100;;;-1:-1:-1;45290:5:0;45207:100;45319:12;45350:7;45346:348;;;45374:17;45395:32;45410:13;;45425:1;45395:14;:32::i;:::-;45374:53;-1:-1:-1;45446:13:0;;45442:241;;45487:30;45513:3;45487:21;:6;45498:9;45487:10;:21::i;:::-;:25;;:30::i;:::-;45480:37;-1:-1:-1;45540:8:0;;45536:99;;45573:42;45589:4;45603;45610;45573:15;:42::i;:::-;45653:14;45663:4;45653:14;;:::i;:::-;;;45442:241;45359:335;45346:348;45706:33;45722:4;45728:2;45732:6;45706:15;:33::i;:::-;42297:3450;;;;42184:3563;;;:::o;18810:191::-;18903:6;;;-1:-1:-1;;;;;18920:17:0;;;-1:-1:-1;;;;;;18920:17:0;;;;;;;18953:40;;18903:6;;;18920:17;18903:6;;18953:40;;18884:16;;18953:40;18873:128;18810:191;:::o;40917:186::-;-1:-1:-1;;;;;41000:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;41000:39:0;;;;;;;;;;41055:40;;41000:39;;:31;41055:40;;;40917:186;;:::o;45755:473::-;45858:10;;45834:7;;45858:10;;;;;45853:58;;-1:-1:-1;45892:7:0;45885:14;;45853:58;45921:12;45954:11;;45936:15;:29;;;;:::i;:::-;45921:44;-1:-1:-1;45976:22:0;46013:2;46001:9;46008:2;45921:44;46001:9;:::i;:::-;:14;;;;:::i;:::-;45976:39;;46048:7;46030:14;:25;46026:71;;46079:6;46072:13;;;;;;46026:71;46107:21;46131:24;46141:14;46131:7;:24;:::i;:::-;46107:48;;46189:6;46173:13;:22;:47;;46214:6;46173:47;;;46198:13;46173:47;46166:54;45755:473;-1:-1:-1;;;;;;45755:473:0:o;46236:452::-;46327:16;;;46341:1;46327:16;;;;;;;;46303:21;;46327:16;;;;;;;;;;-1:-1:-1;46327:16:0;46303:40;;46372:4;46354;46359:1;46354:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46354:23:0;;;:7;;;;;;;;;:23;46398:3;;46388:7;;46398:3;;;46388:4;;46398:3;;46388:7;;;;;;:::i;:::-;-1:-1:-1;;;;;46388:13:0;;;:7;;;;;;;;;:13;46446:15;;46414:62;;46431:4;;46446:15;46464:11;46414:8;:62::i;:::-;46487:15;;-1:-1:-1;;;;;46487:15:0;:69;46571:11;46487:15;46613:4;46632:7;17616:6;;-1:-1:-1;;;;;17616:6:0;;17543:87;46632:7;46654:15;46487:193;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46292:396;46236:452;:::o;30251:671::-;-1:-1:-1;;;;;30382:18:0;;30374:68;;;;-1:-1:-1;;;30374:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30461:16:0;;30453:64;;;;-1:-1:-1;;;30453:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30603:15:0;;30581:19;30603:15;;;;;;;;;;;30637:21;;;;30629:72;;;;-1:-1:-1;;;30629:72:0;;17422:2:1;30629:72:0;;;17404:21:1;17461:2;17441:18;;;17434:30;17500:34;17480:18;;;17473:62;-1:-1:-1;;;17551:18:1;;;17544:36;17597:19;;30629:72:0;17220:402:1;30629:72:0;-1:-1:-1;;;;;30737:15:0;;;:9;:15;;;;;;;;;;;30755:20;;;30737:38;;30797:13;;;;;;;;:23;;30769:6;;30737:9;30797:23;;30769:6;;30797:23;:::i;:::-;;;;;;;;30853:2;-1:-1:-1;;;;;30838:26:0;30847:4;-1:-1:-1;;;;;30838:26:0;;30857:6;30838:26;;;;2951:25:1;;2939:2;2924:18;;2805:177;30838:26:0;;;;;;;;30877:37;42184:3563;46696:355;46735:23;46761:24;46779:4;46761:9;:24::i;:::-;46735:50;;46800:15;46819:1;46800:20;46796:33;;46822:7;46696:355::o;46796:33::-;46861:18;;46843:15;:36;46839:105;;;-1:-1:-1;46914:18:0;;46839:105;46983:15;47009:34;46983:15;47009:17;:34::i;11988:98::-;12046:7;12073:5;12077:1;12073;:5;:::i;:::-;12066:12;11988:98;-1:-1:-1;;;11988:98:0:o;12387:::-;12445:7;12472:5;12476:1;12472;:5;:::i;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:173::-;684:20;;-1:-1:-1;;;;;733:31:1;;723:42;;713:70;;779:1;776;769:12;794:254;862:6;870;923:2;911:9;902:7;898:23;894:32;891:52;;;939:1;936;929:12;891:52;962:29;981:9;962:29;:::i;:::-;952:39;1038:2;1023:18;;;;1010:32;;-1:-1:-1;;;794:254:1:o;1245:127::-;1306:10;1301:3;1297:20;1294:1;1287:31;1337:4;1334:1;1327:15;1361:4;1358:1;1351:15;1377:275;1448:2;1442:9;1513:2;1494:13;;-1:-1:-1;;1490:27:1;1478:40;;1548:18;1533:34;;1569:22;;;1530:62;1527:88;;;1595:18;;:::i;:::-;1631:2;1624:22;1377:275;;-1:-1:-1;1377:275:1:o;1657:952::-;1741:6;1772:2;1815;1803:9;1794:7;1790:23;1786:32;1783:52;;;1831:1;1828;1821:12;1783:52;1871:9;1858:23;1900:18;1941:2;1933:6;1930:14;1927:34;;;1957:1;1954;1947:12;1927:34;1995:6;1984:9;1980:22;1970:32;;2040:7;2033:4;2029:2;2025:13;2021:27;2011:55;;2062:1;2059;2052:12;2011:55;2098:2;2085:16;2120:2;2116;2113:10;2110:36;;;2126:18;;:::i;:::-;2172:2;2169:1;2165:10;2155:20;;2195:28;2219:2;2215;2211:11;2195:28;:::i;:::-;2257:15;;;2327:11;;;2323:20;;;2288:12;;;;2355:19;;;2352:39;;;2387:1;2384;2377:12;2352:39;2411:11;;;;2431:148;2447:6;2442:3;2439:15;2431:148;;;2513:23;2532:3;2513:23;:::i;:::-;2501:36;;2464:12;;;;2557;;;;2431:148;;;2598:5;1657:952;-1:-1:-1;;;;;;;;1657:952:1:o;2614:186::-;2673:6;2726:2;2714:9;2705:7;2701:23;2697:32;2694:52;;;2742:1;2739;2732:12;2694:52;2765:29;2784:9;2765:29;:::i;2987:180::-;3046:6;3099:2;3087:9;3078:7;3074:23;3070:32;3067:52;;;3115:1;3112;3105:12;3067:52;-1:-1:-1;3138:23:1;;2987:180;-1:-1:-1;2987:180:1:o;3172:328::-;3249:6;3257;3265;3318:2;3306:9;3297:7;3293:23;3289:32;3286:52;;;3334:1;3331;3324:12;3286:52;3357:29;3376:9;3357:29;:::i;:::-;3347:39;;3405:38;3439:2;3428:9;3424:18;3405:38;:::i;:::-;3395:48;;3490:2;3479:9;3475:18;3462:32;3452:42;;3172:328;;;;;:::o;3694:118::-;3780:5;3773:13;3766:21;3759:5;3756:32;3746:60;;3802:1;3799;3792:12;3817:241;3873:6;3926:2;3914:9;3905:7;3901:23;3897:32;3894:52;;;3942:1;3939;3932:12;3894:52;3981:9;3968:23;4000:28;4022:5;4000:28;:::i;4063:315::-;4128:6;4136;4189:2;4177:9;4168:7;4164:23;4160:32;4157:52;;;4205:1;4202;4195:12;4157:52;4228:29;4247:9;4228:29;:::i;:::-;4218:39;;4307:2;4296:9;4292:18;4279:32;4320:28;4342:5;4320:28;:::i;:::-;4367:5;4357:15;;;4063:315;;;;;:::o;4591:260::-;4659:6;4667;4720:2;4708:9;4699:7;4695:23;4691:32;4688:52;;;4736:1;4733;4726:12;4688:52;4759:29;4778:9;4759:29;:::i;:::-;4749:39;;4807:38;4841:2;4830:9;4826:18;4807:38;:::i;:::-;4797:48;;4591:260;;;;;:::o;4856:764::-;4925:6;4956:2;4999;4987:9;4978:7;4974:23;4970:32;4967:52;;;5015:1;5012;5005:12;4967:52;5055:9;5042:23;5084:18;5125:2;5117:6;5114:14;5111:34;;;5141:1;5138;5131:12;5111:34;5179:6;5168:9;5164:22;5154:32;;5224:7;5217:4;5213:2;5209:13;5205:27;5195:55;;5246:1;5243;5236:12;5195:55;5282:2;5269:16;5304:2;5300;5297:10;5294:36;;;5310:18;;:::i;:::-;5352:53;5395:2;5376:13;;-1:-1:-1;;5372:27:1;5368:36;;5352:53;:::i;:::-;5339:66;;5428:2;5421:5;5414:17;5468:7;5463:2;5458;5454;5450:11;5446:20;5443:33;5440:53;;;5489:1;5486;5479:12;5440:53;5544:2;5539;5535;5531:11;5526:2;5519:5;5515:14;5502:45;5588:1;5567:14;;;5563:23;;;5556:34;;;;-1:-1:-1;5571:5:1;4856:764;-1:-1:-1;;;4856:764:1:o;5625:380::-;5704:1;5700:12;;;;5747;;;5768:61;;5822:4;5814:6;5810:17;5800:27;;5768:61;5875:2;5867:6;5864:14;5844:18;5841:38;5838:161;;5921:10;5916:3;5912:20;5909:1;5902:31;5956:4;5953:1;5946:15;5984:4;5981:1;5974:15;5838:161;;5625:380;;;:::o;6010:127::-;6071:10;6066:3;6062:20;6059:1;6052:31;6102:4;6099:1;6092:15;6126:4;6123:1;6116:15;6142:127;6203:10;6198:3;6194:20;6191:1;6184:31;6234:4;6231:1;6224:15;6258:4;6255:1;6248:15;6274:135;6313:3;6334:17;;;6331:43;;6354:18;;:::i;:::-;-1:-1:-1;6401:1:1;6390:13;;6274:135::o;6414:184::-;6484:6;6537:2;6525:9;6516:7;6512:23;6508:32;6505:52;;;6553:1;6550;6543:12;6505:52;-1:-1:-1;6576:16:1;;6414:184;-1:-1:-1;6414:184:1:o;6882:245::-;6949:6;7002:2;6990:9;6981:7;6977:23;6973:32;6970:52;;;7018:1;7015;7008:12;6970:52;7050:9;7044:16;7069:28;7091:5;7069:28;:::i;7132:168::-;7172:7;7238:1;7234;7230:6;7226:14;7223:1;7220:21;7215:1;7208:9;7201:17;7197:45;7194:71;;;7245:18;;:::i;:::-;-1:-1:-1;7285:9:1;;7132:168::o;7305:217::-;7345:1;7371;7361:132;;7415:10;7410:3;7406:20;7403:1;7396:31;7450:4;7447:1;7440:15;7478:4;7475:1;7468:15;7361:132;-1:-1:-1;7507:9:1;;7305:217::o;7943:128::-;7983:3;8014:1;8010:6;8007:1;8004:13;8001:39;;;8020:18;;:::i;:::-;-1:-1:-1;8056:9:1;;7943:128::o;12448:401::-;12650:2;12632:21;;;12689:2;12669:18;;;12662:30;12728:34;12723:2;12708:18;;12701:62;-1:-1:-1;;;12794:2:1;12779:18;;12772:35;12839:3;12824:19;;12448:401::o;12854:399::-;13056:2;13038:21;;;13095:2;13075:18;;;13068:30;13134:34;13129:2;13114:18;;13107:62;-1:-1:-1;;;13200:2:1;13185:18;;13178:33;13243:3;13228:19;;12854:399::o;16105:125::-;16145:4;16173:1;16170;16167:8;16164:34;;;16178:18;;:::i;:::-;-1:-1:-1;16215:9:1;;16105:125::o;16235:980::-;16497:4;16545:3;16534:9;16530:19;16576:6;16565:9;16558:25;16602:2;16640:6;16635:2;16624:9;16620:18;16613:34;16683:3;16678:2;16667:9;16663:18;16656:31;16707:6;16742;16736:13;16773:6;16765;16758:22;16811:3;16800:9;16796:19;16789:26;;16850:2;16842:6;16838:15;16824:29;;16871:1;16881:195;16895:6;16892:1;16889:13;16881:195;;;16960:13;;-1:-1:-1;;;;;16956:39:1;16944:52;;17051:15;;;;17016:12;;;;16992:1;16910:9;16881:195;;;-1:-1:-1;;;;;;;17132:32:1;;;;17127:2;17112:18;;17105:60;-1:-1:-1;;;17196:3:1;17181:19;17174:35;17093:3;16235:980;-1:-1:-1;;;16235:980:1:o
Swarm Source
ipfs://5b2916438d29fe69c84bfbef2626c92810edd66576bc7c9baa65c7df2c283eae
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.