ERC-20
Overview
Max Total Supply
100,000 404
Holders
66
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ERROR
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-10 */ /** \ / _ ___,,, \_[o o] ERROR PAGE NOT FOUND C\ _\/ / _____),_/__ ________ / \/ / _| .| / o / | | .| / / \| .| / / |________| /_ \/ __|___|__ _//\ \ _____|_________|____ \ \ \ \ _| /// \ \ | \ / | / / | / / ________________ | /__ /_ .. ...|_|.............. /______\....... https://www.error.finance/ **/ // SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.10; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // 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 substraction 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; } } } /** * @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; } } /** * @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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @dev 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 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); } /** * @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, _allowances[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 = _allowances[owner][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * 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 Spend `amount` form the allowance of `owner` toward `spender`. * * 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 {} } contract ERROR is ERC20, Ownable { using SafeMath for uint256; address private immutable pair; IUniswapV2Router02 private immutable router; address public marketingWallet; uint256 public maxTx; uint256 public maxWallet; mapping(address => bool) private excludedFromLimits; uint256 public buyFee = 5; uint256 public sellFee = 5; mapping(address => bool) private excludedFromFees; bool private swapping; mapping(address => uint256) private addressLastTxBlock; constructor() ERC20("ERROR", "404") { uint256 totalSupply = 100000 * 1e18; maxTx = 100 * 1e18; maxWallet = 100 * 1e18; marketingWallet = address(owner()); router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); pair = IUniswapV2Factory(router.factory()).createPair( address(this), router.WETH() ); _excludeFromLimits(address(router), true); _excludeFromLimits(pair, true); _excludeFromLimits(owner(), true); _excludeFromLimits(address(this), true); _excludeFromLimits(address(0xdead), true); _excludeFromFees(owner(), true); _excludeFromFees(address(this), true); _excludeFromFees(address(0xdead), true); _approve(msg.sender, address(router), type(uint256).max); _mint(msg.sender, totalSupply); } receive() external payable {} function updateMaxTx(uint256 _maxTxAmount) external onlyOwner { require(_maxTxAmount * 1e18 >= maxTx, "Max tx can not be lowered"); maxTx = _maxTxAmount * 1e18; } function updateMaxWallet(uint256 _maxWalletAmount) external onlyOwner { require( _maxWalletAmount * 1e18 >= maxWallet, "Max wallet can not be lowered" ); maxWallet = _maxWalletAmount * 1e18; } function updateBuyFees(uint256 _fee) external onlyOwner { require(_fee <= 5, "Buy fee can not be set higher than 5%"); buyFee = _fee; } function updateSellFees(uint256 _fee) external onlyOwner { require(_fee <= 5, "Sell fee can not be set higher than 5%"); sellFee = _fee; } function _transfer( address from, address to, uint256 amount ) internal override { if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) ) { _checkTx(to); if (_isBuy(from) && !_excludedFromLimits(to)) { _maxTxCheck(amount); _maxWalletCheck(to, amount); } else if (_isSell(to) && !_excludedFromLimits(from)) { _maxTxCheck(amount); } else if (!_excludedFromLimits(to)) { _maxWalletCheck(to, amount); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance > 0; if ( canSwap && !swapping && pair != from && !_excludedFromFees(from) && !_excludedFromFees(to) ) { swapping = true; _swapBack(); swapping = false; } bool takeFee = !swapping; if (_excludedFromFees(from) || _excludedFromFees(to)) { takeFee = false; } if (takeFee) { uint256 fees = 0; if (to == pair) { fees = amount.mul(sellFee).div(100); } // on buy else if (from == pair) { fees = amount.mul(buyFee).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function _checkTx(address _to) internal { if (_to != owner() && _to != pair && _to != address(router)) { require( addressLastTxBlock[tx.origin] != block.number, "Only one purchase per block allowed" ); addressLastTxBlock[tx.origin] = block.number; } } function _swapBack() internal { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } _swapTokensForEth(contractBalance); } function _isSell(address _to) internal view returns (bool) { return _to == pair; } function _isBuy(address _from) internal view returns (bool) { return _from == pair; } function _excludeFromFees(address _addr, bool _doesBypass) internal { excludedFromFees[_addr] = _doesBypass; } function _excludedFromFees(address _addr) internal view returns (bool) { return excludedFromFees[_addr]; } function _excludeFromLimits(address _addr, bool _doesBypass) internal { excludedFromLimits[_addr] = _doesBypass; } function _excludedFromLimits(address _addr) internal view returns (bool) { return excludedFromLimits[_addr]; } function _maxTxCheck(uint256 _amount) internal view { require(_amount <= maxTx, "Max transaction limit reached"); } function _maxWalletCheck(address _addr, uint256 _amount) internal view { require( _amount + balanceOf(_addr) <= maxWallet, "Max wallet limit reached" ); } function _swapTokensForEth(uint256 _tokenAmount) internal { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = router.WETH(); _approve(address(this), address(router), _tokenAmount); router.swapExactTokensForETHSupportingFeeOnTransferTokens( _tokenAmount, 0, path, address(marketingWallet), block.timestamp ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526005600a556005600b553480156200001b57600080fd5b506040518060400160405280600581526020017f4552524f520000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f34303400000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000a09291906200094f565b508060049080519060200190620000b99291906200094f565b505050620000dc620000d06200044b60201b60201c565b6200045360201b60201c565b600069152d02c7e14af6800000905068056bc75e2d6310000060078190555068056bc75e2d631000006008819055506200011b6200051960201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060a05173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000217919062000a69565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060a05173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a7919062000a69565b6040518363ffffffff1660e01b8152600401620002c692919062000aac565b6020604051808303816000875af1158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c919062000a69565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506200035460a05160016200054360201b60201c565b6200036960805160016200054360201b60201c565b6200038b6200037d6200051960201b60201c565b60016200054360201b60201c565b6200039e3060016200054360201b60201c565b620003b361dead60016200054360201b60201c565b620003d5620003c76200051960201b60201c565b60016200059e60201b60201c565b620003e83060016200059e60201b60201c565b620003fd61dead60016200059e60201b60201c565b620004323360a0517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620005f960201b60201c565b620004443382620007cc60201b60201c565b5062000db5565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200066c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006639062000b60565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d69062000bf8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620007bf919062000c35565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200083f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008369062000ca2565b60405180910390fd5b62000853600083836200094560201b60201c565b806002600082825462000867919062000cf3565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008be919062000cf3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000925919062000c35565b60405180910390a362000941600083836200094a60201b60201c565b5050565b505050565b505050565b8280546200095d9062000d7f565b90600052602060002090601f016020900481019282620009815760008555620009cd565b82601f106200099c57805160ff1916838001178555620009cd565b82800160010185558215620009cd579182015b82811115620009cc578251825591602001919060010190620009af565b5b509050620009dc9190620009e0565b5090565b5b80821115620009fb576000816000905550600101620009e1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a318262000a04565b9050919050565b62000a438162000a24565b811462000a4f57600080fd5b50565b60008151905062000a638162000a38565b92915050565b60006020828403121562000a825762000a81620009ff565b5b600062000a928482850162000a52565b91505092915050565b62000aa68162000a24565b82525050565b600060408201905062000ac3600083018562000a9b565b62000ad2602083018462000a9b565b9392505050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062000b4860248362000ad9565b915062000b558262000aea565b604082019050919050565b6000602082019050818103600083015262000b7b8162000b39565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600062000be060228362000ad9565b915062000bed8262000b82565b604082019050919050565b6000602082019050818103600083015262000c138162000bd1565b9050919050565b6000819050919050565b62000c2f8162000c1a565b82525050565b600060208201905062000c4c600083018462000c24565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000c8a601f8362000ad9565b915062000c978262000c52565b602082019050919050565b6000602082019050818103600083015262000cbd8162000c7b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d008262000c1a565b915062000d0d8362000c1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d455762000d4462000cc4565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d9857607f821691505b6020821081141562000daf5762000dae62000d50565b5b50919050565b60805160a051612e9562000e136000396000818161193401528181611d5001528181611e310152611e580152600081816113390152818161141b0152818161149e015281816118dc01528181611a560152611ba80152612e956000f3fe6080604052600436106101445760003560e01c806371fc4688116100b6578063a9059cbb1161006f578063a9059cbb1461046d578063c2d0ffca146104aa578063dd62ed3e146104d3578063eba4c33314610510578063f2fde38b14610539578063f8b45b05146105625761014b565b806371fc46881461035b5780637437681e1461038457806375f0a874146103af5780638da5cb5b146103da57806395d89b4114610405578063a457c2d7146104305761014b565b80632b14ca56116101085780632b14ca5614610249578063313ce56714610274578063395093511461029f57806347062402146102dc57806370a0823114610307578063715018a6146103445761014b565b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101b85780631c499ab0146101e357806323b872dd1461020c5761014b565b3661014b57005b600080fd5b34801561015c57600080fd5b5061016561058d565b6040516101729190611fa9565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190612064565b61061f565b6040516101af91906120bf565b60405180910390f35b3480156101c457600080fd5b506101cd610642565b6040516101da91906120e9565b60405180910390f35b3480156101ef57600080fd5b5061020a60048036038101906102059190612104565b61064c565b005b34801561021857600080fd5b50610233600480360381019061022e9190612131565b61073d565b60405161024091906120bf565b60405180910390f35b34801561025557600080fd5b5061025e61076c565b60405161026b91906120e9565b60405180910390f35b34801561028057600080fd5b50610289610772565b60405161029691906121a0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190612064565b61077b565b6040516102d391906120bf565b60405180910390f35b3480156102e857600080fd5b506102f1610825565b6040516102fe91906120e9565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906121bb565b61082b565b60405161033b91906120e9565b60405180910390f35b34801561035057600080fd5b50610359610873565b005b34801561036757600080fd5b50610382600480360381019061037d9190612104565b6108fb565b005b34801561039057600080fd5b506103996109c5565b6040516103a691906120e9565b60405180910390f35b3480156103bb57600080fd5b506103c46109cb565b6040516103d191906121f7565b60405180910390f35b3480156103e657600080fd5b506103ef6109f1565b6040516103fc91906121f7565b60405180910390f35b34801561041157600080fd5b5061041a610a1b565b6040516104279190611fa9565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190612064565b610aad565b60405161046491906120bf565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190612064565b610b97565b6040516104a191906120bf565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612104565b610bba565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190612212565b610cab565b60405161050791906120e9565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190612104565b610d32565b005b34801561054557600080fd5b50610560600480360381019061055b91906121bb565b610dfc565b005b34801561056e57600080fd5b50610577610ef4565b60405161058491906120e9565b60405180910390f35b60606003805461059c90612281565b80601f01602080910402602001604051908101604052809291908181526020018280546105c890612281565b80156106155780601f106105ea57610100808354040283529160200191610615565b820191906000526020600020905b8154815290600101906020018083116105f857829003601f168201915b5050505050905090565b60008061062a610efa565b9050610637818585610f02565b600191505092915050565b6000600254905090565b610654610efa565b73ffffffffffffffffffffffffffffffffffffffff166106726109f1565b73ffffffffffffffffffffffffffffffffffffffff16146106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf906122ff565b60405180910390fd5b600854670de0b6b3a7640000826106df919061234e565b1015610720576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610717906123f4565b60405180910390fd5b670de0b6b3a764000081610734919061234e565b60088190555050565b600080610748610efa565b90506107558582856110cd565b610760858585611159565b60019150509392505050565b600b5481565b60006012905090565b600080610786610efa565b905061081a818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108159190612414565b610f02565b600191505092915050565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61087b610efa565b73ffffffffffffffffffffffffffffffffffffffff166108996109f1565b73ffffffffffffffffffffffffffffffffffffffff16146108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e6906122ff565b60405180910390fd5b6108f96000611555565b565b610903610efa565b73ffffffffffffffffffffffffffffffffffffffff166109216109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e906122ff565b60405180910390fd5b60058111156109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b2906124dc565b60405180910390fd5b80600a8190555050565b60075481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a2a90612281565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690612281565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b600080610ab8610efa565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b759061256e565b60405180910390fd5b610b8b8286868403610f02565b60019250505092915050565b600080610ba2610efa565b9050610baf818585611159565b600191505092915050565b610bc2610efa565b73ffffffffffffffffffffffffffffffffffffffff16610be06109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906122ff565b60405180910390fd5b600754670de0b6b3a764000082610c4d919061234e565b1015610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c85906125da565b60405180910390fd5b670de0b6b3a764000081610ca2919061234e565b60078190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d3a610efa565b73ffffffffffffffffffffffffffffffffffffffff16610d586109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906122ff565b60405180910390fd5b6005811115610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061266c565b60405180910390fd5b80600b8190555050565b610e04610efa565b73ffffffffffffffffffffffffffffffffffffffff16610e226109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f906122ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf906126fe565b60405180910390fd5b610ef181611555565b50565b60085481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612790565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990612822565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110c091906120e9565b60405180910390a3505050565b60006110d98484610cab565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111535781811015611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9061288e565b60405180910390fd5b6111528484848403610f02565b5b50505050565b60008114156111735761116e8383600061161b565b611550565b61117b6109f1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156111e957506111b96109f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112225750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561125c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156112eb5761126a8261189c565b61127383611a52565b8015611285575061128382611aaa565b155b156112a25761129381611b00565b61129d8282611b48565b6112ea565b6112ab82611ba4565b80156112bd57506112bb83611aaa565b155b156112d0576112cb81611b00565b6112e9565b6112d982611aaa565b6112e8576112e78282611b48565b5b5b5b5b60006112f63061082b565b9050600080821190508080156113195750600d60009054906101000a900460ff16155b801561137157508473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614155b8015611383575061138185611bfc565b155b8015611395575061139384611bfc565b155b156113d9576001600d60006101000a81548160ff0219169083151502179055506113bd611c52565b6000600d60006101000a81548160ff0219169083151502179055505b6000600d60009054906101000a900460ff161590506113f786611bfc565b80611407575061140685611bfc565b5b1561141157600090505b80156115415760007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561149c576114956064611487600b5488611c7b90919063ffffffff16565b611c9190919063ffffffff16565b905061151c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561151b57611518606461150a600a5488611c7b90919063ffffffff16565b611c9190919063ffffffff16565b90505b5b60008111156115315761153087308361161b565b5b808561153d91906128ae565b9450505b61154c86868661161b565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168290612954565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906129e6565b60405180910390fd5b611706838383611ca7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561178c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178390612a78565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461181f9190612414565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161188391906120e9565b60405180910390a3611896848484611cac565b50505050565b6118a46109f1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561192b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561198357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611a4f5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190612b0a565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600754811115611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c90612b76565b60405180910390fd5b50565b600854611b548361082b565b82611b5f9190612414565b1115611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790612be2565b60405180910390fd5b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611c5d3061082b565b90506000811415611c6e5750611c79565b611c7781611cb1565b505b565b60008183611c89919061234e565b905092915050565b60008183611c9f9190612c31565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611cce57611ccd612c62565b5b604051908082528060200260200182016040528015611cfc5781602001602082028036833780820191505090505b5090503081600081518110611d1457611d13612c91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190612cd5565b81600181518110611df157611df0612c91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e56307f000000000000000000000000000000000000000000000000000000000000000084610f02565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611eda959493929190612e05565b600060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f4a578082015181840152602081019050611f2f565b83811115611f59576000848401525b50505050565b6000601f19601f8301169050919050565b6000611f7b82611f10565b611f858185611f1b565b9350611f95818560208601611f2c565b611f9e81611f5f565b840191505092915050565b60006020820190508181036000830152611fc38184611f70565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ffb82611fd0565b9050919050565b61200b81611ff0565b811461201657600080fd5b50565b60008135905061202881612002565b92915050565b6000819050919050565b6120418161202e565b811461204c57600080fd5b50565b60008135905061205e81612038565b92915050565b6000806040838503121561207b5761207a611fcb565b5b600061208985828601612019565b925050602061209a8582860161204f565b9150509250929050565b60008115159050919050565b6120b9816120a4565b82525050565b60006020820190506120d460008301846120b0565b92915050565b6120e38161202e565b82525050565b60006020820190506120fe60008301846120da565b92915050565b60006020828403121561211a57612119611fcb565b5b60006121288482850161204f565b91505092915050565b60008060006060848603121561214a57612149611fcb565b5b600061215886828701612019565b935050602061216986828701612019565b925050604061217a8682870161204f565b9150509250925092565b600060ff82169050919050565b61219a81612184565b82525050565b60006020820190506121b56000830184612191565b92915050565b6000602082840312156121d1576121d0611fcb565b5b60006121df84828501612019565b91505092915050565b6121f181611ff0565b82525050565b600060208201905061220c60008301846121e8565b92915050565b6000806040838503121561222957612228611fcb565b5b600061223785828601612019565b925050602061224885828601612019565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061229957607f821691505b602082108114156122ad576122ac612252565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122e9602083611f1b565b91506122f4826122b3565b602082019050919050565b60006020820190508181036000830152612318816122dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123598261202e565b91506123648361202e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561239d5761239c61231f565b5b828202905092915050565b7f4d61782077616c6c65742063616e206e6f74206265206c6f7765726564000000600082015250565b60006123de601d83611f1b565b91506123e9826123a8565b602082019050919050565b6000602082019050818103600083015261240d816123d1565b9050919050565b600061241f8261202e565b915061242a8361202e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561245f5761245e61231f565b5b828201905092915050565b7f427579206665652063616e206e6f74206265207365742068696768657220746860008201527f616e203525000000000000000000000000000000000000000000000000000000602082015250565b60006124c6602583611f1b565b91506124d18261246a565b604082019050919050565b600060208201905081810360008301526124f5816124b9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612558602583611f1b565b9150612563826124fc565b604082019050919050565b600060208201905081810360008301526125878161254b565b9050919050565b7f4d61782074782063616e206e6f74206265206c6f776572656400000000000000600082015250565b60006125c4601983611f1b565b91506125cf8261258e565b602082019050919050565b600060208201905081810360008301526125f3816125b7565b9050919050565b7f53656c6c206665652063616e206e6f742062652073657420686967686572207460008201527f68616e2035250000000000000000000000000000000000000000000000000000602082015250565b6000612656602683611f1b565b9150612661826125fa565b604082019050919050565b6000602082019050818103600083015261268581612649565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006126e8602683611f1b565b91506126f38261268c565b604082019050919050565b60006020820190508181036000830152612717816126db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061277a602483611f1b565b91506127858261271e565b604082019050919050565b600060208201905081810360008301526127a98161276d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061280c602283611f1b565b9150612817826127b0565b604082019050919050565b6000602082019050818103600083015261283b816127ff565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612878601d83611f1b565b915061288382612842565b602082019050919050565b600060208201905081810360008301526128a78161286b565b9050919050565b60006128b98261202e565b91506128c48361202e565b9250828210156128d7576128d661231f565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061293e602583611f1b565b9150612949826128e2565b604082019050919050565b6000602082019050818103600083015261296d81612931565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006129d0602383611f1b565b91506129db82612974565b604082019050919050565b600060208201905081810360008301526129ff816129c3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612a62602683611f1b565b9150612a6d82612a06565b604082019050919050565b60006020820190508181036000830152612a9181612a55565b9050919050565b7f4f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f60008201527f7765640000000000000000000000000000000000000000000000000000000000602082015250565b6000612af4602383611f1b565b9150612aff82612a98565b604082019050919050565b60006020820190508181036000830152612b2381612ae7565b9050919050565b7f4d6178207472616e73616374696f6e206c696d69742072656163686564000000600082015250565b6000612b60601d83611f1b565b9150612b6b82612b2a565b602082019050919050565b60006020820190508181036000830152612b8f81612b53565b9050919050565b7f4d61782077616c6c6574206c696d697420726561636865640000000000000000600082015250565b6000612bcc601883611f1b565b9150612bd782612b96565b602082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c3c8261202e565b9150612c478361202e565b925082612c5757612c56612c02565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612ccf81612002565b92915050565b600060208284031215612ceb57612cea611fcb565b5b6000612cf984828501612cc0565b91505092915050565b6000819050919050565b6000819050919050565b6000612d31612d2c612d2784612d02565b612d0c565b61202e565b9050919050565b612d4181612d16565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d7c81611ff0565b82525050565b6000612d8e8383612d73565b60208301905092915050565b6000602082019050919050565b6000612db282612d47565b612dbc8185612d52565b9350612dc783612d63565b8060005b83811015612df8578151612ddf8882612d82565b9750612dea83612d9a565b925050600181019050612dcb565b5085935050505092915050565b600060a082019050612e1a60008301886120da565b612e276020830187612d38565b8181036040830152612e398186612da7565b9050612e4860608301856121e8565b612e5560808301846120da565b969550505050505056fea264697066735822122026260917aacce0587a9948cbc09efb485819e67b84124223785c228841266d9964736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106101445760003560e01c806371fc4688116100b6578063a9059cbb1161006f578063a9059cbb1461046d578063c2d0ffca146104aa578063dd62ed3e146104d3578063eba4c33314610510578063f2fde38b14610539578063f8b45b05146105625761014b565b806371fc46881461035b5780637437681e1461038457806375f0a874146103af5780638da5cb5b146103da57806395d89b4114610405578063a457c2d7146104305761014b565b80632b14ca56116101085780632b14ca5614610249578063313ce56714610274578063395093511461029f57806347062402146102dc57806370a0823114610307578063715018a6146103445761014b565b806306fdde0314610150578063095ea7b31461017b57806318160ddd146101b85780631c499ab0146101e357806323b872dd1461020c5761014b565b3661014b57005b600080fd5b34801561015c57600080fd5b5061016561058d565b6040516101729190611fa9565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190612064565b61061f565b6040516101af91906120bf565b60405180910390f35b3480156101c457600080fd5b506101cd610642565b6040516101da91906120e9565b60405180910390f35b3480156101ef57600080fd5b5061020a60048036038101906102059190612104565b61064c565b005b34801561021857600080fd5b50610233600480360381019061022e9190612131565b61073d565b60405161024091906120bf565b60405180910390f35b34801561025557600080fd5b5061025e61076c565b60405161026b91906120e9565b60405180910390f35b34801561028057600080fd5b50610289610772565b60405161029691906121a0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c19190612064565b61077b565b6040516102d391906120bf565b60405180910390f35b3480156102e857600080fd5b506102f1610825565b6040516102fe91906120e9565b60405180910390f35b34801561031357600080fd5b5061032e600480360381019061032991906121bb565b61082b565b60405161033b91906120e9565b60405180910390f35b34801561035057600080fd5b50610359610873565b005b34801561036757600080fd5b50610382600480360381019061037d9190612104565b6108fb565b005b34801561039057600080fd5b506103996109c5565b6040516103a691906120e9565b60405180910390f35b3480156103bb57600080fd5b506103c46109cb565b6040516103d191906121f7565b60405180910390f35b3480156103e657600080fd5b506103ef6109f1565b6040516103fc91906121f7565b60405180910390f35b34801561041157600080fd5b5061041a610a1b565b6040516104279190611fa9565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190612064565b610aad565b60405161046491906120bf565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190612064565b610b97565b6040516104a191906120bf565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190612104565b610bba565b005b3480156104df57600080fd5b506104fa60048036038101906104f59190612212565b610cab565b60405161050791906120e9565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190612104565b610d32565b005b34801561054557600080fd5b50610560600480360381019061055b91906121bb565b610dfc565b005b34801561056e57600080fd5b50610577610ef4565b60405161058491906120e9565b60405180910390f35b60606003805461059c90612281565b80601f01602080910402602001604051908101604052809291908181526020018280546105c890612281565b80156106155780601f106105ea57610100808354040283529160200191610615565b820191906000526020600020905b8154815290600101906020018083116105f857829003601f168201915b5050505050905090565b60008061062a610efa565b9050610637818585610f02565b600191505092915050565b6000600254905090565b610654610efa565b73ffffffffffffffffffffffffffffffffffffffff166106726109f1565b73ffffffffffffffffffffffffffffffffffffffff16146106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf906122ff565b60405180910390fd5b600854670de0b6b3a7640000826106df919061234e565b1015610720576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610717906123f4565b60405180910390fd5b670de0b6b3a764000081610734919061234e565b60088190555050565b600080610748610efa565b90506107558582856110cd565b610760858585611159565b60019150509392505050565b600b5481565b60006012905090565b600080610786610efa565b905061081a818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546108159190612414565b610f02565b600191505092915050565b600a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61087b610efa565b73ffffffffffffffffffffffffffffffffffffffff166108996109f1565b73ffffffffffffffffffffffffffffffffffffffff16146108ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e6906122ff565b60405180910390fd5b6108f96000611555565b565b610903610efa565b73ffffffffffffffffffffffffffffffffffffffff166109216109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e906122ff565b60405180910390fd5b60058111156109bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b2906124dc565b60405180910390fd5b80600a8190555050565b60075481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a2a90612281565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690612281565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b600080610ab8610efa565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b759061256e565b60405180910390fd5b610b8b8286868403610f02565b60019250505092915050565b600080610ba2610efa565b9050610baf818585611159565b600191505092915050565b610bc2610efa565b73ffffffffffffffffffffffffffffffffffffffff16610be06109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906122ff565b60405180910390fd5b600754670de0b6b3a764000082610c4d919061234e565b1015610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c85906125da565b60405180910390fd5b670de0b6b3a764000081610ca2919061234e565b60078190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d3a610efa565b73ffffffffffffffffffffffffffffffffffffffff16610d586109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906122ff565b60405180910390fd5b6005811115610df2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de99061266c565b60405180910390fd5b80600b8190555050565b610e04610efa565b73ffffffffffffffffffffffffffffffffffffffff16610e226109f1565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f906122ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf906126fe565b60405180910390fd5b610ef181611555565b50565b60085481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612790565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990612822565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110c091906120e9565b60405180910390a3505050565b60006110d98484610cab565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111535781811015611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c9061288e565b60405180910390fd5b6111528484848403610f02565b5b50505050565b60008114156111735761116e8383600061161b565b611550565b61117b6109f1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156111e957506111b96109f1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156112225750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561125c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156112eb5761126a8261189c565b61127383611a52565b8015611285575061128382611aaa565b155b156112a25761129381611b00565b61129d8282611b48565b6112ea565b6112ab82611ba4565b80156112bd57506112bb83611aaa565b155b156112d0576112cb81611b00565b6112e9565b6112d982611aaa565b6112e8576112e78282611b48565b5b5b5b5b60006112f63061082b565b9050600080821190508080156113195750600d60009054906101000a900460ff16155b801561137157508473ffffffffffffffffffffffffffffffffffffffff167f0000000000000000000000002d77bdfd22ce3dc00d354304f3d9a28b08d5648c73ffffffffffffffffffffffffffffffffffffffff1614155b8015611383575061138185611bfc565b155b8015611395575061139384611bfc565b155b156113d9576001600d60006101000a81548160ff0219169083151502179055506113bd611c52565b6000600d60006101000a81548160ff0219169083151502179055505b6000600d60009054906101000a900460ff161590506113f786611bfc565b80611407575061140685611bfc565b5b1561141157600090505b80156115415760007f0000000000000000000000002d77bdfd22ce3dc00d354304f3d9a28b08d5648c73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16141561149c576114956064611487600b5488611c7b90919063ffffffff16565b611c9190919063ffffffff16565b905061151c565b7f0000000000000000000000002d77bdfd22ce3dc00d354304f3d9a28b08d5648c73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141561151b57611518606461150a600a5488611c7b90919063ffffffff16565b611c9190919063ffffffff16565b90505b5b60008111156115315761153087308361161b565b5b808561153d91906128ae565b9450505b61154c86868661161b565b5050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561168b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168290612954565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f2906129e6565b60405180910390fd5b611706838383611ca7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561178c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178390612a78565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461181f9190612414565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161188391906120e9565b60405180910390a3611896848484611cac565b50505050565b6118a46109f1565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561192b57507f0000000000000000000000002d77bdfd22ce3dc00d354304f3d9a28b08d5648c73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561198357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15611a4f5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190612b0a565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b50565b60007f0000000000000000000000002d77bdfd22ce3dc00d354304f3d9a28b08d5648c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600754811115611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c90612b76565b60405180910390fd5b50565b600854611b548361082b565b82611b5f9190612414565b1115611ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9790612be2565b60405180910390fd5b5050565b60007f0000000000000000000000002d77bdfd22ce3dc00d354304f3d9a28b08d5648c73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000611c5d3061082b565b90506000811415611c6e5750611c79565b611c7781611cb1565b505b565b60008183611c89919061234e565b905092915050565b60008183611c9f9190612c31565b905092915050565b505050565b505050565b6000600267ffffffffffffffff811115611cce57611ccd612c62565b5b604051908082528060200260200182016040528015611cfc5781602001602082028036833780820191505090505b5090503081600081518110611d1457611d13612c91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611db9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddd9190612cd5565b81600181518110611df157611df0612c91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e56307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610f02565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401611eda959493929190612e05565b600060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f4a578082015181840152602081019050611f2f565b83811115611f59576000848401525b50505050565b6000601f19601f8301169050919050565b6000611f7b82611f10565b611f858185611f1b565b9350611f95818560208601611f2c565b611f9e81611f5f565b840191505092915050565b60006020820190508181036000830152611fc38184611f70565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ffb82611fd0565b9050919050565b61200b81611ff0565b811461201657600080fd5b50565b60008135905061202881612002565b92915050565b6000819050919050565b6120418161202e565b811461204c57600080fd5b50565b60008135905061205e81612038565b92915050565b6000806040838503121561207b5761207a611fcb565b5b600061208985828601612019565b925050602061209a8582860161204f565b9150509250929050565b60008115159050919050565b6120b9816120a4565b82525050565b60006020820190506120d460008301846120b0565b92915050565b6120e38161202e565b82525050565b60006020820190506120fe60008301846120da565b92915050565b60006020828403121561211a57612119611fcb565b5b60006121288482850161204f565b91505092915050565b60008060006060848603121561214a57612149611fcb565b5b600061215886828701612019565b935050602061216986828701612019565b925050604061217a8682870161204f565b9150509250925092565b600060ff82169050919050565b61219a81612184565b82525050565b60006020820190506121b56000830184612191565b92915050565b6000602082840312156121d1576121d0611fcb565b5b60006121df84828501612019565b91505092915050565b6121f181611ff0565b82525050565b600060208201905061220c60008301846121e8565b92915050565b6000806040838503121561222957612228611fcb565b5b600061223785828601612019565b925050602061224885828601612019565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061229957607f821691505b602082108114156122ad576122ac612252565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006122e9602083611f1b565b91506122f4826122b3565b602082019050919050565b60006020820190508181036000830152612318816122dc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006123598261202e565b91506123648361202e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561239d5761239c61231f565b5b828202905092915050565b7f4d61782077616c6c65742063616e206e6f74206265206c6f7765726564000000600082015250565b60006123de601d83611f1b565b91506123e9826123a8565b602082019050919050565b6000602082019050818103600083015261240d816123d1565b9050919050565b600061241f8261202e565b915061242a8361202e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561245f5761245e61231f565b5b828201905092915050565b7f427579206665652063616e206e6f74206265207365742068696768657220746860008201527f616e203525000000000000000000000000000000000000000000000000000000602082015250565b60006124c6602583611f1b565b91506124d18261246a565b604082019050919050565b600060208201905081810360008301526124f5816124b9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612558602583611f1b565b9150612563826124fc565b604082019050919050565b600060208201905081810360008301526125878161254b565b9050919050565b7f4d61782074782063616e206e6f74206265206c6f776572656400000000000000600082015250565b60006125c4601983611f1b565b91506125cf8261258e565b602082019050919050565b600060208201905081810360008301526125f3816125b7565b9050919050565b7f53656c6c206665652063616e206e6f742062652073657420686967686572207460008201527f68616e2035250000000000000000000000000000000000000000000000000000602082015250565b6000612656602683611f1b565b9150612661826125fa565b604082019050919050565b6000602082019050818103600083015261268581612649565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006126e8602683611f1b565b91506126f38261268c565b604082019050919050565b60006020820190508181036000830152612717816126db565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061277a602483611f1b565b91506127858261271e565b604082019050919050565b600060208201905081810360008301526127a98161276d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061280c602283611f1b565b9150612817826127b0565b604082019050919050565b6000602082019050818103600083015261283b816127ff565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612878601d83611f1b565b915061288382612842565b602082019050919050565b600060208201905081810360008301526128a78161286b565b9050919050565b60006128b98261202e565b91506128c48361202e565b9250828210156128d7576128d661231f565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061293e602583611f1b565b9150612949826128e2565b604082019050919050565b6000602082019050818103600083015261296d81612931565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006129d0602383611f1b565b91506129db82612974565b604082019050919050565b600060208201905081810360008301526129ff816129c3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612a62602683611f1b565b9150612a6d82612a06565b604082019050919050565b60006020820190508181036000830152612a9181612a55565b9050919050565b7f4f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f60008201527f7765640000000000000000000000000000000000000000000000000000000000602082015250565b6000612af4602383611f1b565b9150612aff82612a98565b604082019050919050565b60006020820190508181036000830152612b2381612ae7565b9050919050565b7f4d6178207472616e73616374696f6e206c696d69742072656163686564000000600082015250565b6000612b60601d83611f1b565b9150612b6b82612b2a565b602082019050919050565b60006020820190508181036000830152612b8f81612b53565b9050919050565b7f4d61782077616c6c6574206c696d697420726561636865640000000000000000600082015250565b6000612bcc601883611f1b565b9150612bd782612b96565b602082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c3c8261202e565b9150612c478361202e565b925082612c5757612c56612c02565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612ccf81612002565b92915050565b600060208284031215612ceb57612cea611fcb565b5b6000612cf984828501612cc0565b91505092915050565b6000819050919050565b6000819050919050565b6000612d31612d2c612d2784612d02565b612d0c565b61202e565b9050919050565b612d4181612d16565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d7c81611ff0565b82525050565b6000612d8e8383612d73565b60208301905092915050565b6000602082019050919050565b6000612db282612d47565b612dbc8185612d52565b9350612dc783612d63565b8060005b83811015612df8578151612ddf8882612d82565b9750612dea83612d9a565b925050600181019050612dcb565b5085935050505092915050565b600060a082019050612e1a60008301886120da565b612e276020830187612d38565b8181036040830152612e398186612da7565b9050612e4860608301856121e8565b612e5560808301846120da565b969550505050505056fea264697066735822122026260917aacce0587a9948cbc09efb485819e67b84124223785c228841266d9964736f6c634300080a0033
Deployed Bytecode Sourcemap
37000:6302:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25836:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28328:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26956:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38686:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29150:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37355:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26798:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29854:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37323:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27127:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19682:103;;;;;;;;;;;;;:::i;:::-;;38944:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37203:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37164:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19031:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26055:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30629:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27510:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38493:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27807:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39110:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19940:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37230:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25836:100;25890:13;25923:5;25916:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25836:100;:::o;28328:242::-;28447:4;28469:13;28485:12;:10;:12::i;:::-;28469:28;;28508:32;28517:5;28524:7;28533:6;28508:8;:32::i;:::-;28558:4;28551:11;;;28328:242;;;;:::o;26956:108::-;27017:7;27044:12;;27037:19;;26956:108;:::o;38686:250::-;19262:12;:10;:12::i;:::-;19251:23;;:7;:5;:7::i;:::-;:23;;;19243:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38816:9:::1;;38808:4;38789:16;:23;;;;:::i;:::-;:36;;38767:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;38924:4;38905:16;:23;;;;:::i;:::-;38893:9;:35;;;;38686:250:::0;:::o;29150:295::-;29281:4;29298:15;29316:12;:10;:12::i;:::-;29298:30;;29339:38;29355:4;29361:7;29370:6;29339:15;:38::i;:::-;29388:27;29398:4;29404:2;29408:6;29388:9;:27::i;:::-;29433:4;29426:11;;;29150:295;;;;;:::o;37355:26::-;;;;:::o;26798:93::-;26856:5;26881:2;26874:9;;26798:93;:::o;29854:272::-;29969:4;29991:13;30007:12;:10;:12::i;:::-;29991:28;;30030:66;30039:5;30046:7;30085:10;30055:11;:18;30067:5;30055:18;;;;;;;;;;;;;;;:27;30074:7;30055:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;30030:8;:66::i;:::-;30114:4;30107:11;;;29854:272;;;;:::o;37323:25::-;;;;:::o;27127:177::-;27246:7;27278:9;:18;27288:7;27278:18;;;;;;;;;;;;;;;;27271:25;;27127:177;;;:::o;19682:103::-;19262:12;:10;:12::i;:::-;19251:23;;:7;:5;:7::i;:::-;:23;;;19243:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19747:30:::1;19774:1;19747:18;:30::i;:::-;19682:103::o:0;38944:158::-;19262:12;:10;:12::i;:::-;19251:23;;:7;:5;:7::i;:::-;:23;;;19243:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39027:1:::1;39019:4;:9;;39011:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39090:4;39081:6;:13;;;;38944:158:::0;:::o;37203:20::-;;;;:::o;37164:30::-;;;;;;;;;;;;;:::o;19031:87::-;19077:7;19104:6;;;;;;;;;;;19097:13;;19031:87;:::o;26055:104::-;26111:13;26144:7;26137:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26055:104;:::o;30629:507::-;30749:4;30771:13;30787:12;:10;:12::i;:::-;30771:28;;30810:24;30837:11;:18;30849:5;30837:18;;;;;;;;;;;;;;;:27;30856:7;30837:27;;;;;;;;;;;;;;;;30810:54;;30917:15;30897:16;:35;;30875:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;31033:60;31042:5;31049:7;31077:15;31058:16;:34;31033:8;:60::i;:::-;31124:4;31117:11;;;;30629:507;;;;:::o;27510:234::-;27625:4;27647:13;27663:12;:10;:12::i;:::-;27647:28;;27686;27696:5;27703:2;27707:6;27686:9;:28::i;:::-;27732:4;27725:11;;;27510:234;;;;:::o;38493:185::-;19262:12;:10;:12::i;:::-;19251:23;;:7;:5;:7::i;:::-;:23;;;19243:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38597:5:::1;;38589:4;38574:12;:19;;;;:::i;:::-;:28;;38566:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38666:4;38651:12;:19;;;;:::i;:::-;38643:5;:27;;;;38493:185:::0;:::o;27807:201::-;27941:7;27973:11;:18;27985:5;27973:18;;;;;;;;;;;;;;;:27;27992:7;27973:27;;;;;;;;;;;;;;;;27966:34;;27807:201;;;;:::o;39110:161::-;19262:12;:10;:12::i;:::-;19251:23;;:7;:5;:7::i;:::-;:23;;;19243:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39194:1:::1;39186:4;:9;;39178:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39259:4;39249:7;:14;;;;39110:161:::0;:::o;19940:238::-;19262:12;:10;:12::i;:::-;19251:23;;:7;:5;:7::i;:::-;:23;;;19243:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20063:1:::1;20043:22;;:8;:22;;;;20021:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;20142:28;20161:8;20142:18;:28::i;:::-;19940:238:::0;:::o;37230:24::-;;;;:::o;17873:98::-;17926:7;17953:10;17946:17;;17873:98;:::o;34371:380::-;34524:1;34507:19;;:5;:19;;;;34499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34605:1;34586:21;;:7;:21;;;;34578:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34689:6;34659:11;:18;34671:5;34659:18;;;;;;;;;;;;;;;:27;34678:7;34659:27;;;;;;;;;;;;;;;:36;;;;34727:7;34711:32;;34720:5;34711:32;;;34736:6;34711:32;;;;;;:::i;:::-;;;;;;;;34371:380;;;:::o;35038:502::-;35173:24;35200:25;35210:5;35217:7;35200:9;:25::i;:::-;35173:52;;35260:17;35240:16;:37;35236:297;;35340:6;35320:16;:26;;35294:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;35455:51;35464:5;35471:7;35499:6;35480:16;:25;35455:8;:51::i;:::-;35236:297;35162:378;35038:502;;;:::o;39279:1821::-;39417:1;39407:6;:11;39403:93;;;39435:28;39451:4;39457:2;39461:1;39435:15;:28::i;:::-;39478:7;;39403:93;39534:7;:5;:7::i;:::-;39526:15;;:4;:15;;;;:45;;;;;39564:7;:5;:7::i;:::-;39558:13;;:2;:13;;;;39526:45;:78;;;;;39602:1;39588:16;;:2;:16;;;;39526:78;:116;;;;;39635:6;39621:21;;:2;:21;;;;39526:116;39508:552;;;39669:12;39678:2;39669:8;:12::i;:::-;39702;39709:4;39702:6;:12::i;:::-;:40;;;;;39719:23;39739:2;39719:19;:23::i;:::-;39718:24;39702:40;39698:351;;;39763:19;39775:6;39763:11;:19::i;:::-;39801:27;39817:2;39821:6;39801:15;:27::i;:::-;39698:351;;;39854:11;39862:2;39854:7;:11::i;:::-;:41;;;;;39870:25;39890:4;39870:19;:25::i;:::-;39869:26;39854:41;39850:199;;;39916:19;39928:6;39916:11;:19::i;:::-;39850:199;;;39962:23;39982:2;39962:19;:23::i;:::-;39957:92;;40006:27;40022:2;40026:6;40006:15;:27::i;:::-;39957:92;39850:199;39698:351;39508:552;40072:28;40103:24;40121:4;40103:9;:24::i;:::-;40072:55;;40138:12;40176:1;40153:20;:24;40138:39;;40208:7;:33;;;;;40233:8;;;;;;;;;;;40232:9;40208:33;:62;;;;;40266:4;40258:12;;:4;:12;;;;40208:62;:103;;;;;40288:23;40306:4;40288:17;:23::i;:::-;40287:24;40208:103;:142;;;;;40329:21;40347:2;40329:17;:21::i;:::-;40328:22;40208:142;40190:275;;;40388:4;40377:8;;:15;;;;;;;;;;;;;;;;;;40409:11;:9;:11::i;:::-;40448:5;40437:8;;:16;;;;;;;;;;;;;;;;;;40190:275;40477:12;40493:8;;;;;;;;;;;40492:9;40477:24;;40518:23;40536:4;40518:17;:23::i;:::-;:48;;;;40545:21;40563:2;40545:17;:21::i;:::-;40518:48;40514:96;;;40593:5;40583:15;;40514:96;40626:7;40622:425;;;40650:12;40693:4;40687:10;;:2;:10;;;40683:215;;;40725:28;40749:3;40725:19;40736:7;;40725:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;40718:35;;40683:215;;;40823:4;40815:12;;:4;:12;;;40811:87;;;40855:27;40878:3;40855:18;40866:6;;40855;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;40848:34;;40811:87;40683:215;40925:1;40918:4;:8;40914:91;;;40947:42;40963:4;40977;40984;40947:15;:42::i;:::-;40914:91;41031:4;41021:14;;;;;:::i;:::-;;;40635:412;40622:425;41059:33;41075:4;41081:2;41085:6;41059:15;:33::i;:::-;39392:1708;;;39279:1821;;;;:::o;20338:191::-;20412:16;20431:6;;;;;;;;;;;20412:25;;20457:8;20448:6;;:17;;;;;;;;;;;;;;;;;;20512:8;20481:40;;20502:8;20481:40;;;;;;;;;;;;20401:128;20338:191;:::o;31615:708::-;31762:1;31746:18;;:4;:18;;;;31738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31839:1;31825:16;;:2;:16;;;;31817:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31894:38;31915:4;31921:2;31925:6;31894:20;:38::i;:::-;31945:19;31967:9;:15;31977:4;31967:15;;;;;;;;;;;;;;;;31945:37;;32030:6;32015:11;:21;;31993:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;32170:6;32156:11;:20;32138:9;:15;32148:4;32138:15;;;;;;;;;;;;;;;:38;;;;32215:6;32198:9;:13;32208:2;32198:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;32254:2;32239:26;;32248:4;32239:26;;;32258:6;32239:26;;;;;;:::i;:::-;;;;;;;;32278:37;32298:4;32304:2;32308:6;32278:19;:37::i;:::-;31727:596;31615:708;;;:::o;41108:347::-;41170:7;:5;:7::i;:::-;41163:14;;:3;:14;;;;:29;;;;;41188:4;41181:11;;:3;:11;;;;41163:29;:55;;;;;41211:6;41196:22;;:3;:22;;;;41163:55;41159:289;;;41294:12;41261:18;:29;41280:9;41261:29;;;;;;;;;;;;;;;;:45;;41235:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;41424:12;41392:18;:29;41411:9;41392:29;;;;;;;;;;;;;;;:44;;;;41159:289;41108:347;:::o;41792:99::-;41846:4;41879;41870:13;;:5;:13;;;41863:20;;41792:99;;;:::o;42295:124::-;42362:4;42386:18;:25;42405:5;42386:25;;;;;;;;;;;;;;;;;;;;;;;;;42379:32;;42295:124;;;:::o;42427:129::-;42509:5;;42498:7;:16;;42490:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42427:129;:::o;42564:203::-;42698:9;;42678:16;42688:5;42678:9;:16::i;:::-;42668:7;:26;;;;:::i;:::-;:39;;42646:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;42564:203;;:::o;41688:96::-;41741:4;41772;41765:11;;:3;:11;;;41758:18;;41688:96;;;:::o;42031:120::-;42096:4;42120:16;:23;42137:5;42120:23;;;;;;;;;;;;;;;;;;;;;;;;;42113:30;;42031:120;;;:::o;41463:217::-;41504:23;41530:24;41548:4;41530:9;:24::i;:::-;41504:50;;41590:1;41571:15;:20;41567:59;;;41608:7;;;41567:59;41638:34;41656:15;41638:17;:34::i;:::-;41493:187;41463:217;:::o;13906:98::-;13964:7;13995:1;13991;:5;;;;:::i;:::-;13984:12;;13906:98;;;;:::o;14305:::-;14363:7;14394:1;14390;:5;;;;:::i;:::-;14383:12;;14305:98;;;;:::o;36140:125::-;;;;:::o;36869:124::-;;;;:::o;42775:524::-;42904:21;42942:1;42928:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42904:40;;42973:4;42955;42960:1;42955:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42999:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42989:4;42994:1;42989:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43025:54;43042:4;43057:6;43066:12;43025:8;:54::i;:::-;43092:6;:57;;;43164:12;43191:1;43207:4;43234:15;;;;;;;;;;;43265;43092:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42833:466;42775:524;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:619::-;4258:6;4266;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:119;;;4329:79;;:::i;:::-;4291:119;4449:1;4474:53;4519:7;4510:6;4499:9;4495:22;4474:53;:::i;:::-;4464:63;;4420:117;4576:2;4602:53;4647:7;4638:6;4627:9;4623:22;4602:53;:::i;:::-;4592:63;;4547:118;4704:2;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4675:118;4181:619;;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:329::-;5295:6;5344:2;5332:9;5323:7;5319:23;5315:32;5312:119;;;5350:79;;:::i;:::-;5312:119;5470:1;5495:53;5540:7;5531:6;5520:9;5516:22;5495:53;:::i;:::-;5485:63;;5441:117;5236:329;;;;:::o;5571:118::-;5658:24;5676:5;5658:24;:::i;:::-;5653:3;5646:37;5571:118;;:::o;5695:222::-;5788:4;5826:2;5815:9;5811:18;5803:26;;5839:71;5907:1;5896:9;5892:17;5883:6;5839:71;:::i;:::-;5695:222;;;;:::o;5923:474::-;5991:6;5999;6048:2;6036:9;6027:7;6023:23;6019:32;6016:119;;;6054:79;;:::i;:::-;6016:119;6174:1;6199:53;6244:7;6235:6;6224:9;6220:22;6199:53;:::i;:::-;6189:63;;6145:117;6301:2;6327:53;6372:7;6363:6;6352:9;6348:22;6327:53;:::i;:::-;6317:63;;6272:118;5923:474;;;;;:::o;6403:180::-;6451:77;6448:1;6441:88;6548:4;6545:1;6538:15;6572:4;6569:1;6562:15;6589:320;6633:6;6670:1;6664:4;6660:12;6650:22;;6717:1;6711:4;6707:12;6738:18;6728:81;;6794:4;6786:6;6782:17;6772:27;;6728:81;6856:2;6848:6;6845:14;6825:18;6822:38;6819:84;;;6875:18;;:::i;:::-;6819:84;6640:269;6589:320;;;:::o;6915:182::-;7055:34;7051:1;7043:6;7039:14;7032:58;6915:182;:::o;7103:366::-;7245:3;7266:67;7330:2;7325:3;7266:67;:::i;:::-;7259:74;;7342:93;7431:3;7342:93;:::i;:::-;7460:2;7455:3;7451:12;7444:19;;7103:366;;;:::o;7475:419::-;7641:4;7679:2;7668:9;7664:18;7656:26;;7728:9;7722:4;7718:20;7714:1;7703:9;7699:17;7692:47;7756:131;7882:4;7756:131;:::i;:::-;7748:139;;7475:419;;;:::o;7900:180::-;7948:77;7945:1;7938:88;8045:4;8042:1;8035:15;8069:4;8066:1;8059:15;8086:348;8126:7;8149:20;8167:1;8149:20;:::i;:::-;8144:25;;8183:20;8201:1;8183:20;:::i;:::-;8178:25;;8371:1;8303:66;8299:74;8296:1;8293:81;8288:1;8281:9;8274:17;8270:105;8267:131;;;8378:18;;:::i;:::-;8267:131;8426:1;8423;8419:9;8408:20;;8086:348;;;;:::o;8440:179::-;8580:31;8576:1;8568:6;8564:14;8557:55;8440:179;:::o;8625:366::-;8767:3;8788:67;8852:2;8847:3;8788:67;:::i;:::-;8781:74;;8864:93;8953:3;8864:93;:::i;:::-;8982:2;8977:3;8973:12;8966:19;;8625:366;;;:::o;8997:419::-;9163:4;9201:2;9190:9;9186:18;9178:26;;9250:9;9244:4;9240:20;9236:1;9225:9;9221:17;9214:47;9278:131;9404:4;9278:131;:::i;:::-;9270:139;;8997:419;;;:::o;9422:305::-;9462:3;9481:20;9499:1;9481:20;:::i;:::-;9476:25;;9515:20;9533:1;9515:20;:::i;:::-;9510:25;;9669:1;9601:66;9597:74;9594:1;9591:81;9588:107;;;9675:18;;:::i;:::-;9588:107;9719:1;9716;9712:9;9705:16;;9422:305;;;;:::o;9733:224::-;9873:34;9869:1;9861:6;9857:14;9850:58;9942:7;9937:2;9929:6;9925:15;9918:32;9733:224;:::o;9963:366::-;10105:3;10126:67;10190:2;10185:3;10126:67;:::i;:::-;10119:74;;10202:93;10291:3;10202:93;:::i;:::-;10320:2;10315:3;10311:12;10304:19;;9963:366;;;:::o;10335:419::-;10501:4;10539:2;10528:9;10524:18;10516:26;;10588:9;10582:4;10578:20;10574:1;10563:9;10559:17;10552:47;10616:131;10742:4;10616:131;:::i;:::-;10608:139;;10335:419;;;:::o;10760:224::-;10900:34;10896:1;10888:6;10884:14;10877:58;10969:7;10964:2;10956:6;10952:15;10945:32;10760:224;:::o;10990:366::-;11132:3;11153:67;11217:2;11212:3;11153:67;:::i;:::-;11146:74;;11229:93;11318:3;11229:93;:::i;:::-;11347:2;11342:3;11338:12;11331:19;;10990:366;;;:::o;11362:419::-;11528:4;11566:2;11555:9;11551:18;11543:26;;11615:9;11609:4;11605:20;11601:1;11590:9;11586:17;11579:47;11643:131;11769:4;11643:131;:::i;:::-;11635:139;;11362:419;;;:::o;11787:175::-;11927:27;11923:1;11915:6;11911:14;11904:51;11787:175;:::o;11968:366::-;12110:3;12131:67;12195:2;12190:3;12131:67;:::i;:::-;12124:74;;12207:93;12296:3;12207:93;:::i;:::-;12325:2;12320:3;12316:12;12309:19;;11968:366;;;:::o;12340:419::-;12506:4;12544:2;12533:9;12529:18;12521:26;;12593:9;12587:4;12583:20;12579:1;12568:9;12564:17;12557:47;12621:131;12747:4;12621:131;:::i;:::-;12613:139;;12340:419;;;:::o;12765:225::-;12905:34;12901:1;12893:6;12889:14;12882:58;12974:8;12969:2;12961:6;12957:15;12950:33;12765:225;:::o;12996:366::-;13138:3;13159:67;13223:2;13218:3;13159:67;:::i;:::-;13152:74;;13235:93;13324:3;13235:93;:::i;:::-;13353:2;13348:3;13344:12;13337:19;;12996:366;;;:::o;13368:419::-;13534:4;13572:2;13561:9;13557:18;13549:26;;13621:9;13615:4;13611:20;13607:1;13596:9;13592:17;13585:47;13649:131;13775:4;13649:131;:::i;:::-;13641:139;;13368:419;;;:::o;13793:225::-;13933:34;13929:1;13921:6;13917:14;13910:58;14002:8;13997:2;13989:6;13985:15;13978:33;13793:225;:::o;14024:366::-;14166:3;14187:67;14251:2;14246:3;14187:67;:::i;:::-;14180:74;;14263:93;14352:3;14263:93;:::i;:::-;14381:2;14376:3;14372:12;14365:19;;14024:366;;;:::o;14396:419::-;14562:4;14600:2;14589:9;14585:18;14577:26;;14649:9;14643:4;14639:20;14635:1;14624:9;14620:17;14613:47;14677:131;14803:4;14677:131;:::i;:::-;14669:139;;14396:419;;;:::o;14821:223::-;14961:34;14957:1;14949:6;14945:14;14938:58;15030:6;15025:2;15017:6;15013:15;15006:31;14821:223;:::o;15050:366::-;15192:3;15213:67;15277:2;15272:3;15213:67;:::i;:::-;15206:74;;15289:93;15378:3;15289:93;:::i;:::-;15407:2;15402:3;15398:12;15391:19;;15050:366;;;:::o;15422:419::-;15588:4;15626:2;15615:9;15611:18;15603:26;;15675:9;15669:4;15665:20;15661:1;15650:9;15646:17;15639:47;15703:131;15829:4;15703:131;:::i;:::-;15695:139;;15422:419;;;:::o;15847:221::-;15987:34;15983:1;15975:6;15971:14;15964:58;16056:4;16051:2;16043:6;16039:15;16032:29;15847:221;:::o;16074:366::-;16216:3;16237:67;16301:2;16296:3;16237:67;:::i;:::-;16230:74;;16313:93;16402:3;16313:93;:::i;:::-;16431:2;16426:3;16422:12;16415:19;;16074:366;;;:::o;16446:419::-;16612:4;16650:2;16639:9;16635:18;16627:26;;16699:9;16693:4;16689:20;16685:1;16674:9;16670:17;16663:47;16727:131;16853:4;16727:131;:::i;:::-;16719:139;;16446:419;;;:::o;16871:179::-;17011:31;17007:1;16999:6;16995:14;16988:55;16871:179;:::o;17056:366::-;17198:3;17219:67;17283:2;17278:3;17219:67;:::i;:::-;17212:74;;17295:93;17384:3;17295:93;:::i;:::-;17413:2;17408:3;17404:12;17397:19;;17056:366;;;:::o;17428:419::-;17594:4;17632:2;17621:9;17617:18;17609:26;;17681:9;17675:4;17671:20;17667:1;17656:9;17652:17;17645:47;17709:131;17835:4;17709:131;:::i;:::-;17701:139;;17428:419;;;:::o;17853:191::-;17893:4;17913:20;17931:1;17913:20;:::i;:::-;17908:25;;17947:20;17965:1;17947:20;:::i;:::-;17942:25;;17986:1;17983;17980:8;17977:34;;;17991:18;;:::i;:::-;17977:34;18036:1;18033;18029:9;18021:17;;17853:191;;;;:::o;18050:224::-;18190:34;18186:1;18178:6;18174:14;18167:58;18259:7;18254:2;18246:6;18242:15;18235:32;18050:224;:::o;18280:366::-;18422:3;18443:67;18507:2;18502:3;18443:67;:::i;:::-;18436:74;;18519:93;18608:3;18519:93;:::i;:::-;18637:2;18632:3;18628:12;18621:19;;18280:366;;;:::o;18652:419::-;18818:4;18856:2;18845:9;18841:18;18833:26;;18905:9;18899:4;18895:20;18891:1;18880:9;18876:17;18869:47;18933:131;19059:4;18933:131;:::i;:::-;18925:139;;18652:419;;;:::o;19077:222::-;19217:34;19213:1;19205:6;19201:14;19194:58;19286:5;19281:2;19273:6;19269:15;19262:30;19077:222;:::o;19305:366::-;19447:3;19468:67;19532:2;19527:3;19468:67;:::i;:::-;19461:74;;19544:93;19633:3;19544:93;:::i;:::-;19662:2;19657:3;19653:12;19646:19;;19305:366;;;:::o;19677:419::-;19843:4;19881:2;19870:9;19866:18;19858:26;;19930:9;19924:4;19920:20;19916:1;19905:9;19901:17;19894:47;19958:131;20084:4;19958:131;:::i;:::-;19950:139;;19677:419;;;:::o;20102:225::-;20242:34;20238:1;20230:6;20226:14;20219:58;20311:8;20306:2;20298:6;20294:15;20287:33;20102:225;:::o;20333:366::-;20475:3;20496:67;20560:2;20555:3;20496:67;:::i;:::-;20489:74;;20572:93;20661:3;20572:93;:::i;:::-;20690:2;20685:3;20681:12;20674:19;;20333:366;;;:::o;20705:419::-;20871:4;20909:2;20898:9;20894:18;20886:26;;20958:9;20952:4;20948:20;20944:1;20933:9;20929:17;20922:47;20986:131;21112:4;20986:131;:::i;:::-;20978:139;;20705:419;;;:::o;21130:222::-;21270:34;21266:1;21258:6;21254:14;21247:58;21339:5;21334:2;21326:6;21322:15;21315:30;21130:222;:::o;21358:366::-;21500:3;21521:67;21585:2;21580:3;21521:67;:::i;:::-;21514:74;;21597:93;21686:3;21597:93;:::i;:::-;21715:2;21710:3;21706:12;21699:19;;21358:366;;;:::o;21730:419::-;21896:4;21934:2;21923:9;21919:18;21911:26;;21983:9;21977:4;21973:20;21969:1;21958:9;21954:17;21947:47;22011:131;22137:4;22011:131;:::i;:::-;22003:139;;21730:419;;;:::o;22155:179::-;22295:31;22291:1;22283:6;22279:14;22272:55;22155:179;:::o;22340:366::-;22482:3;22503:67;22567:2;22562:3;22503:67;:::i;:::-;22496:74;;22579:93;22668:3;22579:93;:::i;:::-;22697:2;22692:3;22688:12;22681:19;;22340:366;;;:::o;22712:419::-;22878:4;22916:2;22905:9;22901:18;22893:26;;22965:9;22959:4;22955:20;22951:1;22940:9;22936:17;22929:47;22993:131;23119:4;22993:131;:::i;:::-;22985:139;;22712:419;;;:::o;23137:174::-;23277:26;23273:1;23265:6;23261:14;23254:50;23137:174;:::o;23317:366::-;23459:3;23480:67;23544:2;23539:3;23480:67;:::i;:::-;23473:74;;23556:93;23645:3;23556:93;:::i;:::-;23674:2;23669:3;23665:12;23658:19;;23317:366;;;:::o;23689:419::-;23855:4;23893:2;23882:9;23878:18;23870:26;;23942:9;23936:4;23932:20;23928:1;23917:9;23913:17;23906:47;23970:131;24096:4;23970:131;:::i;:::-;23962:139;;23689:419;;;:::o;24114:180::-;24162:77;24159:1;24152:88;24259:4;24256:1;24249:15;24283:4;24280:1;24273:15;24300:185;24340:1;24357:20;24375:1;24357:20;:::i;:::-;24352:25;;24391:20;24409:1;24391:20;:::i;:::-;24386:25;;24430:1;24420:35;;24435:18;;:::i;:::-;24420:35;24477:1;24474;24470:9;24465:14;;24300:185;;;;:::o;24491:180::-;24539:77;24536:1;24529:88;24636:4;24633:1;24626:15;24660:4;24657:1;24650:15;24677:180;24725:77;24722:1;24715:88;24822:4;24819:1;24812:15;24846:4;24843:1;24836:15;24863:143;24920:5;24951:6;24945:13;24936:22;;24967:33;24994:5;24967:33;:::i;:::-;24863:143;;;;:::o;25012:351::-;25082:6;25131:2;25119:9;25110:7;25106:23;25102:32;25099:119;;;25137:79;;:::i;:::-;25099:119;25257:1;25282:64;25338:7;25329:6;25318:9;25314:22;25282:64;:::i;:::-;25272:74;;25228:128;25012:351;;;;:::o;25369:85::-;25414:7;25443:5;25432:16;;25369:85;;;:::o;25460:60::-;25488:3;25509:5;25502:12;;25460:60;;;:::o;25526:158::-;25584:9;25617:61;25635:42;25644:32;25670:5;25644:32;:::i;:::-;25635:42;:::i;:::-;25617:61;:::i;:::-;25604:74;;25526:158;;;:::o;25690:147::-;25785:45;25824:5;25785:45;:::i;:::-;25780:3;25773:58;25690:147;;:::o;25843:114::-;25910:6;25944:5;25938:12;25928:22;;25843:114;;;:::o;25963:184::-;26062:11;26096:6;26091:3;26084:19;26136:4;26131:3;26127:14;26112:29;;25963:184;;;;:::o;26153:132::-;26220:4;26243:3;26235:11;;26273:4;26268:3;26264:14;26256:22;;26153:132;;;:::o;26291:108::-;26368:24;26386:5;26368:24;:::i;:::-;26363:3;26356:37;26291:108;;:::o;26405:179::-;26474:10;26495:46;26537:3;26529:6;26495:46;:::i;:::-;26573:4;26568:3;26564:14;26550:28;;26405:179;;;;:::o;26590:113::-;26660:4;26692;26687:3;26683:14;26675:22;;26590:113;;;:::o;26739:732::-;26858:3;26887:54;26935:5;26887:54;:::i;:::-;26957:86;27036:6;27031:3;26957:86;:::i;:::-;26950:93;;27067:56;27117:5;27067:56;:::i;:::-;27146:7;27177:1;27162:284;27187:6;27184:1;27181:13;27162:284;;;27263:6;27257:13;27290:63;27349:3;27334:13;27290:63;:::i;:::-;27283:70;;27376:60;27429:6;27376:60;:::i;:::-;27366:70;;27222:224;27209:1;27206;27202:9;27197:14;;27162:284;;;27166:14;27462:3;27455:10;;26863:608;;;26739:732;;;;:::o;27477:831::-;27740:4;27778:3;27767:9;27763:19;27755:27;;27792:71;27860:1;27849:9;27845:17;27836:6;27792:71;:::i;:::-;27873:80;27949:2;27938:9;27934:18;27925:6;27873:80;:::i;:::-;28000:9;27994:4;27990:20;27985:2;27974:9;27970:18;27963:48;28028:108;28131:4;28122:6;28028:108;:::i;:::-;28020:116;;28146:72;28214:2;28203:9;28199:18;28190:6;28146:72;:::i;:::-;28228:73;28296:3;28285:9;28281:19;28272:6;28228:73;:::i;:::-;27477:831;;;;;;;;:::o
Swarm Source
ipfs://26260917aacce0587a9948cbc09efb485819e67b84124223785c228841266d99
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.