ERC-20
Overview
Max Total Supply
100,000,000 WAIFU
Holders
333
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Waifu
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-02 */ // SPDX-License-Identifier: MIT // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address to, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require( fromBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require( currentAllowance >= amount, "ERC20: insufficient allowance" ); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function swapTokensForExactETH( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapETHForExactTokens( uint amountOut, address[] calldata path, address to, uint deadline ) external payable returns (uint[] memory amounts); function quote( uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB); function getAmountOut( uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut); function getAmountIn( uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn); function getAmountsOut( uint amountIn, address[] calldata path ) external view returns (uint[] memory amounts); function getAmountsIn( uint amountOut, address[] calldata path ) external view returns (uint[] memory amounts); } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance( address owner, address spender ) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom( address from, address to, uint value ) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit( address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn( address indexed sender, uint amount0, uint amount1, address indexed to ); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap( uint amount0Out, uint amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/Waifu.sol pragma solidity ^0.8.9; contract Waifu is ERC20, Ownable { address private WETH; address public constant uniswapV2Router02 = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; IUniswapV2Pair public pairContract; IUniswapV2Router02 public router; address public pair; mapping(address => uint256) private buyBlock; address public feeReceiver = 0x58bAaf5515545E7375d51064bae511E0F88dF0c1; // 25% at launch for sniping; then 5% uint16 public feeInitialPercentageBuy = 2500; uint16 public feeInitialPercentageSell = 2500; uint16 public feePercentageBuy = 2500; uint16 public feePercentageSell = 2500; uint16 public burnFeePercentage = 0; uint256 public maxTokenAmountPerWallet = 1000000 * 10 ** decimals(); //1% Max uint256 public maxTokenAmountPerTransaction = 0 * 10 ** decimals(); uint256 private buyCount = 0; uint256 private initialBuyCountTreshold = 0; uint256 public swapTreshold = 250000000000000000; //0.25 Ether bool private inSwap = false; modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() ERC20(unicode"GetCherry.ai", unicode"WAIFU") { router = IUniswapV2Router02(uniswapV2Router02); WETH = router.WETH(); pair = IUniswapV2Factory(router.factory()).createPair( WETH, address(this) ); pairContract = IUniswapV2Pair(pair); _approve(address(this), uniswapV2Router02, type(uint256).max); _approve(address(this), pair, type(uint256).max); _approve(msg.sender, uniswapV2Router02, type(uint256).max); _mint(msg.sender, (100000000) * 10 ** decimals()); } receive() external payable {} modifier isBot(address from, address to) { require( block.number > buyBlock[from] || block.number > buyBlock[to], "Cannot perform more than one transaction in the same block" ); _; buyBlock[from] = block.number; buyBlock[to] = block.number; } function checkMaxTransactionAmountExceeded(uint256 amount) private view { if (msg.sender != owner() || msg.sender != address(this)) require( amount <= maxTokenAmountPerTransaction, "Max token per transaction exceeded" ); } function checkMaxWalletAmountExceeded( address to, uint256 amount ) private view { if (msg.sender != owner() || to != address(this)) require( balanceOf(to) + amount <= maxTokenAmountPerWallet, "Max token per wallet exceeded" ); } function calculateTokenAmountInETH( uint256 amount ) public view returns (uint256) { address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; try router.getAmountsOut(amount, path) returns ( uint[] memory amountsOut ) { return amountsOut[1]; } catch { return 0; } } function swapBalanceToETHAndSend() private lockTheSwap { uint256 amountIn = balanceOf(address(this)); address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountIn, 0, path, address(this), block.timestamp ); payable(feeReceiver).transfer(address(this).balance); } function distributeFees() private { uint256 amountInETH = calculateTokenAmountInETH( balanceOf(address(this)) ); (uint112 reserve0, uint112 reserve1, ) = pairContract.getReserves(); uint256 totalETHInPool; if (pairContract.token0() == WETH) totalETHInPool = uint256(reserve0); else if (pairContract.token1() == WETH) totalETHInPool = uint256(reserve1); if (amountInETH > swapTreshold) swapBalanceToETHAndSend(); } function _transfer( address from, address to, uint256 amount ) internal override isBot(from, to) { if ( from == owner() || to == owner() || from == feeReceiver || to == feeReceiver || inSwap ) { super._transfer(from, to, amount); } else { uint256 feePercentage = 0; // 0% on transfer bool buying = from == pair && to != uniswapV2Router02; bool selling = from != uniswapV2Router02 && to == pair; if (msg.sender != pair && !inSwap) distributeFees(); if (buying) { if (buyCount < initialBuyCountTreshold) { feePercentage = feeInitialPercentageBuy; buyCount++; } else { feePercentage = feePercentageBuy; } } if (selling) { if (buyCount < initialBuyCountTreshold) { feePercentage = feeInitialPercentageSell; } else { feePercentage = feePercentageSell; } } uint256 feeAmount = (amount * feePercentage) / (10000); uint256 burnFeeAmount = (amount * burnFeePercentage) / (10000); uint256 finalAmount = (amount - (feeAmount + burnFeeAmount)); if (maxTokenAmountPerTransaction > 0) checkMaxTransactionAmountExceeded(amount); if (buying && maxTokenAmountPerWallet > 0) checkMaxWalletAmountExceeded(to, finalAmount); if (burnFeeAmount > 0) _burn(from, burnFeeAmount); super._transfer(from, address(this), feeAmount); super._transfer(from, to, finalAmount); } } function manualSwap() public { if (msg.sender == feeReceiver) { swapBalanceToETHAndSend(); } } function removeLimits() public { if (msg.sender == feeReceiver) { maxTokenAmountPerWallet = 0; maxTokenAmountPerTransaction = 0; } } function removeTaxes() public { if (msg.sender == feeReceiver) { feePercentageBuy = 0; feePercentageSell = 0; feeInitialPercentageBuy = 0; feeInitialPercentageSell = 0; burnFeePercentage = 0; } } // Handle manualSwapCustom function swapBalanceToETHAndSendCustom(uint256 amountToSell) private lockTheSwap { uint256 amountIn = balanceOf(address(this)); // Ensure amount does not exceed balance require (amountToSell <= amountIn, "Amount exceeds balance of contract."); address[] memory path = new address[](2); path[0] = address(this); path[1] = WETH; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSell, 0, path, address(this), block.timestamp ); payable(feeReceiver).transfer(address(this).balance); } // Allow Fee Receiver to sell custom amount of token function manualSwapCustom(uint256 _amountToSell) public { if (msg.sender == feeReceiver) { swapBalanceToETHAndSendCustom(_amountToSell); } } // Allow Fee Receiver to change threshold for tax sells function updateThreshold(uint256 _swapTreshold) public { if (msg.sender == feeReceiver) { swapTreshold = _swapTreshold; } } // Allow Fee Receiver to change to production taxes (5%) function launch() public { if (msg.sender == feeReceiver) { feePercentageBuy = 500; feePercentageSell = 500; feeInitialPercentageBuy = 500; feeInitialPercentageSell = 500; } } // Allow Fee Receiver to set new Fee Receiver function changeFeeReceiver(address _feeReceiver) public { if (msg.sender == feeReceiver) { feeReceiver = _feeReceiver; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeePercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateTokenAmountInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_feeReceiver","type":"address"}],"name":"changeFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeInitialPercentageBuy","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeInitialPercentageSell","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentageBuy","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentageSell","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountToSell","type":"uint256"}],"name":"manualSwapCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router02","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTreshold","type":"uint256"}],"name":"updateThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040527358baaf5515545e7375d51064bae511e0f88df0c1600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109c4600b60146101000a81548161ffff021916908361ffff1602179055506109c4600b60166101000a81548161ffff021916908361ffff1602179055506109c4600b60186101000a81548161ffff021916908361ffff1602179055506109c4600b601a6101000a81548161ffff021916908361ffff1602179055505f600b601c6101000a81548161ffff021916908361ffff160217905550620001016200065960201b60201c565b600a6200010f919062000bf7565b620f42406200011f919062000c47565b600c55620001326200065960201b60201c565b600a62000140919062000bf7565b5f6200014d919062000c47565b600d555f600e555f600f556703782dace9d900006010555f60115f6101000a81548160ff02191690831515021790555034801562000189575f80fd5b506040518060400160405280600c81526020017f4765744368657272792e616900000000000000000000000000000000000000008152506040518060400160405280600581526020017f5741494655000000000000000000000000000000000000000000000000000000815250816003908162000207919062000eec565b50806004908162000219919062000eec565b5050506200023c620002306200066160201b60201c565b6200066860201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000321919062001035565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003f1919062001035565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200044e92919062001076565b6020604051808303815f875af11580156200046b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000491919062001035565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057830737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072b60201b60201c565b620005cc3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072b60201b60201c565b6200061333737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072b60201b60201c565b6200065333620006286200065960201b60201c565b600a62000636919062000bf7565b6305f5e10062000647919062000c47565b620008f660201b60201c565b620012ad565b5f6012905090565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200079c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007939062001125565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200080d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080490620011b9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008e99190620011ea565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000967576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095e9062001253565b60405180910390fd5b6200097a5f838362000a5b60201b60201c565b8060025f8282546200098d919062001273565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a3c9190620011ea565b60405180910390a362000a575f838362000a6060201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000aef5780860481111562000ac75762000ac662000a65565b5b600185161562000ad75780820291505b808102905062000ae78562000a92565b945062000aa7565b94509492505050565b5f8262000b09576001905062000bdb565b8162000b18575f905062000bdb565b816001811462000b31576002811462000b3c5762000b72565b600191505062000bdb565b60ff84111562000b515762000b5062000a65565b5b8360020a91508482111562000b6b5762000b6a62000a65565b5b5062000bdb565b5060208310610133831016604e8410600b841016171562000bac5782820a90508381111562000ba65762000ba562000a65565b5b62000bdb565b62000bbb848484600162000a9e565b9250905081840481111562000bd55762000bd462000a65565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f62000c038262000be2565b915062000c108362000beb565b925062000c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000af8565b905092915050565b5f62000c538262000be2565b915062000c608362000be2565b925082820262000c708162000be2565b9150828204841483151762000c8a5762000c8962000a65565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d0d57607f821691505b60208210810362000d235762000d2262000cc8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d4a565b62000d93868362000d4a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000dd462000dce62000dc88462000be2565b62000dab565b62000be2565b9050919050565b5f819050919050565b62000def8362000db4565b62000e0762000dfe8262000ddb565b84845462000d56565b825550505050565b5f90565b62000e1d62000e0f565b62000e2a81848462000de4565b505050565b5b8181101562000e515762000e455f8262000e13565b60018101905062000e30565b5050565b601f82111562000ea05762000e6a8162000d29565b62000e758462000d3b565b8101602085101562000e85578190505b62000e9d62000e948562000d3b565b83018262000e2f565b50505b505050565b5f82821c905092915050565b5f62000ec25f198460080262000ea5565b1980831691505092915050565b5f62000edc838362000eb1565b9150826002028217905092915050565b62000ef78262000c91565b67ffffffffffffffff81111562000f135762000f1262000c9b565b5b62000f1f825462000cf5565b62000f2c82828562000e55565b5f60209050601f83116001811462000f62575f841562000f4d578287015190505b62000f59858262000ecf565b86555062000fc8565b601f19841662000f728662000d29565b5f5b8281101562000f9b5784890151825560018201915060208501945060208101905062000f74565b8683101562000fbb578489015162000fb7601f89168262000eb1565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fff8262000fd4565b9050919050565b620010118162000ff3565b81146200101c575f80fd5b50565b5f815190506200102f8162001006565b92915050565b5f602082840312156200104d576200104c62000fd0565b5b5f6200105c848285016200101f565b91505092915050565b620010708162000ff3565b82525050565b5f6040820190506200108b5f83018562001065565b6200109a602083018462001065565b9392505050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200110d602483620010a1565b91506200111a82620010b1565b604082019050919050565b5f6020820190508181035f8301526200113e81620010ff565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620011a1602283620010a1565b9150620011ae8262001145565b604082019050919050565b5f6020820190508181035f830152620011d28162001193565b9050919050565b620011e48162000be2565b82525050565b5f602082019050620011ff5f830184620011d9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200123b601f83620010a1565b9150620012488262001205565b602082019050919050565b5f6020820190508181035f8301526200126c816200122d565b9050919050565b5f6200127f8262000be2565b91506200128c8362000be2565b9250828201905080821115620012a757620012a662000a65565b5b92915050565b613b6580620012bb5f395ff3fe608060405260043610610207575f3560e01c8063715018a611610117578063a9059cbb1161009f578063d7d7442f1161006e578063d7d7442f14610714578063dd62ed3e1461073c578063e52fb9ec14610778578063f2fde38b146107a2578063f887ea40146107ca5761020e565b8063a9059cbb1461065a578063ab99904214610696578063b3f00674146106c0578063c4ceb339146106ea5761020e565b80639277883d116100e65780639277883d1461056457806395d89b41146105a0578063a457c2d7146105ca578063a7c6402c14610606578063a8aa1b31146106305761020e565b8063715018a6146104e6578063751039fc146104fc5780637c08b964146105125780638da5cb5b1461053a5761020e565b8063395093511161019a57806351bc3c851161016957806351bc3c851461042c57806355a60f1214610442578063685fbc6b1461046a57806369e1ea7f1461049457806370a08231146104aa5761020e565b806339509351146103725780633a4ceedd146103ae578063418bce8a146103d85780634d709adf146104025761020e565b806318160ddd116101d657806318160ddd146102b857806323b872dd146102e2578063313ce5671461031e5780633912a2c3146103485761020e565b806301339c21146102125780630214c4631461022857806306fdde0314610252578063095ea7b31461027c5761020e565b3661020e57005b5f80fd5b34801561021d575f80fd5b506102266107f4565b005b348015610233575f80fd5b5061023c6108c7565b604051610249919061294a565b60405180910390f35b34801561025d575f80fd5b506102666108db565b60405161027391906129ed565b60405180910390f35b348015610287575f80fd5b506102a2600480360381019061029d9190612aab565b61096b565b6040516102af9190612b03565b60405180910390f35b3480156102c3575f80fd5b506102cc61098d565b6040516102d99190612b2b565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612b44565b610996565b6040516103159190612b03565b60405180910390f35b348015610329575f80fd5b506103326109c4565b60405161033f9190612baf565b60405180910390f35b348015610353575f80fd5b5061035c6109cc565b604051610369919061294a565b60405180910390f35b34801561037d575f80fd5b5061039860048036038101906103939190612aab565b6109e0565b6040516103a59190612b03565b60405180910390f35b3480156103b9575f80fd5b506103c2610a16565b6040516103cf919061294a565b60405180910390f35b3480156103e3575f80fd5b506103ec610a2a565b6040516103f99190612b2b565b60405180910390f35b34801561040d575f80fd5b50610416610a30565b6040516104239190612c23565b60405180910390f35b348015610437575f80fd5b50610440610a55565b005b34801561044d575f80fd5b5061046860048036038101906104639190612c3c565b610ab4565b005b348015610475575f80fd5b5061047e610b15565b60405161048b9190612b2b565b60405180910390f35b34801561049f575f80fd5b506104a8610b1b565b005b3480156104b5575f80fd5b506104d060048036038101906104cb9190612c67565b610c03565b6040516104dd9190612b2b565b60405180910390f35b3480156104f1575f80fd5b506104fa610c48565b005b348015610507575f80fd5b50610510610c5b565b005b34801561051d575f80fd5b5061053860048036038101906105339190612c67565b610cc0565b005b348015610545575f80fd5b5061054e610d58565b60405161055b9190612ca1565b60405180910390f35b34801561056f575f80fd5b5061058a60048036038101906105859190612c3c565b610d80565b6040516105979190612b2b565b60405180910390f35b3480156105ab575f80fd5b506105b4610f58565b6040516105c191906129ed565b60405180910390f35b3480156105d5575f80fd5b506105f060048036038101906105eb9190612aab565b610fe8565b6040516105fd9190612b03565b60405180910390f35b348015610611575f80fd5b5061061a61105d565b6040516106279190612ca1565b60405180910390f35b34801561063b575f80fd5b50610644611075565b6040516106519190612ca1565b60405180910390f35b348015610665575f80fd5b50610680600480360381019061067b9190612aab565b61109a565b60405161068d9190612b03565b60405180910390f35b3480156106a1575f80fd5b506106aa6110bc565b6040516106b7919061294a565b60405180910390f35b3480156106cb575f80fd5b506106d46110d0565b6040516106e19190612ca1565b60405180910390f35b3480156106f5575f80fd5b506106fe6110f5565b60405161070b919061294a565b60405180910390f35b34801561071f575f80fd5b5061073a60048036038101906107359190612c3c565b611109565b005b348015610747575f80fd5b50610762600480360381019061075d9190612cba565b611168565b60405161076f9190612b2b565b60405180910390f35b348015610783575f80fd5b5061078c6111ea565b6040516107999190612b2b565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c39190612c67565b6111f0565b005b3480156107d5575f80fd5b506107de611272565b6040516107eb9190612d18565b60405180910390f35b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108c5576101f4600b60186101000a81548161ffff021916908361ffff1602179055506101f4600b601a6101000a81548161ffff021916908361ffff1602179055506101f4600b60146101000a81548161ffff021916908361ffff1602179055506101f4600b60166101000a81548161ffff021916908361ffff1602179055505b565b600b60169054906101000a900461ffff1681565b6060600380546108ea90612d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461091690612d5e565b80156109615780601f1061093857610100808354040283529160200191610961565b820191905f5260205f20905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b5f80610975611297565b905061098281858561129e565b600191505092915050565b5f600254905090565b5f806109a0611297565b90506109ad858285611461565b6109b88585856114ec565b60019150509392505050565b5f6012905090565b600b60149054906101000a900461ffff1681565b5f806109ea611297565b9050610a0b8185856109fc8589611168565b610a069190612dbb565b61129e565b600191505092915050565b600b60189054906101000a900461ffff1681565b600d5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610ab257610ab1611aae565b5b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610b1257610b1181611cf0565b5b50565b600c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610c01575f600b60186101000a81548161ffff021916908361ffff1602179055505f600b601a6101000a81548161ffff021916908361ffff1602179055505f600b60146101000a81548161ffff021916908361ffff1602179055505f600b60166101000a81548161ffff021916908361ffff1602179055505f600b601c6101000a81548161ffff021916908361ffff1602179055505b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c50611f76565b610c595f611ff4565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610cbe575f600c819055505f600d819055505b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610d555780600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600267ffffffffffffffff811115610d9d57610d9c612dee565b5b604051908082528060200260200182016040528015610dcb5781602001602082028036833780820191505090505b50905030815f81518110610de257610de1612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610e5257610e51612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401610ee8929190612eff565b5f60405180830381865afa925050508015610f2557506040513d5f823e3d601f19601f82011682018060405250810190610f229190613054565b60015b610f32575f915050610f53565b80600181518110610f4657610f45612e1b565b5b6020026020010151925050505b919050565b606060048054610f6790612d5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9390612d5e565b8015610fde5780601f10610fb557610100808354040283529160200191610fde565b820191905f5260205f20905b815481529060010190602001808311610fc157829003601f168201915b5050505050905090565b5f80610ff2611297565b90505f610fff8286611168565b905083811015611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b9061310b565b60405180910390fd5b611051828686840361129e565b60019250505092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806110a4611297565b90506110b18185856114ec565b600191505092915050565b600b601a9054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b601c9054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361116557806010819055505b50565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b6111f8611f76565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613199565b60405180910390fd5b61126f81611ff4565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361130c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130390613227565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611371906132b5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114549190612b2b565b60405180910390a3505050565b5f61146c8484611168565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114e657818110156114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf9061331d565b60405180910390fd5b6114e5848484840361129e565b5b50505050565b8282600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311806115755750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205443115b6115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab906133ab565b60405180910390fd5b6115bc610d58565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061162757506115f8610d58565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061167e5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806116d55750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806116eb575060115f9054906101000a900460ff165b15611700576116fb8585856120b7565b611a23565b5f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561179e5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415801561183d575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156118a8575060115f9054906101000a900460ff16155b156118b6576118b5612323565b5b811561191457600f54600e5410156118fb57600b60149054906101000a900461ffff1661ffff169250600e5f8154809291906118f1906133c9565b9190505550611913565b600b60189054906101000a900461ffff1661ffff1692505b5b801561195b57600f54600e54101561194257600b60169054906101000a900461ffff1661ffff16925061195a565b600b601a9054906101000a900461ffff1661ffff1692505b5b5f612710848861196b9190613410565b611975919061347e565b90505f612710600b601c9054906101000a900461ffff1661ffff168961199b9190613410565b6119a5919061347e565b90505f81836119b49190612dbb565b896119bf91906134ae565b90505f600d5411156119d5576119d4896125d5565b5b8480156119e357505f600c54115b156119f3576119f28a82612691565b5b5f821115611a0657611a058b83612761565b5b611a118b30856120b7565b611a1c8b8b836120b7565b5050505050505b43600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050505050565b600160115f6101000a81548160ff0219169083151502179055505f611ad230610c03565b90505f600267ffffffffffffffff811115611af057611aef612dee565b5b604051908082528060200260200182016040528015611b1e5781602001602082028036833780820191505090505b50905030815f81518110611b3557611b34612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611ba557611ba4612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611c4195949392919061351a565b5f604051808303815f87803b158015611c58575f80fd5b505af1158015611c6a573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611cd2573d5f803e3d5ffd5b5050505f60115f6101000a81548160ff021916908315150217905550565b600160115f6101000a81548160ff0219169083151502179055505f611d1430610c03565b905080821115611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d50906135e2565b60405180910390fd5b5f600267ffffffffffffffff811115611d7557611d74612dee565b5b604051908082528060200260200182016040528015611da35781602001602082028036833780820191505090505b50905030815f81518110611dba57611db9612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611e2a57611e29612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401611ec695949392919061351a565b5f604051808303815f87803b158015611edd575f80fd5b505af1158015611eef573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611f57573d5f803e3d5ffd5b5050505f60115f6101000a81548160ff02191690831515021790555050565b611f7e611297565b73ffffffffffffffffffffffffffffffffffffffff16611f9c610d58565b73ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe99061364a565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211c906136d8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613766565b60405180910390fd5b61219e838383612924565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612218906137f4565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161230a9190612b2b565b60405180910390a361231d848484612929565b50505050565b5f61233561233030610c03565b610d80565b90505f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156123a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c7919061388e565b50915091505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249391906138f2565b73ffffffffffffffffffffffffffffffffffffffff16036124c657826dffffffffffffffffffffffffffff1690506125bc565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061258c91906138f2565b73ffffffffffffffffffffffffffffffffffffffff16036125bb57816dffffffffffffffffffffffffffff1690505b5b6010548411156125cf576125ce611aae565b5b50505050565b6125dd610d58565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061264357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561268e57600d5481111561268d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126849061398d565b60405180910390fd5b5b50565b612699610d58565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806126ff57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561275d57600c548161271184610c03565b61271b9190612dbb565b111561275c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612753906139f5565b60405180910390fd5b5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690613a83565b60405180910390fd5b6127da825f83612924565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490613b11565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290c9190612b2b565b60405180910390a361291f835f84612929565b505050565b505050565b505050565b5f61ffff82169050919050565b6129448161292e565b82525050565b5f60208201905061295d5f83018461293b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561299a57808201518184015260208101905061297f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6129bf82612963565b6129c9818561296d565b93506129d981856020860161297d565b6129e2816129a5565b840191505092915050565b5f6020820190508181035f830152612a0581846129b5565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a4782612a1e565b9050919050565b612a5781612a3d565b8114612a61575f80fd5b50565b5f81359050612a7281612a4e565b92915050565b5f819050919050565b612a8a81612a78565b8114612a94575f80fd5b50565b5f81359050612aa581612a81565b92915050565b5f8060408385031215612ac157612ac0612a16565b5b5f612ace85828601612a64565b9250506020612adf85828601612a97565b9150509250929050565b5f8115159050919050565b612afd81612ae9565b82525050565b5f602082019050612b165f830184612af4565b92915050565b612b2581612a78565b82525050565b5f602082019050612b3e5f830184612b1c565b92915050565b5f805f60608486031215612b5b57612b5a612a16565b5b5f612b6886828701612a64565b9350506020612b7986828701612a64565b9250506040612b8a86828701612a97565b9150509250925092565b5f60ff82169050919050565b612ba981612b94565b82525050565b5f602082019050612bc25f830184612ba0565b92915050565b5f819050919050565b5f612beb612be6612be184612a1e565b612bc8565b612a1e565b9050919050565b5f612bfc82612bd1565b9050919050565b5f612c0d82612bf2565b9050919050565b612c1d81612c03565b82525050565b5f602082019050612c365f830184612c14565b92915050565b5f60208284031215612c5157612c50612a16565b5b5f612c5e84828501612a97565b91505092915050565b5f60208284031215612c7c57612c7b612a16565b5b5f612c8984828501612a64565b91505092915050565b612c9b81612a3d565b82525050565b5f602082019050612cb45f830184612c92565b92915050565b5f8060408385031215612cd057612ccf612a16565b5b5f612cdd85828601612a64565b9250506020612cee85828601612a64565b9150509250929050565b5f612d0282612bf2565b9050919050565b612d1281612cf8565b82525050565b5f602082019050612d2b5f830184612d09565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d7557607f821691505b602082108103612d8857612d87612d31565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612dc582612a78565b9150612dd083612a78565b9250828201905080821115612de857612de7612d8e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e7a81612a3d565b82525050565b5f612e8b8383612e71565b60208301905092915050565b5f602082019050919050565b5f612ead82612e48565b612eb78185612e52565b9350612ec283612e62565b805f5b83811015612ef2578151612ed98882612e80565b9750612ee483612e97565b925050600181019050612ec5565b5085935050505092915050565b5f604082019050612f125f830185612b1c565b8181036020830152612f248184612ea3565b90509392505050565b5f80fd5b612f3a826129a5565b810181811067ffffffffffffffff82111715612f5957612f58612dee565b5b80604052505050565b5f612f6b612a0d565b9050612f778282612f31565b919050565b5f67ffffffffffffffff821115612f9657612f95612dee565b5b602082029050602081019050919050565b5f80fd5b5f81519050612fb981612a81565b92915050565b5f612fd1612fcc84612f7c565b612f62565b90508083825260208201905060208402830185811115612ff457612ff3612fa7565b5b835b8181101561301d57806130098882612fab565b845260208401935050602081019050612ff6565b5050509392505050565b5f82601f83011261303b5761303a612f2d565b5b815161304b848260208601612fbf565b91505092915050565b5f6020828403121561306957613068612a16565b5b5f82015167ffffffffffffffff81111561308657613085612a1a565b5b61309284828501613027565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130f560258361296d565b91506131008261309b565b604082019050919050565b5f6020820190508181035f830152613122816130e9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61318360268361296d565b915061318e82613129565b604082019050919050565b5f6020820190508181035f8301526131b081613177565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61321160248361296d565b915061321c826131b7565b604082019050919050565b5f6020820190508181035f83015261323e81613205565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61329f60228361296d565b91506132aa82613245565b604082019050919050565b5f6020820190508181035f8301526132cc81613293565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613307601d8361296d565b9150613312826132d3565b602082019050919050565b5f6020820190508181035f830152613334816132fb565b9050919050565b7f43616e6e6f7420706572666f726d206d6f7265207468616e206f6e65207472615f8201527f6e73616374696f6e20696e207468652073616d6520626c6f636b000000000000602082015250565b5f613395603a8361296d565b91506133a08261333b565b604082019050919050565b5f6020820190508181035f8301526133c281613389565b9050919050565b5f6133d382612a78565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361340557613404612d8e565b5b600182019050919050565b5f61341a82612a78565b915061342583612a78565b925082820261343381612a78565b9150828204841483151761344a57613449612d8e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61348882612a78565b915061349383612a78565b9250826134a3576134a2613451565b5b828204905092915050565b5f6134b882612a78565b91506134c383612a78565b92508282039050818111156134db576134da612d8e565b5b92915050565b5f819050919050565b5f6135046134ff6134fa846134e1565b612bc8565b612a78565b9050919050565b613514816134ea565b82525050565b5f60a08201905061352d5f830188612b1c565b61353a602083018761350b565b818103604083015261354c8186612ea3565b905061355b6060830185612c92565b6135686080830184612b1c565b9695505050505050565b7f416d6f756e7420657863656564732062616c616e6365206f6620636f6e7472615f8201527f63742e0000000000000000000000000000000000000000000000000000000000602082015250565b5f6135cc60238361296d565b91506135d782613572565b604082019050919050565b5f6020820190508181035f8301526135f9816135c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61363460208361296d565b915061363f82613600565b602082019050919050565b5f6020820190508181035f83015261366181613628565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136c260258361296d565b91506136cd82613668565b604082019050919050565b5f6020820190508181035f8301526136ef816136b6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61375060238361296d565b915061375b826136f6565b604082019050919050565b5f6020820190508181035f83015261377d81613744565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6137de60268361296d565b91506137e982613784565b604082019050919050565b5f6020820190508181035f83015261380b816137d2565b9050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61383481613812565b811461383e575f80fd5b50565b5f8151905061384f8161382b565b92915050565b5f63ffffffff82169050919050565b61386d81613855565b8114613877575f80fd5b50565b5f8151905061388881613864565b92915050565b5f805f606084860312156138a5576138a4612a16565b5b5f6138b286828701613841565b93505060206138c386828701613841565b92505060406138d48682870161387a565b9150509250925092565b5f815190506138ec81612a4e565b92915050565b5f6020828403121561390757613906612a16565b5b5f613914848285016138de565b91505092915050565b7f4d617820746f6b656e20706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f61397760228361296d565b91506139828261391d565b604082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f4d617820746f6b656e207065722077616c6c65742065786365656465640000005f82015250565b5f6139df601d8361296d565b91506139ea826139ab565b602082019050919050565b5f6020820190508181035f830152613a0c816139d3565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a6d60218361296d565b9150613a7882613a13565b604082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613afb60228361296d565b9150613b0682613aa1565b604082019050919050565b5f6020820190508181035f830152613b2881613aef565b905091905056fea26469706673582212208c233b620d1087647b5147d57a4a6412b0332cb22417c79022066c77df11573964736f6c63430008180033
Deployed Bytecode
0x608060405260043610610207575f3560e01c8063715018a611610117578063a9059cbb1161009f578063d7d7442f1161006e578063d7d7442f14610714578063dd62ed3e1461073c578063e52fb9ec14610778578063f2fde38b146107a2578063f887ea40146107ca5761020e565b8063a9059cbb1461065a578063ab99904214610696578063b3f00674146106c0578063c4ceb339146106ea5761020e565b80639277883d116100e65780639277883d1461056457806395d89b41146105a0578063a457c2d7146105ca578063a7c6402c14610606578063a8aa1b31146106305761020e565b8063715018a6146104e6578063751039fc146104fc5780637c08b964146105125780638da5cb5b1461053a5761020e565b8063395093511161019a57806351bc3c851161016957806351bc3c851461042c57806355a60f1214610442578063685fbc6b1461046a57806369e1ea7f1461049457806370a08231146104aa5761020e565b806339509351146103725780633a4ceedd146103ae578063418bce8a146103d85780634d709adf146104025761020e565b806318160ddd116101d657806318160ddd146102b857806323b872dd146102e2578063313ce5671461031e5780633912a2c3146103485761020e565b806301339c21146102125780630214c4631461022857806306fdde0314610252578063095ea7b31461027c5761020e565b3661020e57005b5f80fd5b34801561021d575f80fd5b506102266107f4565b005b348015610233575f80fd5b5061023c6108c7565b604051610249919061294a565b60405180910390f35b34801561025d575f80fd5b506102666108db565b60405161027391906129ed565b60405180910390f35b348015610287575f80fd5b506102a2600480360381019061029d9190612aab565b61096b565b6040516102af9190612b03565b60405180910390f35b3480156102c3575f80fd5b506102cc61098d565b6040516102d99190612b2b565b60405180910390f35b3480156102ed575f80fd5b5061030860048036038101906103039190612b44565b610996565b6040516103159190612b03565b60405180910390f35b348015610329575f80fd5b506103326109c4565b60405161033f9190612baf565b60405180910390f35b348015610353575f80fd5b5061035c6109cc565b604051610369919061294a565b60405180910390f35b34801561037d575f80fd5b5061039860048036038101906103939190612aab565b6109e0565b6040516103a59190612b03565b60405180910390f35b3480156103b9575f80fd5b506103c2610a16565b6040516103cf919061294a565b60405180910390f35b3480156103e3575f80fd5b506103ec610a2a565b6040516103f99190612b2b565b60405180910390f35b34801561040d575f80fd5b50610416610a30565b6040516104239190612c23565b60405180910390f35b348015610437575f80fd5b50610440610a55565b005b34801561044d575f80fd5b5061046860048036038101906104639190612c3c565b610ab4565b005b348015610475575f80fd5b5061047e610b15565b60405161048b9190612b2b565b60405180910390f35b34801561049f575f80fd5b506104a8610b1b565b005b3480156104b5575f80fd5b506104d060048036038101906104cb9190612c67565b610c03565b6040516104dd9190612b2b565b60405180910390f35b3480156104f1575f80fd5b506104fa610c48565b005b348015610507575f80fd5b50610510610c5b565b005b34801561051d575f80fd5b5061053860048036038101906105339190612c67565b610cc0565b005b348015610545575f80fd5b5061054e610d58565b60405161055b9190612ca1565b60405180910390f35b34801561056f575f80fd5b5061058a60048036038101906105859190612c3c565b610d80565b6040516105979190612b2b565b60405180910390f35b3480156105ab575f80fd5b506105b4610f58565b6040516105c191906129ed565b60405180910390f35b3480156105d5575f80fd5b506105f060048036038101906105eb9190612aab565b610fe8565b6040516105fd9190612b03565b60405180910390f35b348015610611575f80fd5b5061061a61105d565b6040516106279190612ca1565b60405180910390f35b34801561063b575f80fd5b50610644611075565b6040516106519190612ca1565b60405180910390f35b348015610665575f80fd5b50610680600480360381019061067b9190612aab565b61109a565b60405161068d9190612b03565b60405180910390f35b3480156106a1575f80fd5b506106aa6110bc565b6040516106b7919061294a565b60405180910390f35b3480156106cb575f80fd5b506106d46110d0565b6040516106e19190612ca1565b60405180910390f35b3480156106f5575f80fd5b506106fe6110f5565b60405161070b919061294a565b60405180910390f35b34801561071f575f80fd5b5061073a60048036038101906107359190612c3c565b611109565b005b348015610747575f80fd5b50610762600480360381019061075d9190612cba565b611168565b60405161076f9190612b2b565b60405180910390f35b348015610783575f80fd5b5061078c6111ea565b6040516107999190612b2b565b60405180910390f35b3480156107ad575f80fd5b506107c860048036038101906107c39190612c67565b6111f0565b005b3480156107d5575f80fd5b506107de611272565b6040516107eb9190612d18565b60405180910390f35b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108c5576101f4600b60186101000a81548161ffff021916908361ffff1602179055506101f4600b601a6101000a81548161ffff021916908361ffff1602179055506101f4600b60146101000a81548161ffff021916908361ffff1602179055506101f4600b60166101000a81548161ffff021916908361ffff1602179055505b565b600b60169054906101000a900461ffff1681565b6060600380546108ea90612d5e565b80601f016020809104026020016040519081016040528092919081815260200182805461091690612d5e565b80156109615780601f1061093857610100808354040283529160200191610961565b820191905f5260205f20905b81548152906001019060200180831161094457829003601f168201915b5050505050905090565b5f80610975611297565b905061098281858561129e565b600191505092915050565b5f600254905090565b5f806109a0611297565b90506109ad858285611461565b6109b88585856114ec565b60019150509392505050565b5f6012905090565b600b60149054906101000a900461ffff1681565b5f806109ea611297565b9050610a0b8185856109fc8589611168565b610a069190612dbb565b61129e565b600191505092915050565b600b60189054906101000a900461ffff1681565b600d5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610ab257610ab1611aae565b5b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610b1257610b1181611cf0565b5b50565b600c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610c01575f600b60186101000a81548161ffff021916908361ffff1602179055505f600b601a6101000a81548161ffff021916908361ffff1602179055505f600b60146101000a81548161ffff021916908361ffff1602179055505f600b60166101000a81548161ffff021916908361ffff1602179055505f600b601c6101000a81548161ffff021916908361ffff1602179055505b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c50611f76565b610c595f611ff4565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610cbe575f600c819055505f600d819055505b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610d555780600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600267ffffffffffffffff811115610d9d57610d9c612dee565b5b604051908082528060200260200182016040528015610dcb5781602001602082028036833780820191505090505b50905030815f81518110610de257610de1612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610e5257610e51612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401610ee8929190612eff565b5f60405180830381865afa925050508015610f2557506040513d5f823e3d601f19601f82011682018060405250810190610f229190613054565b60015b610f32575f915050610f53565b80600181518110610f4657610f45612e1b565b5b6020026020010151925050505b919050565b606060048054610f6790612d5e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9390612d5e565b8015610fde5780601f10610fb557610100808354040283529160200191610fde565b820191905f5260205f20905b815481529060010190602001808311610fc157829003601f168201915b5050505050905090565b5f80610ff2611297565b90505f610fff8286611168565b905083811015611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b9061310b565b60405180910390fd5b611051828686840361129e565b60019250505092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806110a4611297565b90506110b18185856114ec565b600191505092915050565b600b601a9054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b601c9054906101000a900461ffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160361116557806010819055505b50565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b6111f8611f76565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125d90613199565b60405180910390fd5b61126f81611ff4565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361130c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130390613227565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361137a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611371906132b5565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114549190612b2b565b60405180910390a3505050565b5f61146c8484611168565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114e657818110156114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf9061331d565b60405180910390fd5b6114e5848484840361129e565b5b50505050565b8282600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311806115755750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205443115b6115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab906133ab565b60405180910390fd5b6115bc610d58565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061162757506115f8610d58565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b8061167e5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b806116d55750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806116eb575060115f9054906101000a900460ff165b15611700576116fb8585856120b7565b611a23565b5f8060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561179e5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415801561183d575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156118a8575060115f9054906101000a900460ff16155b156118b6576118b5612323565b5b811561191457600f54600e5410156118fb57600b60149054906101000a900461ffff1661ffff169250600e5f8154809291906118f1906133c9565b9190505550611913565b600b60189054906101000a900461ffff1661ffff1692505b5b801561195b57600f54600e54101561194257600b60169054906101000a900461ffff1661ffff16925061195a565b600b601a9054906101000a900461ffff1661ffff1692505b5b5f612710848861196b9190613410565b611975919061347e565b90505f612710600b601c9054906101000a900461ffff1661ffff168961199b9190613410565b6119a5919061347e565b90505f81836119b49190612dbb565b896119bf91906134ae565b90505f600d5411156119d5576119d4896125d5565b5b8480156119e357505f600c54115b156119f3576119f28a82612691565b5b5f821115611a0657611a058b83612761565b5b611a118b30856120b7565b611a1c8b8b836120b7565b5050505050505b43600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050505050565b600160115f6101000a81548160ff0219169083151502179055505f611ad230610c03565b90505f600267ffffffffffffffff811115611af057611aef612dee565b5b604051908082528060200260200182016040528015611b1e5781602001602082028036833780820191505090505b50905030815f81518110611b3557611b34612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611ba557611ba4612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611c4195949392919061351a565b5f604051808303815f87803b158015611c58575f80fd5b505af1158015611c6a573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611cd2573d5f803e3d5ffd5b5050505f60115f6101000a81548160ff021916908315150217905550565b600160115f6101000a81548160ff0219169083151502179055505f611d1430610c03565b905080821115611d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d50906135e2565b60405180910390fd5b5f600267ffffffffffffffff811115611d7557611d74612dee565b5b604051908082528060200260200182016040528015611da35781602001602082028036833780820191505090505b50905030815f81518110611dba57611db9612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611e2a57611e29612e1b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401611ec695949392919061351a565b5f604051808303815f87803b158015611edd575f80fd5b505af1158015611eef573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611f57573d5f803e3d5ffd5b5050505f60115f6101000a81548160ff02191690831515021790555050565b611f7e611297565b73ffffffffffffffffffffffffffffffffffffffff16611f9c610d58565b73ffffffffffffffffffffffffffffffffffffffff1614611ff2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe99061364a565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612125576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211c906136d8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a90613766565b60405180910390fd5b61219e838383612924565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612221576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612218906137f4565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161230a9190612b2b565b60405180910390a361231d848484612929565b50505050565b5f61233561233030610c03565b610d80565b90505f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156123a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c7919061388e565b50915091505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561246f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061249391906138f2565b73ffffffffffffffffffffffffffffffffffffffff16036124c657826dffffffffffffffffffffffffffff1690506125bc565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612568573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061258c91906138f2565b73ffffffffffffffffffffffffffffffffffffffff16036125bb57816dffffffffffffffffffffffffffff1690505b5b6010548411156125cf576125ce611aae565b5b50505050565b6125dd610d58565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061264357503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561268e57600d5481111561268d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126849061398d565b60405180910390fd5b5b50565b612699610d58565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806126ff57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561275d57600c548161271184610c03565b61271b9190612dbb565b111561275c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612753906139f5565b60405180910390fd5b5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690613a83565b60405180910390fd5b6127da825f83612924565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561285d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285490613b11565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161290c9190612b2b565b60405180910390a361291f835f84612929565b505050565b505050565b505050565b5f61ffff82169050919050565b6129448161292e565b82525050565b5f60208201905061295d5f83018461293b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561299a57808201518184015260208101905061297f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6129bf82612963565b6129c9818561296d565b93506129d981856020860161297d565b6129e2816129a5565b840191505092915050565b5f6020820190508181035f830152612a0581846129b5565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a4782612a1e565b9050919050565b612a5781612a3d565b8114612a61575f80fd5b50565b5f81359050612a7281612a4e565b92915050565b5f819050919050565b612a8a81612a78565b8114612a94575f80fd5b50565b5f81359050612aa581612a81565b92915050565b5f8060408385031215612ac157612ac0612a16565b5b5f612ace85828601612a64565b9250506020612adf85828601612a97565b9150509250929050565b5f8115159050919050565b612afd81612ae9565b82525050565b5f602082019050612b165f830184612af4565b92915050565b612b2581612a78565b82525050565b5f602082019050612b3e5f830184612b1c565b92915050565b5f805f60608486031215612b5b57612b5a612a16565b5b5f612b6886828701612a64565b9350506020612b7986828701612a64565b9250506040612b8a86828701612a97565b9150509250925092565b5f60ff82169050919050565b612ba981612b94565b82525050565b5f602082019050612bc25f830184612ba0565b92915050565b5f819050919050565b5f612beb612be6612be184612a1e565b612bc8565b612a1e565b9050919050565b5f612bfc82612bd1565b9050919050565b5f612c0d82612bf2565b9050919050565b612c1d81612c03565b82525050565b5f602082019050612c365f830184612c14565b92915050565b5f60208284031215612c5157612c50612a16565b5b5f612c5e84828501612a97565b91505092915050565b5f60208284031215612c7c57612c7b612a16565b5b5f612c8984828501612a64565b91505092915050565b612c9b81612a3d565b82525050565b5f602082019050612cb45f830184612c92565b92915050565b5f8060408385031215612cd057612ccf612a16565b5b5f612cdd85828601612a64565b9250506020612cee85828601612a64565b9150509250929050565b5f612d0282612bf2565b9050919050565b612d1281612cf8565b82525050565b5f602082019050612d2b5f830184612d09565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612d7557607f821691505b602082108103612d8857612d87612d31565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612dc582612a78565b9150612dd083612a78565b9250828201905080821115612de857612de7612d8e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e7a81612a3d565b82525050565b5f612e8b8383612e71565b60208301905092915050565b5f602082019050919050565b5f612ead82612e48565b612eb78185612e52565b9350612ec283612e62565b805f5b83811015612ef2578151612ed98882612e80565b9750612ee483612e97565b925050600181019050612ec5565b5085935050505092915050565b5f604082019050612f125f830185612b1c565b8181036020830152612f248184612ea3565b90509392505050565b5f80fd5b612f3a826129a5565b810181811067ffffffffffffffff82111715612f5957612f58612dee565b5b80604052505050565b5f612f6b612a0d565b9050612f778282612f31565b919050565b5f67ffffffffffffffff821115612f9657612f95612dee565b5b602082029050602081019050919050565b5f80fd5b5f81519050612fb981612a81565b92915050565b5f612fd1612fcc84612f7c565b612f62565b90508083825260208201905060208402830185811115612ff457612ff3612fa7565b5b835b8181101561301d57806130098882612fab565b845260208401935050602081019050612ff6565b5050509392505050565b5f82601f83011261303b5761303a612f2d565b5b815161304b848260208601612fbf565b91505092915050565b5f6020828403121561306957613068612a16565b5b5f82015167ffffffffffffffff81111561308657613085612a1a565b5b61309284828501613027565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6130f560258361296d565b91506131008261309b565b604082019050919050565b5f6020820190508181035f830152613122816130e9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61318360268361296d565b915061318e82613129565b604082019050919050565b5f6020820190508181035f8301526131b081613177565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61321160248361296d565b915061321c826131b7565b604082019050919050565b5f6020820190508181035f83015261323e81613205565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61329f60228361296d565b91506132aa82613245565b604082019050919050565b5f6020820190508181035f8301526132cc81613293565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613307601d8361296d565b9150613312826132d3565b602082019050919050565b5f6020820190508181035f830152613334816132fb565b9050919050565b7f43616e6e6f7420706572666f726d206d6f7265207468616e206f6e65207472615f8201527f6e73616374696f6e20696e207468652073616d6520626c6f636b000000000000602082015250565b5f613395603a8361296d565b91506133a08261333b565b604082019050919050565b5f6020820190508181035f8301526133c281613389565b9050919050565b5f6133d382612a78565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361340557613404612d8e565b5b600182019050919050565b5f61341a82612a78565b915061342583612a78565b925082820261343381612a78565b9150828204841483151761344a57613449612d8e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61348882612a78565b915061349383612a78565b9250826134a3576134a2613451565b5b828204905092915050565b5f6134b882612a78565b91506134c383612a78565b92508282039050818111156134db576134da612d8e565b5b92915050565b5f819050919050565b5f6135046134ff6134fa846134e1565b612bc8565b612a78565b9050919050565b613514816134ea565b82525050565b5f60a08201905061352d5f830188612b1c565b61353a602083018761350b565b818103604083015261354c8186612ea3565b905061355b6060830185612c92565b6135686080830184612b1c565b9695505050505050565b7f416d6f756e7420657863656564732062616c616e6365206f6620636f6e7472615f8201527f63742e0000000000000000000000000000000000000000000000000000000000602082015250565b5f6135cc60238361296d565b91506135d782613572565b604082019050919050565b5f6020820190508181035f8301526135f9816135c0565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61363460208361296d565b915061363f82613600565b602082019050919050565b5f6020820190508181035f83015261366181613628565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6136c260258361296d565b91506136cd82613668565b604082019050919050565b5f6020820190508181035f8301526136ef816136b6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61375060238361296d565b915061375b826136f6565b604082019050919050565b5f6020820190508181035f83015261377d81613744565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6137de60268361296d565b91506137e982613784565b604082019050919050565b5f6020820190508181035f83015261380b816137d2565b9050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61383481613812565b811461383e575f80fd5b50565b5f8151905061384f8161382b565b92915050565b5f63ffffffff82169050919050565b61386d81613855565b8114613877575f80fd5b50565b5f8151905061388881613864565b92915050565b5f805f606084860312156138a5576138a4612a16565b5b5f6138b286828701613841565b93505060206138c386828701613841565b92505060406138d48682870161387a565b9150509250925092565b5f815190506138ec81612a4e565b92915050565b5f6020828403121561390757613906612a16565b5b5f613914848285016138de565b91505092915050565b7f4d617820746f6b656e20706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f61397760228361296d565b91506139828261391d565b604082019050919050565b5f6020820190508181035f8301526139a48161396b565b9050919050565b7f4d617820746f6b656e207065722077616c6c65742065786365656465640000005f82015250565b5f6139df601d8361296d565b91506139ea826139ab565b602082019050919050565b5f6020820190508181035f830152613a0c816139d3565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613a6d60218361296d565b9150613a7882613a13565b604082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613afb60228361296d565b9150613b0682613aa1565b604082019050919050565b5f6020820190508181035f830152613b2881613aef565b905091905056fea26469706673582212208c233b620d1087647b5147d57a4a6412b0332cb22417c79022066c77df11573964736f6c63430008180033
Deployed Bytecode Sourcemap
30224:8331:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38085:250;;;;;;;;;;;;;:::i;:::-;;30736:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9514:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11940:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10643:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12746:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10485:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30685:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13450:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30788:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31004:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30401:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36246:130;;;;;;;;;;;;;:::i;:::-;;37611:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30921:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36573:283;;;;;;;;;;;;;:::i;:::-;;10814:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2835:103;;;;;;;;;;;;;:::i;:::-;;36384:181;;;;;;;;;;;;;:::i;:::-;;38394:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2194:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32962:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9733:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14216:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30297:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30481:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11163:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30832:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30562:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30877:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37856:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11444:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31166:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3093:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30442:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38085:250;38139:11;;;;;;;;;;;38125:25;;:10;:25;;;38121:207;;38186:3;38167:16;;:22;;;;;;;;;;;;;;;;;;38224:3;38204:17;;:23;;;;;;;;;;;;;;;;;;38268:3;38242:23;;:29;;;;;;;;;;;;;;;;;;38313:3;38286:24;;:30;;;;;;;;;;;;;;;;;;38121:207;38085:250::o;30736:45::-;;;;;;;;;;;;;:::o;9514:100::-;9568:13;9601:5;9594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9514:100;:::o;11940:226::-;12048:4;12065:13;12081:12;:10;:12::i;:::-;12065:28;;12104:32;12113:5;12120:7;12129:6;12104:8;:32::i;:::-;12154:4;12147:11;;;11940:226;;;;:::o;10643:108::-;10704:7;10731:12;;10724:19;;10643:108;:::o;12746:295::-;12877:4;12894:15;12912:12;:10;:12::i;:::-;12894:30;;12935:38;12951:4;12957:7;12966:6;12935:15;:38::i;:::-;12984:27;12994:4;13000:2;13004:6;12984:9;:27::i;:::-;13029:4;13022:11;;;12746:295;;;;;:::o;10485:93::-;10543:5;10568:2;10561:9;;10485:93;:::o;30685:44::-;;;;;;;;;;;;;:::o;13450:263::-;13563:4;13580:13;13596:12;:10;:12::i;:::-;13580:28;;13619:64;13628:5;13635:7;13672:10;13644:25;13654:5;13661:7;13644:9;:25::i;:::-;:38;;;;:::i;:::-;13619:8;:64::i;:::-;13701:4;13694:11;;;13450:263;;;;:::o;30788:37::-;;;;;;;;;;;;;:::o;31004:66::-;;;;:::o;30401:34::-;;;;;;;;;;;;;:::o;36246:130::-;36304:11;;;;;;;;;;;36290:25;;:10;:25;;;36286:83;;36332:25;:23;:25::i;:::-;36286:83;36246:130::o;37611:176::-;37696:11;;;;;;;;;;;37682:25;;:10;:25;;;37678:102;;37724:44;37754:13;37724:29;:44::i;:::-;37678:102;37611:176;:::o;30921:67::-;;;;:::o;36573:283::-;36632:11;;;;;;;;;;;36618:25;;:10;:25;;;36614:235;;36679:1;36660:16;;:20;;;;;;;;;;;;;;;;;;36715:1;36695:17;;:21;;;;;;;;;;;;;;;;;;36757:1;36731:23;;:27;;;;;;;;;;;;;;;;;;36800:1;36773:24;;:28;;;;;;;;;;;;;;;;;;36836:1;36816:17;;:21;;;;;;;;;;;;;;;;;;36614:235;36573:283::o;10814:143::-;10904:7;10931:9;:18;10941:7;10931:18;;;;;;;;;;;;;;;;10924:25;;10814:143;;;:::o;2835:103::-;2080:13;:11;:13::i;:::-;2900:30:::1;2927:1;2900:18;:30::i;:::-;2835:103::o:0;36384:181::-;36444:11;;;;;;;;;;;36430:25;;:10;:25;;;36426:132;;36498:1;36472:23;:27;;;;36545:1;36514:28;:32;;;;36426:132;36384:181::o;38394:158::-;38479:11;;;;;;;;;;;38465:25;;:10;:25;;;38461:84;;38521:12;38507:11;;:26;;;;;;;;;;;;;;;;;;38461:84;38394:158;:::o;2194:87::-;2240:7;2267:6;;;;;;;;;;;2260:13;;2194:87;:::o;32962:412::-;33050:7;33070:21;33108:1;33094:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33070:40;;33139:4;33121;33126:1;33121:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33165:4;;;;;;;;;;;33155;33160:1;33155:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33184:6;;;;;;;;;;;:20;;;33205:6;33213:4;33184:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33180:187;;33354:1;33347:8;;;;;33180:187;33300:10;33311:1;33300:13;;;;;;;;:::i;:::-;;;;;;;;33293:20;;;;32962:412;;;;:::o;9733:104::-;9789:13;9822:7;9815:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9733:104;:::o;14216:498::-;14334:4;14351:13;14367:12;:10;:12::i;:::-;14351:28;;14390:24;14417:25;14427:5;14434:7;14417:9;:25::i;:::-;14390:52;;14495:15;14475:16;:35;;14453:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14611:60;14620:5;14627:7;14655:15;14636:16;:34;14611:8;:60::i;:::-;14702:4;14695:11;;;;14216:498;;;;:::o;30297:95::-;30350:42;30297:95;:::o;30481:19::-;;;;;;;;;;;;;:::o;11163:218::-;11267:4;11284:13;11300:12;:10;:12::i;:::-;11284:28;;11323;11333:5;11340:2;11344:6;11323:9;:28::i;:::-;11369:4;11362:11;;;11163:218;;;;:::o;30832:38::-;;;;;;;;;;;;;:::o;30562:71::-;;;;;;;;;;;;;:::o;30877:35::-;;;;;;;;;;;;;:::o;37856:159::-;37940:11;;;;;;;;;;;37926:25;;:10;:25;;;37922:86;;37983:13;37968:12;:28;;;;37922:86;37856:159;:::o;11444:176::-;11558:7;11585:11;:18;11597:5;11585:18;;;;;;;;;;;;;;;:27;11604:7;11585:27;;;;;;;;;;;;;;;;11578:34;;11444:176;;;;:::o;31166:48::-;;;;:::o;3093:238::-;2080:13;:11;:13::i;:::-;3216:1:::1;3196:22;;:8;:22;;::::0;3174:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3295:28;3314:8;3295:18;:28::i;:::-;3093:238:::0;:::o;30442:32::-;;;;;;;;;;;;;:::o;718:98::-;771:7;798:10;791:17;;718:98;:::o;18342:380::-;18495:1;18478:19;;:5;:19;;;18470:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18576:1;18557:21;;:7;:21;;;18549:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18660:6;18630:11;:18;18642:5;18630:18;;;;;;;;;;;;;;;:27;18649:7;18630:27;;;;;;;;;;;;;;;:36;;;;18698:7;18682:32;;18691:5;18682:32;;;18707:6;18682:32;;;;;;:::i;:::-;;;;;;;;18342:380;;;:::o;19013:502::-;19148:24;19175:25;19185:5;19192:7;19175:9;:25::i;:::-;19148:52;;19235:17;19215:16;:37;19211:297;;19315:6;19295:16;:26;;19269:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19430:51;19439:5;19446:7;19474:6;19455:16;:25;19430:8;:51::i;:::-;19211:297;19137:378;19013:502;;;:::o;34390:1848::-;34509:4;34515:2;32087:8;:14;32096:4;32087:14;;;;;;;;;;;;;;;;32072:12;:29;:60;;;;32120:8;:12;32129:2;32120:12;;;;;;;;;;;;;;;;32105;:27;32072:60;32050:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34556:7:::1;:5;:7::i;:::-;34548:15;;:4;:15;;;:45;;;;34586:7;:5;:7::i;:::-;34580:13;;:2;:13;;;34548:45;:81;;;;34618:11;;;;;;;;;;;34610:19;;:4;:19;;;34548:81;:115;;;;34652:11;;;;;;;;;;;34646:17;;:2;:17;;;34548:115;:138;;;;34680:6;;;;;;;;;;;34548:138;34530:1701;;;34713:33;34729:4;34735:2;34739:6;34713:15;:33::i;:::-;34530:1701;;;34779:21;34838:11:::0;34860:4:::1;;;;;;;;;;;34852:12;;:4;:12;;;:39;;;;;30350:42;34868:23;;:2;:23;;;;34852:39;34838:53;;34906:12;30350:42;34921:25;;:4;:25;;;;:39;;;;;34956:4;;;;;;;;;;;34950:10;;:2;:10;;;34921:39;34906:54;;34993:4;;;;;;;;;;;34979:18;;:10;:18;;;;:29;;;;;35002:6;;;;;;;;;;;35001:7;34979:29;34975:51;;;35010:16;:14;:16::i;:::-;34975:51;35045:6;35041:282;;;35087:23;;35076:8;;:34;35072:236;;;35151:23;;;;;;;;;;;35135:39;;;;35197:8;;:10;;;;;;;;;:::i;:::-;;;;;;35072:236;;;35272:16;;;;;;;;;;;35256:32;;;;35072:236;35041:282;35341:7;35337:252;;;35384:23;;35373:8;;:34;35369:205;;;35448:24;;;;;;;;;;;35432:40;;;;35369:205;;;35537:17;;;;;;;;;;;35521:33;;;;35369:205;35337:252;35603:17;35651:5;35633:13;35624:6;:22;;;;:::i;:::-;35623:34;;;;:::i;:::-;35603:54;;35672:21;35728:5;35706:17;;;;;;;;;;;35697:26;;:6;:26;;;;:::i;:::-;35696:38;;;;:::i;:::-;35672:62;;35749:19;35794:13;35782:9;:25;;;;:::i;:::-;35772:6;:36;;;;:::i;:::-;35749:60;;35859:1;35828:28;;:32;35824:96;;;35879:41;35913:6;35879:33;:41::i;:::-;35824:96;35939:6;:37;;;;;35975:1;35949:23;;:27;35939:37;35935:105;;;35995:45;36024:2;36028:11;35995:28;:45::i;:::-;35935:105;36075:1;36059:13;:17;36055:49;;;36078:26;36084:4;36090:13;36078:5;:26::i;:::-;36055:49;36119:47;36135:4;36149;36156:9;36119:15;:47::i;:::-;36181:38;36197:4;36203:2;36207:11;36181:15;:38::i;:::-;34764:1467;;;;;;34530:1701;32258:12:::0;32241:8;:14;32250:4;32241:14;;;;;;;;;;;;;;;:29;;;;32296:12;32281:8;:12;32290:2;32281:12;;;;;;;;;;;;;;;:27;;;;34390:1848;;;;;:::o;33382:485::-;31313:4;31304:6;;:13;;;;;;;;;;;;;;;;;;33448:16:::1;33467:24;33485:4;33467:9;:24::i;:::-;33448:43;;33502:21;33540:1;33526:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33502:40;;33571:4;33553;33558:1;33553:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;33597:4;;;;;;;;;;;33587;33592:1;33587:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;33612:6;;;;;;;;;;;:57;;;33684:8;33707:1;33723:4;33750;33770:15;33612:184;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33815:11;;;;;;;;;;;33807:29;;:52;33837:21;33807:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33437:430;;31349:5:::0;31340:6;;:14;;;;;;;;;;;;;;;;;;33382:485::o;36896:649::-;31313:4;31304:6;;:13;;;;;;;;;;;;;;;;;;36988:16:::1;37007:24;37025:4;37007:9;:24::i;:::-;36988:43;;37117:8;37101:12;:24;;37092:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37176:21;37214:1;37200:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37176:40;;37245:4;37227;37232:1;37227:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;37271:4;;;;;;;;;;;37261;37266:1;37261:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;37286:6;;;;;;;;;;;:57;;;37358:12;37385:1;37401:4;37428;37448:15;37286:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37493:11;;;;;;;;;;;37485:29;;:52;37515:21;37485:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36977:568;;31349:5:::0;31340:6;;:14;;;;;;;;;;;;;;;;;;36896:649;:::o;2359:132::-;2434:12;:10;:12::i;:::-;2423:23;;:7;:5;:7::i;:::-;:23;;;2415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2359:132::o;3491:191::-;3565:16;3584:6;;;;;;;;;;;3565:25;;3610:8;3601:6;;:17;;;;;;;;;;;;;;;;;;3665:8;3634:40;;3655:8;3634:40;;;;;;;;;;;;3554:128;3491:191;:::o;15184:877::-;15331:1;15315:18;;:4;:18;;;15307:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15408:1;15394:16;;:2;:16;;;15386:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15463:38;15484:4;15490:2;15494:6;15463:20;:38::i;:::-;15514:19;15536:9;:15;15546:4;15536:15;;;;;;;;;;;;;;;;15514:37;;15599:6;15584:11;:21;;15562:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15739:6;15725:11;:20;15707:9;:15;15717:4;15707:15;;;;;;;;;;;;;;;:38;;;;15942:6;15925:9;:13;15935:2;15925:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15992:2;15977:26;;15986:4;15977:26;;;15996:6;15977:26;;;;;;:::i;:::-;;;;;;;;16016:37;16036:4;16042:2;16046:6;16016:19;:37::i;:::-;15296:765;15184:877;;;:::o;33875:507::-;33920:19;33942:75;33982:24;34000:4;33982:9;:24::i;:::-;33942:25;:75::i;:::-;33920:97;;34029:16;34047;34069:12;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34028:67;;;;;34106:22;34168:4;;;;;;;;;;;34143:29;;:12;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;34139:167;;34199:8;34191:17;;34174:34;;34139:167;;;34253:4;;;;;;;;;;;34228:29;;:12;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;34224:82;;34297:8;34289:17;;34272:34;;34224:82;34139:167;34335:12;;34321:11;:26;34317:57;;;34349:25;:23;:25::i;:::-;34317:57;33909:473;;;;33875:507::o;32324:296::-;32425:7;:5;:7::i;:::-;32411:21;;:10;:21;;;;:52;;;;32458:4;32436:27;;:10;:27;;;;32411:52;32407:205;;;32514:28;;32504:6;:38;;32478:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;32407:205;32324:296;:::o;32628:326::-;32761:7;:5;:7::i;:::-;32747:21;;:10;:21;;;;:44;;;;32786:4;32772:19;;:2;:19;;;;32747:44;32743:203;;;32858:23;;32848:6;32832:13;32842:2;32832:9;:13::i;:::-;:22;;;;:::i;:::-;:49;;32806:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32743:203;32628:326;;:::o;17229:675::-;17332:1;17313:21;;:7;:21;;;17305:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17385:49;17406:7;17423:1;17427:6;17385:20;:49::i;:::-;17447:22;17472:9;:18;17482:7;17472:18;;;;;;;;;;;;;;;;17447:43;;17527:6;17509:14;:24;;17501:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17646:6;17629:14;:23;17608:9;:18;17618:7;17608:18;;;;;;;;;;;;;;;:44;;;;17763:6;17747:12;;:22;;;;;;;;;;;17824:1;17798:37;;17807:7;17798:37;;;17828:6;17798:37;;;;;;:::i;:::-;;;;;;;;17848:48;17868:7;17885:1;17889:6;17848:19;:48::i;:::-;17294:610;17229:675;;:::o;20115:125::-;;;;:::o;20844:124::-;;;;:::o;7:89:1:-;43:7;83:6;76:5;72:18;61:29;;7:89;;;:::o;102:115::-;187:23;204:5;187:23;:::i;:::-;182:3;175:36;102:115;;:::o;223:218::-;314:4;352:2;341:9;337:18;329:26;;365:69;431:1;420:9;416:17;407:6;365:69;:::i;:::-;223:218;;;;:::o;447:99::-;499:6;533:5;527:12;517:22;;447:99;;;:::o;552:169::-;636:11;670:6;665:3;658:19;710:4;705:3;701:14;686:29;;552:169;;;;:::o;727:246::-;808:1;818:113;832:6;829:1;826:13;818:113;;;917:1;912:3;908:11;902:18;898:1;893:3;889:11;882:39;854:2;851:1;847:10;842:15;;818:113;;;965:1;956:6;951:3;947:16;940:27;789:184;727:246;;;:::o;979:102::-;1020:6;1071:2;1067:7;1062:2;1055:5;1051:14;1047:28;1037:38;;979:102;;;:::o;1087:377::-;1175:3;1203:39;1236:5;1203:39;:::i;:::-;1258:71;1322:6;1317:3;1258:71;:::i;:::-;1251:78;;1338:65;1396:6;1391:3;1384:4;1377:5;1373:16;1338:65;:::i;:::-;1428:29;1450:6;1428:29;:::i;:::-;1423:3;1419:39;1412:46;;1179:285;1087:377;;;;:::o;1470:313::-;1583:4;1621:2;1610:9;1606:18;1598:26;;1670:9;1664:4;1660:20;1656:1;1645:9;1641:17;1634:47;1698:78;1771:4;1762:6;1698:78;:::i;:::-;1690:86;;1470:313;;;;:::o;1789:75::-;1822:6;1855:2;1849:9;1839:19;;1789:75;:::o;1870:117::-;1979:1;1976;1969:12;1993:117;2102:1;2099;2092:12;2116:126;2153:7;2193:42;2186:5;2182:54;2171:65;;2116:126;;;:::o;2248:96::-;2285:7;2314:24;2332:5;2314:24;:::i;:::-;2303:35;;2248:96;;;:::o;2350:122::-;2423:24;2441:5;2423:24;:::i;:::-;2416:5;2413:35;2403:63;;2462:1;2459;2452:12;2403:63;2350:122;:::o;2478:139::-;2524:5;2562:6;2549:20;2540:29;;2578:33;2605:5;2578:33;:::i;:::-;2478:139;;;;:::o;2623:77::-;2660:7;2689:5;2678:16;;2623:77;;;:::o;2706:122::-;2779:24;2797:5;2779:24;:::i;:::-;2772:5;2769:35;2759:63;;2818:1;2815;2808:12;2759:63;2706:122;:::o;2834:139::-;2880:5;2918:6;2905:20;2896:29;;2934:33;2961:5;2934:33;:::i;:::-;2834:139;;;;:::o;2979:474::-;3047:6;3055;3104:2;3092:9;3083:7;3079:23;3075:32;3072:119;;;3110:79;;:::i;:::-;3072:119;3230:1;3255:53;3300:7;3291:6;3280:9;3276:22;3255:53;:::i;:::-;3245:63;;3201:117;3357:2;3383:53;3428:7;3419:6;3408:9;3404:22;3383:53;:::i;:::-;3373:63;;3328:118;2979:474;;;;;:::o;3459:90::-;3493:7;3536:5;3529:13;3522:21;3511:32;;3459:90;;;:::o;3555:109::-;3636:21;3651:5;3636:21;:::i;:::-;3631:3;3624:34;3555:109;;:::o;3670:210::-;3757:4;3795:2;3784:9;3780:18;3772:26;;3808:65;3870:1;3859:9;3855:17;3846:6;3808:65;:::i;:::-;3670:210;;;;:::o;3886:118::-;3973:24;3991:5;3973:24;:::i;:::-;3968:3;3961:37;3886:118;;:::o;4010:222::-;4103:4;4141:2;4130:9;4126:18;4118:26;;4154:71;4222:1;4211:9;4207:17;4198:6;4154:71;:::i;:::-;4010:222;;;;:::o;4238:619::-;4315:6;4323;4331;4380:2;4368:9;4359:7;4355:23;4351:32;4348:119;;;4386:79;;:::i;:::-;4348:119;4506:1;4531:53;4576:7;4567:6;4556:9;4552:22;4531:53;:::i;:::-;4521:63;;4477:117;4633:2;4659:53;4704:7;4695:6;4684:9;4680:22;4659:53;:::i;:::-;4649:63;;4604:118;4761:2;4787:53;4832:7;4823:6;4812:9;4808:22;4787:53;:::i;:::-;4777:63;;4732:118;4238:619;;;;;:::o;4863:86::-;4898:7;4938:4;4931:5;4927:16;4916:27;;4863:86;;;:::o;4955:112::-;5038:22;5054:5;5038:22;:::i;:::-;5033:3;5026:35;4955:112;;:::o;5073:214::-;5162:4;5200:2;5189:9;5185:18;5177:26;;5213:67;5277:1;5266:9;5262:17;5253:6;5213:67;:::i;:::-;5073:214;;;;:::o;5293:60::-;5321:3;5342:5;5335:12;;5293:60;;;:::o;5359:142::-;5409:9;5442:53;5460:34;5469:24;5487:5;5469:24;:::i;:::-;5460:34;:::i;:::-;5442:53;:::i;:::-;5429:66;;5359:142;;;:::o;5507:126::-;5557:9;5590:37;5621:5;5590:37;:::i;:::-;5577:50;;5507:126;;;:::o;5639:149::-;5712:9;5745:37;5776:5;5745:37;:::i;:::-;5732:50;;5639:149;;;:::o;5794:177::-;5904:60;5958:5;5904:60;:::i;:::-;5899:3;5892:73;5794:177;;:::o;5977:268::-;6093:4;6131:2;6120:9;6116:18;6108:26;;6144:94;6235:1;6224:9;6220:17;6211:6;6144:94;:::i;:::-;5977:268;;;;:::o;6251:329::-;6310:6;6359:2;6347:9;6338:7;6334:23;6330:32;6327:119;;;6365:79;;:::i;:::-;6327:119;6485:1;6510:53;6555:7;6546:6;6535:9;6531:22;6510:53;:::i;:::-;6500:63;;6456:117;6251:329;;;;:::o;6586:::-;6645:6;6694:2;6682:9;6673:7;6669:23;6665:32;6662:119;;;6700:79;;:::i;:::-;6662:119;6820:1;6845:53;6890:7;6881:6;6870:9;6866:22;6845:53;:::i;:::-;6835:63;;6791:117;6586:329;;;;:::o;6921:118::-;7008:24;7026:5;7008:24;:::i;:::-;7003:3;6996:37;6921:118;;:::o;7045:222::-;7138:4;7176:2;7165:9;7161:18;7153:26;;7189:71;7257:1;7246:9;7242:17;7233:6;7189:71;:::i;:::-;7045:222;;;;:::o;7273:474::-;7341:6;7349;7398:2;7386:9;7377:7;7373:23;7369:32;7366:119;;;7404:79;;:::i;:::-;7366:119;7524:1;7549:53;7594:7;7585:6;7574:9;7570:22;7549:53;:::i;:::-;7539:63;;7495:117;7651:2;7677:53;7722:7;7713:6;7702:9;7698:22;7677:53;:::i;:::-;7667:63;;7622:118;7273:474;;;;;:::o;7753:153::-;7830:9;7863:37;7894:5;7863:37;:::i;:::-;7850:50;;7753:153;;;:::o;7912:185::-;8026:64;8084:5;8026:64;:::i;:::-;8021:3;8014:77;7912:185;;:::o;8103:276::-;8223:4;8261:2;8250:9;8246:18;8238:26;;8274:98;8369:1;8358:9;8354:17;8345:6;8274:98;:::i;:::-;8103:276;;;;:::o;8385:180::-;8433:77;8430:1;8423:88;8530:4;8527:1;8520:15;8554:4;8551:1;8544:15;8571:320;8615:6;8652:1;8646:4;8642:12;8632:22;;8699:1;8693:4;8689:12;8720:18;8710:81;;8776:4;8768:6;8764:17;8754:27;;8710:81;8838:2;8830:6;8827:14;8807:18;8804:38;8801:84;;8857:18;;:::i;:::-;8801:84;8622:269;8571:320;;;:::o;8897:180::-;8945:77;8942:1;8935:88;9042:4;9039:1;9032:15;9066:4;9063:1;9056:15;9083:191;9123:3;9142:20;9160:1;9142:20;:::i;:::-;9137:25;;9176:20;9194:1;9176:20;:::i;:::-;9171:25;;9219:1;9216;9212:9;9205:16;;9240:3;9237:1;9234:10;9231:36;;;9247:18;;:::i;:::-;9231:36;9083:191;;;;:::o;9280:180::-;9328:77;9325:1;9318:88;9425:4;9422:1;9415:15;9449:4;9446:1;9439:15;9466:180;9514:77;9511:1;9504:88;9611:4;9608:1;9601:15;9635:4;9632:1;9625:15;9652:114;9719:6;9753:5;9747:12;9737:22;;9652:114;;;:::o;9772:184::-;9871:11;9905:6;9900:3;9893:19;9945:4;9940:3;9936:14;9921:29;;9772:184;;;;:::o;9962:132::-;10029:4;10052:3;10044:11;;10082:4;10077:3;10073:14;10065:22;;9962:132;;;:::o;10100:108::-;10177:24;10195:5;10177:24;:::i;:::-;10172:3;10165:37;10100:108;;:::o;10214:179::-;10283:10;10304:46;10346:3;10338:6;10304:46;:::i;:::-;10382:4;10377:3;10373:14;10359:28;;10214:179;;;;:::o;10399:113::-;10469:4;10501;10496:3;10492:14;10484:22;;10399:113;;;:::o;10548:732::-;10667:3;10696:54;10744:5;10696:54;:::i;:::-;10766:86;10845:6;10840:3;10766:86;:::i;:::-;10759:93;;10876:56;10926:5;10876:56;:::i;:::-;10955:7;10986:1;10971:284;10996:6;10993:1;10990:13;10971:284;;;11072:6;11066:13;11099:63;11158:3;11143:13;11099:63;:::i;:::-;11092:70;;11185:60;11238:6;11185:60;:::i;:::-;11175:70;;11031:224;11018:1;11015;11011:9;11006:14;;10971:284;;;10975:14;11271:3;11264:10;;10672:608;;;10548:732;;;;:::o;11286:483::-;11457:4;11495:2;11484:9;11480:18;11472:26;;11508:71;11576:1;11565:9;11561:17;11552:6;11508:71;:::i;:::-;11626:9;11620:4;11616:20;11611:2;11600:9;11596:18;11589:48;11654:108;11757:4;11748:6;11654:108;:::i;:::-;11646:116;;11286:483;;;;;:::o;11775:117::-;11884:1;11881;11874:12;11898:281;11981:27;12003:4;11981:27;:::i;:::-;11973:6;11969:40;12111:6;12099:10;12096:22;12075:18;12063:10;12060:34;12057:62;12054:88;;;12122:18;;:::i;:::-;12054:88;12162:10;12158:2;12151:22;11941:238;11898:281;;:::o;12185:129::-;12219:6;12246:20;;:::i;:::-;12236:30;;12275:33;12303:4;12295:6;12275:33;:::i;:::-;12185:129;;;:::o;12320:311::-;12397:4;12487:18;12479:6;12476:30;12473:56;;;12509:18;;:::i;:::-;12473:56;12559:4;12551:6;12547:17;12539:25;;12619:4;12613;12609:15;12601:23;;12320:311;;;:::o;12637:117::-;12746:1;12743;12736:12;12760:143;12817:5;12848:6;12842:13;12833:22;;12864:33;12891:5;12864:33;:::i;:::-;12760:143;;;;:::o;12926:732::-;13033:5;13058:81;13074:64;13131:6;13074:64;:::i;:::-;13058:81;:::i;:::-;13049:90;;13159:5;13188:6;13181:5;13174:21;13222:4;13215:5;13211:16;13204:23;;13275:4;13267:6;13263:17;13255:6;13251:30;13304:3;13296:6;13293:15;13290:122;;;13323:79;;:::i;:::-;13290:122;13438:6;13421:231;13455:6;13450:3;13447:15;13421:231;;;13530:3;13559:48;13603:3;13591:10;13559:48;:::i;:::-;13554:3;13547:61;13637:4;13632:3;13628:14;13621:21;;13497:155;13481:4;13476:3;13472:14;13465:21;;13421:231;;;13425:21;13039:619;;12926:732;;;;;:::o;13681:385::-;13763:5;13812:3;13805:4;13797:6;13793:17;13789:27;13779:122;;13820:79;;:::i;:::-;13779:122;13930:6;13924:13;13955:105;14056:3;14048:6;14041:4;14033:6;14029:17;13955:105;:::i;:::-;13946:114;;13769:297;13681:385;;;;:::o;14072:554::-;14167:6;14216:2;14204:9;14195:7;14191:23;14187:32;14184:119;;;14222:79;;:::i;:::-;14184:119;14363:1;14352:9;14348:17;14342:24;14393:18;14385:6;14382:30;14379:117;;;14415:79;;:::i;:::-;14379:117;14520:89;14601:7;14592:6;14581:9;14577:22;14520:89;:::i;:::-;14510:99;;14313:306;14072:554;;;;:::o;14632:224::-;14772:34;14768:1;14760:6;14756:14;14749:58;14841:7;14836:2;14828:6;14824:15;14817:32;14632:224;:::o;14862:366::-;15004:3;15025:67;15089:2;15084:3;15025:67;:::i;:::-;15018:74;;15101:93;15190:3;15101:93;:::i;:::-;15219:2;15214:3;15210:12;15203:19;;14862:366;;;:::o;15234:419::-;15400:4;15438:2;15427:9;15423:18;15415:26;;15487:9;15481:4;15477:20;15473:1;15462:9;15458:17;15451:47;15515:131;15641:4;15515:131;:::i;:::-;15507:139;;15234:419;;;:::o;15659:225::-;15799:34;15795:1;15787:6;15783:14;15776:58;15868:8;15863:2;15855:6;15851:15;15844:33;15659:225;:::o;15890:366::-;16032:3;16053:67;16117:2;16112:3;16053:67;:::i;:::-;16046:74;;16129:93;16218:3;16129:93;:::i;:::-;16247:2;16242:3;16238:12;16231:19;;15890:366;;;:::o;16262:419::-;16428:4;16466:2;16455:9;16451:18;16443:26;;16515:9;16509:4;16505:20;16501:1;16490:9;16486:17;16479:47;16543:131;16669:4;16543:131;:::i;:::-;16535:139;;16262:419;;;:::o;16687:223::-;16827:34;16823:1;16815:6;16811:14;16804:58;16896:6;16891:2;16883:6;16879:15;16872:31;16687:223;:::o;16916:366::-;17058:3;17079:67;17143:2;17138:3;17079:67;:::i;:::-;17072:74;;17155:93;17244:3;17155:93;:::i;:::-;17273:2;17268:3;17264:12;17257:19;;16916:366;;;:::o;17288:419::-;17454:4;17492:2;17481:9;17477:18;17469:26;;17541:9;17535:4;17531:20;17527:1;17516:9;17512:17;17505:47;17569:131;17695:4;17569:131;:::i;:::-;17561:139;;17288:419;;;:::o;17713:221::-;17853:34;17849:1;17841:6;17837:14;17830:58;17922:4;17917:2;17909:6;17905:15;17898:29;17713:221;:::o;17940:366::-;18082:3;18103:67;18167:2;18162:3;18103:67;:::i;:::-;18096:74;;18179:93;18268:3;18179:93;:::i;:::-;18297:2;18292:3;18288:12;18281:19;;17940:366;;;:::o;18312:419::-;18478:4;18516:2;18505:9;18501:18;18493:26;;18565:9;18559:4;18555:20;18551:1;18540:9;18536:17;18529:47;18593:131;18719:4;18593:131;:::i;:::-;18585:139;;18312:419;;;:::o;18737:179::-;18877:31;18873:1;18865:6;18861:14;18854:55;18737:179;:::o;18922:366::-;19064:3;19085:67;19149:2;19144:3;19085:67;:::i;:::-;19078:74;;19161:93;19250:3;19161:93;:::i;:::-;19279:2;19274:3;19270:12;19263:19;;18922:366;;;:::o;19294:419::-;19460:4;19498:2;19487:9;19483:18;19475:26;;19547:9;19541:4;19537:20;19533:1;19522:9;19518:17;19511:47;19575:131;19701:4;19575:131;:::i;:::-;19567:139;;19294:419;;;:::o;19719:245::-;19859:34;19855:1;19847:6;19843:14;19836:58;19928:28;19923:2;19915:6;19911:15;19904:53;19719:245;:::o;19970:366::-;20112:3;20133:67;20197:2;20192:3;20133:67;:::i;:::-;20126:74;;20209:93;20298:3;20209:93;:::i;:::-;20327:2;20322:3;20318:12;20311:19;;19970:366;;;:::o;20342:419::-;20508:4;20546:2;20535:9;20531:18;20523:26;;20595:9;20589:4;20585:20;20581:1;20570:9;20566:17;20559:47;20623:131;20749:4;20623:131;:::i;:::-;20615:139;;20342:419;;;:::o;20767:233::-;20806:3;20829:24;20847:5;20829:24;:::i;:::-;20820:33;;20875:66;20868:5;20865:77;20862:103;;20945:18;;:::i;:::-;20862:103;20992:1;20985:5;20981:13;20974:20;;20767:233;;;:::o;21006:410::-;21046:7;21069:20;21087:1;21069:20;:::i;:::-;21064:25;;21103:20;21121:1;21103:20;:::i;:::-;21098:25;;21158:1;21155;21151:9;21180:30;21198:11;21180:30;:::i;:::-;21169:41;;21359:1;21350:7;21346:15;21343:1;21340:22;21320:1;21313:9;21293:83;21270:139;;21389:18;;:::i;:::-;21270:139;21054:362;21006:410;;;;:::o;21422:180::-;21470:77;21467:1;21460:88;21567:4;21564:1;21557:15;21591:4;21588:1;21581:15;21608:185;21648:1;21665:20;21683:1;21665:20;:::i;:::-;21660:25;;21699:20;21717:1;21699:20;:::i;:::-;21694:25;;21738:1;21728:35;;21743:18;;:::i;:::-;21728:35;21785:1;21782;21778:9;21773:14;;21608:185;;;;:::o;21799:194::-;21839:4;21859:20;21877:1;21859:20;:::i;:::-;21854:25;;21893:20;21911:1;21893:20;:::i;:::-;21888:25;;21937:1;21934;21930:9;21922:17;;21961:1;21955:4;21952:11;21949:37;;;21966:18;;:::i;:::-;21949:37;21799:194;;;;:::o;21999:85::-;22044:7;22073:5;22062:16;;21999:85;;;:::o;22090:158::-;22148:9;22181:61;22199:42;22208:32;22234:5;22208:32;:::i;:::-;22199:42;:::i;:::-;22181:61;:::i;:::-;22168:74;;22090:158;;;:::o;22254:147::-;22349:45;22388:5;22349:45;:::i;:::-;22344:3;22337:58;22254:147;;:::o;22407:831::-;22670:4;22708:3;22697:9;22693:19;22685:27;;22722:71;22790:1;22779:9;22775:17;22766:6;22722:71;:::i;:::-;22803:80;22879:2;22868:9;22864:18;22855:6;22803:80;:::i;:::-;22930:9;22924:4;22920:20;22915:2;22904:9;22900:18;22893:48;22958:108;23061:4;23052:6;22958:108;:::i;:::-;22950:116;;23076:72;23144:2;23133:9;23129:18;23120:6;23076:72;:::i;:::-;23158:73;23226:3;23215:9;23211:19;23202:6;23158:73;:::i;:::-;22407:831;;;;;;;;:::o;23244:222::-;23384:34;23380:1;23372:6;23368:14;23361:58;23453:5;23448:2;23440:6;23436:15;23429:30;23244:222;:::o;23472:366::-;23614:3;23635:67;23699:2;23694:3;23635:67;:::i;:::-;23628:74;;23711:93;23800:3;23711:93;:::i;:::-;23829:2;23824:3;23820:12;23813:19;;23472:366;;;:::o;23844:419::-;24010:4;24048:2;24037:9;24033:18;24025:26;;24097:9;24091:4;24087:20;24083:1;24072:9;24068:17;24061:47;24125:131;24251:4;24125:131;:::i;:::-;24117:139;;23844:419;;;:::o;24269:182::-;24409:34;24405:1;24397:6;24393:14;24386:58;24269:182;:::o;24457:366::-;24599:3;24620:67;24684:2;24679:3;24620:67;:::i;:::-;24613:74;;24696:93;24785:3;24696:93;:::i;:::-;24814:2;24809:3;24805:12;24798:19;;24457:366;;;:::o;24829:419::-;24995:4;25033:2;25022:9;25018:18;25010:26;;25082:9;25076:4;25072:20;25068:1;25057:9;25053:17;25046:47;25110:131;25236:4;25110:131;:::i;:::-;25102:139;;24829:419;;;:::o;25254:224::-;25394:34;25390:1;25382:6;25378:14;25371:58;25463:7;25458:2;25450:6;25446:15;25439:32;25254:224;:::o;25484:366::-;25626:3;25647:67;25711:2;25706:3;25647:67;:::i;:::-;25640:74;;25723:93;25812:3;25723:93;:::i;:::-;25841:2;25836:3;25832:12;25825:19;;25484:366;;;:::o;25856:419::-;26022:4;26060:2;26049:9;26045:18;26037:26;;26109:9;26103:4;26099:20;26095:1;26084:9;26080:17;26073:47;26137:131;26263:4;26137:131;:::i;:::-;26129:139;;25856:419;;;:::o;26281:222::-;26421:34;26417:1;26409:6;26405:14;26398:58;26490:5;26485:2;26477:6;26473:15;26466:30;26281:222;:::o;26509:366::-;26651:3;26672:67;26736:2;26731:3;26672:67;:::i;:::-;26665:74;;26748:93;26837:3;26748:93;:::i;:::-;26866:2;26861:3;26857:12;26850:19;;26509:366;;;:::o;26881:419::-;27047:4;27085:2;27074:9;27070:18;27062:26;;27134:9;27128:4;27124:20;27120:1;27109:9;27105:17;27098:47;27162:131;27288:4;27162:131;:::i;:::-;27154:139;;26881:419;;;:::o;27306:225::-;27446:34;27442:1;27434:6;27430:14;27423:58;27515:8;27510:2;27502:6;27498:15;27491:33;27306:225;:::o;27537:366::-;27679:3;27700:67;27764:2;27759:3;27700:67;:::i;:::-;27693:74;;27776:93;27865:3;27776:93;:::i;:::-;27894:2;27889:3;27885:12;27878:19;;27537:366;;;:::o;27909:419::-;28075:4;28113:2;28102:9;28098:18;28090:26;;28162:9;28156:4;28152:20;28148:1;28137:9;28133:17;28126:47;28190:131;28316:4;28190:131;:::i;:::-;28182:139;;27909:419;;;:::o;28334:114::-;28371:7;28411:30;28404:5;28400:42;28389:53;;28334:114;;;:::o;28454:122::-;28527:24;28545:5;28527:24;:::i;:::-;28520:5;28517:35;28507:63;;28566:1;28563;28556:12;28507:63;28454:122;:::o;28582:143::-;28639:5;28670:6;28664:13;28655:22;;28686:33;28713:5;28686:33;:::i;:::-;28582:143;;;;:::o;28731:93::-;28767:7;28807:10;28800:5;28796:22;28785:33;;28731:93;;;:::o;28830:120::-;28902:23;28919:5;28902:23;:::i;:::-;28895:5;28892:34;28882:62;;28940:1;28937;28930:12;28882:62;28830:120;:::o;28956:141::-;29012:5;29043:6;29037:13;29028:22;;29059:32;29085:5;29059:32;:::i;:::-;28956:141;;;;:::o;29103:661::-;29190:6;29198;29206;29255:2;29243:9;29234:7;29230:23;29226:32;29223:119;;;29261:79;;:::i;:::-;29223:119;29381:1;29406:64;29462:7;29453:6;29442:9;29438:22;29406:64;:::i;:::-;29396:74;;29352:128;29519:2;29545:64;29601:7;29592:6;29581:9;29577:22;29545:64;:::i;:::-;29535:74;;29490:129;29658:2;29684:63;29739:7;29730:6;29719:9;29715:22;29684:63;:::i;:::-;29674:73;;29629:128;29103:661;;;;;:::o;29770:143::-;29827:5;29858:6;29852:13;29843:22;;29874:33;29901:5;29874:33;:::i;:::-;29770:143;;;;:::o;29919:351::-;29989:6;30038:2;30026:9;30017:7;30013:23;30009:32;30006:119;;;30044:79;;:::i;:::-;30006:119;30164:1;30189:64;30245:7;30236:6;30225:9;30221:22;30189:64;:::i;:::-;30179:74;;30135:128;29919:351;;;;:::o;30276:221::-;30416:34;30412:1;30404:6;30400:14;30393:58;30485:4;30480:2;30472:6;30468:15;30461:29;30276:221;:::o;30503:366::-;30645:3;30666:67;30730:2;30725:3;30666:67;:::i;:::-;30659:74;;30742:93;30831:3;30742:93;:::i;:::-;30860:2;30855:3;30851:12;30844:19;;30503:366;;;:::o;30875:419::-;31041:4;31079:2;31068:9;31064:18;31056:26;;31128:9;31122:4;31118:20;31114:1;31103:9;31099:17;31092:47;31156:131;31282:4;31156:131;:::i;:::-;31148:139;;30875:419;;;:::o;31300:179::-;31440:31;31436:1;31428:6;31424:14;31417:55;31300:179;:::o;31485:366::-;31627:3;31648:67;31712:2;31707:3;31648:67;:::i;:::-;31641:74;;31724:93;31813:3;31724:93;:::i;:::-;31842:2;31837:3;31833:12;31826:19;;31485:366;;;:::o;31857:419::-;32023:4;32061:2;32050:9;32046:18;32038:26;;32110:9;32104:4;32100:20;32096:1;32085:9;32081:17;32074:47;32138:131;32264:4;32138:131;:::i;:::-;32130:139;;31857:419;;;:::o;32282:220::-;32422:34;32418:1;32410:6;32406:14;32399:58;32491:3;32486:2;32478:6;32474:15;32467:28;32282:220;:::o;32508:366::-;32650:3;32671:67;32735:2;32730:3;32671:67;:::i;:::-;32664:74;;32747:93;32836:3;32747:93;:::i;:::-;32865:2;32860:3;32856:12;32849:19;;32508:366;;;:::o;32880:419::-;33046:4;33084:2;33073:9;33069:18;33061:26;;33133:9;33127:4;33123:20;33119:1;33108:9;33104:17;33097:47;33161:131;33287:4;33161:131;:::i;:::-;33153:139;;32880:419;;;:::o;33305:221::-;33445:34;33441:1;33433:6;33429:14;33422:58;33514:4;33509:2;33501:6;33497:15;33490:29;33305:221;:::o;33532:366::-;33674:3;33695:67;33759:2;33754:3;33695:67;:::i;:::-;33688:74;;33771:93;33860:3;33771:93;:::i;:::-;33889:2;33884:3;33880:12;33873:19;;33532:366;;;:::o;33904:419::-;34070:4;34108:2;34097:9;34093:18;34085:26;;34157:9;34151:4;34147:20;34143:1;34132:9;34128:17;34121:47;34185:131;34311:4;34185:131;:::i;:::-;34177:139;;33904:419;;;:::o
Swarm Source
ipfs://8c233b620d1087647b5147d57a4a6412b0332cb22417c79022066c77df115739
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.