ERC-20
MEME
Overview
Max Total Supply
960,123,548.999999999965 CHUCK
Holders
44,116
Total Transfers
-
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
ChuckToken
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at basescan.org on 2024-03-30 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) // pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) // pragma solidity ^0.8.0; // import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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); } } // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) // pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) // pragma solidity ^0.8.0; // import "../IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) // pragma solidity ^0.8.0; // import "./IERC20.sol"; // import "./extensions/IERC20Metadata.sol"; // import "../../utils/Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * 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}. * * 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 default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) // pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } // pragma solidity >=0.6.2; // import './IUniswapV2Router01.sol'; 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; } contract ChuckToken is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public uniswapV2Pair; address public marketingWallet; address public developmentWallet; address public liquidityWallet; address public donationWallet; address public constant deadAddress = address(0xdead); bool public tradingActive; bool public swapEnabled; bool public limited = true; bool private _swapping; uint256 public maxTransaction; uint256 public maxWallet; uint256 public swapTokensAtAmount; uint256 public buyTotalFees; uint256 private _buyMarketingFee; uint256 private _buyDevelopmentFee; uint256 private _buyLiquidityFee; uint256 private _buyDonationFee; uint256 public sellTotalFees; uint256 private _sellMarketingFee; uint256 private _sellDevelopmentFee; uint256 private _sellLiquidityFee; uint256 private _sellDonationFee; uint256 private _tokensForMarketing; uint256 private _tokensForDevelopment; uint256 private _tokensForLiquidity; uint256 private _tokensForDonation; mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) private _isExcludedFromMaxTransaction; mapping(address => bool) private _automatedMarketMakerPairs; event ExcludeFromLimits(address indexed account, bool isExcluded); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event developmentWalletUpdated( address indexed newWallet, address indexed oldWallet ); event liquidityWalletUpdated( address indexed newWallet, address indexed oldWallet ); event donationWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TokensAirdropped(uint256 totalWallets, uint256 totalTokens); constructor() ERC20("Chuck", "CHUCK") { uint256 totalSupply = 1_000_000_000 * 1e18; address chuckMainWallet = 0xb81b7d412f57361147be7321071E41C1B60e8041; // 0x6BDED42c6DA8FBf0d2bA55B2fa120C5e0c8D7891 for main net other dex uniswapV2Router = IUniswapV2Router02( 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24 // mainnet uniswap v2 ); _approve(address(this), address(uniswapV2Router), type(uint256).max); maxTransaction = totalSupply; maxWallet = totalSupply / 50; swapTokensAtAmount = totalSupply / 1000000; _buyMarketingFee = 0; _buyDevelopmentFee = 0; _buyLiquidityFee = 0; _buyDonationFee = 0; buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee + _buyDonationFee; _sellLiquidityFee = 100; _sellMarketingFee = 100; _sellDevelopmentFee = 100; _sellDonationFee = 200; sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee + _sellDonationFee; marketingWallet = 0xa4739764b5153C4aAaf079a77A47488d6E2773B1; developmentWallet = 0x2614E59f8DdC01aAb950a47e7f11Cc3Aedab928F; liquidityWallet = 0xA7bD3f74dD46E3C446f9eDC5031ccF14D5FdF01c; donationWallet = 0x04BD5d5f84aB8d82030A31222Cb04B5771658134; excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(deadAddress, true); excludeFromFees(chuckMainWallet, true); // below excludes https://drop.gaslite.org airdrop contract address so it doesn't run into max wallet limit while airdropping tokens to users excludeFromFees(0x09350F89e2D7B6e96bA730783c2d76137B045FEF,true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(deadAddress, true); excludeFromMaxTransaction(address(uniswapV2Router), true); excludeFromMaxTransaction(chuckMainWallet, true); _mint(msg.sender, totalSupply); } receive() external payable {} function burn(uint256 amount) public { _burn(msg.sender, amount); } function addLiquidity() public onlyOwner { require(!tradingActive, "Trading already active."); uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); _approve(address(this), address(uniswapV2Pair), type(uint256).max); IERC20(uniswapV2Pair).approve( address(uniswapV2Router), type(uint256).max ); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); excludeFromMaxTransaction(address(uniswapV2Pair), true); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); } function enableTrading() public onlyOwner { require(!tradingActive, "Trading already active."); tradingActive = true; swapEnabled = true; } function removeLimits() external onlyOwner{ limited = false; maxWallet = totalSupply(); } function setSwapEnabled(bool value) public onlyOwner { swapEnabled = value; } function setSwapTokensAtAmount(uint256 amount) public onlyOwner { require( amount >= (totalSupply() * 1) / 100000, "ERC20: Swap amount cannot be lower than 0.001% total supply." ); require( amount <= (totalSupply() * 5) / 1000, "ERC20: Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = amount; } function setMaxWalletAndMaxTransaction( uint256 _maxTransaction, uint256 _maxWallet ) public onlyOwner { require( _maxTransaction >= ((totalSupply() * 5) / 1000), "ERC20: Cannot set maxTxn lower than 0.5%" ); require( _maxWallet >= ((totalSupply() * 5) / 1000), "ERC20: Cannot set maxWallet lower than 0.5%" ); maxTransaction = _maxTransaction; maxWallet = _maxWallet; } function setBuyFees( uint256 _marketingFee, uint256 _developmentFee, uint256 _liquidityFee, uint256 _donationFee ) public onlyOwner { require( _marketingFee + _developmentFee + _liquidityFee + _donationFee <= 500, "ERC20: Must keep fees at 5% or less" ); _buyMarketingFee = _marketingFee; _buyDevelopmentFee = _developmentFee; _buyLiquidityFee = _liquidityFee; _buyDonationFee = _donationFee; buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee + _buyDonationFee; } function setSellFees( uint256 _marketingFee, uint256 _developmentFee, uint256 _liquidityFee, uint256 _donationFee ) public onlyOwner { require( _marketingFee + _developmentFee + _liquidityFee + _donationFee <= 500, "ERC20: Must keep fees at 5% or less" ); _sellMarketingFee = _marketingFee; _sellDevelopmentFee = _developmentFee; _sellLiquidityFee = _liquidityFee; _sellDonationFee = _donationFee; sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee + _sellDonationFee; } function setMarketingWallet(address _marketingWallet) public onlyOwner { require(_marketingWallet != address(0), "ERC20: Address 0"); address oldWallet = marketingWallet; marketingWallet = _marketingWallet; emit marketingWalletUpdated(marketingWallet, oldWallet); } function setDevelopmentWallet(address _developmentWallet) public onlyOwner { require(_developmentWallet != address(0), "ERC20: Address 0"); address oldWallet = developmentWallet; developmentWallet = _developmentWallet; emit developmentWalletUpdated(developmentWallet, oldWallet); } function setLiquidityWallet(address _liquidityWallet) public onlyOwner { require(_liquidityWallet != address(0), "ERC20: Address 0"); address oldWallet = liquidityWallet; liquidityWallet = _liquidityWallet; emit liquidityWalletUpdated(liquidityWallet, oldWallet); } function setDonationWallet(address _donationWallet) public onlyOwner { require(_donationWallet != address(0), "ERC20: Address 0"); address oldWallet = donationWallet; donationWallet = _donationWallet; emit donationWalletUpdated(donationWallet, oldWallet); } function excludeFromMaxTransaction(address account, bool value) public onlyOwner { _isExcludedFromMaxTransaction[account] = value; emit ExcludeFromLimits(account, value); } function bulkExcludeFromMaxTransaction( address[] calldata accounts, bool value ) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _isExcludedFromMaxTransaction[accounts[i]] = value; emit ExcludeFromLimits(accounts[i], value); } } function excludeFromFees(address account, bool value) public onlyOwner { _isExcludedFromFees[account] = value; emit ExcludeFromFees(account, value); } function bulkExcludeFromFees(address[] calldata accounts, bool value) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = value; emit ExcludeFromFees(accounts[i], value); } } function withdrawStuckTokens(address tkn) public onlyOwner { bool success; if (tkn == address(0)) (success, ) = address(msg.sender).call{ value: address(this).balance }(""); else { require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens"); uint256 amount = IERC20(tkn).balanceOf(address(this)); IERC20(tkn).transfer(msg.sender, amount); } } function isExcludedFromMaxTransaction(address account) public view returns (bool) { return _isExcludedFromMaxTransaction[account]; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _setAutomatedMarketMakerPair(address pair, bool value) internal { _automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if ( from != owner() && to != owner() && !_isExcludedFromFees[from] && to != address(0) && to != deadAddress && !_swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "ERC20: Trading is not active." ); } if (limited && from == address(uniswapV2Pair)) { // has to be the LP require(balanceOf(to) + amount <= maxWallet, "Forbid"); } //when buy if ( _automatedMarketMakerPairs[from] && !_isExcludedFromMaxTransaction[to] ) { require( amount <= maxTransaction, "ERC20: Buy transfer amount exceeds the maxTransaction." ); require( amount + balanceOf(to) <= maxWallet, "ERC20: Max wallet exceeded" ); } //when sell else if ( _automatedMarketMakerPairs[to] && !_isExcludedFromMaxTransaction[from] ) { require( amount <= maxTransaction, "ERC20: Sell transfer amount exceeds the maxTransaction." ); } else if (!_isExcludedFromMaxTransaction[to]) { require( amount + balanceOf(to) <= maxWallet, "ERC20: Max wallet exceeded" ); } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !_swapping && !_automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { _swapping = true; _swapBack(); _swapping = false; } bool takeFee = !_swapping; if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; if (takeFee) { // on sell if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(10000); _tokensForLiquidity += (fees * _sellLiquidityFee) / sellTotalFees; _tokensForMarketing += (fees * _sellMarketingFee) / sellTotalFees; _tokensForDevelopment += (fees * _sellDevelopmentFee) / sellTotalFees; _tokensForDonation += (fees * _sellDonationFee) / sellTotalFees; } // on buy else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(10000); _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees; _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees; _tokensForDevelopment += (fees * _buyDevelopmentFee) / buyTotalFees; _tokensForDonation += (fees * _buyDonationFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function _swapTokensForETH(uint256 tokenAmount) internal { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal { _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, 0, liquidityWallet, block.timestamp ); } function _swapBack() internal { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForDevelopment + _tokensForDonation; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 10) { contractBalance = swapTokensAtAmount * 10; } uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; _swapTokensForETH(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap); uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(totalTokensToSwap); uint256 ethForDonation = ethBalance.mul(_tokensForDonation).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment - ethForDonation; _tokensForLiquidity = 0; _tokensForMarketing = 0; _tokensForDevelopment = 0; _tokensForDonation = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { _addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify( amountToSwapForETH, ethForLiquidity, _tokensForLiquidity ); } (success, ) = address(developmentWallet).call{value: ethForDevelopment}(""); (success,) = address(donationWallet).call{value: ethForDonation}(""); (success, ) = address(marketingWallet).call{value: address(this).balance}(""); } function airdrop(address[] calldata addresses, uint256[] calldata tokenAmounts) external onlyOwner { require(addresses.length <= 250,"More than 250 wallets"); require(addresses.length == tokenAmounts.length,"List length mismatch"); uint256 airdropTotal = 0; for(uint i=0; i < addresses.length; i++){ airdropTotal += tokenAmounts[i]; } require(balanceOf(msg.sender) >= airdropTotal, "Token balance too low"); for(uint i=0; i < addresses.length; i++) { super._transfer(msg.sender, addresses[i], tokenAmounts[i]); } emit TokensAirdropped(addresses.length, airdropTotal); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"donationWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"donationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_donationFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_developmentWallet","type":"address"}],"name":"setDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_donationWallet","type":"address"}],"name":"setDonationWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWalletAndMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_donationFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a0604052600a805460ff60b01b1916600160b01b1790553480156200002457600080fd5b5060405180604001604052806005815260200164436875636b60d81b81525060405180604001604052806005815260200164434855434b60d81b815250816003908162000072919062000703565b50600462000081828262000703565b5050506200009e62000098620002ea60201b60201c565b620002ee565b734752ba5dbc23f44d87826276bf6fd6b1c372ad2460808190526b033b2e3c9fd0803ce80000009073b81b7d412f57361147be7321071e41c1b60e804190620000ec90309060001962000340565b600b829055620000fe603283620007cf565b600c5562000110620f424083620007cf565b600d556000600f81905560108190556011819055601281905580620001368180620007f2565b620001429190620007f2565b6200014e9190620007f2565b600e55606460168190556014819055601581905560c8601781905590620001768180620007f2565b620001829190620007f2565b6200018e9190620007f2565b601355600780546001600160a01b031990811673a4739764b5153c4aaaf079a77a47488d6e2773b117909155600880548216732614e59f8ddc01aab950a47e7f11cc3aedab928f17905560098054821673a7bd3f74dd46e3c446f9edc5031ccf14d5fdf01c179055600a80549091167304bd5d5f84ab8d82030a31222cb04b5771658134179055620002346200022c6005546001600160a01b031690565b60016200046c565b620002413060016200046c565b6200025061dead60016200046c565b6200025d8160016200046c565b6200027e7309350f89e2d7b6e96ba730783c2d76137b045fef60016200046c565b6200029d620002956005546001600160a01b031690565b6001620004d6565b620002aa306001620004d6565b620002b961dead6001620004d6565b608051620002c9906001620004d6565b620002d6816001620004d6565b620002e2338362000539565b50506200081a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316620003a85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200040b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200039f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b62000476620005fc565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b620004e0620005fc565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc929101620004ca565b6001600160a01b038216620005915760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200039f565b8060026000828254620005a59190620007f2565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620006585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200039f565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200068a57607f821691505b602082108103620006ab57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200065a57600081815260208120601f850160051c81016020861015620006da5750805b601f850160051c820191505b81811015620006fb57828155600101620006e6565b505050505050565b81516001600160401b038111156200071f576200071f6200065f565b620007378162000730845462000675565b84620006b1565b602080601f8311600181146200076f5760008415620007565750858301515b600019600386901b1c1916600185901b178555620006fb565b600085815260208120601f198616915b82811015620007a0578886015182559484019460019091019084016200077f565b5085821015620007bf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082620007ed57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200081457634e487b7160e01b600052601160045260246000fd5b92915050565b60805161341e6200087560003960008181610368015281816117d5015281816118660152818161199e01528181611a4d01528181612bb801528181612c7101528181612cad01528181612d270152612d66015261341e6000f3fe6080604052600436106102cd5760003560e01c80637571336a11610175578063c24a7a8c116100dc578063dd62ed3e11610095578063e7b94df41161006f578063e7b94df4146108b2578063e8078d94146108d2578063f2fde38b146108e7578063f8b45b051461090757600080fd5b8063dd62ed3e1461085c578063e01af92c1461087c578063e2f456051461089c57600080fd5b8063c24a7a8c146107b0578063c3f70b52146107d0578063cb963728146107e6578063d469801614610806578063d7d1d10e14610826578063d85ba0631461084657600080fd5b8063a457c2d71161012e578063a457c2d7146106ef578063a9059cbb1461070f578063afa4f3b21461072f578063bbc0c7421461074f578063c024666814610770578063c04a54141461079057600080fd5b80637571336a1461064657806375f0a87414610666578063860a32ec146106865780638a8c523c146106a75780638da5cb5b146106bc57806395d89b41146106da57600080fd5b806342966c68116102345780636a486a8e116101ed57806370a08231116101c757806370a08231146105dc578063715018a6146105fc57806372ac248614610611578063751039fc1461063157600080fd5b80636a486a8e146105855780636c5b28551461059b5780636ddd1713146105bb57600080fd5b806342966c68146104ac57806349bd5a5e146104cc5780634fbee193146104ec5780635a96cdd7146105255780635d098b3814610545578063672434821461056557600080fd5b806318d9ceae1161028657806318d9ceae146103e157806323b872dd1461041a57806327c8f8351461043a578063296f0a0c14610450578063313ce56714610470578063395093511461048c57600080fd5b806306fdde03146102d9578063095ea7b314610304578063155ca7c1146103345780631694505e14610356578063178d9b8e146103a257806318160ddd146103c257600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee61091d565b6040516102fb9190612ded565b60405180910390f35b34801561031057600080fd5b5061032461031f366004612e50565b6109af565b60405190151581526020016102fb565b34801561034057600080fd5b5061035461034f366004612ed6565b6109c9565b005b34801561036257600080fd5b5061038a7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102fb565b3480156103ae57600080fd5b506103546103bd366004612f2d565b610ab3565b3480156103ce57600080fd5b506002545b6040519081526020016102fb565b3480156103ed57600080fd5b506103246103fc366004612f5f565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561042657600080fd5b50610324610435366004612f7c565b610b42565b34801561044657600080fd5b5061038a61dead81565b34801561045c57600080fd5b5061035461046b366004612f5f565b610b66565b34801561047c57600080fd5b50604051601281526020016102fb565b34801561049857600080fd5b506103246104a7366004612e50565b610be5565b3480156104b857600080fd5b506103546104c7366004612fbd565b610c07565b3480156104d857600080fd5b5060065461038a906001600160a01b031681565b3480156104f857600080fd5b50610324610507366004612f5f565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561053157600080fd5b50610354610540366004612f5f565b610c14565b34801561055157600080fd5b50610354610560366004612f5f565b610c93565b34801561057157600080fd5b50610354610580366004612fd6565b610d12565b34801561059157600080fd5b506103d360135481565b3480156105a757600080fd5b506103546105b6366004612f2d565b610ee5565b3480156105c757600080fd5b50600a5461032490600160a81b900460ff1681565b3480156105e857600080fd5b506103d36105f7366004612f5f565b610f6b565b34801561060857600080fd5b50610354610f86565b34801561061d57600080fd5b5061035461062c366004612f5f565b610f9a565b34801561063d57600080fd5b50610354611019565b34801561065257600080fd5b50610354610661366004613042565b611036565b34801561067257600080fd5b5060075461038a906001600160a01b031681565b34801561069257600080fd5b50600a5461032490600160b01b900460ff1681565b3480156106b357600080fd5b5061035461109e565b3480156106c857600080fd5b506005546001600160a01b031661038a565b3480156106e657600080fd5b506102ee611111565b3480156106fb57600080fd5b5061032461070a366004612e50565b611120565b34801561071b57600080fd5b5061032461072a366004612e50565b61119b565b34801561073b57600080fd5b5061035461074a366004612fbd565b6111a9565b34801561075b57600080fd5b50600a5461032490600160a01b900460ff1681565b34801561077c57600080fd5b5061035461078b366004613042565b6112e3565b34801561079c57600080fd5b5060085461038a906001600160a01b031681565b3480156107bc57600080fd5b506103546107cb36600461307b565b611343565b3480156107dc57600080fd5b506103d3600b5481565b3480156107f257600080fd5b50610354610801366004612f5f565b61145b565b34801561081257600080fd5b5060095461038a906001600160a01b031681565b34801561083257600080fd5b50610354610841366004612ed6565b611642565b34801561085257600080fd5b506103d3600e5481565b34801561086857600080fd5b506103d361087736600461309d565b611726565b34801561088857600080fd5b506103546108973660046130cb565b611751565b3480156108a857600080fd5b506103d3600d5481565b3480156108be57600080fd5b50600a5461038a906001600160a01b031681565b3480156108de57600080fd5b50610354611777565b3480156108f357600080fd5b50610354610902366004612f5f565b611b04565b34801561091357600080fd5b506103d3600c5481565b60606003805461092c906130e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610958906130e8565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b6000336109bd818585611b7a565b60019150505b92915050565b6109d1611c9e565b60005b82811015610aad5781601c60008686858181106109f3576109f3613122565b9050602002016020810190610a089190612f5f565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110610a4257610a42613122565b9050602002016020810190610a579190612f5f565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610a93911515815260200190565b60405180910390a280610aa58161314e565b9150506109d4565b50505050565b610abb611c9e565b6101f48183610aca8688613167565b610ad49190613167565b610ade9190613167565b1115610b055760405162461bcd60e51b8152600401610afc9061317a565b60405180910390fd5b600f8490556010839055601182905560128190558082610b258587613167565b610b2f9190613167565b610b399190613167565b600e5550505050565b600033610b50858285611cf8565b610b5b858585611d6c565b506001949350505050565b610b6e611c9e565b6001600160a01b038116610b945760405162461bcd60e51b8152600401610afc906131bd565b600980546001600160a01b038381166001600160a01b03198316811790935560405191169182917f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a35050565b6000336109bd818585610bf88383611726565b610c029190613167565b611b7a565b610c113382612570565b50565b610c1c611c9e565b6001600160a01b038116610c425760405162461bcd60e51b8152600401610afc906131bd565b600a80546001600160a01b038381166001600160a01b03198316811790935560405191169182917f1d41bf4c00c76809cb5e7130cd2384157e2281d2d2fce10ef79dbf3fbdd7232f90600090a35050565b610c9b611c9e565b6001600160a01b038116610cc15760405162461bcd60e51b8152600401610afc906131bd565b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b610d1a611c9e565b60fa831115610d635760405162461bcd60e51b81526020600482015260156024820152744d6f7265207468616e203235302077616c6c65747360581b6044820152606401610afc565b828114610da95760405162461bcd60e51b8152602060048201526014602482015273098d2e6e840d8cadccee8d040dad2e6dac2e8c6d60631b6044820152606401610afc565b6000805b84811015610ded57838382818110610dc757610dc7613122565b9050602002013582610dd99190613167565b915080610de58161314e565b915050610dad565b5080610df833610f6b565b1015610e3e5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e2062616c616e636520746f6f206c6f7760581b6044820152606401610afc565b60005b84811015610ea457610e9233878784818110610e5f57610e5f613122565b9050602002016020810190610e749190612f5f565b868685818110610e8657610e86613122565b905060200201356126a2565b80610e9c8161314e565b915050610e41565b5060408051858152602081018390527f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba95464910160405180910390a15050505050565b610eed611c9e565b6101f48183610efc8688613167565b610f069190613167565b610f109190613167565b1115610f2e5760405162461bcd60e51b8152600401610afc9061317a565b60148490556015839055601682905560178190558082610f4e8587613167565b610f589190613167565b610f629190613167565b60135550505050565b6001600160a01b031660009081526020819052604090205490565b610f8e611c9e565b610f9860006127cc565b565b610fa2611c9e565b6001600160a01b038116610fc85760405162461bcd60e51b8152600401610afc906131bd565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396590600090a35050565b611021611c9e565b600a805460ff60b01b19169055600254600c55565b61103e611c9e565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6110a6611c9e565b600a54600160a01b900460ff16156110fa5760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339030b63932b0b23c9030b1ba34bb329760491b6044820152606401610afc565b600a805461ffff60a01b191661010160a01b179055565b60606004805461092c906130e8565b6000338161112e8286611726565b90508381101561118e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610afc565b610b5b8286868403611b7a565b6000336109bd818585611d6c565b6111b1611c9e565b620186a06111be60025490565b6111c99060016131e7565b6111d391906131fe565b8110156112485760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610afc565b6103e861125460025490565b61125f9060056131e7565b61126991906131fe565b8111156112de5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610afc565b600d55565b6112eb611c9e565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101611092565b61134b611c9e565b6103e861135760025490565b6113629060056131e7565b61136c91906131fe565b8210156113cc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b6064820152608401610afc565b6103e86113d860025490565b6113e39060056131e7565b6113ed91906131fe565b8110156114505760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610afc565b600b91909155600c55565b611463611c9e565b60006001600160a01b0382166114bf5760405133904790600081818185875af1925050503d80600081146114b3576040519150601f19603f3d011682016040523d82523d6000602084013e6114b8565b606091505b5050505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152a9190613220565b116115635760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610afc565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce9190613220565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561161e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad9190613239565b61164a611c9e565b60005b82811015610aad5781601d600086868581811061166c5761166c613122565b90506020020160208101906116819190612f5f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106116bb576116bb613122565b90506020020160208101906116d09190612f5f565b6001600160a01b03167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928360405161170c911515815260200190565b60405180910390a28061171e8161314e565b91505061164d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611759611c9e565b600a8054911515600160a81b0260ff60a81b19909216919091179055565b61177f611c9e565b600a54600160a01b900460ff16156117d35760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339030b63932b0b23c9030b1ba34bb329760491b6044820152606401610afc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118559190613256565b6001600160a01b031663c9c65396307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e69190613256565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119579190613256565b600680546001600160a01b0319166001600160a01b03929092169182179055611984903090600019611b7a565b60065460405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af11580156119f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1c9190613239565b50600654611a34906001600160a01b0316600161281e565b600654611a4b906001600160a01b03166001611036565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7194730611a8530610f6b565b600080611a9a6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611abc96959493929190613273565b60606040518083038185885af1158015611ada573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611aff91906132ae565b505050565b611b0c611c9e565b6001600160a01b038116611b715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afc565b610c11816127cc565b6001600160a01b038316611bdc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afc565b6001600160a01b038216611c3d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610afc565b6000611d048484611726565b90506000198114610aad5781811015611d5f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610afc565b610aad8484848403611b7a565b6001600160a01b038316611d925760405162461bcd60e51b8152600401610afc906132dc565b6001600160a01b038216611db85760405162461bcd60e51b8152600401610afc90613321565b80600003611dcc57611aff838360006126a2565b6005546001600160a01b03848116911614801590611df857506005546001600160a01b03838116911614155b8015611e1d57506001600160a01b0383166000908152601c602052604090205460ff16155b8015611e3157506001600160a01b03821615155b8015611e4857506001600160a01b03821661dead14155b8015611e5e5750600a54600160b81b900460ff16155b156121da57600a54600160a01b900460ff16611eff576001600160a01b0383166000908152601c602052604090205460ff1680611eb357506001600160a01b0382166000908152601c602052604090205460ff165b611eff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610afc565b600a54600160b01b900460ff168015611f2557506006546001600160a01b038481169116145b15611f7857600c5481611f3784610f6b565b611f419190613167565b1115611f785760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b6044820152606401610afc565b6001600160a01b0383166000908152601e602052604090205460ff168015611fb957506001600160a01b0382166000908152601d602052604090205460ff16155b1561209857600b5481111561202f5760405162461bcd60e51b815260206004820152603660248201527f45524332303a20427579207472616e7366657220616d6f756e742065786365656044820152753239903a34329036b0bc2a3930b739b0b1ba34b7b71760511b6064820152608401610afc565b600c5461203b83610f6b565b6120459083613167565b11156120935760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610afc565b6121da565b6001600160a01b0382166000908152601e602052604090205460ff1680156120d957506001600160a01b0383166000908152601d602052604090205460ff16155b1561215657600b548111156120935760405162461bcd60e51b815260206004820152603760248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e2e0000000000000000006064820152608401610afc565b6001600160a01b0382166000908152601d602052604090205460ff166121da57600c5461218283610f6b565b61218c9083613167565b11156121da5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610afc565b60006121e530610f6b565b600d54909150811080159081906122055750600a54600160a81b900460ff165b801561221b5750600a54600160b81b900460ff16155b801561224057506001600160a01b0385166000908152601e602052604090205460ff16155b801561226557506001600160a01b0385166000908152601c602052604090205460ff16155b801561228a57506001600160a01b0384166000908152601c602052604090205460ff16155b156122b857600a805460ff60b81b1916600160b81b1790556122aa612872565b600a805460ff60b81b191690555b600a546001600160a01b0386166000908152601c602052604090205460ff600160b81b90920482161591168061230657506001600160a01b0385166000908152601c602052604090205460ff165b1561230f575060005b6000811561255c576001600160a01b0386166000908152601e602052604090205460ff16801561234157506000601354115b156124305761236761271061236160135488612b3690919063ffffffff16565b90612b49565b90506013546016548261237a91906131e7565b61238491906131fe565b601a60008282546123959190613167565b90915550506013546014546123aa90836131e7565b6123b491906131fe565b601860008282546123c59190613167565b90915550506013546015546123da90836131e7565b6123e491906131fe565b601960008282546123f59190613167565b909155505060135460175461240a90836131e7565b61241491906131fe565b601b60008282546124259190613167565b9091555061253e9050565b6001600160a01b0387166000908152601e602052604090205460ff16801561245a57506000600e54115b1561253e5761247a612710612361600e5488612b3690919063ffffffff16565b9050600e546011548261248d91906131e7565b61249791906131fe565b601a60008282546124a89190613167565b9091555050600e54600f546124bd90836131e7565b6124c791906131fe565b601860008282546124d89190613167565b9091555050600e546010546124ed90836131e7565b6124f791906131fe565b601960008282546125089190613167565b9091555050600e5460125461251d90836131e7565b61252791906131fe565b601b60008282546125389190613167565b90915550505b801561254f5761254f8730836126a2565b6125598186613364565b94505b6125678787876126a2565b50505050505050565b6001600160a01b0382166125d05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610afc565b6001600160a01b038216600090815260208190526040902054818110156126445760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610afc565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b0383166126c85760405162461bcd60e51b8152600401610afc906132dc565b6001600160a01b0382166126ee5760405162461bcd60e51b8152600401610afc90613321565b6001600160a01b038316600090815260208190526040902054818110156127665760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610afc565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610aad565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061287d30610f6b565b90506000601b54601954601854601a546128979190613167565b6128a19190613167565b6128ab9190613167565b905060008215806128ba575081155b156128c457505050565b600d546128d290600a6131e7565b8311156128ea57600d546128e790600a6131e7565b92505b6000600283601a54866128fd91906131e7565b61290791906131fe565b61291191906131fe565b9050600061291f8583612b55565b90504761292b82612b61565b60006129374783612b55565b905060006129548761236160185485612b3690919063ffffffff16565b905060006129718861236160195486612b3690919063ffffffff16565b9050600061298e89612361601b5487612b3690919063ffffffff16565b90506000818361299e8688613364565b6129a89190613364565b6129b29190613364565b6000601a81905560188190556019819055601b55905087158015906129d75750600081115b15612a2a576129e68882612d21565b601a54604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612a77576040519150601f19603f3d011682016040523d82523d6000602084013e612a7c565b606091505b5050600a54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612acc576040519150601f19603f3d011682016040523d82523d6000602084013e612ad1565b606091505b5050600754604051919a506001600160a01b0316904790600081818185875af1925050503d8060008114612b21576040519150601f19603f3d011682016040523d82523d6000602084013e612b26565b606091505b5050505050505050505050505050565b6000612b4282846131e7565b9392505050565b6000612b4282846131fe565b6000612b428284613364565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b9657612b96613122565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c389190613256565b81600181518110612c4b57612c4b613122565b60200260200101906001600160a01b031690816001600160a01b031681525050612c96307f000000000000000000000000000000000000000000000000000000000000000084611b7a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612ceb908590600090869030904290600401613377565b600060405180830381600087803b158015612d0557600080fd5b505af1158015612d19573d6000803e3d6000fd5b505050505050565b612d4c307f000000000000000000000000000000000000000000000000000000000000000084611b7a565b60095460405163f305d71960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263f305d719928592612daa923092899260009283929116904290600401613273565b60606040518083038185885af1158015612dc8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114b891906132ae565b600060208083528351808285015260005b81811015612e1a57858101830151858201604001528201612dfe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1157600080fd5b60008060408385031215612e6357600080fd5b8235612e6e81612e3b565b946020939093013593505050565b60008083601f840112612e8e57600080fd5b50813567ffffffffffffffff811115612ea657600080fd5b6020830191508360208260051b8501011115612ec157600080fd5b9250929050565b8015158114610c1157600080fd5b600080600060408486031215612eeb57600080fd5b833567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e7c565b9094509250506020840135612f2281612ec8565b809150509250925092565b60008060008060808587031215612f4357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612f7157600080fd5b8135612b4281612e3b565b600080600060608486031215612f9157600080fd5b8335612f9c81612e3b565b92506020840135612fac81612e3b565b929592945050506040919091013590565b600060208284031215612fcf57600080fd5b5035919050565b60008060008060408587031215612fec57600080fd5b843567ffffffffffffffff8082111561300457600080fd5b61301088838901612e7c565b9096509450602087013591508082111561302957600080fd5b5061303687828801612e7c565b95989497509550505050565b6000806040838503121561305557600080fd5b823561306081612e3b565b9150602083013561307081612ec8565b809150509250929050565b6000806040838503121561308e57600080fd5b50508035926020909101359150565b600080604083850312156130b057600080fd5b82356130bb81612e3b565b9150602083013561307081612e3b565b6000602082840312156130dd57600080fd5b8135612b4281612ec8565b600181811c908216806130fc57607f821691505b60208210810361311c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161316057613160613138565b5060010190565b808201808211156109c3576109c3613138565b60208082526023908201527f45524332303a204d757374206b6565702066656573206174203525206f72206c60408201526265737360e81b606082015260800190565b60208082526010908201526f045524332303a204164647265737320360841b604082015260600190565b80820281158282048414176109c3576109c3613138565b60008261321b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561323257600080fd5b5051919050565b60006020828403121561324b57600080fd5b8151612b4281612ec8565b60006020828403121561326857600080fd5b8151612b4281612e3b565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156132c357600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109c3576109c3613138565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133c75784516001600160a01b0316835293830193918301916001016133a2565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122093b8cd4ac432065891afe6b6b794f6969b19c7b4bd7c5430bbd85929b002284f64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102cd5760003560e01c80637571336a11610175578063c24a7a8c116100dc578063dd62ed3e11610095578063e7b94df41161006f578063e7b94df4146108b2578063e8078d94146108d2578063f2fde38b146108e7578063f8b45b051461090757600080fd5b8063dd62ed3e1461085c578063e01af92c1461087c578063e2f456051461089c57600080fd5b8063c24a7a8c146107b0578063c3f70b52146107d0578063cb963728146107e6578063d469801614610806578063d7d1d10e14610826578063d85ba0631461084657600080fd5b8063a457c2d71161012e578063a457c2d7146106ef578063a9059cbb1461070f578063afa4f3b21461072f578063bbc0c7421461074f578063c024666814610770578063c04a54141461079057600080fd5b80637571336a1461064657806375f0a87414610666578063860a32ec146106865780638a8c523c146106a75780638da5cb5b146106bc57806395d89b41146106da57600080fd5b806342966c68116102345780636a486a8e116101ed57806370a08231116101c757806370a08231146105dc578063715018a6146105fc57806372ac248614610611578063751039fc1461063157600080fd5b80636a486a8e146105855780636c5b28551461059b5780636ddd1713146105bb57600080fd5b806342966c68146104ac57806349bd5a5e146104cc5780634fbee193146104ec5780635a96cdd7146105255780635d098b3814610545578063672434821461056557600080fd5b806318d9ceae1161028657806318d9ceae146103e157806323b872dd1461041a57806327c8f8351461043a578063296f0a0c14610450578063313ce56714610470578063395093511461048c57600080fd5b806306fdde03146102d9578063095ea7b314610304578063155ca7c1146103345780631694505e14610356578063178d9b8e146103a257806318160ddd146103c257600080fd5b366102d457005b600080fd5b3480156102e557600080fd5b506102ee61091d565b6040516102fb9190612ded565b60405180910390f35b34801561031057600080fd5b5061032461031f366004612e50565b6109af565b60405190151581526020016102fb565b34801561034057600080fd5b5061035461034f366004612ed6565b6109c9565b005b34801561036257600080fd5b5061038a7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2481565b6040516001600160a01b0390911681526020016102fb565b3480156103ae57600080fd5b506103546103bd366004612f2d565b610ab3565b3480156103ce57600080fd5b506002545b6040519081526020016102fb565b3480156103ed57600080fd5b506103246103fc366004612f5f565b6001600160a01b03166000908152601d602052604090205460ff1690565b34801561042657600080fd5b50610324610435366004612f7c565b610b42565b34801561044657600080fd5b5061038a61dead81565b34801561045c57600080fd5b5061035461046b366004612f5f565b610b66565b34801561047c57600080fd5b50604051601281526020016102fb565b34801561049857600080fd5b506103246104a7366004612e50565b610be5565b3480156104b857600080fd5b506103546104c7366004612fbd565b610c07565b3480156104d857600080fd5b5060065461038a906001600160a01b031681565b3480156104f857600080fd5b50610324610507366004612f5f565b6001600160a01b03166000908152601c602052604090205460ff1690565b34801561053157600080fd5b50610354610540366004612f5f565b610c14565b34801561055157600080fd5b50610354610560366004612f5f565b610c93565b34801561057157600080fd5b50610354610580366004612fd6565b610d12565b34801561059157600080fd5b506103d360135481565b3480156105a757600080fd5b506103546105b6366004612f2d565b610ee5565b3480156105c757600080fd5b50600a5461032490600160a81b900460ff1681565b3480156105e857600080fd5b506103d36105f7366004612f5f565b610f6b565b34801561060857600080fd5b50610354610f86565b34801561061d57600080fd5b5061035461062c366004612f5f565b610f9a565b34801561063d57600080fd5b50610354611019565b34801561065257600080fd5b50610354610661366004613042565b611036565b34801561067257600080fd5b5060075461038a906001600160a01b031681565b34801561069257600080fd5b50600a5461032490600160b01b900460ff1681565b3480156106b357600080fd5b5061035461109e565b3480156106c857600080fd5b506005546001600160a01b031661038a565b3480156106e657600080fd5b506102ee611111565b3480156106fb57600080fd5b5061032461070a366004612e50565b611120565b34801561071b57600080fd5b5061032461072a366004612e50565b61119b565b34801561073b57600080fd5b5061035461074a366004612fbd565b6111a9565b34801561075b57600080fd5b50600a5461032490600160a01b900460ff1681565b34801561077c57600080fd5b5061035461078b366004613042565b6112e3565b34801561079c57600080fd5b5060085461038a906001600160a01b031681565b3480156107bc57600080fd5b506103546107cb36600461307b565b611343565b3480156107dc57600080fd5b506103d3600b5481565b3480156107f257600080fd5b50610354610801366004612f5f565b61145b565b34801561081257600080fd5b5060095461038a906001600160a01b031681565b34801561083257600080fd5b50610354610841366004612ed6565b611642565b34801561085257600080fd5b506103d3600e5481565b34801561086857600080fd5b506103d361087736600461309d565b611726565b34801561088857600080fd5b506103546108973660046130cb565b611751565b3480156108a857600080fd5b506103d3600d5481565b3480156108be57600080fd5b50600a5461038a906001600160a01b031681565b3480156108de57600080fd5b50610354611777565b3480156108f357600080fd5b50610354610902366004612f5f565b611b04565b34801561091357600080fd5b506103d3600c5481565b60606003805461092c906130e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610958906130e8565b80156109a55780601f1061097a576101008083540402835291602001916109a5565b820191906000526020600020905b81548152906001019060200180831161098857829003601f168201915b5050505050905090565b6000336109bd818585611b7a565b60019150505b92915050565b6109d1611c9e565b60005b82811015610aad5781601c60008686858181106109f3576109f3613122565b9050602002016020810190610a089190612f5f565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055838382818110610a4257610a42613122565b9050602002016020810190610a579190612f5f565b6001600160a01b03167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610a93911515815260200190565b60405180910390a280610aa58161314e565b9150506109d4565b50505050565b610abb611c9e565b6101f48183610aca8688613167565b610ad49190613167565b610ade9190613167565b1115610b055760405162461bcd60e51b8152600401610afc9061317a565b60405180910390fd5b600f8490556010839055601182905560128190558082610b258587613167565b610b2f9190613167565b610b399190613167565b600e5550505050565b600033610b50858285611cf8565b610b5b858585611d6c565b506001949350505050565b610b6e611c9e565b6001600160a01b038116610b945760405162461bcd60e51b8152600401610afc906131bd565b600980546001600160a01b038381166001600160a01b03198316811790935560405191169182917f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db90600090a35050565b6000336109bd818585610bf88383611726565b610c029190613167565b611b7a565b610c113382612570565b50565b610c1c611c9e565b6001600160a01b038116610c425760405162461bcd60e51b8152600401610afc906131bd565b600a80546001600160a01b038381166001600160a01b03198316811790935560405191169182917f1d41bf4c00c76809cb5e7130cd2384157e2281d2d2fce10ef79dbf3fbdd7232f90600090a35050565b610c9b611c9e565b6001600160a01b038116610cc15760405162461bcd60e51b8152600401610afc906131bd565b600780546001600160a01b038381166001600160a01b03198316811790935560405191169182917fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567490600090a35050565b610d1a611c9e565b60fa831115610d635760405162461bcd60e51b81526020600482015260156024820152744d6f7265207468616e203235302077616c6c65747360581b6044820152606401610afc565b828114610da95760405162461bcd60e51b8152602060048201526014602482015273098d2e6e840d8cadccee8d040dad2e6dac2e8c6d60631b6044820152606401610afc565b6000805b84811015610ded57838382818110610dc757610dc7613122565b9050602002013582610dd99190613167565b915080610de58161314e565b915050610dad565b5080610df833610f6b565b1015610e3e5760405162461bcd60e51b8152602060048201526015602482015274546f6b656e2062616c616e636520746f6f206c6f7760581b6044820152606401610afc565b60005b84811015610ea457610e9233878784818110610e5f57610e5f613122565b9050602002016020810190610e749190612f5f565b868685818110610e8657610e86613122565b905060200201356126a2565b80610e9c8161314e565b915050610e41565b5060408051858152602081018390527f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba95464910160405180910390a15050505050565b610eed611c9e565b6101f48183610efc8688613167565b610f069190613167565b610f109190613167565b1115610f2e5760405162461bcd60e51b8152600401610afc9061317a565b60148490556015839055601682905560178190558082610f4e8587613167565b610f589190613167565b610f629190613167565b60135550505050565b6001600160a01b031660009081526020819052604090205490565b610f8e611c9e565b610f9860006127cc565b565b610fa2611c9e565b6001600160a01b038116610fc85760405162461bcd60e51b8152600401610afc906131bd565b600880546001600160a01b038381166001600160a01b03198316811790935560405191169182917ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396590600090a35050565b611021611c9e565b600a805460ff60b01b19169055600254600c55565b61103e611c9e565b6001600160a01b0382166000818152601d6020908152604091829020805460ff191685151590811790915591519182527f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9291015b60405180910390a25050565b6110a6611c9e565b600a54600160a01b900460ff16156110fa5760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339030b63932b0b23c9030b1ba34bb329760491b6044820152606401610afc565b600a805461ffff60a01b191661010160a01b179055565b60606004805461092c906130e8565b6000338161112e8286611726565b90508381101561118e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610afc565b610b5b8286868403611b7a565b6000336109bd818585611d6c565b6111b1611c9e565b620186a06111be60025490565b6111c99060016131e7565b6111d391906131fe565b8110156112485760405162461bcd60e51b815260206004820152603c60248201527f45524332303a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610afc565b6103e861125460025490565b61125f9060056131e7565b61126991906131fe565b8111156112de5760405162461bcd60e51b815260206004820152603b60248201527f45524332303a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610afc565b600d55565b6112eb611c9e565b6001600160a01b0382166000818152601c6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101611092565b61134b611c9e565b6103e861135760025490565b6113629060056131e7565b61136c91906131fe565b8210156113cc5760405162461bcd60e51b815260206004820152602860248201527f45524332303a2043616e6e6f7420736574206d617854786e206c6f776572207460448201526768616e20302e352560c01b6064820152608401610afc565b6103e86113d860025490565b6113e39060056131e7565b6113ed91906131fe565b8110156114505760405162461bcd60e51b815260206004820152602b60248201527f45524332303a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e352560a81b6064820152608401610afc565b600b91909155600c55565b611463611c9e565b60006001600160a01b0382166114bf5760405133904790600081818185875af1925050503d80600081146114b3576040519150601f19603f3d011682016040523d82523d6000602084013e6114b8565b606091505b5050505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015611506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152a9190613220565b116115635760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610afc565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156115aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ce9190613220565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561161e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aad9190613239565b61164a611c9e565b60005b82811015610aad5781601d600086868581811061166c5761166c613122565b90506020020160208101906116819190612f5f565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558383828181106116bb576116bb613122565b90506020020160208101906116d09190612f5f565b6001600160a01b03167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928360405161170c911515815260200190565b60405180910390a28061171e8161314e565b91505061164d565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b611759611c9e565b600a8054911515600160a81b0260ff60a81b19909216919091179055565b61177f611c9e565b600a54600160a01b900460ff16156117d35760405162461bcd60e51b81526020600482015260176024820152762a3930b234b7339030b63932b0b23c9030b1ba34bb329760491b6044820152606401610afc565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118559190613256565b6001600160a01b031663c9c65396307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e69190613256565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611933573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119579190613256565b600680546001600160a01b0319166001600160a01b03929092169182179055611984903090600019611b7a565b60065460405163095ea7b360e01b81526001600160a01b037f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad248116600483015260001960248301529091169063095ea7b3906044016020604051808303816000875af11580156119f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1c9190613239565b50600654611a34906001600160a01b0316600161281e565b600654611a4b906001600160a01b03166001611036565b7f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b031663f305d7194730611a8530610f6b565b600080611a9a6005546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611abc96959493929190613273565b60606040518083038185885af1158015611ada573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611aff91906132ae565b505050565b611b0c611c9e565b6001600160a01b038116611b715760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610afc565b610c11816127cc565b6001600160a01b038316611bdc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610afc565b6001600160a01b038216611c3d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610afc565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b03163314610f985760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610afc565b6000611d048484611726565b90506000198114610aad5781811015611d5f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610afc565b610aad8484848403611b7a565b6001600160a01b038316611d925760405162461bcd60e51b8152600401610afc906132dc565b6001600160a01b038216611db85760405162461bcd60e51b8152600401610afc90613321565b80600003611dcc57611aff838360006126a2565b6005546001600160a01b03848116911614801590611df857506005546001600160a01b03838116911614155b8015611e1d57506001600160a01b0383166000908152601c602052604090205460ff16155b8015611e3157506001600160a01b03821615155b8015611e4857506001600160a01b03821661dead14155b8015611e5e5750600a54600160b81b900460ff16155b156121da57600a54600160a01b900460ff16611eff576001600160a01b0383166000908152601c602052604090205460ff1680611eb357506001600160a01b0382166000908152601c602052604090205460ff165b611eff5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610afc565b600a54600160b01b900460ff168015611f2557506006546001600160a01b038481169116145b15611f7857600c5481611f3784610f6b565b611f419190613167565b1115611f785760405162461bcd60e51b8152602060048201526006602482015265119bdc989a5960d21b6044820152606401610afc565b6001600160a01b0383166000908152601e602052604090205460ff168015611fb957506001600160a01b0382166000908152601d602052604090205460ff16155b1561209857600b5481111561202f5760405162461bcd60e51b815260206004820152603660248201527f45524332303a20427579207472616e7366657220616d6f756e742065786365656044820152753239903a34329036b0bc2a3930b739b0b1ba34b7b71760511b6064820152608401610afc565b600c5461203b83610f6b565b6120459083613167565b11156120935760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610afc565b6121da565b6001600160a01b0382166000908152601e602052604090205460ff1680156120d957506001600160a01b0383166000908152601d602052604090205460ff16155b1561215657600b548111156120935760405162461bcd60e51b815260206004820152603760248201527f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e2e0000000000000000006064820152608401610afc565b6001600160a01b0382166000908152601d602052604090205460ff166121da57600c5461218283610f6b565b61218c9083613167565b11156121da5760405162461bcd60e51b815260206004820152601a60248201527f45524332303a204d61782077616c6c65742065786365656465640000000000006044820152606401610afc565b60006121e530610f6b565b600d54909150811080159081906122055750600a54600160a81b900460ff165b801561221b5750600a54600160b81b900460ff16155b801561224057506001600160a01b0385166000908152601e602052604090205460ff16155b801561226557506001600160a01b0385166000908152601c602052604090205460ff16155b801561228a57506001600160a01b0384166000908152601c602052604090205460ff16155b156122b857600a805460ff60b81b1916600160b81b1790556122aa612872565b600a805460ff60b81b191690555b600a546001600160a01b0386166000908152601c602052604090205460ff600160b81b90920482161591168061230657506001600160a01b0385166000908152601c602052604090205460ff165b1561230f575060005b6000811561255c576001600160a01b0386166000908152601e602052604090205460ff16801561234157506000601354115b156124305761236761271061236160135488612b3690919063ffffffff16565b90612b49565b90506013546016548261237a91906131e7565b61238491906131fe565b601a60008282546123959190613167565b90915550506013546014546123aa90836131e7565b6123b491906131fe565b601860008282546123c59190613167565b90915550506013546015546123da90836131e7565b6123e491906131fe565b601960008282546123f59190613167565b909155505060135460175461240a90836131e7565b61241491906131fe565b601b60008282546124259190613167565b9091555061253e9050565b6001600160a01b0387166000908152601e602052604090205460ff16801561245a57506000600e54115b1561253e5761247a612710612361600e5488612b3690919063ffffffff16565b9050600e546011548261248d91906131e7565b61249791906131fe565b601a60008282546124a89190613167565b9091555050600e54600f546124bd90836131e7565b6124c791906131fe565b601860008282546124d89190613167565b9091555050600e546010546124ed90836131e7565b6124f791906131fe565b601960008282546125089190613167565b9091555050600e5460125461251d90836131e7565b61252791906131fe565b601b60008282546125389190613167565b90915550505b801561254f5761254f8730836126a2565b6125598186613364565b94505b6125678787876126a2565b50505050505050565b6001600160a01b0382166125d05760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610afc565b6001600160a01b038216600090815260208190526040902054818110156126445760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610afc565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b0383166126c85760405162461bcd60e51b8152600401610afc906132dc565b6001600160a01b0382166126ee5760405162461bcd60e51b8152600401610afc90613321565b6001600160a01b038316600090815260208190526040902054818110156127665760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610afc565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610aad565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000818152601e6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b600061287d30610f6b565b90506000601b54601954601854601a546128979190613167565b6128a19190613167565b6128ab9190613167565b905060008215806128ba575081155b156128c457505050565b600d546128d290600a6131e7565b8311156128ea57600d546128e790600a6131e7565b92505b6000600283601a54866128fd91906131e7565b61290791906131fe565b61291191906131fe565b9050600061291f8583612b55565b90504761292b82612b61565b60006129374783612b55565b905060006129548761236160185485612b3690919063ffffffff16565b905060006129718861236160195486612b3690919063ffffffff16565b9050600061298e89612361601b5487612b3690919063ffffffff16565b90506000818361299e8688613364565b6129a89190613364565b6129b29190613364565b6000601a81905560188190556019819055601b55905087158015906129d75750600081115b15612a2a576129e68882612d21565b601a54604080518981526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6008546040516001600160a01b03909116908490600081818185875af1925050503d8060008114612a77576040519150601f19603f3d011682016040523d82523d6000602084013e612a7c565b606091505b5050600a54604051919a506001600160a01b0316908390600081818185875af1925050503d8060008114612acc576040519150601f19603f3d011682016040523d82523d6000602084013e612ad1565b606091505b5050600754604051919a506001600160a01b0316904790600081818185875af1925050503d8060008114612b21576040519150601f19603f3d011682016040523d82523d6000602084013e612b26565b606091505b5050505050505050505050505050565b6000612b4282846131e7565b9392505050565b6000612b4282846131fe565b6000612b428284613364565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612b9657612b96613122565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad246001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c389190613256565b81600181518110612c4b57612c4b613122565b60200260200101906001600160a01b031690816001600160a01b031681525050612c96307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2484611b7a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad24169063791ac94790612ceb908590600090869030904290600401613377565b600060405180830381600087803b158015612d0557600080fd5b505af1158015612d19573d6000803e3d6000fd5b505050505050565b612d4c307f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2484611b7a565b60095460405163f305d71960e01b81526001600160a01b037f0000000000000000000000004752ba5dbc23f44d87826276bf6fd6b1c372ad2481169263f305d719928592612daa923092899260009283929116904290600401613273565b60606040518083038185885af1158015612dc8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906114b891906132ae565b600060208083528351808285015260005b81811015612e1a57858101830151858201604001528201612dfe565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1157600080fd5b60008060408385031215612e6357600080fd5b8235612e6e81612e3b565b946020939093013593505050565b60008083601f840112612e8e57600080fd5b50813567ffffffffffffffff811115612ea657600080fd5b6020830191508360208260051b8501011115612ec157600080fd5b9250929050565b8015158114610c1157600080fd5b600080600060408486031215612eeb57600080fd5b833567ffffffffffffffff811115612f0257600080fd5b612f0e86828701612e7c565b9094509250506020840135612f2281612ec8565b809150509250925092565b60008060008060808587031215612f4357600080fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612f7157600080fd5b8135612b4281612e3b565b600080600060608486031215612f9157600080fd5b8335612f9c81612e3b565b92506020840135612fac81612e3b565b929592945050506040919091013590565b600060208284031215612fcf57600080fd5b5035919050565b60008060008060408587031215612fec57600080fd5b843567ffffffffffffffff8082111561300457600080fd5b61301088838901612e7c565b9096509450602087013591508082111561302957600080fd5b5061303687828801612e7c565b95989497509550505050565b6000806040838503121561305557600080fd5b823561306081612e3b565b9150602083013561307081612ec8565b809150509250929050565b6000806040838503121561308e57600080fd5b50508035926020909101359150565b600080604083850312156130b057600080fd5b82356130bb81612e3b565b9150602083013561307081612e3b565b6000602082840312156130dd57600080fd5b8135612b4281612ec8565b600181811c908216806130fc57607f821691505b60208210810361311c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161316057613160613138565b5060010190565b808201808211156109c3576109c3613138565b60208082526023908201527f45524332303a204d757374206b6565702066656573206174203525206f72206c60408201526265737360e81b606082015260800190565b60208082526010908201526f045524332303a204164647265737320360841b604082015260600190565b80820281158282048414176109c3576109c3613138565b60008261321b57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561323257600080fd5b5051919050565b60006020828403121561324b57600080fd5b8151612b4281612ec8565b60006020828403121561326857600080fd5b8151612b4281612e3b565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156132c357600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109c3576109c3613138565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133c75784516001600160a01b0316835293830193918301916001016133a2565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122093b8cd4ac432065891afe6b6b794f6969b19c7b4bd7c5430bbd85929b002284f64736f6c63430008130033
Deployed Bytecode Sourcemap
34670:19032:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9405:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11906:242;;;;;;;;;;-1:-1:-1;11906:242:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;11906:242:0;1023:187:1;44780:296:0;;;;;;;;;;-1:-1:-1;44780:296:0;;;;;:::i;:::-;;:::i;:::-;;34750:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2472:32:1;;;2454:51;;2442:2;2427:18;34750:51:0;2281:230:1;41454:620:0;;;;;;;;;;-1:-1:-1;41454:620:0;;;;;:::i;:::-;;:::i;10534:108::-;;;;;;;;;;-1:-1:-1;10622:12:0;;10534:108;;;3052:25:1;;;3040:2;3025:18;10534:108:0;2906:177:1;45560:178:0;;;;;;;;;;-1:-1:-1;45560:178:0;;;;;:::i;:::-;-1:-1:-1;;;;;45692:38:0;45663:4;45692:38;;;:29;:38;;;;;;;;;45560:178;12728:295;;;;;;;;;;-1:-1:-1;12728:295:0;;;;;:::i;:::-;;:::i;34994:53::-;;;;;;;;;;;;35040:6;34994:53;;43425:306;;;;;;;;;;-1:-1:-1;43425:306:0;;;;;:::i;:::-;;:::i;10376:93::-;;;;;;;;;;-1:-1:-1;10376:93:0;;10459:2;4151:36:1;;4139:2;4124:18;10376:93:0;4009:184:1;13432:270:0;;;;;;;;;;-1:-1:-1;13432:270:0;;;;;:::i;:::-;;:::i;39172:81::-;;;;;;;;;;-1:-1:-1;39172:81:0;;;;;:::i;:::-;;:::i;34808:28::-;;;;;;;;;;-1:-1:-1;34808:28:0;;;;-1:-1:-1;;;;;34808:28:0;;;45746:126;;;;;;;;;;-1:-1:-1;45746:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;45836:28:0;45812:4;45836:28;;;:19;:28;;;;;;;;;45746:126;43739:298;;;;;;;;;;-1:-1:-1;43739:298:0;;;;;:::i;:::-;;:::i;42781:306::-;;;;;;;;;;-1:-1:-1;42781:306:0;;;;;:::i;:::-;;:::i;52992:707::-;;;;;;;;;;-1:-1:-1;52992:707:0;;;;;:::i;:::-;;:::i;35484:28::-;;;;;;;;;;;;;;;;42082:691;;;;;;;;;;-1:-1:-1;42082:691:0;;;;;:::i;:::-;;:::i;35088:23::-;;;;;;;;;;-1:-1:-1;35088:23:0;;;;-1:-1:-1;;;35088:23:0;;;;;;10705:177;;;;;;;;;;-1:-1:-1;10705:177:0;;;;;:::i;:::-;;:::i;2785:103::-;;;;;;;;;;;;;:::i;43095:322::-;;;;;;;;;;-1:-1:-1;43095:322:0;;;;;:::i;:::-;;:::i;40290:112::-;;;;;;;;;;;;;:::i;44045:218::-;;;;;;;;;;-1:-1:-1;44045:218:0;;;;;:::i;:::-;;:::i;34845:30::-;;;;;;;;;;-1:-1:-1;34845:30:0;;;;-1:-1:-1;;;;;34845:30:0;;;35118:26;;;;;;;;;;-1:-1:-1;35118:26:0;;;;-1:-1:-1;;;35118:26:0;;;;;;40111:171;;;;;;;;;;;;;:::i;2144:87::-;;;;;;;;;;-1:-1:-1;2217:6:0;;-1:-1:-1;;;;;2217:6:0;2144:87;;9624:104;;;;;;;;;;;;;:::i;14205:505::-;;;;;;;;;;-1:-1:-1;14205:505:0;;;;;:::i;:::-;;:::i;11088:234::-;;;;;;;;;;-1:-1:-1;11088:234:0;;;;;:::i;:::-;;:::i;40509:425::-;;;;;;;;;;-1:-1:-1;40509:425:0;;;;;:::i;:::-;;:::i;35056:25::-;;;;;;;;;;-1:-1:-1;35056:25:0;;;;-1:-1:-1;;;35056:25:0;;;;;;44599:173;;;;;;;;;;-1:-1:-1;44599:173:0;;;;;:::i;:::-;;:::i;34882:32::-;;;;;;;;;;-1:-1:-1;34882:32:0;;;;-1:-1:-1;;;;;34882:32:0;;;40942:504;;;;;;;;;;-1:-1:-1;40942:504:0;;;;;:::i;:::-;;:::i;35182:29::-;;;;;;;;;;;;;;;;45084:468;;;;;;;;;;-1:-1:-1;45084:468:0;;;;;:::i;:::-;;:::i;34921:30::-;;;;;;;;;;-1:-1:-1;34921:30:0;;;;-1:-1:-1;;;;;34921:30:0;;;44271:320;;;;;;;;;;-1:-1:-1;44271:320:0;;;;;:::i;:::-;;:::i;35291:27::-;;;;;;;;;;;;;;;;11385:201;;;;;;;;;;-1:-1:-1;11385:201:0;;;;;:::i;:::-;;:::i;40410:91::-;;;;;;;;;;-1:-1:-1;40410:91:0;;;;;:::i;:::-;;:::i;35249:33::-;;;;;;;;;;;;;;;;34958:29;;;;;;;;;;-1:-1:-1;34958:29:0;;;;-1:-1:-1;;;;;34958:29:0;;;39261:842;;;;;;;;;;;;;:::i;3043:238::-;;;;;;;;;;-1:-1:-1;3043:238:0;;;;;:::i;:::-;;:::i;35218:24::-;;;;;;;;;;;;;;;;9405:100;9459:13;9492:5;9485:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9405:100;:::o;11906:242::-;12025:4;769:10;12086:32;769:10;12102:7;12111:6;12086:8;:32::i;:::-;12136:4;12129:11;;;11906:242;;;;;:::o;44780:296::-;2030:13;:11;:13::i;:::-;44906:9:::1;44901:168;44921:19:::0;;::::1;44901:168;;;44997:5;44962:19;:32;44982:8;;44991:1;44982:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44962:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44962:32:0;:40;;-1:-1:-1;;44962:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45038:8;;45047:1;45038:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;45022:35:0::1;;45051:5;45022:35;;;;1188:14:1::0;1181:22;1163:41;;1151:2;1136:18;;1023:187;45022:35:0::1;;;;;;;;44942:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44901:168;;;;44780:296:::0;;;:::o;41454:620::-;2030:13;:11;:13::i;:::-;41726:3:::1;41710:12:::0;41694:13;41660:31:::1;41676:15:::0;41660:13;:31:::1;:::i;:::-;:47;;;;:::i;:::-;:62;;;;:::i;:::-;:69;;41638:154;;;;-1:-1:-1::0;;;41638:154:0::1;;;;;;;:::i;:::-;;;;;;;;;41803:16;:32:::0;;;41846:18:::1;:36:::0;;;41893:16:::1;:32:::0;;;41936:15:::1;:30:::0;;;41954:12;41912:13;41992:37:::1;41867:15:::0;41822:13;41992:37:::1;:::i;:::-;:56;;;;:::i;:::-;:74;;;;:::i;:::-;41977:12;:89:::0;-1:-1:-1;;;;41454:620:0:o;12728:295::-;12859:4;769:10;12917:38;12933:4;769:10;12948:6;12917:15;:38::i;:::-;12966:27;12976:4;12982:2;12986:6;12966:9;:27::i;:::-;-1:-1:-1;13011:4:0;;12728:295;-1:-1:-1;;;;12728:295:0:o;43425:306::-;2030:13;:11;:13::i;:::-;-1:-1:-1;;;;;43515:30:0;::::1;43507:59;;;;-1:-1:-1::0;;;43507:59:0::1;;;;;;;:::i;:::-;43597:15;::::0;;-1:-1:-1;;;;;43623:34:0;;::::1;-1:-1:-1::0;;;;;;43623:34:0;::::1;::::0;::::1;::::0;;;43673:50:::1;::::0;43597:15;::::1;::::0;;;43673:50:::1;::::0;43577:17:::1;::::0;43673:50:::1;43496:235;43425:306:::0;:::o;13432:270::-;13547:4;769:10;13608:64;769:10;13624:7;13661:10;13633:25;769:10;13624:7;13633:9;:25::i;:::-;:38;;;;:::i;:::-;13608:8;:64::i;39172:81::-;39220:25;39226:10;39238:6;39220:5;:25::i;:::-;39172:81;:::o;43739:298::-;2030:13;:11;:13::i;:::-;-1:-1:-1;;;;;43827:29:0;::::1;43819:58;;;;-1:-1:-1::0;;;43819:58:0::1;;;;;;;:::i;:::-;43908:14;::::0;;-1:-1:-1;;;;;43933:32:0;;::::1;-1:-1:-1::0;;;;;;43933:32:0;::::1;::::0;::::1;::::0;;;43981:48:::1;::::0;43908:14;::::1;::::0;;;43981:48:::1;::::0;43888:17:::1;::::0;43981:48:::1;43808:229;43739:298:::0;:::o;42781:306::-;2030:13;:11;:13::i;:::-;-1:-1:-1;;;;;42871:30:0;::::1;42863:59;;;;-1:-1:-1::0;;;42863:59:0::1;;;;;;;:::i;:::-;42953:15;::::0;;-1:-1:-1;;;;;42979:34:0;;::::1;-1:-1:-1::0;;;;;;42979:34:0;::::1;::::0;::::1;::::0;;;43029:50:::1;::::0;42953:15;::::1;::::0;;;43029:50:::1;::::0;42933:17:::1;::::0;43029:50:::1;42852:235;42781:306:::0;:::o;52992:707::-;2030:13;:11;:13::i;:::-;53130:3:::1;53110:23:::0;::::1;;53102:56;;;::::0;-1:-1:-1;;;53102:56:0;;8310:2:1;53102:56:0::1;::::0;::::1;8292:21:1::0;8349:2;8329:18;;;8322:30;-1:-1:-1;;;8368:18:1;;;8361:51;8429:18;;53102:56:0::1;8108:345:1::0;53102:56:0::1;53177:39:::0;;::::1;53169:71;;;::::0;-1:-1:-1;;;53169:71:0;;8660:2:1;53169:71:0::1;::::0;::::1;8642:21:1::0;8699:2;8679:18;;;8672:30;-1:-1:-1;;;8718:18:1;;;8711:50;8778:18;;53169:71:0::1;8458:344:1::0;53169:71:0::1;53253:20;53292:6:::0;53288:98:::1;53302:20:::0;;::::1;53288:98;;;53359:12;;53372:1;53359:15;;;;;;;:::i;:::-;;;;;;;53343:31;;;;;:::i;:::-;::::0;-1:-1:-1;53324:3:0;::::1;::::0;::::1;:::i;:::-;;;;53288:98;;;;53435:12;53410:21;53420:10;53410:9;:21::i;:::-;:37;;53402:71;;;::::0;-1:-1:-1;;;53402:71:0;;9009:2:1;53402:71:0::1;::::0;::::1;8991:21:1::0;9048:2;9028:18;;;9021:30;-1:-1:-1;;;9067:18:1;;;9060:51;9128:18;;53402:71:0::1;8807:345:1::0;53402:71:0::1;53490:6;53486:140;53500:20:::0;;::::1;53486:140;;;53554:58;53570:10;53582:9;;53592:1;53582:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;53596;;53609:1;53596:15;;;;;;;:::i;:::-;;;;;;;53554;:58::i;:::-;53522:3:::0;::::1;::::0;::::1;:::i;:::-;;;;53486:140;;;-1:-1:-1::0;53643:48:0::1;::::0;;9331:25:1;;;9387:2;9372:18;;9365:34;;;53643:48:0::1;::::0;9304:18:1;53643:48:0::1;;;;;;;53091:608;52992:707:::0;;;;:::o;42082:691::-;2030:13;:11;:13::i;:::-;42355:3:::1;42339:12:::0;42323:13;42289:31:::1;42305:15:::0;42289:13;:31:::1;:::i;:::-;:47;;;;:::i;:::-;:62;;;;:::i;:::-;:69;;42267:154;;;;-1:-1:-1::0;;;42267:154:0::1;;;;;;;:::i;:::-;42432:17;:33:::0;;;42476:19:::1;:37:::0;;;42524:17:::1;:33:::0;;;42568:16:::1;:31:::0;;;42587:12;42544:13;42639:52:::1;42498:15:::0;42452:13;42639:52:::1;:::i;:::-;:85;;;;:::i;:::-;:117;;;;:::i;:::-;42610:13;:146:::0;-1:-1:-1;;;;42082:691:0:o;10705:177::-;-1:-1:-1;;;;;10856:18:0;10824:7;10856:18;;;;;;;;;;;;10705:177::o;2785:103::-;2030:13;:11;:13::i;:::-;2850:30:::1;2877:1;2850:18;:30::i;:::-;2785:103::o:0;43095:322::-;2030:13;:11;:13::i;:::-;-1:-1:-1;;;;;43189:32:0;::::1;43181:61;;;;-1:-1:-1::0;;;43181:61:0::1;;;;;;;:::i;:::-;43273:17;::::0;;-1:-1:-1;;;;;43301:38:0;;::::1;-1:-1:-1::0;;;;;;43301:38:0;::::1;::::0;::::1;::::0;;;43355:54:::1;::::0;43273:17;::::1;::::0;;;43355:54:::1;::::0;43253:17:::1;::::0;43355:54:::1;43170:247;43095:322:::0;:::o;40290:112::-;2030:13;:11;:13::i;:::-;40343:7:::1;:15:::0;;-1:-1:-1;;;;40343:15:0::1;::::0;;10622:12;;40369:9:::1;:25:::0;40290:112::o;44045:218::-;2030:13;:11;:13::i;:::-;-1:-1:-1;;;;;44160:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:46;;-1:-1:-1;;44160:46:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44222:33;;1163:41:1;;;44222:33:0::1;::::0;1136:18:1;44222:33:0::1;;;;;;;;44045:218:::0;;:::o;40111:171::-;2030:13;:11;:13::i;:::-;40173::::1;::::0;-1:-1:-1;;;40173:13:0;::::1;;;40172:14;40164:50;;;::::0;-1:-1:-1;;;40164:50:0;;9612:2:1;40164:50:0::1;::::0;::::1;9594:21:1::0;9651:2;9631:18;;;9624:30;-1:-1:-1;;;9670:18:1;;;9663:53;9733:18;;40164:50:0::1;9410:347:1::0;40164:50:0::1;40225:13;:20:::0;;-1:-1:-1;;;;40256:18:0;-1:-1:-1;;;40256:18:0;;;40111:171::o;9624:104::-;9680:13;9713:7;9706:14;;;;;:::i;14205:505::-;14325:4;769:10;14325:4;14413:25;769:10;14430:7;14413:9;:25::i;:::-;14386:52;;14491:15;14471:16;:35;;14449:122;;;;-1:-1:-1;;;14449:122:0;;9964:2:1;14449:122:0;;;9946:21:1;10003:2;9983:18;;;9976:30;10042:34;10022:18;;;10015:62;-1:-1:-1;;;10093:18:1;;;10086:35;10138:19;;14449:122:0;9762:401:1;14449:122:0;14607:60;14616:5;14623:7;14651:15;14632:16;:34;14607:8;:60::i;11088:234::-;11203:4;769:10;11264:28;769:10;11281:2;11285:6;11264:9;:28::i;40509:425::-;2030:13;:11;:13::i;:::-;40638:6:::1;40617:13;10622:12:::0;;;10534:108;40617:13:::1;:17;::::0;40633:1:::1;40617:17;:::i;:::-;40616:28;;;;:::i;:::-;40606:6;:38;;40584:148;;;::::0;-1:-1:-1;;;40584:148:0;;10765:2:1;40584:148:0::1;::::0;::::1;10747:21:1::0;10804:2;10784:18;;;10777:30;10843:34;10823:18;;;10816:62;10914:30;10894:18;;;10887:58;10962:19;;40584:148:0::1;10563:424:1::0;40584:148:0::1;40797:4;40776:13;10622:12:::0;;;10534:108;40776:13:::1;:17;::::0;40792:1:::1;40776:17;:::i;:::-;40775:26;;;;:::i;:::-;40765:6;:36;;40743:145;;;::::0;-1:-1:-1;;;40743:145:0;;11194:2:1;40743:145:0::1;::::0;::::1;11176:21:1::0;11233:2;11213:18;;;11206:30;11272:34;11252:18;;;11245:62;11343:29;11323:18;;;11316:57;11390:19;;40743:145:0::1;10992:423:1::0;40743:145:0::1;40899:18;:27:::0;40509:425::o;44599:173::-;2030:13;:11;:13::i;:::-;-1:-1:-1;;;;;44681:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:36;;-1:-1:-1;;44681:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;44733:31;;1163:41:1;;;44733:31:0::1;::::0;1136:18:1;44733:31:0::1;1023:187:1::0;40942:504:0;2030:13;:11;:13::i;:::-;41143:4:::1;41122:13;10622:12:::0;;;10534:108;41122:13:::1;:17;::::0;41138:1:::1;41122:17;:::i;:::-;41121:26;;;;:::i;:::-;41101:15;:47;;41079:137;;;::::0;-1:-1:-1;;;41079:137:0;;11622:2:1;41079:137:0::1;::::0;::::1;11604:21:1::0;11661:2;11641:18;;;11634:30;11700:34;11680:18;;;11673:62;-1:-1:-1;;;11751:18:1;;;11744:38;11799:19;;41079:137:0::1;11420:404:1::0;41079:137:0::1;41286:4;41265:13;10622:12:::0;;;10534:108;41265:13:::1;:17;::::0;41281:1:::1;41265:17;:::i;:::-;41264:26;;;;:::i;:::-;41249:10;:42;;41227:135;;;::::0;-1:-1:-1;;;41227:135:0;;12031:2:1;41227:135:0::1;::::0;::::1;12013:21:1::0;12070:2;12050:18;;;12043:30;12109:34;12089:18;;;12082:62;-1:-1:-1;;;12160:18:1;;;12153:41;12211:19;;41227:135:0::1;11829:407:1::0;41227:135:0::1;41373:14;:32:::0;;;;41416:9:::1;:22:::0;40942:504::o;45084:468::-;2030:13;:11;:13::i;:::-;45154:12:::1;-1:-1:-1::0;;;;;45181:17:0;::::1;45177:368;;45227:90;::::0;45235:10:::1;::::0;45277:21:::1;::::0;45227:90:::1;::::0;;;45277:21;45235:10;45227:90:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;45084:468:0:o;45177:368::-:1;45356:36;::::0;-1:-1:-1;;;45356:36:0;;45386:4:::1;45356:36;::::0;::::1;2454:51:1::0;45395:1:0::1;::::0;-1:-1:-1;;;;;45356:21:0;::::1;::::0;::::1;::::0;2427:18:1;;45356:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;45348:62;;;::::0;-1:-1:-1;;;45348:62:0;;12842:2:1;45348:62:0::1;::::0;::::1;12824:21:1::0;12881:1;12861:18;;;12854:29;-1:-1:-1;;;12899:18:1;;;12892:39;12948:18;;45348:62:0::1;12640:332:1::0;45348:62:0::1;45442:36;::::0;-1:-1:-1;;;45442:36:0;;45472:4:::1;45442:36;::::0;::::1;2454:51:1::0;45425:14:0::1;::::0;-1:-1:-1;;;;;45442:21:0;::::1;::::0;::::1;::::0;2427:18:1;;45442:36:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45493:40;::::0;-1:-1:-1;;;45493:40:0;;45514:10:::1;45493:40;::::0;::::1;13151:51:1::0;13218:18;;;13211:34;;;45425:53:0;;-1:-1:-1;;;;;;45493:20:0;::::1;::::0;::::1;::::0;13124:18:1;;45493:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;44271:320::-:0;2030:13;:11;:13::i;:::-;44409:9:::1;44404:180;44424:19:::0;;::::1;44404:180;;;44510:5;44465:29;:42;44495:8;;44504:1;44495:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44465:42:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44465:42:0;:50;;-1:-1:-1;;44465:50:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44553:8;;44562:1;44553:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44535:37:0::1;;44566:5;44535:37;;;;1188:14:1::0;1181:22;1163:41;;1151:2;1136:18;;1023:187;44535:37:0::1;;;;;;;;44445:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44404:180;;11385:201:::0;-1:-1:-1;;;;;11551:18:0;;;11519:7;11551:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11385:201::o;40410:91::-;2030:13;:11;:13::i;:::-;40474:11:::1;:19:::0;;;::::1;;-1:-1:-1::0;;;40474:19:0::1;-1:-1:-1::0;;;;40474:19:0;;::::1;::::0;;;::::1;::::0;;40410:91::o;39261:842::-;2030:13;:11;:13::i;:::-;39322::::1;::::0;-1:-1:-1;;;39322:13:0;::::1;;;39321:14;39313:50;;;::::0;-1:-1:-1;;;39313:50:0;;9612:2:1;39313:50:0::1;::::0;::::1;9594:21:1::0;9651:2;9631:18;;;9624:30;-1:-1:-1;;;9670:18:1;;;9663:53;9733:18;;39313:50:0::1;9410:347:1::0;39313:50:0::1;39410:15;-1:-1:-1::0;;;;;39410:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39392:55:0::1;;39470:4;39490:15;-1:-1:-1::0;;;;;39490:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39392:131;::::0;-1:-1:-1;;;;;;39392:131:0::1;::::0;;;;;;-1:-1:-1;;;;;13992:15:1;;;39392:131:0::1;::::0;::::1;13974:34:1::0;14044:15;;14024:18;;;14017:43;13909:18;;39392:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39376:13;:147:::0;;-1:-1:-1;;;;;;39376:147:0::1;-1:-1:-1::0;;;;;39376:147:0;;;::::1;::::0;;::::1;::::0;;39534:66:::1;::::0;39551:4:::1;::::0;-1:-1:-1;;39534:8:0::1;:66::i;:::-;39618:13;::::0;39611:111:::1;::::0;-1:-1:-1;;;39611:111:0;;-1:-1:-1;;;;;39663:15:0::1;13169:32:1::0;;39611:111:0::1;::::0;::::1;13151:51:1::0;-1:-1:-1;;13218:18:1;;;13211:34;39618:13:0;;::::1;::::0;39611:29:::1;::::0;13124:18:1;;39611:111:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;39772:13:0::1;::::0;39735:58:::1;::::0;-1:-1:-1;;;;;39772:13:0::1;::::0;39735:28:::1;:58::i;:::-;39838:13;::::0;39804:55:::1;::::0;-1:-1:-1;;;;;39838:13:0::1;::::0;39804:25:::1;:55::i;:::-;39872:15;-1:-1:-1::0;;;;;39872:31:0::1;;39911:21;39956:4;39976:24;39994:4;39976:9;:24::i;:::-;40015:1;40031::::0;40047:7:::1;2217:6:::0;;-1:-1:-1;;;;;2217:6:0;;2144:87;40047:7:::1;40069:15;39872:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39261:842::o:0;3043:238::-;2030:13;:11;:13::i;:::-;-1:-1:-1;;;;;3146:22:0;::::1;3124:110;;;::::0;-1:-1:-1;;;3124:110:0;;15196:2:1;3124:110:0::1;::::0;::::1;15178:21:1::0;15235:2;15215:18;;;15208:30;15274:34;15254:18;;;15247:62;-1:-1:-1;;;15325:18:1;;;15318:36;15371:19;;3124:110:0::1;14994:402:1::0;3124:110:0::1;3245:28;3264:8;3245:18;:28::i;18338:380::-:0;-1:-1:-1;;;;;18474:19:0;;18466:68;;;;-1:-1:-1;;;18466:68:0;;15603:2:1;18466:68:0;;;15585:21:1;15642:2;15622:18;;;15615:30;15681:34;15661:18;;;15654:62;-1:-1:-1;;;15732:18:1;;;15725:34;15776:19;;18466:68:0;15401:400:1;18466:68:0;-1:-1:-1;;;;;18553:21:0;;18545:68;;;;-1:-1:-1;;;18545:68:0;;16008:2:1;18545:68:0;;;15990:21:1;16047:2;16027:18;;;16020:30;16086:34;16066:18;;;16059:62;-1:-1:-1;;;16137:18:1;;;16130:32;16179:19;;18545:68:0;15806:398:1;18545:68:0;-1:-1:-1;;;;;18626:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18678:32;;3052:25:1;;;18678:32:0;;3025:18:1;18678:32:0;;;;;;;18338:380;;;:::o;2309:132::-;2217:6;;-1:-1:-1;;;;;2217:6:0;769:10;2373:23;2365:68;;;;-1:-1:-1;;;2365:68:0;;16411:2:1;2365:68:0;;;16393:21:1;;;16430:18;;;16423:30;16489:34;16469:18;;;16462:62;16541:18;;2365:68:0;16209:356:1;19009:502:0;19144:24;19171:25;19181:5;19188:7;19171:9;:25::i;:::-;19144:52;;-1:-1:-1;;19211:16:0;:37;19207:297;;19311:6;19291:16;:26;;19265:117;;;;-1:-1:-1;;;19265:117:0;;16772:2:1;19265:117:0;;;16754:21:1;16811:2;16791:18;;;16784:30;16850:31;16830:18;;;16823:59;16899:18;;19265:117:0;16570:353:1;19265:117:0;19426:51;19435:5;19442:7;19470:6;19451:16;:25;19426:8;:51::i;46078:4059::-;-1:-1:-1;;;;;46210:18:0;;46202:68;;;;-1:-1:-1;;;46202:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46289:16:0;;46281:64;;;;-1:-1:-1;;;46281:64:0;;;;;;;:::i;:::-;46362:6;46372:1;46362:11;46358:93;;46390:28;46406:4;46412:2;46416:1;46390:15;:28::i;46358:93::-;2217:6;;-1:-1:-1;;;;;46481:15:0;;;2217:6;;46481:15;;;;:45;;-1:-1:-1;2217:6:0;;-1:-1:-1;;;;;46513:13:0;;;2217:6;;46513:13;;46481:45;:88;;;;-1:-1:-1;;;;;;46544:25:0;;;;;;:19;:25;;;;;;;;46543:26;46481:88;:121;;;;-1:-1:-1;;;;;;46586:16:0;;;;46481:121;:155;;;;-1:-1:-1;;;;;;46619:17:0;;35040:6;46619:17;;46481:155;:182;;;;-1:-1:-1;46654:9:0;;-1:-1:-1;;;46654:9:0;;;;46653:10;46481:182;46463:1758;;;46695:13;;-1:-1:-1;;;46695:13:0;;;;46690:210;;-1:-1:-1;;;;;46759:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;46788:23:0;;;;;;:19;:23;;;;;;;;46759:52;46729:155;;;;-1:-1:-1;;;46729:155:0;;17940:2:1;46729:155:0;;;17922:21:1;17979:2;17959:18;;;17952:30;18018:31;17998:18;;;17991:59;18067:18;;46729:155:0;17738:353:1;46729:155:0;46920:7;;-1:-1:-1;;;46920:7:0;;;;:41;;;;-1:-1:-1;46947:13:0;;-1:-1:-1;;;;;46931:30:0;;;46947:13;;46931:30;46920:41;46916:174;;;47038:9;;47028:6;47012:13;47022:2;47012:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;47004:54;;;;-1:-1:-1;;;47004:54:0;;18298:2:1;47004:54:0;;;18280:21:1;18337:1;18317:18;;;18310:29;-1:-1:-1;;;18355:18:1;;;18348:36;18401:18;;47004:54:0;18096:329:1;47004:54:0;-1:-1:-1;;;;;47152:32:0;;;;;;:26;:32;;;;;;;;:87;;;;-1:-1:-1;;;;;;47206:33:0;;;;;;:29;:33;;;;;;;;47205:34;47152:87;47130:1080;;;47314:14;;47304:6;:24;;47274:152;;;;-1:-1:-1;;;47274:152:0;;18632:2:1;47274:152:0;;;18614:21:1;18671:2;18651:18;;;18644:30;18710:34;18690:18;;;18683:62;-1:-1:-1;;;18761:18:1;;;18754:52;18823:19;;47274:152:0;18430:418:1;47274:152:0;47501:9;;47484:13;47494:2;47484:9;:13::i;:::-;47475:22;;:6;:22;:::i;:::-;:35;;47445:135;;;;-1:-1:-1;;;47445:135:0;;19055:2:1;47445:135:0;;;19037:21:1;19094:2;19074:18;;;19067:30;19133:28;19113:18;;;19106:56;19179:18;;47445:135:0;18853:350:1;47445:135:0;47130:1080;;;-1:-1:-1;;;;;47662:30:0;;;;;;:26;:30;;;;;;;;:87;;;;-1:-1:-1;;;;;;47714:35:0;;;;;;:29;:35;;;;;;;;47713:36;47662:87;47640:570;;;47824:14;;47814:6;:24;;47784:153;;;;-1:-1:-1;;;47784:153:0;;19410:2:1;47784:153:0;;;19392:21:1;19449:2;19429:18;;;19422:30;19488:34;19468:18;;;19461:62;19559:25;19539:18;;;19532:53;19602:19;;47784:153:0;19208:419:1;47640:570:0;-1:-1:-1;;;;;48005:33:0;;;;;;:29;:33;;;;;;;;47986:224;;48115:9;;48098:13;48108:2;48098:9;:13::i;:::-;48089:22;;:6;:22;:::i;:::-;:35;;48059:135;;;;-1:-1:-1;;;48059:135:0;;19055:2:1;48059:135:0;;;19037:21:1;19094:2;19074:18;;;19067:30;19133:28;19113:18;;;19106:56;19179:18;;48059:135:0;18853:350:1;48059:135:0;48233:28;48264:24;48282:4;48264:9;:24::i;:::-;48340:18;;48233:55;;-1:-1:-1;48316:42:0;;;;;;;48389:35;;-1:-1:-1;48413:11:0;;-1:-1:-1;;;48413:11:0;;;;48389:35;:62;;;;-1:-1:-1;48442:9:0;;-1:-1:-1;;;48442:9:0;;;;48441:10;48389:62;:112;;;;-1:-1:-1;;;;;;48469:32:0;;;;;;:26;:32;;;;;;;;48468:33;48389:112;:155;;;;-1:-1:-1;;;;;;48519:25:0;;;;;;:19;:25;;;;;;;;48518:26;48389:155;:196;;;;-1:-1:-1;;;;;;48562:23:0;;;;;;:19;:23;;;;;;;;48561:24;48389:196;48371:331;;;48612:9;:16;;-1:-1:-1;;;;48612:16:0;-1:-1:-1;;;48612:16:0;;;48645:11;:9;:11::i;:::-;48673:9;:17;;-1:-1:-1;;;;48673:17:0;;;48371:331;48730:9;;-1:-1:-1;;;;;48756:25:0;;48714:12;48756:25;;;:19;:25;;;;;;48730:9;-1:-1:-1;;;48730:9:0;;;;;48729:10;;48756:25;;:52;;-1:-1:-1;;;;;;48785:23:0;;;;;;:19;:23;;;;;;;;48756:52;48752:100;;;-1:-1:-1;48835:5:0;48752:100;48864:12;48897:7;48893:1181;;;-1:-1:-1;;;;;48949:30:0;;;;;;:26;:30;;;;;;;;:51;;;;;48999:1;48983:13;;:17;48949:51;48945:980;;;49028:36;49058:5;49028:25;49039:13;;49028:6;:10;;:25;;;;:::i;:::-;:29;;:36::i;:::-;49021:43;;49135:13;;49114:17;;49107:4;:24;;;;:::i;:::-;49106:42;;;;:::i;:::-;49083:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;49219:13:0;;49198:17;;49191:24;;:4;:24;:::i;:::-;49190:42;;;;:::i;:::-;49167:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;49307:13:0;;49284:19;;49277:26;;:4;:26;:::i;:::-;49276:44;;;;:::i;:::-;49251:21;;:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;49389:13:0;;49369:16;;49362:23;;:4;:23;:::i;:::-;49361:41;;;;:::i;:::-;49339:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;48945:980:0;;-1:-1:-1;48945:980:0;;-1:-1:-1;;;;;49464:32:0;;;;;;:26;:32;;;;;;;;:52;;;;;49515:1;49500:12;;:16;49464:52;49460:465;;;49544:35;49573:5;49544:24;49555:12;;49544:6;:10;;:24;;;;:::i;:35::-;49537:42;;49649:12;;49629:16;;49622:4;:23;;;;:::i;:::-;49621:40;;;;:::i;:::-;49598:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;49731:12:0;;49711:16;;49704:23;;:4;:23;:::i;:::-;49703:40;;;;:::i;:::-;49680:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;49817:12:0;;49795:18;;49788:25;;:4;:25;:::i;:::-;49787:42;;;;:::i;:::-;49762:21;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;49897:12:0;;49878:15;;49871:22;;:4;:22;:::i;:::-;49870:39;;;;:::i;:::-;49848:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;49460:465:0;49945:8;;49941:91;;49974:42;49990:4;50004;50011;49974:15;:42::i;:::-;50048:14;50058:4;50048:14;;:::i;:::-;;;48893:1181;50086:33;50102:4;50108:2;50112:6;50086:15;:33::i;:::-;46191:3946;;;;46078:4059;;;:::o;17225:675::-;-1:-1:-1;;;;;17309:21:0;;17301:67;;;;-1:-1:-1;;;17301:67:0;;19967:2:1;17301:67:0;;;19949:21:1;20006:2;19986:18;;;19979:30;20045:34;20025:18;;;20018:62;-1:-1:-1;;;20096:18:1;;;20089:31;20137:19;;17301:67:0;19765:397:1;17301:67:0;-1:-1:-1;;;;;17468:18:0;;17443:22;17468:18;;;;;;;;;;;17505:24;;;;17497:71;;;;-1:-1:-1;;;17497:71:0;;20369:2:1;17497:71:0;;;20351:21:1;20408:2;20388:18;;;20381:30;20447:34;20427:18;;;20420:62;-1:-1:-1;;;20498:18:1;;;20491:32;20540:19;;17497:71:0;20167:398:1;17497:71:0;-1:-1:-1;;;;;17604:18:0;;:9;:18;;;;;;;;;;;17625:23;;;17604:44;;17743:12;:22;;;;;;;17794:37;3052:25:1;;;17604:9:0;;:18;17794:37;;3025:18:1;17794:37:0;;;;;;;39872:223:::1;;;39261:842::o:0;15180:877::-;-1:-1:-1;;;;;15311:18:0;;15303:68;;;;-1:-1:-1;;;15303:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15390:16:0;;15382:64;;;;-1:-1:-1;;;15382:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15532:15:0;;15510:19;15532:15;;;;;;;;;;;15580:21;;;;15558:109;;;;-1:-1:-1;;;15558:109:0;;20772:2:1;15558:109:0;;;20754:21:1;20811:2;20791:18;;;20784:30;20850:34;20830:18;;;20823:62;-1:-1:-1;;;20901:18:1;;;20894:36;20947:19;;15558:109:0;20570:402:1;15558:109:0;-1:-1:-1;;;;;15703:15:0;;;:9;:15;;;;;;;;;;;15721:20;;;15703:38;;15921:13;;;;;;;;;;:23;;;;;;15973:26;;3052:25:1;;;15921:13:0;;15973:26;;3025:18:1;15973:26:0;;;;;;;16012:37;39261:842;3441:191;3534:6;;;-1:-1:-1;;;;;3551:17:0;;;-1:-1:-1;;;;;;3551:17:0;;;;;;;3584:40;;3534:6;;;3551:17;3534:6;;3584:40;;3515:16;;3584:40;3504:128;3441:191;:::o;45880:190::-;-1:-1:-1;;;;;45964:32:0;;;;;;:26;:32;;;;;;:40;;-1:-1:-1;;45964:40:0;;;;;;;;;;46022;;45964;;:32;46022:40;;;45880:190;;:::o;51036:1948::-;51077:23;51103:24;51121:4;51103:9;:24::i;:::-;51077:50;;51138:25;51234:18;;51210:21;;51188:19;;51166;;:41;;;;:::i;:::-;:65;;;;:::i;:::-;:86;;;;:::i;:::-;51138:114;-1:-1:-1;51263:12:0;51292:20;;;:46;;-1:-1:-1;51316:22:0;;51292:46;51288:85;;;51355:7;;;51036:1948::o;51288:85::-;51407:18;;:23;;51428:2;51407:23;:::i;:::-;51389:15;:41;51385:115;;;51465:18;;:23;;51486:2;51465:23;:::i;:::-;51447:41;;51385:115;51512:23;51626:1;51593:17;51557:19;;51539:15;:37;;;;:::i;:::-;51538:72;;;;:::i;:::-;:89;;;;:::i;:::-;51512:115;-1:-1:-1;51638:26:0;51667:36;:15;51512:115;51667:19;:36::i;:::-;51638:65;-1:-1:-1;51744:21:0;51778:37;51638:65;51778:17;:37::i;:::-;51828:18;51849:44;:21;51875:17;51849:25;:44::i;:::-;51828:65;;51906:23;51932:58;51972:17;51932:35;51947:19;;51932:10;:14;;:35;;;;:::i;:58::-;51906:84;;52003:25;52031:60;52073:17;52031:37;52046:21;;52031:10;:14;;:37;;;;:::i;:60::-;52003:88;;52104:22;52129:57;52168:17;52129:34;52144:18;;52129:10;:14;;:34;;;;:::i;:57::-;52104:82;-1:-1:-1;52199:23:0;52104:82;52256:17;52225:28;52238:15;52225:10;:28;:::i;:::-;:48;;;;:::i;:::-;:65;;;;:::i;:::-;52325:1;52303:19;:23;;;52337:19;:23;;;52371:21;:25;;;52407:18;:22;52199:91;-1:-1:-1;52446:19:0;;;;;:42;;;52487:1;52469:15;:19;52446:42;52442:280;;;52505:47;52519:15;52536;52505:13;:47::i;:::-;52676:19;;52572:138;;;21179:25:1;;;21235:2;21220:18;;21213:34;;;21263:18;;;21256:34;;;;52572:138:0;;;;;;21167:2:1;52572:138:0;;;52442:280;52756:17;;52748:61;;-1:-1:-1;;;;;52756:17:0;;;;52787;;52748:61;;;;52787:17;52756;52748:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52841:14:0;;52833:55;;52734:75;;-1:-1:-1;;;;;;52841:14:0;;52869;;52833:55;;;;52869:14;52841;52833:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;52921:15:0;;52913:63;;52820:68;;-1:-1:-1;;;;;;52921:15:0;;52950:21;;52913:63;;;;52950:21;52921:15;52913:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;51036:1948:0:o;24686:98::-;24744:7;24771:5;24775:1;24771;:5;:::i;:::-;24764:12;24686:98;-1:-1:-1;;;24686:98:0:o;25085:::-;25143:7;25170:5;25174:1;25170;:5;:::i;24329:98::-;24387:7;24414:5;24418:1;24414;:5;:::i;50145:503::-;50237:16;;;50251:1;50237:16;;;;;;;;50213:21;;50237:16;;;;;;;;;;-1:-1:-1;50237:16:0;50213:40;;50282:4;50264;50269:1;50264:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;50264:23:0;;;-1:-1:-1;;;;;50264:23:0;;;;;50308:15;-1:-1:-1;;;;;50308:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50298:4;50303:1;50298:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;50298:32:0;;;-1:-1:-1;;;;;50298:32:0;;;;;50343:62;50360:4;50375:15;50393:11;50343:8;:62::i;:::-;50444:196;;-1:-1:-1;;;50444:196:0;;-1:-1:-1;;;;;50444:15:0;:66;;;;:196;;50525:11;;50551:1;;50567:4;;50594;;50614:15;;50444:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50202:446;50145:503;:::o;50656:372::-;50739:62;50756:4;50771:15;50789:11;50739:8;:62::i;:::-;50964:15;;50814:206;;-1:-1:-1;;;50814:206:0;;-1:-1:-1;;;;;50814:15:0;:31;;;;;50853:9;;50814:206;;50886:4;;50906:11;;50932:1;;;;50964:15;;;50994;;50814:206;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:367::-;1278:8;1288:6;1342:3;1335:4;1327:6;1323:17;1319:27;1309:55;;1360:1;1357;1350:12;1309:55;-1:-1:-1;1383:20:1;;1426:18;1415:30;;1412:50;;;1458:1;1455;1448:12;1412:50;1495:4;1487:6;1483:17;1471:29;;1555:3;1548:4;1538:6;1535:1;1531:14;1523:6;1519:27;1515:38;1512:47;1509:67;;;1572:1;1569;1562:12;1509:67;1215:367;;;;;:::o;1587:118::-;1673:5;1666:13;1659:21;1652:5;1649:32;1639:60;;1695:1;1692;1685:12;1710:566;1802:6;1810;1818;1871:2;1859:9;1850:7;1846:23;1842:32;1839:52;;;1887:1;1884;1877:12;1839:52;1927:9;1914:23;1960:18;1952:6;1949:30;1946:50;;;1992:1;1989;1982:12;1946:50;2031:70;2093:7;2084:6;2073:9;2069:22;2031:70;:::i;:::-;2120:8;;-1:-1:-1;2005:96:1;-1:-1:-1;;2205:2:1;2190:18;;2177:32;2218:28;2177:32;2218:28;:::i;:::-;2265:5;2255:15;;;1710:566;;;;;:::o;2516:385::-;2602:6;2610;2618;2626;2679:3;2667:9;2658:7;2654:23;2650:33;2647:53;;;2696:1;2693;2686:12;2647:53;-1:-1:-1;;2719:23:1;;;2789:2;2774:18;;2761:32;;-1:-1:-1;2840:2:1;2825:18;;2812:32;;2891:2;2876:18;2863:32;;-1:-1:-1;2516:385:1;-1:-1:-1;2516:385:1:o;3088:247::-;3147:6;3200:2;3188:9;3179:7;3175:23;3171:32;3168:52;;;3216:1;3213;3206:12;3168:52;3255:9;3242:23;3274:31;3299:5;3274:31;:::i;3340:456::-;3417:6;3425;3433;3486:2;3474:9;3465:7;3461:23;3457:32;3454:52;;;3502:1;3499;3492:12;3454:52;3541:9;3528:23;3560:31;3585:5;3560:31;:::i;:::-;3610:5;-1:-1:-1;3667:2:1;3652:18;;3639:32;3680:33;3639:32;3680:33;:::i;:::-;3340:456;;3732:7;;-1:-1:-1;;;3786:2:1;3771:18;;;;3758:32;;3340:456::o;4198:180::-;4257:6;4310:2;4298:9;4289:7;4285:23;4281:32;4278:52;;;4326:1;4323;4316:12;4278:52;-1:-1:-1;4349:23:1;;4198:180;-1:-1:-1;4198:180:1:o;4383:773::-;4505:6;4513;4521;4529;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;4638:9;4625:23;4667:18;4708:2;4700:6;4697:14;4694:34;;;4724:1;4721;4714:12;4694:34;4763:70;4825:7;4816:6;4805:9;4801:22;4763:70;:::i;:::-;4852:8;;-1:-1:-1;4737:96:1;-1:-1:-1;4940:2:1;4925:18;;4912:32;;-1:-1:-1;4956:16:1;;;4953:36;;;4985:1;4982;4975:12;4953:36;;5024:72;5088:7;5077:8;5066:9;5062:24;5024:72;:::i;:::-;4383:773;;;;-1:-1:-1;5115:8:1;-1:-1:-1;;;;4383:773:1:o;5161:382::-;5226:6;5234;5287:2;5275:9;5266:7;5262:23;5258:32;5255:52;;;5303:1;5300;5293:12;5255:52;5342:9;5329:23;5361:31;5386:5;5361:31;:::i;:::-;5411:5;-1:-1:-1;5468:2:1;5453:18;;5440:32;5481:30;5440:32;5481:30;:::i;:::-;5530:7;5520:17;;;5161:382;;;;;:::o;5548:248::-;5616:6;5624;5677:2;5665:9;5656:7;5652:23;5648:32;5645:52;;;5693:1;5690;5683:12;5645:52;-1:-1:-1;;5716:23:1;;;5786:2;5771:18;;;5758:32;;-1:-1:-1;5548:248:1:o;5801:388::-;5869:6;5877;5930:2;5918:9;5909:7;5905:23;5901:32;5898:52;;;5946:1;5943;5936:12;5898:52;5985:9;5972:23;6004:31;6029:5;6004:31;:::i;:::-;6054:5;-1:-1:-1;6111:2:1;6096:18;;6083:32;6124:33;6083:32;6124:33;:::i;6194:241::-;6250:6;6303:2;6291:9;6282:7;6278:23;6274:32;6271:52;;;6319:1;6316;6309:12;6271:52;6358:9;6345:23;6377:28;6399:5;6377:28;:::i;6440:380::-;6519:1;6515:12;;;;6562;;;6583:61;;6637:4;6629:6;6625:17;6615:27;;6583:61;6690:2;6682:6;6679:14;6659:18;6656:38;6653:161;;6736:10;6731:3;6727:20;6724:1;6717:31;6771:4;6768:1;6761:15;6799:4;6796:1;6789:15;6653:161;;6440:380;;;:::o;6825:127::-;6886:10;6881:3;6877:20;6874:1;6867:31;6917:4;6914:1;6907:15;6941:4;6938:1;6931:15;6957:127;7018:10;7013:3;7009:20;7006:1;6999:31;7049:4;7046:1;7039:15;7073:4;7070:1;7063:15;7089:135;7128:3;7149:17;;;7146:43;;7169:18;;:::i;:::-;-1:-1:-1;7216:1:1;7205:13;;7089:135::o;7229:125::-;7294:9;;;7315:10;;;7312:36;;;7328:18;;:::i;7359:399::-;7561:2;7543:21;;;7600:2;7580:18;;;7573:30;7639:34;7634:2;7619:18;;7612:62;-1:-1:-1;;;7705:2:1;7690:18;;7683:33;7748:3;7733:19;;7359:399::o;7763:340::-;7965:2;7947:21;;;8004:2;7984:18;;;7977:30;-1:-1:-1;;;8038:2:1;8023:18;;8016:46;8094:2;8079:18;;7763:340::o;10168:168::-;10241:9;;;10272;;10289:15;;;10283:22;;10269:37;10259:71;;10310:18;;:::i;10341:217::-;10381:1;10407;10397:132;;10451:10;10446:3;10442:20;10439:1;10432:31;10486:4;10483:1;10476:15;10514:4;10511:1;10504:15;10397:132;-1:-1:-1;10543:9:1;;10341:217::o;12451:184::-;12521:6;12574:2;12562:9;12553:7;12549:23;12545:32;12542:52;;;12590:1;12587;12580:12;12542:52;-1:-1:-1;12613:16:1;;12451:184;-1:-1:-1;12451:184:1:o;13256:245::-;13323:6;13376:2;13364:9;13355:7;13351:23;13347:32;13344:52;;;13392:1;13389;13382:12;13344:52;13424:9;13418:16;13443:28;13465:5;13443:28;:::i;13506:251::-;13576:6;13629:2;13617:9;13608:7;13604:23;13600:32;13597:52;;;13645:1;13642;13635:12;13597:52;13677:9;13671:16;13696:31;13721:5;13696:31;:::i;14071:607::-;-1:-1:-1;;;;;14430:15:1;;;14412:34;;14477:2;14462:18;;14455:34;;;;14520:2;14505:18;;14498:34;;;;14563:2;14548:18;;14541:34;;;;14612:15;;;14606:3;14591:19;;14584:44;14392:3;14644:19;;14637:35;;;;14361:3;14346:19;;14071:607::o;14683:306::-;14771:6;14779;14787;14840:2;14828:9;14819:7;14815:23;14811:32;14808:52;;;14856:1;14853;14846:12;14808:52;14885:9;14879:16;14869:26;;14935:2;14924:9;14920:18;14914:25;14904:35;;14979:2;14968:9;14964:18;14958:25;14948:35;;14683:306;;;;;:::o;16928:401::-;17130:2;17112:21;;;17169:2;17149:18;;;17142:30;17208:34;17203:2;17188:18;;17181:62;-1:-1:-1;;;17274:2:1;17259:18;;17252:35;17319:3;17304:19;;16928:401::o;17334:399::-;17536:2;17518:21;;;17575:2;17555:18;;;17548:30;17614:34;17609:2;17594:18;;17587:62;-1:-1:-1;;;17680:2:1;17665:18;;17658:33;17723:3;17708:19;;17334:399::o;19632:128::-;19699:9;;;19720:11;;;19717:37;;;19734:18;;:::i;21433:980::-;21695:4;21743:3;21732:9;21728:19;21774:6;21763:9;21756:25;21800:2;21838:6;21833:2;21822:9;21818:18;21811:34;21881:3;21876:2;21865:9;21861:18;21854:31;21905:6;21940;21934:13;21971:6;21963;21956:22;22009:3;21998:9;21994:19;21987:26;;22048:2;22040:6;22036:15;22022:29;;22069:1;22079:195;22093:6;22090:1;22087:13;22079:195;;;22158:13;;-1:-1:-1;;;;;22154:39:1;22142:52;;22249:15;;;;22214:12;;;;22190:1;22108:9;22079:195;;;-1:-1:-1;;;;;;;22330:32:1;;;;22325:2;22310:18;;22303:60;-1:-1:-1;;;22394:3:1;22379:19;22372:35;22291:3;21433:980;-1:-1:-1;;;21433:980:1:o
Swarm Source
ipfs://93b8cd4ac432065891afe6b6b794f6969b19c7b4bd7c5430bbd85929b002284f
[ 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.