ERC-20
Overview
Max Total Supply
100,000,000,000 MF
Holders
18
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
1,000,000,000 MFValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Memeingful
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-06 */ /** Don't worry MF'ers, fees can only be set to 48% so you can still sell on uni ;) All jokes aside, Memeingful is what we've all wanted in this bear. Community is welcome to set up a tg. I'll do my bit and actually use funds towards the community. Looking forward to it boys and girls x. */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.10; pragma experimental ABIEncoderV2; /* pragma solidity ^0.8.0; */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } ////// lib/openzeppelin-contracts/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (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); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev 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 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 {} } ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.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 substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract Memeingful is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public ETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; bool private swapping; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public buyLiquidityFee; uint256 public sellTotalFees; uint256 public sellDevFee; uint256 public sellLiquidityFee; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; event ExcludeFromFees(address indexed account, bool isExcluded); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("Memeingful", "MF") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), ETH); excludeFromMaxTransaction(address(uniswapV2Pair), true); uint256 _buyDevFee = 10; uint256 _buyLiquidityFee = 1; uint256 _sellDevFee = 40; uint256 _sellLiquidityFee = 8; uint256 totalSupply = 100_000_000_000 * 1e18; maxTransactionAmount = totalSupply * 1 / 100; // 1% from total supply maxTransactionAmountTxn maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyDevFee = _buyDevFee; buyLiquidityFee = _buyLiquidityFee; buyTotalFees = buyDevFee + buyLiquidityFee; sellDevFee = _sellDevFee; sellLiquidityFee = _sellLiquidityFee; sellTotalFees = sellDevFee + sellLiquidityFee; devWallet = address(0xBC02982ea87De6Fe4829cacB3Eb08d98D35897A7); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable {} // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply." ); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 1) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%" ); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner { swapEnabled = enabled; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyDevFee + buyLiquidityFee; require(buyTotalFees <= 48, "Must keep fees at 48% or less ;)" ); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellDevFee + sellLiquidityFee; require(sellTotalFees <= 48, "Must keep fees at 48% or less ;)"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateDevWallet(address newDevWallet) external onlyOwner { emit devWalletUpdated(newDevWallet, devWallet); devWallet = newDevWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } 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 (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. //when buy if ( from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 tokensForLiquidity = 0; uint256 tokensForDev = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (to == uniswapV2Pair && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees; tokensForDev = (fees * sellDevFee) / sellTotalFees; } // on buy else if (from == uniswapV2Pair && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees; tokensForDev = (fees * buyDevFee) / buyTotalFees; } if (fees> 0) { super._transfer(from, address(this), fees); } if (tokensForLiquidity > 0) { super._transfer(address(this), uniswapV2Pair, tokensForLiquidity); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForETH(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = ETH; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, devWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } swapTokensForETH(contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"devWalletUpdated","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"devWallet","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":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280600a81526020017f4d656d65696e6766756c000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f4d4600000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013c929190620009bc565b50806004908051906020019062000155929190620009bc565b505050620001786200016c6200051d60201b60201c565b6200052560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a4816001620005eb60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a919062000ad6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002a892919062000b19565b6020604051808303816000875af1158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000ad6565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033660a0516001620005eb60201b60201c565b6000600a905060006001905060006028905060006008905060006c01431e0fae6d7217caa00000009050606460018262000371919062000b7f565b6200037d919062000c0f565b600881905550606460028262000394919062000b7f565b620003a0919062000c0f565b600a81905550612710600582620003b8919062000b7f565b620003c4919062000c0f565b60098190555084600d8190555083600e81905550600e54600d54620003ea919062000c47565b600c81905550826010819055508160118190555060115460105462000410919062000c47565b600f8190555073bc02982ea87de6fe4829cacb3eb08d98d35897a7600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048d6200047f620006d560201b60201c565b6001620006ff60201b60201c565b620004a0306001620006ff60201b60201c565b620004b561dead6001620006ff60201b60201c565b620004d7620004c9620006d560201b60201c565b6001620005eb60201b60201c565b620004ea306001620005eb60201b60201c565b620004ff61dead6001620005eb60201b60201c565b6200051133826200083960201b60201c565b50505050505062000e66565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005fb6200051d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000621620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200067a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006719062000d05565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200070f6200051d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000735620006d560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200078e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007859062000d05565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200082d919062000d44565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620008ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a39062000db1565b60405180910390fd5b620008c060008383620009b260201b60201c565b8060026000828254620008d4919062000c47565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200092b919062000c47565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000992919062000de4565b60405180910390a3620009ae60008383620009b760201b60201c565b5050565b505050565b505050565b828054620009ca9062000e30565b90600052602060002090601f016020900481019282620009ee576000855562000a3a565b82601f1062000a0957805160ff191683800117855562000a3a565b8280016001018555821562000a3a579182015b8281111562000a3957825182559160200191906001019062000a1c565b5b50905062000a49919062000a4d565b5090565b5b8082111562000a6857600081600090555060010162000a4e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a9e8262000a71565b9050919050565b62000ab08162000a91565b811462000abc57600080fd5b50565b60008151905062000ad08162000aa5565b92915050565b60006020828403121562000aef5762000aee62000a6c565b5b600062000aff8482850162000abf565b91505092915050565b62000b138162000a91565b82525050565b600060408201905062000b30600083018562000b08565b62000b3f602083018462000b08565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b8c8262000b46565b915062000b998362000b46565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bd55762000bd462000b50565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c1c8262000b46565b915062000c298362000b46565b92508262000c3c5762000c3b62000be0565b5b828204905092915050565b600062000c548262000b46565b915062000c618362000b46565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c995762000c9862000b50565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ced60208362000ca4565b915062000cfa8262000cb5565b602082019050919050565b6000602082019050818103600083015262000d208162000cde565b9050919050565b60008115159050919050565b62000d3e8162000d27565b82525050565b600060208201905062000d5b600083018462000d33565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d99601f8362000ca4565b915062000da68262000d61565b602082019050919050565b6000602082019050818103600083015262000dcc8162000d8a565b9050919050565b62000dde8162000b46565b82525050565b600060208201905062000dfb600083018462000dd3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e4957607f821691505b6020821081141562000e605762000e5f62000e01565b5b50919050565b60805160a051613c6262000ebd60003960008181610f0101528181611f74015281816121bd015281816123c801528181612493015261257d015260008181610b8101528181612aab0152612ad20152613c626000f3fe6080604052600436106102555760003560e01c80638322fff211610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b3578063e2f45605146108f0578063f11a24d31461091b578063f2fde38b14610946578063f63743421461096f578063f8b45b051461099a5761025c565b8063c0246668146107ce578063c18bc195146107f7578063c8c8ebe414610820578063d257b34f1461084b578063d85ba063146108885761025c565b806395d89b41116100fd57806395d89b41146106e55780639c3b4fdc14610710578063a0d82dc51461073b578063a9059cbb14610766578063bbc0c742146107a35761025c565b80638322fff2146106245780638a8c523c1461064f5780638da5cb5b146106665780638ea5220f14610691578063924de9b7146106bc5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b9578063751039fc146105d05780637571336a146105fb5761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634fbee193146104c057806366ca9b83146104fd5761025c565b806318160ddd1161021957806318160ddd1461035a5780631816467f14610385578063203e727e146103ae57806323b872dd146103d757806327c8f835146104145761025c565b806302dbd8f81461026157806306fdde031461028a578063095ea7b3146102b557806310d5de53146102f25780631694505e1461032f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190612bc5565b6109c5565b005b34801561029657600080fd5b5061029f610aaf565b6040516102ac9190612c9e565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612d1e565b610b41565b6040516102e99190612d79565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612d94565b610b5f565b6040516103269190612d79565b60405180910390f35b34801561033b57600080fd5b50610344610b7f565b6040516103519190612e20565b60405180910390f35b34801561036657600080fd5b5061036f610ba3565b60405161037c9190612e4a565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612d94565b610bad565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612e65565b610ce9565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612e92565b610df8565b60405161040b9190612d79565b60405180910390f35b34801561042057600080fd5b50610429610ef0565b6040516104369190612ef4565b60405180910390f35b34801561044b57600080fd5b50610454610ef6565b6040516104619190612f2b565b60405180910390f35b34801561047657600080fd5b5061047f610eff565b60405161048c9190612ef4565b60405180910390f35b3480156104a157600080fd5b506104aa610f23565b6040516104b79190612d79565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612d94565b610f36565b6040516104f49190612d79565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612bc5565b610f8c565b005b34801561053257600080fd5b5061053b611076565b6040516105489190612e4a565b60405180910390f35b34801561055d57600080fd5b5061056661107c565b6040516105739190612d79565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612d94565b61108f565b6040516105b09190612e4a565b60405180910390f35b3480156105c557600080fd5b506105ce6110d7565b005b3480156105dc57600080fd5b506105e561115f565b6040516105f29190612d79565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612f72565b6111ff565b005b34801561063057600080fd5b506106396112d6565b6040516106469190612ef4565b60405180910390f35b34801561065b57600080fd5b506106646112fc565b005b34801561067257600080fd5b5061067b6113b0565b6040516106889190612ef4565b60405180910390f35b34801561069d57600080fd5b506106a66113da565b6040516106b39190612ef4565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190612fb2565b611400565b005b3480156106f157600080fd5b506106fa611499565b6040516107079190612c9e565b60405180910390f35b34801561071c57600080fd5b5061072561152b565b6040516107329190612e4a565b60405180910390f35b34801561074757600080fd5b50610750611531565b60405161075d9190612e4a565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190612d1e565b611537565b60405161079a9190612d79565b60405180910390f35b3480156107af57600080fd5b506107b8611555565b6040516107c59190612d79565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612f72565b611568565b005b34801561080357600080fd5b5061081e60048036038101906108199190612e65565b61168d565b005b34801561082c57600080fd5b5061083561179c565b6040516108429190612e4a565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190612e65565b6117a2565b60405161087f9190612d79565b60405180910390f35b34801561089457600080fd5b5061089d6118f7565b6040516108aa9190612e4a565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612fdf565b6118fd565b6040516108e79190612e4a565b60405180910390f35b3480156108fc57600080fd5b50610905611984565b6040516109129190612e4a565b60405180910390f35b34801561092757600080fd5b5061093061198a565b60405161093d9190612e4a565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190612d94565b611990565b005b34801561097b57600080fd5b50610984611a88565b6040516109919190612e4a565b60405180910390f35b3480156109a657600080fd5b506109af611a8e565b6040516109bc9190612e4a565b60405180910390f35b6109cd611a94565b73ffffffffffffffffffffffffffffffffffffffff166109eb6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a389061306b565b60405180910390fd5b8160108190555080601181905550601154601054610a5f91906130ba565b600f819055506030600f541115610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061315c565b60405180910390fd5b5050565b606060038054610abe906131ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906131ab565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b6000610b55610b4e611a94565b8484611a9c565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bb5611a94565b73ffffffffffffffffffffffffffffffffffffffff16610bd36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061306b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cf1611a94565b73ffffffffffffffffffffffffffffffffffffffff16610d0f6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c9061306b565b60405180910390fd5b670de0b6b3a76400006103e86001610d7b610ba3565b610d8591906131dd565b610d8f9190613266565b610d999190613266565b811015610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613309565b60405180910390fd5b670de0b6b3a764000081610def91906131dd565b60088190555050565b6000610e05848484611c67565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e50611a94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061339b565b60405180910390fd5b610ee485610edc611a94565b858403611a9c565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f94611a94565b73ffffffffffffffffffffffffffffffffffffffff16610fb26113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff9061306b565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461102691906130ba565b600c819055506030600c541115611072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110699061315c565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110df611a94565b73ffffffffffffffffffffffffffffffffffffffff166110fd6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a9061306b565b60405180910390fd5b61115d60006125c9565b565b6000611169611a94565b73ffffffffffffffffffffffffffffffffffffffff166111876113b0565b73ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061306b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611207611a94565b73ffffffffffffffffffffffffffffffffffffffff166112256113b0565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061306b565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611304611a94565b73ffffffffffffffffffffffffffffffffffffffff166113226113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f9061306b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611408611a94565b73ffffffffffffffffffffffffffffffffffffffff166114266113b0565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061306b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114a8906131ab565b80601f01602080910402602001604051908101604052809291908181526020018280546114d4906131ab565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b600d5481565b60105481565b600061154b611544611a94565b8484611c67565b6001905092915050565b600b60019054906101000a900460ff1681565b611570611a94565b73ffffffffffffffffffffffffffffffffffffffff1661158e6113b0565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061306b565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116819190612d79565b60405180910390a25050565b611695611a94565b73ffffffffffffffffffffffffffffffffffffffff166116b36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061306b565b60405180910390fd5b670de0b6b3a76400006103e8600561171f610ba3565b61172991906131dd565b6117339190613266565b61173d9190613266565b81101561177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061342d565b60405180910390fd5b670de0b6b3a76400008161179391906131dd565b600a8190555050565b60085481565b60006117ac611a94565b73ffffffffffffffffffffffffffffffffffffffff166117ca6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061306b565b60405180910390fd5b620186a0600161182e610ba3565b61183891906131dd565b6118429190613266565b821015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b906134bf565b60405180910390fd5b6103e86005611891610ba3565b61189b91906131dd565b6118a59190613266565b8211156118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613551565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b611998611a94565b73ffffffffffffffffffffffffffffffffffffffff166119b66113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a039061306b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a73906135e3565b60405180910390fd5b611a85816125c9565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390613675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390613707565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c5a9190612e4a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e9061382b565b60405180910390fd5b6000811415611d6157611d5c8383600061268f565b6125c4565b600b60009054906101000a900460ff161561216b57611d7e6113b0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dec5750611dbc6113b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e5f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e785750600660149054906101000a900460ff16155b1561216a57600b60019054906101000a900460ff16611f7257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f325750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613897565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120175750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120be57600854811115612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890613929565b60405180910390fd5b600a5461206d8361108f565b8261207891906130ba565b11156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090613995565b60405180910390fd5b612169565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661216857600a5461211b8361108f565b8261212691906130ba565b1115612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90613995565b60405180910390fd5b5b5b5b5b60006121763061108f565b90506000600954821015905080801561219b5750600b60029054906101000a900460ff165b80156121b45750600660149054906101000a900460ff16155b801561220b57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156122615750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b75750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fb576001600660146101000a81548160ff0219169083151502179055506122df612910565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123b15750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123bb57600090505b600080600083156125b2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561242357506000600f54115b15612491576124506064612442600f548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600f546011548461246391906131dd565b61246d9190613266565b9150600f546010548461248091906131dd565b61248a9190613266565b9050612559565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156124ee57506000600c54115b156125585761251b606461250d600c548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600c54600e548461252e91906131dd565b6125389190613266565b9150600c54600d548461254b91906131dd565b6125559190613266565b90505b5b600083111561256e5761256d89308561268f565b5b60008211156125a3576125a2307f00000000000000000000000000000000000000000000000000000000000000008461268f565b5b82876125af91906139b5565b96505b6125bd89898961268f565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127669061382b565b60405180910390fd5b61277a83838361298d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613a5b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289391906130ba565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f79190612e4a565b60405180910390a361290a848484612992565b50505050565b600061291b3061108f565b9050600081141561292c575061295f565b601460095461293b91906131dd565b81111561295457601460095461295191906131dd565b90505b61295d81612997565b505b565b6000818361296f91906131dd565b905092915050565b600081836129859190613266565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156129b4576129b3613a7b565b5b6040519080825280602002602001820160405280156129e25781602001602082028036833780820191505090505b50905030816000815181106129fa576129f9613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612a6b57612a6a613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ad0307f000000000000000000000000000000000000000000000000000000000000000084611a9c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b54959493929190613bd2565b600060405180830381600087803b158015612b6e57600080fd5b505af1158015612b82573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612ba281612b8f565b8114612bad57600080fd5b50565b600081359050612bbf81612b99565b92915050565b60008060408385031215612bdc57612bdb612b8a565b5b6000612bea85828601612bb0565b9250506020612bfb85828601612bb0565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c3f578082015181840152602081019050612c24565b83811115612c4e576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c7082612c05565b612c7a8185612c10565b9350612c8a818560208601612c21565b612c9381612c54565b840191505092915050565b60006020820190508181036000830152612cb88184612c65565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ceb82612cc0565b9050919050565b612cfb81612ce0565b8114612d0657600080fd5b50565b600081359050612d1881612cf2565b92915050565b60008060408385031215612d3557612d34612b8a565b5b6000612d4385828601612d09565b9250506020612d5485828601612bb0565b9150509250929050565b60008115159050919050565b612d7381612d5e565b82525050565b6000602082019050612d8e6000830184612d6a565b92915050565b600060208284031215612daa57612da9612b8a565b5b6000612db884828501612d09565b91505092915050565b6000819050919050565b6000612de6612de1612ddc84612cc0565b612dc1565b612cc0565b9050919050565b6000612df882612dcb565b9050919050565b6000612e0a82612ded565b9050919050565b612e1a81612dff565b82525050565b6000602082019050612e356000830184612e11565b92915050565b612e4481612b8f565b82525050565b6000602082019050612e5f6000830184612e3b565b92915050565b600060208284031215612e7b57612e7a612b8a565b5b6000612e8984828501612bb0565b91505092915050565b600080600060608486031215612eab57612eaa612b8a565b5b6000612eb986828701612d09565b9350506020612eca86828701612d09565b9250506040612edb86828701612bb0565b9150509250925092565b612eee81612ce0565b82525050565b6000602082019050612f096000830184612ee5565b92915050565b600060ff82169050919050565b612f2581612f0f565b82525050565b6000602082019050612f406000830184612f1c565b92915050565b612f4f81612d5e565b8114612f5a57600080fd5b50565b600081359050612f6c81612f46565b92915050565b60008060408385031215612f8957612f88612b8a565b5b6000612f9785828601612d09565b9250506020612fa885828601612f5d565b9150509250929050565b600060208284031215612fc857612fc7612b8a565b5b6000612fd684828501612f5d565b91505092915050565b60008060408385031215612ff657612ff5612b8a565b5b600061300485828601612d09565b925050602061301585828601612d09565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613055602083612c10565b91506130608261301f565b602082019050919050565b6000602082019050818103600083015261308481613048565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130c582612b8f565b91506130d083612b8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131055761310461308b565b5b828201905092915050565b7f4d757374206b656570206665657320617420343825206f72206c657373203b29600082015250565b6000613146602083612c10565b915061315182613110565b602082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131c357607f821691505b602082108114156131d7576131d661317c565b5b50919050565b60006131e882612b8f565b91506131f383612b8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322c5761322b61308b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061327182612b8f565b915061327c83612b8f565b92508261328c5761328b613237565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006132f3602f83612c10565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613385602883612c10565b915061339082613329565b604082019050919050565b600060208201905081810360008301526133b481613378565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613417602483612c10565b9150613422826133bb565b604082019050919050565b600060208201905081810360008301526134468161340a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006134a9603583612c10565b91506134b48261344d565b604082019050919050565b600060208201905081810360008301526134d88161349c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061353b603483612c10565b9150613546826134df565b604082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135cd602683612c10565b91506135d882613571565b604082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061365f602483612c10565b915061366a82613603565b604082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f1602283612c10565b91506136fc82613695565b604082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613783602583612c10565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613815602383612c10565b9150613820826137b9565b604082019050919050565b6000602082019050818103600083015261384481613808565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613881601683612c10565b915061388c8261384b565b602082019050919050565b600060208201905081810360008301526138b081613874565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613913603583612c10565b915061391e826138b7565b604082019050919050565b6000602082019050818103600083015261394281613906565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061397f601383612c10565b915061398a82613949565b602082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b60006139c082612b8f565b91506139cb83612b8f565b9250828210156139de576139dd61308b565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a45602683612c10565b9150613a50826139e9565b604082019050919050565b60006020820190508181036000830152613a7481613a38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613afe613af9613af484613ad9565b612dc1565b612b8f565b9050919050565b613b0e81613ae3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4981612ce0565b82525050565b6000613b5b8383613b40565b60208301905092915050565b6000602082019050919050565b6000613b7f82613b14565b613b898185613b1f565b9350613b9483613b30565b8060005b83811015613bc5578151613bac8882613b4f565b9750613bb783613b67565b925050600181019050613b98565b5085935050505092915050565b600060a082019050613be76000830188612e3b565b613bf46020830187613b05565b8181036040830152613c068186613b74565b9050613c156060830185612ee5565b613c226080830184612e3b565b969550505050505056fea2646970667358221220631420002bf8d2904c761f13810514f81742cfe459df5de4d661353bb372500364736f6c634300080a0033
Deployed Bytecode
0x6080604052600436106102555760003560e01c80638322fff211610139578063c0246668116100b6578063dd62ed3e1161007a578063dd62ed3e146108b3578063e2f45605146108f0578063f11a24d31461091b578063f2fde38b14610946578063f63743421461096f578063f8b45b051461099a5761025c565b8063c0246668146107ce578063c18bc195146107f7578063c8c8ebe414610820578063d257b34f1461084b578063d85ba063146108885761025c565b806395d89b41116100fd57806395d89b41146106e55780639c3b4fdc14610710578063a0d82dc51461073b578063a9059cbb14610766578063bbc0c742146107a35761025c565b80638322fff2146106245780638a8c523c1461064f5780638da5cb5b146106665780638ea5220f14610691578063924de9b7146106bc5761025c565b8063313ce567116101d25780636a486a8e116101965780636a486a8e146105265780636ddd17131461055157806370a082311461057c578063715018a6146105b9578063751039fc146105d05780637571336a146105fb5761025c565b8063313ce5671461043f57806349bd5a5e1461046a5780634a62bb65146104955780634fbee193146104c057806366ca9b83146104fd5761025c565b806318160ddd1161021957806318160ddd1461035a5780631816467f14610385578063203e727e146103ae57806323b872dd146103d757806327c8f835146104145761025c565b806302dbd8f81461026157806306fdde031461028a578063095ea7b3146102b557806310d5de53146102f25780631694505e1461032f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190612bc5565b6109c5565b005b34801561029657600080fd5b5061029f610aaf565b6040516102ac9190612c9e565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d79190612d1e565b610b41565b6040516102e99190612d79565b60405180910390f35b3480156102fe57600080fd5b5061031960048036038101906103149190612d94565b610b5f565b6040516103269190612d79565b60405180910390f35b34801561033b57600080fd5b50610344610b7f565b6040516103519190612e20565b60405180910390f35b34801561036657600080fd5b5061036f610ba3565b60405161037c9190612e4a565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612d94565b610bad565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190612e65565b610ce9565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190612e92565b610df8565b60405161040b9190612d79565b60405180910390f35b34801561042057600080fd5b50610429610ef0565b6040516104369190612ef4565b60405180910390f35b34801561044b57600080fd5b50610454610ef6565b6040516104619190612f2b565b60405180910390f35b34801561047657600080fd5b5061047f610eff565b60405161048c9190612ef4565b60405180910390f35b3480156104a157600080fd5b506104aa610f23565b6040516104b79190612d79565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190612d94565b610f36565b6040516104f49190612d79565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612bc5565b610f8c565b005b34801561053257600080fd5b5061053b611076565b6040516105489190612e4a565b60405180910390f35b34801561055d57600080fd5b5061056661107c565b6040516105739190612d79565b60405180910390f35b34801561058857600080fd5b506105a3600480360381019061059e9190612d94565b61108f565b6040516105b09190612e4a565b60405180910390f35b3480156105c557600080fd5b506105ce6110d7565b005b3480156105dc57600080fd5b506105e561115f565b6040516105f29190612d79565b60405180910390f35b34801561060757600080fd5b50610622600480360381019061061d9190612f72565b6111ff565b005b34801561063057600080fd5b506106396112d6565b6040516106469190612ef4565b60405180910390f35b34801561065b57600080fd5b506106646112fc565b005b34801561067257600080fd5b5061067b6113b0565b6040516106889190612ef4565b60405180910390f35b34801561069d57600080fd5b506106a66113da565b6040516106b39190612ef4565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190612fb2565b611400565b005b3480156106f157600080fd5b506106fa611499565b6040516107079190612c9e565b60405180910390f35b34801561071c57600080fd5b5061072561152b565b6040516107329190612e4a565b60405180910390f35b34801561074757600080fd5b50610750611531565b60405161075d9190612e4a565b60405180910390f35b34801561077257600080fd5b5061078d60048036038101906107889190612d1e565b611537565b60405161079a9190612d79565b60405180910390f35b3480156107af57600080fd5b506107b8611555565b6040516107c59190612d79565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190612f72565b611568565b005b34801561080357600080fd5b5061081e60048036038101906108199190612e65565b61168d565b005b34801561082c57600080fd5b5061083561179c565b6040516108429190612e4a565b60405180910390f35b34801561085757600080fd5b50610872600480360381019061086d9190612e65565b6117a2565b60405161087f9190612d79565b60405180910390f35b34801561089457600080fd5b5061089d6118f7565b6040516108aa9190612e4a565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190612fdf565b6118fd565b6040516108e79190612e4a565b60405180910390f35b3480156108fc57600080fd5b50610905611984565b6040516109129190612e4a565b60405180910390f35b34801561092757600080fd5b5061093061198a565b60405161093d9190612e4a565b60405180910390f35b34801561095257600080fd5b5061096d60048036038101906109689190612d94565b611990565b005b34801561097b57600080fd5b50610984611a88565b6040516109919190612e4a565b60405180910390f35b3480156109a657600080fd5b506109af611a8e565b6040516109bc9190612e4a565b60405180910390f35b6109cd611a94565b73ffffffffffffffffffffffffffffffffffffffff166109eb6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610a41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a389061306b565b60405180910390fd5b8160108190555080601181905550601154601054610a5f91906130ba565b600f819055506030600f541115610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa29061315c565b60405180910390fd5b5050565b606060038054610abe906131ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906131ab565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b6000610b55610b4e611a94565b8484611a9c565b6001905092915050565b60136020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bb5611a94565b73ffffffffffffffffffffffffffffffffffffffff16610bd36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c209061306b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610cf1611a94565b73ffffffffffffffffffffffffffffffffffffffff16610d0f6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c9061306b565b60405180910390fd5b670de0b6b3a76400006103e86001610d7b610ba3565b610d8591906131dd565b610d8f9190613266565b610d999190613266565b811015610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613309565b60405180910390fd5b670de0b6b3a764000081610def91906131dd565b60088190555050565b6000610e05848484611c67565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e50611a94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec79061339b565b60405180910390fd5b610ee485610edc611a94565b858403611a9c565b60019150509392505050565b61dead81565b60006012905090565b7f00000000000000000000000095c8cf4c63ad2fcf3e77df37a6be53e89e10484c81565b600b60009054906101000a900460ff1681565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f94611a94565b73ffffffffffffffffffffffffffffffffffffffff16610fb26113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611008576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fff9061306b565b60405180910390fd5b81600d8190555080600e81905550600e54600d5461102691906130ba565b600c819055506030600c541115611072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110699061315c565b60405180910390fd5b5050565b600f5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110df611a94565b73ffffffffffffffffffffffffffffffffffffffff166110fd6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a9061306b565b60405180910390fd5b61115d60006125c9565b565b6000611169611a94565b73ffffffffffffffffffffffffffffffffffffffff166111876113b0565b73ffffffffffffffffffffffffffffffffffffffff16146111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d49061306b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611207611a94565b73ffffffffffffffffffffffffffffffffffffffff166112256113b0565b73ffffffffffffffffffffffffffffffffffffffff161461127b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112729061306b565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611304611a94565b73ffffffffffffffffffffffffffffffffffffffff166113226113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f9061306b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611408611a94565b73ffffffffffffffffffffffffffffffffffffffff166114266113b0565b73ffffffffffffffffffffffffffffffffffffffff161461147c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114739061306b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546114a8906131ab565b80601f01602080910402602001604051908101604052809291908181526020018280546114d4906131ab565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b600d5481565b60105481565b600061154b611544611a94565b8484611c67565b6001905092915050565b600b60019054906101000a900460ff1681565b611570611a94565b73ffffffffffffffffffffffffffffffffffffffff1661158e6113b0565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db9061306b565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516116819190612d79565b60405180910390a25050565b611695611a94565b73ffffffffffffffffffffffffffffffffffffffff166116b36113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117009061306b565b60405180910390fd5b670de0b6b3a76400006103e8600561171f610ba3565b61172991906131dd565b6117339190613266565b61173d9190613266565b81101561177f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117769061342d565b60405180910390fd5b670de0b6b3a76400008161179391906131dd565b600a8190555050565b60085481565b60006117ac611a94565b73ffffffffffffffffffffffffffffffffffffffff166117ca6113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118179061306b565b60405180910390fd5b620186a0600161182e610ba3565b61183891906131dd565b6118429190613266565b821015611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b906134bf565b60405180910390fd5b6103e86005611891610ba3565b61189b91906131dd565b6118a59190613266565b8211156118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90613551565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b611998611a94565b73ffffffffffffffffffffffffffffffffffffffff166119b66113b0565b73ffffffffffffffffffffffffffffffffffffffff1614611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a039061306b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a73906135e3565b60405180910390fd5b611a85816125c9565b50565b60115481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0390613675565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390613707565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c5a9190612e4a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3e9061382b565b60405180910390fd5b6000811415611d6157611d5c8383600061268f565b6125c4565b600b60009054906101000a900460ff161561216b57611d7e6113b0565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dec5750611dbc6113b0565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e5f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e785750600660149054906101000a900460ff16155b1561216a57600b60019054906101000a900460ff16611f7257601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611f325750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611f71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6890613897565b60405180910390fd5b5b7f00000000000000000000000095c8cf4c63ad2fcf3e77df37a6be53e89e10484c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480156120175750601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156120be57600854811115612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890613929565b60405180910390fd5b600a5461206d8361108f565b8261207891906130ba565b11156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090613995565b60405180910390fd5b612169565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661216857600a5461211b8361108f565b8261212691906130ba565b1115612167576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215e90613995565b60405180910390fd5b5b5b5b5b60006121763061108f565b90506000600954821015905080801561219b5750600b60029054906101000a900460ff165b80156121b45750600660149054906101000a900460ff16155b801561220b57507f00000000000000000000000095c8cf4c63ad2fcf3e77df37a6be53e89e10484c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156122615750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122b75750601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122fb576001600660146101000a81548160ff0219169083151502179055506122df612910565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123b15750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123bb57600090505b600080600083156125b2577f00000000000000000000000095c8cf4c63ad2fcf3e77df37a6be53e89e10484c73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561242357506000600f54115b15612491576124506064612442600f548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600f546011548461246391906131dd565b61246d9190613266565b9150600f546010548461248091906131dd565b61248a9190613266565b9050612559565b7f00000000000000000000000095c8cf4c63ad2fcf3e77df37a6be53e89e10484c73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161480156124ee57506000600c54115b156125585761251b606461250d600c548a61296190919063ffffffff16565b61297790919063ffffffff16565b9250600c54600e548461252e91906131dd565b6125389190613266565b9150600c54600d548461254b91906131dd565b6125559190613266565b90505b5b600083111561256e5761256d89308561268f565b5b60008211156125a3576125a2307f00000000000000000000000095c8cf4c63ad2fcf3e77df37a6be53e89e10484c8461268f565b5b82876125af91906139b5565b96505b6125bd89898961268f565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f690613799565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561276f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127669061382b565b60405180910390fd5b61277a83838361298d565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612800576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f790613a5b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461289391906130ba565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f79190612e4a565b60405180910390a361290a848484612992565b50505050565b600061291b3061108f565b9050600081141561292c575061295f565b601460095461293b91906131dd565b81111561295457601460095461295191906131dd565b90505b61295d81612997565b505b565b6000818361296f91906131dd565b905092915050565b600081836129859190613266565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156129b4576129b3613a7b565b5b6040519080825280602002602001820160405280156129e25781602001602082028036833780820191505090505b50905030816000815181106129fa576129f9613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612a6b57612a6a613aaa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612ad0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a9c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b54959493929190613bd2565b600060405180830381600087803b158015612b6e57600080fd5b505af1158015612b82573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612ba281612b8f565b8114612bad57600080fd5b50565b600081359050612bbf81612b99565b92915050565b60008060408385031215612bdc57612bdb612b8a565b5b6000612bea85828601612bb0565b9250506020612bfb85828601612bb0565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c3f578082015181840152602081019050612c24565b83811115612c4e576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c7082612c05565b612c7a8185612c10565b9350612c8a818560208601612c21565b612c9381612c54565b840191505092915050565b60006020820190508181036000830152612cb88184612c65565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ceb82612cc0565b9050919050565b612cfb81612ce0565b8114612d0657600080fd5b50565b600081359050612d1881612cf2565b92915050565b60008060408385031215612d3557612d34612b8a565b5b6000612d4385828601612d09565b9250506020612d5485828601612bb0565b9150509250929050565b60008115159050919050565b612d7381612d5e565b82525050565b6000602082019050612d8e6000830184612d6a565b92915050565b600060208284031215612daa57612da9612b8a565b5b6000612db884828501612d09565b91505092915050565b6000819050919050565b6000612de6612de1612ddc84612cc0565b612dc1565b612cc0565b9050919050565b6000612df882612dcb565b9050919050565b6000612e0a82612ded565b9050919050565b612e1a81612dff565b82525050565b6000602082019050612e356000830184612e11565b92915050565b612e4481612b8f565b82525050565b6000602082019050612e5f6000830184612e3b565b92915050565b600060208284031215612e7b57612e7a612b8a565b5b6000612e8984828501612bb0565b91505092915050565b600080600060608486031215612eab57612eaa612b8a565b5b6000612eb986828701612d09565b9350506020612eca86828701612d09565b9250506040612edb86828701612bb0565b9150509250925092565b612eee81612ce0565b82525050565b6000602082019050612f096000830184612ee5565b92915050565b600060ff82169050919050565b612f2581612f0f565b82525050565b6000602082019050612f406000830184612f1c565b92915050565b612f4f81612d5e565b8114612f5a57600080fd5b50565b600081359050612f6c81612f46565b92915050565b60008060408385031215612f8957612f88612b8a565b5b6000612f9785828601612d09565b9250506020612fa885828601612f5d565b9150509250929050565b600060208284031215612fc857612fc7612b8a565b5b6000612fd684828501612f5d565b91505092915050565b60008060408385031215612ff657612ff5612b8a565b5b600061300485828601612d09565b925050602061301585828601612d09565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613055602083612c10565b91506130608261301f565b602082019050919050565b6000602082019050818103600083015261308481613048565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130c582612b8f565b91506130d083612b8f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131055761310461308b565b5b828201905092915050565b7f4d757374206b656570206665657320617420343825206f72206c657373203b29600082015250565b6000613146602083612c10565b915061315182613110565b602082019050919050565b6000602082019050818103600083015261317581613139565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131c357607f821691505b602082108114156131d7576131d661317c565b5b50919050565b60006131e882612b8f565b91506131f383612b8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322c5761322b61308b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061327182612b8f565b915061327c83612b8f565b92508261328c5761328b613237565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006132f3602f83612c10565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613385602883612c10565b915061339082613329565b604082019050919050565b600060208201905081810360008301526133b481613378565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613417602483612c10565b9150613422826133bb565b604082019050919050565b600060208201905081810360008301526134468161340a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006134a9603583612c10565b91506134b48261344d565b604082019050919050565b600060208201905081810360008301526134d88161349c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061353b603483612c10565b9150613546826134df565b604082019050919050565b6000602082019050818103600083015261356a8161352e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135cd602683612c10565b91506135d882613571565b604082019050919050565b600060208201905081810360008301526135fc816135c0565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061365f602483612c10565b915061366a82613603565b604082019050919050565b6000602082019050818103600083015261368e81613652565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136f1602283612c10565b91506136fc82613695565b604082019050919050565b60006020820190508181036000830152613720816136e4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613783602583612c10565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613815602383612c10565b9150613820826137b9565b604082019050919050565b6000602082019050818103600083015261384481613808565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613881601683612c10565b915061388c8261384b565b602082019050919050565b600060208201905081810360008301526138b081613874565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613913603583612c10565b915061391e826138b7565b604082019050919050565b6000602082019050818103600083015261394281613906565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061397f601383612c10565b915061398a82613949565b602082019050919050565b600060208201905081810360008301526139ae81613972565b9050919050565b60006139c082612b8f565b91506139cb83612b8f565b9250828210156139de576139dd61308b565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613a45602683612c10565b9150613a50826139e9565b604082019050919050565b60006020820190508181036000830152613a7481613a38565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000613afe613af9613af484613ad9565b612dc1565b612b8f565b9050919050565b613b0e81613ae3565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4981612ce0565b82525050565b6000613b5b8383613b40565b60208301905092915050565b6000602082019050919050565b6000613b7f82613b14565b613b898185613b1f565b9350613b9483613b30565b8060005b83811015613bc5578151613bac8882613b4f565b9750613bb783613b67565b925050600181019050613b98565b5085935050505092915050565b600060a082019050613be76000830188612e3b565b613bf46020830187613b05565b8181036040830152613c068186613b74565b9050613c156060830185612ee5565b613c226080830184612e3b565b969550505050505056fea2646970667358221220631420002bf8d2904c761f13810514f81742cfe459df5de4d661353bb372500364736f6c634300080a0033
Deployed Bytecode Sourcemap
24355:10751:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29646:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9211:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11378:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25319:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24435:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10331:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30165:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28405:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12029:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24538:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10173:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24493:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24848:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30364:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29323:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25072:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24928:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10502:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2446:103;;;;;;;;;;;;;:::i;:::-;;27709:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28952:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24598:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27545:112;;;;;;;;;;;;;:::i;:::-;;1795:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24700:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29215:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9430:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25002:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25107:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10842:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24888:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29975:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28688:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24733:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27900:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24968:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11080:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24775:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25033:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2704:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25139:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24815:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29646:321;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29778:7:::1;29765:10;:20;;;;29815:13;29796:16;:32;;;;29868:16;;29855:10;;:29;;;;:::i;:::-;29839:13;:45;;;;29920:2;29903:13;;:19;;29895:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29646:321:::0;;:::o;9211:100::-;9265:13;9298:5;9291:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9211:100;:::o;11378:169::-;11461:4;11478:39;11487:12;:10;:12::i;:::-;11501:7;11510:6;11478:8;:39::i;:::-;11535:4;11528:11;;11378:169;;;;:::o;25319:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24435:51::-;;;:::o;10331:108::-;10392:7;10419:12;;10412:19;;10331:108;:::o;30165:189::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30301:9:::1;;;;;;;;;;;30270:41;;30287:12;30270:41;;;;;;;;;;;;30334:12;30322:9;;:24;;;;;;;;;;;;;;;;;;30165:189:::0;:::o;28405:275::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28542:4:::1;28534;28529:1;28513:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28512:26;;;;:::i;:::-;28511:35;;;;:::i;:::-;28501:6;:45;;28479:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;28665:6;28655;:17;;;;:::i;:::-;28632:20;:40;;;;28405:275:::0;:::o;12029:492::-;12169:4;12186:36;12196:6;12204:9;12215:6;12186:9;:36::i;:::-;12235:24;12262:11;:19;12274:6;12262:19;;;;;;;;;;;;;;;:33;12282:12;:10;:12::i;:::-;12262:33;;;;;;;;;;;;;;;;12235:60;;12334:6;12314:16;:26;;12306:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12421:57;12430:6;12438:12;:10;:12::i;:::-;12471:6;12452:16;:25;12421:8;:57::i;:::-;12509:4;12502:11;;;12029:492;;;;;:::o;24538:53::-;24584:6;24538:53;:::o;10173:93::-;10231:5;10256:2;10249:9;;10173:93;:::o;24493:38::-;;;:::o;24848:33::-;;;;;;;;;;;;;:::o;30364:126::-;30430:4;30454:19;:28;30474:7;30454:28;;;;;;;;;;;;;;;;;;;;;;;;;30447:35;;30364:126;;;:::o;29323:315::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29453:7:::1;29441:9;:19;;;;29489:13;29471:15;:31;;;;29540:15;;29528:9;;:27;;;;:::i;:::-;29513:12;:42;;;;29590:2;29574:12;;:18;;29566:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29323:315:::0;;:::o;25072:28::-;;;;:::o;24928:31::-;;;;;;;;;;;;;:::o;10502:127::-;10576:7;10603:9;:18;10613:7;10603:18;;;;;;;;;;;;;;;;10596:25;;10502:127;;;:::o;2446:103::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2511:30:::1;2538:1;2511:18;:30::i;:::-;2446:103::o:0;27709:121::-;27761:4;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27795:5:::1;27778:14;;:22;;;;;;;;;;;;;;;;;;27818:4;27811:11;;27709:121:::0;:::o;28952:167::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29107:4:::1;29065:31;:39;29097:6;29065:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28952:167:::0;;:::o;24598:63::-;;;;;;;;;;;;;:::o;27545:112::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27616:4:::1;27600:13;;:20;;;;;;;;;;;;;;;;;;27645:4;27631:11;;:18;;;;;;;;;;;;;;;;;;27545:112::o:0;1795:87::-;1841:7;1868:6;;;;;;;;;;;1861:13;;1795:87;:::o;24700:24::-;;;;;;;;;;;;;:::o;29215:100::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29300:7:::1;29286:11;;:21;;;;;;;;;;;;;;;;;;29215:100:::0;:::o;9430:104::-;9486:13;9519:7;9512:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9430:104;:::o;25002:24::-;;;;:::o;25107:25::-;;;;:::o;10842:175::-;10928:4;10945:42;10955:12;:10;:12::i;:::-;10969:9;10980:6;10945:9;:42::i;:::-;11005:4;10998:11;;10842:175;;;;:::o;24888:33::-;;;;;;;;;;;;;:::o;29975:182::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30091:8:::1;30060:19;:28;30080:7;30060:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30131:7;30115:34;;;30140:8;30115:34;;;;;;:::i;:::-;;;;;;;;29975:182:::0;;:::o;28688:256::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28828:4:::1;28820;28815:1;28799:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28798:26;;;;:::i;:::-;28797:35;;;;:::i;:::-;28787:6;:45;;28765:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;28929:6;28919;:17;;;;:::i;:::-;28907:9;:29;;;;28688:256:::0;:::o;24733:35::-;;;;:::o;27900:497::-;28008:4;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28087:6:::1;28082:1;28066:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28065:28;;;;:::i;:::-;28052:9;:41;;28030:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;28242:4;28237:1;28221:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28220:26;;;;:::i;:::-;28207:9;:39;;28185:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;28358:9;28337:18;:30;;;;28385:4;28378:11;;27900:497:::0;;;:::o;24968:27::-;;;;:::o;11080:151::-;11169:7;11196:11;:18;11208:5;11196:18;;;;;;;;;;;;;;;:27;11215:7;11196:27;;;;;;;;;;;;;;;;11189:34;;11080:151;;;;:::o;24775:33::-;;;;:::o;25033:30::-;;;;:::o;2704:201::-;2026:12;:10;:12::i;:::-;2015:23;;:7;:5;:7::i;:::-;:23;;;2007:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2813:1:::1;2793:22;;:8;:22;;;;2785:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2869:28;2888:8;2869:18;:28::i;:::-;2704:201:::0;:::o;25139:31::-;;;;:::o;24815:24::-;;;;:::o;468:98::-;521:7;548:10;541:17;;468:98;:::o;14870:380::-;15023:1;15006:19;;:5;:19;;;;14998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15104:1;15085:21;;:7;:21;;;;15077:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15188:6;15158:11;:18;15170:5;15158:18;;;;;;;;;;;;;;;:27;15177:7;15158:27;;;;;;;;;;;;;;;:36;;;;15226:7;15210:32;;15219:5;15210:32;;;15235:6;15210:32;;;;;;:::i;:::-;;;;;;;;14870:380;;;:::o;30498:3679::-;30646:1;30630:18;;:4;:18;;;;30622:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30723:1;30709:16;;:2;:16;;;;30701:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30792:1;30782:6;:11;30778:93;;;30810:28;30826:4;30832:2;30836:1;30810:15;:28::i;:::-;30853:7;;30778:93;30887:14;;;;;;;;;;;30883:1430;;;30948:7;:5;:7::i;:::-;30940:15;;:4;:15;;;;:49;;;;;30982:7;:5;:7::i;:::-;30976:13;;:2;:13;;;;30940:49;:86;;;;;31024:1;31010:16;;:2;:16;;;;30940:86;:128;;;;;31061:6;31047:21;;:2;:21;;;;30940:128;:158;;;;;31090:8;;;;;;;;;;;31089:9;30940:158;30918:1384;;;31138:13;;;;;;;;;;;31133:223;;31210:19;:25;31230:4;31210:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31239:19;:23;31259:2;31239:23;;;;;;;;;;;;;;;;;;;;;;;;;31210:52;31176:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;31133:223;31570:13;31562:21;;:4;:21;;;:82;;;;;31609:31;:35;31641:2;31609:35;;;;;;;;;;;;;;;;;;;;;;;;;31608:36;31562:82;31536:751;;;31731:20;;31721:6;:30;;31687:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;31939:9;;31922:13;31932:2;31922:9;:13::i;:::-;31913:6;:22;;;;:::i;:::-;:35;;31879:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31536:751;;;32067:31;:35;32099:2;32067:35;;;;;;;;;;;;;;;;;;;;;;;;;32062:225;;32187:9;;32170:13;32180:2;32170:9;:13::i;:::-;32161:6;:22;;;;:::i;:::-;:35;;32127:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32062:225;31536:751;30918:1384;30883:1430;32325:28;32356:24;32374:4;32356:9;:24::i;:::-;32325:55;;32393:12;32432:18;;32408:20;:42;;32393:57;;32481:7;:35;;;;;32505:11;;;;;;;;;;;32481:35;:61;;;;;32534:8;;;;;;;;;;;32533:9;32481:61;:97;;;;;32565:13;32559:19;;:2;:19;;;32481:97;:140;;;;;32596:19;:25;32616:4;32596:25;;;;;;;;;;;;;;;;;;;;;;;;;32595:26;32481:140;:181;;;;;32639:19;:23;32659:2;32639:23;;;;;;;;;;;;;;;;;;;;;;;;;32638:24;32481:181;32463:313;;;32700:4;32689:8;;:15;;;;;;;;;;;;;;;;;;32721:10;:8;:10::i;:::-;32759:5;32748:8;;:16;;;;;;;;;;;;;;;;;;32463:313;32788:12;32804:8;;;;;;;;;;;32803:9;32788:24;;32914:19;:25;32934:4;32914:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32943:19;:23;32963:2;32943:23;;;;;;;;;;;;;;;;;;;;;;;;;32914:52;32910:100;;;32993:5;32983:15;;32910:100;33022:12;33049:26;33090:20;33203:7;33199:925;;;33261:13;33255:19;;:2;:19;;;:40;;;;;33294:1;33278:13;;:17;33255:40;33251:583;;;33323:34;33353:3;33323:25;33334:13;;33323:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;33316:41;;33425:13;;33405:16;;33398:4;:23;;;;:::i;:::-;33397:41;;;;:::i;:::-;33376:62;;33494:13;;33480:10;;33473:4;:17;;;;:::i;:::-;33472:35;;;;:::i;:::-;33457:50;;33251:583;;;33577:13;33569:21;;:4;:21;;;:41;;;;;33609:1;33594:12;;:16;33569:41;33565:269;;;33638:33;33667:3;33638:24;33649:12;;33638:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;33631:40;;33738:12;;33719:15;;33712:4;:22;;;;:::i;:::-;33711:39;;;;:::i;:::-;33690:60;;33806:12;;33793:9;;33786:4;:16;;;;:::i;:::-;33785:33;;;;:::i;:::-;33770:48;;33565:269;33251:583;33860:1;33854:4;:7;33850:90;;;33882:42;33898:4;33912;33919;33882:15;:42::i;:::-;33850:90;33979:1;33958:18;:22;33954:128;;;34001:65;34025:4;34032:13;34047:18;34001:15;:65::i;:::-;33954:128;34108:4;34098:14;;;;;:::i;:::-;;;33199:925;34136:33;34152:4;34158:2;34162:6;34136:15;:33::i;:::-;30611:3566;;;;;;30498:3679;;;;:::o;3065:191::-;3139:16;3158:6;;;;;;;;;;;3139:25;;3184:8;3175:6;;:17;;;;;;;;;;;;;;;;;;3239:8;3208:40;;3229:8;3208:40;;;;;;;;;;;;3128:128;3065:191;:::o;13011:733::-;13169:1;13151:20;;:6;:20;;;;13143:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13253:1;13232:23;;:9;:23;;;;13224:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13308:47;13329:6;13337:9;13348:6;13308:20;:47::i;:::-;13368:21;13392:9;:17;13402:6;13392:17;;;;;;;;;;;;;;;;13368:41;;13445:6;13428:13;:23;;13420:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13566:6;13550:13;:22;13530:9;:17;13540:6;13530:17;;;;;;;;;;;;;;;:42;;;;13618:6;13594:9;:20;13604:9;13594:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13659:9;13642:35;;13651:6;13642:35;;;13670:6;13642:35;;;;;;:::i;:::-;;;;;;;;13690:46;13710:6;13718:9;13729:6;13690:19;:46::i;:::-;13132:612;13011:733;;;:::o;34762:339::-;34801:23;34827:24;34845:4;34827:9;:24::i;:::-;34801:50;;34885:1;34866:15;:20;34862:59;;;34903:7;;;34862:59;34976:2;34955:18;;:23;;;;:::i;:::-;34937:15;:41;34933:115;;;35034:2;35013:18;;:23;;;;:::i;:::-;34995:41;;34933:115;35060:33;35077:15;35060:16;:33::i;:::-;34790:311;34762:339;:::o;20323:98::-;20381:7;20412:1;20408;:5;;;;:::i;:::-;20401:12;;20323:98;;;;:::o;20722:::-;20780:7;20811:1;20807;:5;;;;:::i;:::-;20800:12;;20722:98;;;;:::o;15850:125::-;;;;:::o;16579:124::-;;;;:::o;34185:569::-;34311:21;34349:1;34335:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34311:40;;34380:4;34362;34367:1;34362:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34406:3;;;;;;;;;;;34396:4;34401:1;34396:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;34422:62;34439:4;34454:15;34472:11;34422:8;:62::i;:::-;34523:15;:69;;;34607:11;34633:1;34677:4;34696:9;;;;;;;;;;;34720:15;34523:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34240:514;34185:569;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:152::-;4731:9;4764:37;4795:5;4764:37;:::i;:::-;4751:50;;4655:152;;;:::o;4813:183::-;4926:63;4983:5;4926:63;:::i;:::-;4921:3;4914:76;4813:183;;:::o;5002:274::-;5121:4;5159:2;5148:9;5144:18;5136:26;;5172:97;5266:1;5255:9;5251:17;5242:6;5172:97;:::i;:::-;5002:274;;;;:::o;5282:118::-;5369:24;5387:5;5369:24;:::i;:::-;5364:3;5357:37;5282:118;;:::o;5406:222::-;5499:4;5537:2;5526:9;5522:18;5514:26;;5550:71;5618:1;5607:9;5603:17;5594:6;5550:71;:::i;:::-;5406:222;;;;:::o;5634:329::-;5693:6;5742:2;5730:9;5721:7;5717:23;5713:32;5710:119;;;5748:79;;:::i;:::-;5710:119;5868:1;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5839:117;5634:329;;;;:::o;5969:619::-;6046:6;6054;6062;6111:2;6099:9;6090:7;6086:23;6082:32;6079:119;;;6117:79;;:::i;:::-;6079:119;6237:1;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6208:117;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;6492:2;6518:53;6563:7;6554:6;6543:9;6539:22;6518:53;:::i;:::-;6508:63;;6463:118;5969:619;;;;;:::o;6594:118::-;6681:24;6699:5;6681:24;:::i;:::-;6676:3;6669:37;6594:118;;:::o;6718:222::-;6811:4;6849:2;6838:9;6834:18;6826:26;;6862:71;6930:1;6919:9;6915:17;6906:6;6862:71;:::i;:::-;6718:222;;;;:::o;6946:86::-;6981:7;7021:4;7014:5;7010:16;6999:27;;6946:86;;;:::o;7038:112::-;7121:22;7137:5;7121:22;:::i;:::-;7116:3;7109:35;7038:112;;:::o;7156:214::-;7245:4;7283:2;7272:9;7268:18;7260:26;;7296:67;7360:1;7349:9;7345:17;7336:6;7296:67;:::i;:::-;7156:214;;;;:::o;7376:116::-;7446:21;7461:5;7446:21;:::i;:::-;7439:5;7436:32;7426:60;;7482:1;7479;7472:12;7426:60;7376:116;:::o;7498:133::-;7541:5;7579:6;7566:20;7557:29;;7595:30;7619:5;7595:30;:::i;:::-;7498:133;;;;:::o;7637:468::-;7702:6;7710;7759:2;7747:9;7738:7;7734:23;7730:32;7727:119;;;7765:79;;:::i;:::-;7727:119;7885:1;7910:53;7955:7;7946:6;7935:9;7931:22;7910:53;:::i;:::-;7900:63;;7856:117;8012:2;8038:50;8080:7;8071:6;8060:9;8056:22;8038:50;:::i;:::-;8028:60;;7983:115;7637:468;;;;;:::o;8111:323::-;8167:6;8216:2;8204:9;8195:7;8191:23;8187:32;8184:119;;;8222:79;;:::i;:::-;8184:119;8342:1;8367:50;8409:7;8400:6;8389:9;8385:22;8367:50;:::i;:::-;8357:60;;8313:114;8111:323;;;;:::o;8440:474::-;8508:6;8516;8565:2;8553:9;8544:7;8540:23;8536:32;8533:119;;;8571:79;;:::i;:::-;8533:119;8691:1;8716:53;8761:7;8752:6;8741:9;8737:22;8716:53;:::i;:::-;8706:63;;8662:117;8818:2;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8789:118;8440:474;;;;;:::o;8920:182::-;9060:34;9056:1;9048:6;9044:14;9037:58;8920:182;:::o;9108:366::-;9250:3;9271:67;9335:2;9330:3;9271:67;:::i;:::-;9264:74;;9347:93;9436:3;9347:93;:::i;:::-;9465:2;9460:3;9456:12;9449:19;;9108:366;;;:::o;9480:419::-;9646:4;9684:2;9673:9;9669:18;9661:26;;9733:9;9727:4;9723:20;9719:1;9708:9;9704:17;9697:47;9761:131;9887:4;9761:131;:::i;:::-;9753:139;;9480:419;;;:::o;9905:180::-;9953:77;9950:1;9943:88;10050:4;10047:1;10040:15;10074:4;10071:1;10064:15;10091:305;10131:3;10150:20;10168:1;10150:20;:::i;:::-;10145:25;;10184:20;10202:1;10184:20;:::i;:::-;10179:25;;10338:1;10270:66;10266:74;10263:1;10260:81;10257:107;;;10344:18;;:::i;:::-;10257:107;10388:1;10385;10381:9;10374:16;;10091:305;;;;:::o;10402:174::-;10538:34;10534:1;10526:6;10522:14;10515:58;10402:174;:::o;10578:350::-;10720:3;10737:67;10801:2;10796:3;10737:67;:::i;:::-;10730:74;;10809:93;10898:3;10809:93;:::i;:::-;10923:2;10918:3;10914:12;10907:19;;10578:350;;;:::o;10930:403::-;11096:4;11130:2;11119:9;11115:18;11107:26;;11175:9;11169:4;11165:20;11161:1;11150:9;11146:17;11139:47;11199:131;11325:4;11199:131;:::i;:::-;11191:139;;10930:403;;;:::o;11335:164::-;11379:77;11376:1;11369:88;11472:4;11469:1;11462:15;11492:4;11489:1;11482:15;11501:284;11545:6;11578:1;11572:4;11568:12;11558:22;;11621:1;11615:4;11611:12;11638:18;11628:73;;11690:4;11682:6;11678:17;11668:27;;11628:73;11744:2;11736:6;11733:14;11713:18;11710:38;11707:76;;;11759:18;;:::i;:::-;11707:76;11552:233;11501:284;;;:::o;11787:324::-;11827:7;11846:20;11864:1;11846:20;:::i;:::-;11841:25;;11876:20;11894:1;11876:20;:::i;:::-;11871:25;;12056:1;11988:66;11984:74;11981:1;11978:81;11973:1;11966:9;11959:17;11955:105;11952:131;;;12063:18;;:::i;:::-;11952:131;12107:1;12104;12100:9;12089:20;;11787:324;;;;:::o;12113:164::-;12157:77;12154:1;12147:88;12250:4;12247:1;12240:15;12270:4;12267:1;12260:15;12279:165;12319:1;12332:20;12350:1;12332:20;:::i;:::-;12327:25;;12362:20;12380:1;12362:20;:::i;:::-;12357:25;;12397:1;12387:35;;12402:18;;:::i;:::-;12387:35;12440:1;12437;12433:9;12428:14;;12279:165;;;;:::o;12446:222::-;12582:34;12578:1;12570:6;12566:14;12559:58;12647:17;12642:2;12634:6;12630:15;12623:42;12446:222;:::o;12670:350::-;12812:3;12829:67;12893:2;12888:3;12829:67;:::i;:::-;12822:74;;12901:93;12990:3;12901:93;:::i;:::-;13015:2;13010:3;13006:12;12999:19;;12670:350;;;:::o;13022:403::-;13188:4;13222:2;13211:9;13207:18;13199:26;;13267:9;13261:4;13257:20;13253:1;13242:9;13238:17;13231:47;13291:131;13417:4;13291:131;:::i;:::-;13283:139;;13022:403;;;:::o;13427:215::-;13563:34;13559:1;13551:6;13547:14;13540:58;13628:10;13623:2;13615:6;13611:15;13604:35;13427:215;:::o;13644:350::-;13786:3;13803:67;13867:2;13862:3;13803:67;:::i;:::-;13796:74;;13875:93;13964:3;13875:93;:::i;:::-;13989:2;13984:3;13980:12;13973:19;;13644:350;;;:::o;13996:403::-;14162:4;14196:2;14185:9;14181:18;14173:26;;14241:9;14235:4;14231:20;14227:1;14216:9;14212:17;14205:47;14265:131;14391:4;14265:131;:::i;:::-;14257:139;;13996:403;;;:::o;14401:211::-;14537:34;14533:1;14525:6;14521:14;14514:58;14602:6;14597:2;14589:6;14585:15;14578:31;14401:211;:::o;14614:350::-;14756:3;14773:67;14837:2;14832:3;14773:67;:::i;:::-;14766:74;;14845:93;14934:3;14845:93;:::i;:::-;14959:2;14954:3;14950:12;14943:19;;14614:350;;;:::o;14966:403::-;15132:4;15166:2;15155:9;15151:18;15143:26;;15211:9;15205:4;15201:20;15197:1;15186:9;15182:17;15175:47;15235:131;15361:4;15235:131;:::i;:::-;15227:139;;14966:403;;;:::o;15371:228::-;15507:34;15503:1;15495:6;15491:14;15484:58;15572:23;15567:2;15559:6;15555:15;15548:48;15371:228;:::o;15601:350::-;15743:3;15760:67;15824:2;15819:3;15760:67;:::i;:::-;15753:74;;15832:93;15921:3;15832:93;:::i;:::-;15946:2;15941:3;15937:12;15930:19;;15601:350;;;:::o;15953:403::-;16119:4;16153:2;16142:9;16138:18;16130:26;;16198:9;16192:4;16188:20;16184:1;16173:9;16169:17;16162:47;16222:131;16348:4;16222:131;:::i;:::-;16214:139;;15953:403;;;:::o;16358:227::-;16494:34;16490:1;16482:6;16478:14;16471:58;16559:22;16554:2;16546:6;16542:15;16535:47;16358:227;:::o;16587:350::-;16729:3;16746:67;16810:2;16805:3;16746:67;:::i;:::-;16739:74;;16818:93;16907:3;16818:93;:::i;:::-;16932:2;16927:3;16923:12;16916:19;;16587:350;;;:::o;16939:403::-;17105:4;17139:2;17128:9;17124:18;17116:26;;17184:9;17178:4;17174:20;17170:1;17159:9;17155:17;17148:47;17208:131;17334:4;17208:131;:::i;:::-;17200:139;;16939:403;;;:::o;17344:213::-;17480:34;17476:1;17468:6;17464:14;17457:58;17545:8;17540:2;17532:6;17528:15;17521:33;17344:213;:::o;17559:350::-;17701:3;17718:67;17782:2;17777:3;17718:67;:::i;:::-;17711:74;;17790:93;17879:3;17790:93;:::i;:::-;17904:2;17899:3;17895:12;17888:19;;17559:350;;;:::o;17911:403::-;18077:4;18111:2;18100:9;18096:18;18088:26;;18156:9;18150:4;18146:20;18142:1;18131:9;18127:17;18120:47;18180:131;18306:4;18180:131;:::i;:::-;18172:139;;17911:403;;;:::o;18316:211::-;18452:34;18448:1;18440:6;18436:14;18429:58;18517:6;18512:2;18504:6;18500:15;18493:31;18316:211;:::o;18529:350::-;18671:3;18688:67;18752:2;18747:3;18688:67;:::i;:::-;18681:74;;18760:93;18849:3;18760:93;:::i;:::-;18874:2;18869:3;18865:12;18858:19;;18529:350;;;:::o;18881:403::-;19047:4;19081:2;19070:9;19066:18;19058:26;;19126:9;19120:4;19116:20;19112:1;19101:9;19097:17;19090:47;19150:131;19276:4;19150:131;:::i;:::-;19142:139;;18881:403;;;:::o;19286:209::-;19422:34;19418:1;19410:6;19406:14;19399:58;19487:4;19482:2;19474:6;19470:15;19463:29;19286:209;:::o;19497:350::-;19639:3;19656:67;19720:2;19715:3;19656:67;:::i;:::-;19649:74;;19728:93;19817:3;19728:93;:::i;:::-;19842:2;19837:3;19833:12;19826:19;;19497:350;;;:::o;19849:403::-;20015:4;20049:2;20038:9;20034:18;20026:26;;20094:9;20088:4;20084:20;20080:1;20069:9;20065:17;20058:47;20118:131;20244:4;20118:131;:::i;:::-;20110:139;;19849:403;;;:::o;20254:212::-;20390:34;20386:1;20378:6;20374:14;20367:58;20455:7;20450:2;20442:6;20438:15;20431:32;20254:212;:::o;20468:350::-;20610:3;20627:67;20691:2;20686:3;20627:67;:::i;:::-;20620:74;;20699:93;20788:3;20699:93;:::i;:::-;20813:2;20808:3;20804:12;20797:19;;20468:350;;;:::o;20820:403::-;20986:4;21020:2;21009:9;21005:18;20997:26;;21065:9;21059:4;21055:20;21051:1;21040:9;21036:17;21029:47;21089:131;21215:4;21089:131;:::i;:::-;21081:139;;20820:403;;;:::o;21225:210::-;21361:34;21357:1;21349:6;21345:14;21338:58;21426:5;21421:2;21413:6;21409:15;21402:30;21225:210;:::o;21437:350::-;21579:3;21596:67;21660:2;21655:3;21596:67;:::i;:::-;21589:74;;21668:93;21757:3;21668:93;:::i;:::-;21782:2;21777:3;21773:12;21766:19;;21437:350;;;:::o;21789:403::-;21955:4;21989:2;21978:9;21974:18;21966:26;;22034:9;22028:4;22024:20;22020:1;22009:9;22005:17;21998:47;22058:131;22184:4;22058:131;:::i;:::-;22050:139;;21789:403;;;:::o;22194:164::-;22330:24;22326:1;22318:6;22314:14;22307:48;22194:164;:::o;22360:350::-;22502:3;22519:67;22583:2;22578:3;22519:67;:::i;:::-;22512:74;;22591:93;22680:3;22591:93;:::i;:::-;22705:2;22700:3;22696:12;22689:19;;22360:350;;;:::o;22712:403::-;22878:4;22912:2;22901:9;22897:18;22889:26;;22957:9;22951:4;22947:20;22943:1;22932:9;22928:17;22921:47;22981:131;23107:4;22981:131;:::i;:::-;22973:139;;22712:403;;;:::o;23117:228::-;23253:34;23249:1;23241:6;23237:14;23230:58;23318:23;23313:2;23305:6;23301:15;23294:48;23117:228;:::o;23347:350::-;23489:3;23506:67;23570:2;23565:3;23506:67;:::i;:::-;23499:74;;23578:93;23667:3;23578:93;:::i;:::-;23692:2;23687:3;23683:12;23676:19;;23347:350;;;:::o;23699:403::-;23865:4;23899:2;23888:9;23884:18;23876:26;;23944:9;23938:4;23934:20;23930:1;23919:9;23915:17;23908:47;23968:131;24094:4;23968:131;:::i;:::-;23960:139;;23699:403;;;:::o;24104:161::-;24240:21;24236:1;24228:6;24224:14;24217:45;24104:161;:::o;24267:350::-;24409:3;24426:67;24490:2;24485:3;24426:67;:::i;:::-;24419:74;;24498:93;24587:3;24498:93;:::i;:::-;24612:2;24607:3;24603:12;24596:19;;24267:350;;;:::o;24619:403::-;24785:4;24819:2;24808:9;24804:18;24796:26;;24864:9;24858:4;24854:20;24850:1;24839:9;24835:17;24828:47;24888:131;25014:4;24888:131;:::i;:::-;24880:139;;24619:403;;;:::o;25024:171::-;25064:4;25080:20;25098:1;25080:20;:::i;:::-;25075:25;;25110:20;25128:1;25110:20;:::i;:::-;25105:25;;25145:1;25142;25139:8;25136:34;;;25150:18;;:::i;:::-;25136:34;25191:1;25188;25184:9;25176:17;;25024:171;;;;:::o;25197:213::-;25333:34;25329:1;25321:6;25317:14;25310:58;25398:8;25393:2;25385:6;25381:15;25374:33;25197:213;:::o;25412:350::-;25554:3;25571:67;25635:2;25630:3;25571:67;:::i;:::-;25564:74;;25643:93;25732:3;25643:93;:::i;:::-;25757:2;25752:3;25748:12;25741:19;;25412:350;;;:::o;25764:403::-;25930:4;25964:2;25953:9;25949:18;25941:26;;26009:9;26003:4;25999:20;25995:1;25984:9;25980:17;25973:47;26033:131;26159:4;26033:131;:::i;:::-;26025:139;;25764:403;;;:::o;26169:164::-;26213:77;26210:1;26203:88;26306:4;26303:1;26296:15;26326:4;26323:1;26316:15;26335:164;26379:77;26376:1;26369:88;26472:4;26469:1;26462:15;26492:4;26489:1;26482:15;26501:77;26546:7;26571:5;26560:16;;26501:77;;;:::o;26580:150::-;26638:9;26667:61;26685:42;26694:32;26720:5;26694:32;:::i;:::-;26685:42;:::i;:::-;26667:61;:::i;:::-;26654:74;;26580:150;;;:::o;26732:139::-;26823:45;26862:5;26823:45;:::i;:::-;26818:3;26811:58;26732:139;;:::o;26873:106::-;26940:6;26970:5;26964:12;26954:22;;26873:106;;;:::o;26981:172::-;27080:11;27110:6;27105:3;27098:19;27146:4;27141:3;27137:14;27122:29;;26981:172;;;;:::o;27155:120::-;27222:4;27241:3;27233:11;;27267:4;27262:3;27258:14;27250:22;;27155:120;;;:::o;27277:100::-;27350:24;27368:5;27350:24;:::i;:::-;27345:3;27338:37;27277:100;;:::o;27379:167::-;27448:10;27465:46;27507:3;27499:6;27465:46;:::i;:::-;27539:4;27534:3;27530:14;27516:28;;27379:167;;;;:::o;27548:105::-;27618:4;27646;27641:3;27637:14;27629:22;;27548:105;;;:::o;27681:684::-;27800:3;27825:54;27873:5;27825:54;:::i;:::-;27891:86;27970:6;27965:3;27891:86;:::i;:::-;27884:93;;27997:56;28047:5;27997:56;:::i;:::-;28072:7;28099:1;28084:264;28109:6;28106:1;28103:13;28084:264;;;28177:6;28171:13;28200:63;28259:3;28244:13;28200:63;:::i;:::-;28193:70;;28282:60;28335:6;28282:60;:::i;:::-;28272:70;;28140:208;28131:1;28128;28124:9;28119:14;;28084:264;;;28088:14;28360:3;28353:10;;27805:560;;;27681:684;;;;:::o;28367:799::-;28630:4;28664:3;28653:9;28649:19;28641:27;;28674:71;28742:1;28731:9;28727:17;28718:6;28674:71;:::i;:::-;28751:80;28827:2;28816:9;28812:18;28803:6;28751:80;:::i;:::-;28874:9;28868:4;28864:20;28859:2;28848:9;28844:18;28837:48;28898:108;29001:4;28992:6;28898:108;:::i;:::-;28890:116;;29012:72;29080:2;29069:9;29065:18;29056:6;29012:72;:::i;:::-;29090:73;29158:3;29147:9;29143:19;29134:6;29090:73;:::i;:::-;28367:799;;;;;;;;:::o
Swarm Source
ipfs://631420002bf8d2904c761f13810514f81742cfe459df5de4d661353bb3725003
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.