ERC-20
Overview
Max Total Supply
1,000,000,000,000 MOON
Holders
246
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Moon
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-25 */ /* * SPDX-License-Identifier: MIT * https://mooncoin.cash * https://x.com/MoonCoin__Eth * https://t.me/MoonCoin_Eth */ pragma solidity 0.8.19; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } 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); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev 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 upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][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 upd 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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev 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 {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract Moon is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; uint256 private lastContractSell; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fees address private marketingWallet; uint256 private buyTaxTotal; uint256 private sellTaxTotal; uint256 private transferTaxTotal; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event SetPairLPool(address indexed pair, bool indexed value); event TradingEnabled(uint256 indexed timestamp); event LimitsRemoved(uint256 indexed timestamp); event DisabledTransferDelay(uint256 indexed timestamp); event SwapbackSettingsUpdated( bool enabled, uint256 swapBackValueMin, uint256 swapBackValueMax ); event MaxTxUpdated(uint256 maxTx); event MaxWalletUpdated(uint256 maxWallet); event MarketingWalletUpdated( address indexed newWallet, address indexed oldWallet ); event BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("Moon", "MOON") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); moTxAntiWhale_Limits_setExcluded(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); moTxAntiWhale_Limits_setExcluded(address(dexPair), true); _setPairLPool(address(dexPair), true); uint256 _totalSupply = 1_000_000_000_000 * 10 ** decimals(); lastContractSell = block.timestamp; maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyTaxTotal = 25; sellTaxTotal = 30; transferTaxTotal = 0; marketingWallet = address(0xaAB4cb30399F519dCE19d81db4a51300B63DC33E); // exclude from paying fees or having max transaction amount feesM_setExcluded(msg.sender, true); feesM_setExcluded(address(this), true); feesM_setExcluded(address(0xdead), true); feesM_setExcluded(marketingWallet, true); moTxAntiWhale_Limits_setExcluded(msg.sender, true); moTxAntiWhale_Limits_setExcluded(address(this), true); moTxAntiWhale_Limits_setExcluded(address(0xdead), true); moTxAntiWhale_Limits_setExcluded(marketingWallet, true); transferOwnership(msg.sender); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function openTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function moTxAntiWhale_Limits_remove() external onlyOwner { limitsEnabled = false; transferTaxTotal = 0; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _caSBcEnabled If swapback is enabled * @param _caSBcTrigger The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _caSBcLimit The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function sbM_newRange( bool _caSBcEnabled, uint256 _caSBcTrigger, uint256 _caSBcLimit ) external onlyOwner { require( _caSBcTrigger >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require( _caSBcLimit >= _caSBcTrigger, "maximum amount cant be higher than minimum" ); swapbackEnabled = _caSBcEnabled; swapBackValueMin = (totalSupply() * _caSBcTrigger) / 10000; swapBackValueMax = (totalSupply() * _caSBcLimit) / 10000; emit SwapbackSettingsUpdated(_caSBcEnabled, _caSBcTrigger, _caSBcLimit); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param _lmtTxNew Base 1000, so 1% = 10 */ function moTxAntiWhale_Limits_maxTx_set(uint256 _lmtTxNew) external onlyOwner { require(_lmtTxNew >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (_lmtTxNew * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param _limitWalletNew Base 1000, so 1% = 10 */ function moTxAntiWhale_Limits_walletLimit_set( uint256 _limitWalletNew ) external onlyOwner { require(_limitWalletNew >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (_limitWalletNew * totalSupply()) / 1000; emit MaxWalletUpdated(maxWallet); } /** * @notice Sets if a wallet is excluded from the max wallet and tx limits * @dev onlyOwner. * Emits an {ExcludeFromLimits} event * @param _add The wallet to update * @param _excluded If the wallet is excluded or not */ function moTxAntiWhale_Limits_setExcluded( address _add, bool _excluded ) public onlyOwner { transferLimitExempt[_add] = _excluded; emit ExcludeFromLimits(_add, _excluded); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _newSwapTax The fee for the marketing wallet */ function feesM_buy_set(uint256 _newSwapTax) external onlyOwner { buyTaxTotal = _newSwapTax; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyTaxTotal, buyTaxTotal); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _newSwapTax The fee for the marketing wallet */ function feesM_sell_set(uint256 _newSwapTax) external onlyOwner { sellTaxTotal = _newSwapTax; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellTaxTotal, sellTaxTotal); } function feesM_transfer_set(uint256 _newSwapTax) external onlyOwner { transferTaxTotal = _newSwapTax; require( transferTaxTotal <= 100, "Total transfer fee cannot be higher than 100%" ); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param _add The wallet to update * @param _excluded If the wallet is excluded or not */ function feesM_setExcluded( address _add, bool _excluded ) public onlyOwner { transferTaxExempt[_add] = _excluded; emit ExcludeFromFees(_add, _excluded); } function _setPairLPool(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetPairLPool(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param _newWallet The new marketing wallet */ function feesM_receiver(address _newWallet) external onlyOwner { emit MarketingWalletUpdated(_newWallet, marketingWallet); marketingWallet = _newWallet; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _caSBcackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _caSBcackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function sbM_viewIm() external view returns ( bool _swapbackEnabled, uint256 _caSBcackValueMin, uint256 _caSBcackValueMax ) { _swapbackEnabled = swapbackEnabled; _caSBcackValueMin = swapBackValueMin; _caSBcackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function moTxAntiWhale_Limits_viewIm() external view returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees */ function receiver_viewIm() external view returns (address _marketingWallet) { return (marketingWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _sellTaxTotal The total fee for sells * @return _transferTaxTotal The total fee for transfers */ function feesM_viewIm() external view returns ( uint256 _buyTaxTotal, uint256 _sellTaxTotal, uint256 _transferTaxTotal ) { _buyTaxTotal = buyTaxTotal; _sellTaxTotal = sellTaxTotal; _transferTaxTotal = transferTaxTotal; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function wallet_viewIm( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] && lastContractSell != block.timestamp ) { swapping = true; swapBack(amount); lastContractSell = block.timestamp; swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); } // on transfers else if ( transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] ) { fees = amount.mul(transferTaxTotal).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function manualSwap(uint256 percent) external { require( marketingWallet == msg.sender, "Only marketing wallet can call this function" ); uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = (contractBalance * percent) / 100; swapTokensForEth(totalTokensToSwap); } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 10) { contractBalance = amount * 10; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
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":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","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":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetPairLPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapBackValueMax","type":"uint256"}],"name":"SwapbackSettingsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","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":"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"feesM_buy_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWallet","type":"address"}],"name":"feesM_receiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"feesM_sell_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"feesM_setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapTax","type":"uint256"}],"name":"feesM_transfer_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesM_viewIm","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_transferTaxTotal","type":"uint256"}],"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":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lmtTxNew","type":"uint256"}],"name":"moTxAntiWhale_Limits_maxTx_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"moTxAntiWhale_Limits_remove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_add","type":"address"},{"internalType":"bool","name":"_excluded","type":"bool"}],"name":"moTxAntiWhale_Limits_setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"moTxAntiWhale_Limits_viewIm","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limitWalletNew","type":"uint256"}],"name":"moTxAntiWhale_Limits_walletLimit_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver_viewIm","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_caSBcEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcTrigger","type":"uint256"},{"internalType":"uint256","name":"_caSBcLimit","type":"uint256"}],"name":"sbM_newRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sbM_viewIm","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_caSBcackValueMin","type":"uint256"},{"internalType":"uint256","name":"_caSBcackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"wallet_viewIm","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600960006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001601460006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600481526020017f4d6f6f6e000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4d4f4f4e000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000ebb565b5080600490816200010d919062000ebb565b50505062000130620001246200059460201b60201c565b6200059c60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200066260201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020291906200100c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200100c565b6040518363ffffffff1660e01b8152600401620002af9291906200104f565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200100c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200066260201b60201c565b6200035260a05160016200079c60201b60201c565b6000620003646200083d60201b60201c565b600a6200037291906200120c565b64e8d4a510006200038491906200125d565b9050426008819055506103e8600a826200039f91906200125d565b620003ab9190620012d7565b600b819055506103e8600a82620003c391906200125d565b620003cf9190620012d7565b600a819055506103e8600182620003e791906200125d565b620003f39190620012d7565b60068190555060646002826200040a91906200125d565b620004169190620012d7565b6007819055506019600e81905550601e600f81905550600060108190555073aab4cb30399f519dce19d81db4a51300b63dc33e600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049c3360016200084660201b60201c565b620004af3060016200084660201b60201c565b620004c461dead60016200084660201b60201c565b620004f9600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084660201b60201c565b6200050c3360016200066260201b60201c565b6200051f3060016200066260201b60201c565b6200053461dead60016200066260201b60201c565b62000569600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066260201b60201c565b6200057a336200098060201b60201c565b6200058c338262000a9560201b60201c565b50506200153f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006726200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200069862000c0d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e89062001370565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620007909190620013af565b60405180910390a25050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fe0f0eeda3b1247853e2a825aa40eb65c3b08879740f68ff00df4745b6bb075b260405160405180910390a35050565b60006012905090565b620008566200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200087c62000c0d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008cc9062001370565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009749190620013af565b60405180910390a25050565b620009906200059460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009b662000c0d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a069062001370565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a789062001442565b60405180910390fd5b62000a92816200059c60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afe90620014b4565b60405180910390fd5b62000b1b6000838362000c3760201b60201c565b806002600082825462000b2f9190620014d6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b869190620014d6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bed919062001522565b60405180910390a362000c096000838362000c3c60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cc357607f821691505b60208210810362000cd95762000cd862000c7b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d04565b62000d4f868362000d04565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d9c62000d9662000d908462000d67565b62000d71565b62000d67565b9050919050565b6000819050919050565b62000db88362000d7b565b62000dd062000dc78262000da3565b84845462000d11565b825550505050565b600090565b62000de762000dd8565b62000df481848462000dad565b505050565b5b8181101562000e1c5762000e1060008262000ddd565b60018101905062000dfa565b5050565b601f82111562000e6b5762000e358162000cdf565b62000e408462000cf4565b8101602085101562000e50578190505b62000e6862000e5f8562000cf4565b83018262000df9565b50505b505050565b600082821c905092915050565b600062000e906000198460080262000e70565b1980831691505092915050565b600062000eab838362000e7d565b9150826002028217905092915050565b62000ec68262000c41565b67ffffffffffffffff81111562000ee25762000ee162000c4c565b5b62000eee825462000caa565b62000efb82828562000e20565b600060209050601f83116001811462000f33576000841562000f1e578287015190505b62000f2a858262000e9d565b86555062000f9a565b601f19841662000f438662000cdf565b60005b8281101562000f6d5784890151825560018201915060208501945060208101905062000f46565b8683101562000f8d578489015162000f89601f89168262000e7d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fd48262000fa7565b9050919050565b62000fe68162000fc7565b811462000ff257600080fd5b50565b600081519050620010068162000fdb565b92915050565b60006020828403121562001025576200102462000fa2565b5b6000620010358482850162000ff5565b91505092915050565b620010498162000fc7565b82525050565b60006040820190506200106660008301856200103e565b6200107560208301846200103e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200110a57808604811115620010e257620010e16200107c565b5b6001851615620010f25780820291505b80810290506200110285620010ab565b9450620010c2565b94509492505050565b600082620011255760019050620011f8565b81620011355760009050620011f8565b81600181146200114e576002811462001159576200118f565b6001915050620011f8565b60ff8411156200116e576200116d6200107c565b5b8360020a9150848211156200118857620011876200107c565b5b50620011f8565b5060208310610133831016604e8410600b8410161715620011c95782820a905083811115620011c357620011c26200107c565b5b620011f8565b620011d88484846001620010b8565b92509050818404811115620011f257620011f16200107c565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012198262000d67565b91506200122683620011ff565b9250620012557fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001113565b905092915050565b60006200126a8262000d67565b9150620012778362000d67565b9250828202620012878162000d67565b91508282048414831517620012a157620012a06200107c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012e48262000d67565b9150620012f18362000d67565b925082620013045762001303620012a8565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013586020836200130f565b9150620013658262001320565b602082019050919050565b600060208201905081810360008301526200138b8162001349565b9050919050565b60008115159050919050565b620013a98162001392565b82525050565b6000602082019050620013c660008301846200139e565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200142a6026836200130f565b91506200143782620013cc565b604082019050919050565b600060208201905081810360008301526200145d816200141b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200149c601f836200130f565b9150620014a98262001464565b602082019050919050565b60006020820190508181036000830152620014cf816200148d565b9050919050565b6000620014e38262000d67565b9150620014f08362000d67565b92508282019050808211156200150b576200150a6200107c565b5b92915050565b6200151c8162000d67565b82525050565b600060208201905062001539600083018462001511565b92915050565b60805160a051614537620015736000396000611c8b015260008181612b7401528181612c550152612c7c01526145376000f3fe6080604052600436106101fd5760003560e01c8063713a47641161010d578063a9059cbb116100a0578063d388cf9e1161006f578063d388cf9e14610720578063dd62ed3e14610749578063e741931f14610786578063f242ab41146107af578063f2fde38b146107da57610204565b8063a9059cbb1461067a578063b70143c9146106b7578063c8bf2278146106e0578063c9567bf91461070957610204565b80638da5cb5b116100dc5780638da5cb5b146105ba5780639563a2e5146105e557806395d89b4114610612578063a457c2d71461063d57610204565b8063713a47641461050e578063715018a61461054d5780637ff6f7b91461056457806387b3f4861461058d57610204565b806328b77785116101905780633caec7831161015f5780633caec7831461042957806343915881146104525780634ada218b1461047b5780636bdb77f1146104a657806370a08231146104d157610204565b806328b777851461036f578063313ce567146103985780633310c66a146103c357806339509351146103ec57610204565b80630d79d045116101cc5780630d79d045146102b557806318160ddd146102de57806323b872dd1461030957806325599d7f1461034657610204565b806306fdde0314610209578063084e021c146102345780630850aad81461024b578063095ea7b31461027857610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610803565b60405161022b9190613163565b60405180910390f35b34801561024057600080fd5b50610249610895565b005b34801561025757600080fd5b50610260610963565b60405161026f9392919061319e565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190613264565b61097c565b6040516102ac91906132bf565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906132da565b61099a565b005b3480156102ea57600080fd5b506102f3610abc565b6040516103009190613307565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190613322565b610ac6565b60405161033d91906132bf565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906133a1565b610bbe565b005b34801561037b57600080fd5b50610396600480360381019061039191906133f4565b610d67565b005b3480156103a457600080fd5b506103ad610e8c565b6040516103ba9190613450565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e591906132da565b610e95565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613264565b610fa2565b60405161042091906132bf565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b91906132da565b61104e565b005b34801561045e57600080fd5b506104796004803603810190610474919061346b565b61115b565b005b34801561048757600080fd5b50610490611297565b60405161049d91906132bf565b60405180910390f35b3480156104b257600080fd5b506104bb6112aa565b6040516104c891906134a7565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f3919061346b565b6112d4565b6040516105059190613307565b60405180910390f35b34801561051a57600080fd5b506105356004803603810190610530919061346b565b61131c565b604051610544939291906134c2565b60405180910390f35b34801561055957600080fd5b50610562611415565b005b34801561057057600080fd5b5061058b600480360381019061058691906134f9565b61149d565b005b34801561059957600080fd5b506105a2611536565b6040516105b193929190613526565b60405180910390f35b3480156105c657600080fd5b506105cf61155c565b6040516105dc91906134a7565b60405180910390f35b3480156105f157600080fd5b506105fa611586565b60405161060993929190613526565b60405180910390f35b34801561061e57600080fd5b506106276115ac565b6040516106349190613163565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613264565b61163e565b60405161067191906132bf565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190613264565b611729565b6040516106ae91906132bf565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906132da565b611747565b005b3480156106ec57600080fd5b50610707600480360381019061070291906133f4565b61180e565b005b34801561071557600080fd5b5061071e611933565b005b34801561072c57600080fd5b50610747600480360381019061074291906132da565b611a14565b005b34801561075557600080fd5b50610770600480360381019061076b919061355d565b611ae0565b60405161077d9190613307565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906132da565b611b67565b005b3480156107bb57600080fd5b506107c4611c89565b6040516107d191906134a7565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc919061346b565b611cad565b005b606060038054610812906135cc565b80601f016020809104026020016040519081016040528092919081815260200182805461083e906135cc565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b61089d611da4565b73ffffffffffffffffffffffffffffffffffffffff166108bb61155c565b73ffffffffffffffffffffffffffffffffffffffff1614610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890613649565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000806000600e549250600f5491506010549050909192565b6000610990610989611da4565b8484611dac565b6001905092915050565b6109a2611da4565b73ffffffffffffffffffffffffffffffffffffffff166109c061155c565b73ffffffffffffffffffffffffffffffffffffffff1614610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d90613649565b60405180910390fd5b6005811015610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a51906136db565b60405180910390fd5b6103e8610a65610abc565b82610a70919061372a565b610a7a919061379b565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a54604051610ab19190613307565b60405180910390a150565b6000600254905090565b6000610ad3848484611f75565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b1e611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061383e565b60405180910390fd5b610bb285610baa611da4565b858403611dac565b60019150509392505050565b610bc6611da4565b73ffffffffffffffffffffffffffffffffffffffff16610be461155c565b73ffffffffffffffffffffffffffffffffffffffff1614610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613649565b60405180910390fd5b6001821015610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c75906138d0565b60405180910390fd5b81811015610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613962565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082610ce7610abc565b610cf1919061372a565b610cfb919061379b565b60068190555061271081610d0d610abc565b610d17919061372a565b610d21919061379b565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051610d5a93929190613526565b60405180910390a1505050565b610d6f611da4565b73ffffffffffffffffffffffffffffffffffffffff16610d8d61155c565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613649565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610e8091906132bf565b60405180910390a25050565b60006012905090565b610e9d611da4565b73ffffffffffffffffffffffffffffffffffffffff16610ebb61155c565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890613649565b60405180910390fd5b80600e819055506064600e541115610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f55906139f4565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e54604051610f979392919061319e565b60405180910390a150565b6000611044610faf611da4565b848460016000610fbd611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103f9190613a14565b611dac565b6001905092915050565b611056611da4565b73ffffffffffffffffffffffffffffffffffffffff1661107461155c565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190613649565b60405180910390fd5b80600f819055506064600f541115611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90613aba565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f546040516111509392919061319e565b60405180910390a150565b611163611da4565b73ffffffffffffffffffffffffffffffffffffffff1661118161155c565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613649565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900460ff1681565b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b61141d611da4565b73ffffffffffffffffffffffffffffffffffffffff1661143b61155c565b73ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613649565b60405180910390fd5b61149b6000612a0f565b565b6114a5611da4565b73ffffffffffffffffffffffffffffffffffffffff166114c361155c565b73ffffffffffffffffffffffffffffffffffffffff1614611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613649565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6060600480546115bb906135cc565b80601f01602080910402602001604051908101604052809291908181526020018280546115e7906135cc565b80156116345780601f1061160957610100808354040283529160200191611634565b820191906000526020600020905b81548152906001019060200180831161161757829003601f168201915b5050505050905090565b6000806001600061164d611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613b4c565b60405180910390fd5b61171e611715611da4565b85858403611dac565b600191505092915050565b600061173d611736611da4565b8484611f75565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90613bde565b60405180910390fd5b60006117e2306112d4565b90506000606483836117f4919061372a565b6117fe919061379b565b905061180981612ad5565b505050565b611816611da4565b73ffffffffffffffffffffffffffffffffffffffff1661183461155c565b73ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190613649565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192791906132bf565b60405180910390a25050565b61193b611da4565b73ffffffffffffffffffffffffffffffffffffffff1661195961155c565b73ffffffffffffffffffffffffffffffffffffffff16146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690613649565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611a1c611da4565b73ffffffffffffffffffffffffffffffffffffffff16611a3a61155c565b73ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8790613649565b60405180910390fd5b8060108190555060646010541115611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613c70565b60405180910390fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b6f611da4565b73ffffffffffffffffffffffffffffffffffffffff16611b8d61155c565b73ffffffffffffffffffffffffffffffffffffffff1614611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90613649565b60405180910390fd5b6002811015611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613cdc565b60405180910390fd5b6103e8611c32610abc565b82611c3d919061372a565b611c47919061379b565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b54604051611c7e9190613307565b60405180910390a150565b7f000000000000000000000000000000000000000000000000000000000000000081565b611cb5611da4565b73ffffffffffffffffffffffffffffffffffffffff16611cd361155c565b73ffffffffffffffffffffffffffffffffffffffff1614611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090613649565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90613d6e565b60405180910390fd5b611da181612a0f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613e00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613e92565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f689190613307565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613fb6565b60405180910390fd5b6000810361206c5761206783836000612d12565b612a0a565b600960009054906101000a900460ff16156125675761208961155c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f757506120c761155c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121305750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561216a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121835750600560149054906101000a900460ff16155b1561256657600d60009054906101000a900460ff1661227d57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061223d5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614048565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123205750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c757600b5481111561236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906140da565b60405180910390fd5b600a54612376836112d4565b826123819190613a14565b11156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614146565b60405180910390fd5b612565565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246a5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b957600b548111156124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab906141d8565b60405180910390fd5b612564565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661256357600a54612516836112d4565b826125219190613a14565b1115612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990614146565b60405180910390fd5b5b5b5b5b5b6000612572306112d4565b9050600060065482101590508080156125975750600560159054906101000a900460ff165b80156125b05750600560149054906101000a900460ff16155b80156126065750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561265c5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126b25750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126c057504260085414155b1561270c576001600560146101000a81548160ff0219169083151502179055506126e983612f91565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b600081156129fa57601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561282f57506000600f54115b156128635761285c606461284e600f548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d6565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128be57506000600e54115b156128f2576128eb60646128dd600e548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d5565b600060105411801561294e5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129a45750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129d4576129d160646129c36010548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90505b5b5b60008111156129eb576129ea873083612d12565b5b80856129f791906141f8565b94505b612a05878787612d12565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115612af257612af161422c565b5b604051908082528060200260200182016040528015612b205781602001602082028036833780820191505090505b5090503081600081518110612b3857612b3761425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c01919061429f565b81600181518110612c1557612c1461425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c7a307f000000000000000000000000000000000000000000000000000000000000000084611dac565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cdc9594939291906143cf565b600060405180830381600087803b158015612cf657600080fd5b505af1158015612d0a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790613fb6565b60405180910390fd5b612dfb8383836130c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e789061449b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f149190613a14565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f789190613307565b60405180910390a3612f8b8484846130ce565b50505050565b6000612f9c306112d4565b90506000808203612fae57505061309a565b600754821115612fbe5760075491505b601460009054906101000a900460ff168015612fe55750600a83612fe2919061372a565b82115b15612ffa57600a83612ff7919061372a565b91505b600082905061300881612ad5565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161304e906144ec565b60006040518083038185875af1925050503d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b5050809250505050505b50565b600081836130ab919061372a565b905092915050565b600081836130c1919061379b565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561310d5780820151818401526020810190506130f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613135826130d3565b61313f81856130de565b935061314f8185602086016130ef565b61315881613119565b840191505092915050565b6000602082019050818103600083015261317d818461312a565b905092915050565b6000819050919050565b61319881613185565b82525050565b60006060820190506131b3600083018661318f565b6131c0602083018561318f565b6131cd604083018461318f565b949350505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613205826131da565b9050919050565b613215816131fa565b811461322057600080fd5b50565b6000813590506132328161320c565b92915050565b61324181613185565b811461324c57600080fd5b50565b60008135905061325e81613238565b92915050565b6000806040838503121561327b5761327a6131d5565b5b600061328985828601613223565b925050602061329a8582860161324f565b9150509250929050565b60008115159050919050565b6132b9816132a4565b82525050565b60006020820190506132d460008301846132b0565b92915050565b6000602082840312156132f0576132ef6131d5565b5b60006132fe8482850161324f565b91505092915050565b600060208201905061331c600083018461318f565b92915050565b60008060006060848603121561333b5761333a6131d5565b5b600061334986828701613223565b935050602061335a86828701613223565b925050604061336b8682870161324f565b9150509250925092565b61337e816132a4565b811461338957600080fd5b50565b60008135905061339b81613375565b92915050565b6000806000606084860312156133ba576133b96131d5565b5b60006133c88682870161338c565b93505060206133d98682870161324f565b92505060406133ea8682870161324f565b9150509250925092565b6000806040838503121561340b5761340a6131d5565b5b600061341985828601613223565b925050602061342a8582860161338c565b9150509250929050565b600060ff82169050919050565b61344a81613434565b82525050565b60006020820190506134656000830184613441565b92915050565b600060208284031215613481576134806131d5565b5b600061348f84828501613223565b91505092915050565b6134a1816131fa565b82525050565b60006020820190506134bc6000830184613498565b92915050565b60006060820190506134d760008301866132b0565b6134e460208301856132b0565b6134f160408301846132b0565b949350505050565b60006020828403121561350f5761350e6131d5565b5b600061351d8482850161338c565b91505092915050565b600060608201905061353b60008301866132b0565b613548602083018561318f565b613555604083018461318f565b949350505050565b60008060408385031215613574576135736131d5565b5b600061358285828601613223565b925050602061359385828601613223565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135e457607f821691505b6020821081036135f7576135f661359d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136336020836130de565b915061363e826135fd565b602082019050919050565b6000602082019050818103600083015261366281613626565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006136c56024836130de565b91506136d082613669565b604082019050919050565b600060208201905081810360008301526136f4816136b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061373582613185565b915061374083613185565b925082820261374e81613185565b91508282048414831517613765576137646136fb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137a682613185565b91506137b183613185565b9250826137c1576137c061376c565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138286028836130de565b9150613833826137cc565b604082019050919050565b600060208201905081810360008301526138578161381b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006138ba6034836130de565b91506138c58261385e565b604082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061394c602a836130de565b9150613957826138f0565b604082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006139de6028836130de565b91506139e982613982565b604082019050919050565b60006020820190508181036000830152613a0d816139d1565b9050919050565b6000613a1f82613185565b9150613a2a83613185565b9250828201905080821115613a4257613a416136fb565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613aa46029836130de565b9150613aaf82613a48565b604082019050919050565b60006020820190508181036000830152613ad381613a97565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b366025836130de565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613bc8602c836130de565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b6000613c5a602d836130de565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613cc66020836130de565b9150613cd182613c90565b602082019050919050565b60006020820190508181036000830152613cf581613cb9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d586026836130de565b9150613d6382613cfc565b604082019050919050565b60006020820190508181036000830152613d8781613d4b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dea6024836130de565b9150613df582613d8e565b604082019050919050565b60006020820190508181036000830152613e1981613ddd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7c6022836130de565b9150613e8782613e20565b604082019050919050565b60006020820190508181036000830152613eab81613e6f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f0e6025836130de565b9150613f1982613eb2565b604082019050919050565b60006020820190508181036000830152613f3d81613f01565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa06023836130de565b9150613fab82613f44565b604082019050919050565b60006020820190508181036000830152613fcf81613f93565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006140326022836130de565b915061403d82613fd6565b604082019050919050565b6000602082019050818103600083015261406181614025565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006140c46026836130de565b91506140cf82614068565b604082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141306013836130de565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006141c26027836130de565b91506141cd82614166565b604082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b600061420382613185565b915061420e83613185565b9250828203905081811115614226576142256136fb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506142998161320c565b92915050565b6000602082840312156142b5576142b46131d5565b5b60006142c38482850161428a565b91505092915050565b6000819050919050565b6000819050919050565b60006142fb6142f66142f1846142cc565b6142d6565b613185565b9050919050565b61430b816142e0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614346816131fa565b82525050565b6000614358838361433d565b60208301905092915050565b6000602082019050919050565b600061437c82614311565b614386818561431c565b93506143918361432d565b8060005b838110156143c25781516143a9888261434c565b97506143b483614364565b925050600181019050614395565b5085935050505092915050565b600060a0820190506143e4600083018861318f565b6143f16020830187614302565b81810360408301526144038186614371565b90506144126060830185613498565b61441f608083018461318f565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144856026836130de565b915061449082614429565b604082019050919050565b600060208201905081810360008301526144b481614478565b9050919050565b600081905092915050565b50565b60006144d66000836144bb565b91506144e1826144c6565b600082019050919050565b60006144f7826144c9565b915081905091905056fea2646970667358221220c2c73183b4ba9a9e3f52d3acfa6d6721e057ce8db2471cee8b7ffaf10fb7068864736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c8063713a47641161010d578063a9059cbb116100a0578063d388cf9e1161006f578063d388cf9e14610720578063dd62ed3e14610749578063e741931f14610786578063f242ab41146107af578063f2fde38b146107da57610204565b8063a9059cbb1461067a578063b70143c9146106b7578063c8bf2278146106e0578063c9567bf91461070957610204565b80638da5cb5b116100dc5780638da5cb5b146105ba5780639563a2e5146105e557806395d89b4114610612578063a457c2d71461063d57610204565b8063713a47641461050e578063715018a61461054d5780637ff6f7b91461056457806387b3f4861461058d57610204565b806328b77785116101905780633caec7831161015f5780633caec7831461042957806343915881146104525780634ada218b1461047b5780636bdb77f1146104a657806370a08231146104d157610204565b806328b777851461036f578063313ce567146103985780633310c66a146103c357806339509351146103ec57610204565b80630d79d045116101cc5780630d79d045146102b557806318160ddd146102de57806323b872dd1461030957806325599d7f1461034657610204565b806306fdde0314610209578063084e021c146102345780630850aad81461024b578063095ea7b31461027857610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e610803565b60405161022b9190613163565b60405180910390f35b34801561024057600080fd5b50610249610895565b005b34801561025757600080fd5b50610260610963565b60405161026f9392919061319e565b60405180910390f35b34801561028457600080fd5b5061029f600480360381019061029a9190613264565b61097c565b6040516102ac91906132bf565b60405180910390f35b3480156102c157600080fd5b506102dc60048036038101906102d791906132da565b61099a565b005b3480156102ea57600080fd5b506102f3610abc565b6040516103009190613307565b60405180910390f35b34801561031557600080fd5b50610330600480360381019061032b9190613322565b610ac6565b60405161033d91906132bf565b60405180910390f35b34801561035257600080fd5b5061036d600480360381019061036891906133a1565b610bbe565b005b34801561037b57600080fd5b50610396600480360381019061039191906133f4565b610d67565b005b3480156103a457600080fd5b506103ad610e8c565b6040516103ba9190613450565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e591906132da565b610e95565b005b3480156103f857600080fd5b50610413600480360381019061040e9190613264565b610fa2565b60405161042091906132bf565b60405180910390f35b34801561043557600080fd5b50610450600480360381019061044b91906132da565b61104e565b005b34801561045e57600080fd5b506104796004803603810190610474919061346b565b61115b565b005b34801561048757600080fd5b50610490611297565b60405161049d91906132bf565b60405180910390f35b3480156104b257600080fd5b506104bb6112aa565b6040516104c891906134a7565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f3919061346b565b6112d4565b6040516105059190613307565b60405180910390f35b34801561051a57600080fd5b506105356004803603810190610530919061346b565b61131c565b604051610544939291906134c2565b60405180910390f35b34801561055957600080fd5b50610562611415565b005b34801561057057600080fd5b5061058b600480360381019061058691906134f9565b61149d565b005b34801561059957600080fd5b506105a2611536565b6040516105b193929190613526565b60405180910390f35b3480156105c657600080fd5b506105cf61155c565b6040516105dc91906134a7565b60405180910390f35b3480156105f157600080fd5b506105fa611586565b60405161060993929190613526565b60405180910390f35b34801561061e57600080fd5b506106276115ac565b6040516106349190613163565b60405180910390f35b34801561064957600080fd5b50610664600480360381019061065f9190613264565b61163e565b60405161067191906132bf565b60405180910390f35b34801561068657600080fd5b506106a1600480360381019061069c9190613264565b611729565b6040516106ae91906132bf565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906132da565b611747565b005b3480156106ec57600080fd5b50610707600480360381019061070291906133f4565b61180e565b005b34801561071557600080fd5b5061071e611933565b005b34801561072c57600080fd5b50610747600480360381019061074291906132da565b611a14565b005b34801561075557600080fd5b50610770600480360381019061076b919061355d565b611ae0565b60405161077d9190613307565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a891906132da565b611b67565b005b3480156107bb57600080fd5b506107c4611c89565b6040516107d191906134a7565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc919061346b565b611cad565b005b606060038054610812906135cc565b80601f016020809104026020016040519081016040528092919081815260200182805461083e906135cc565b801561088b5780601f106108605761010080835404028352916020019161088b565b820191906000526020600020905b81548152906001019060200180831161086e57829003601f168201915b5050505050905090565b61089d611da4565b73ffffffffffffffffffffffffffffffffffffffff166108bb61155c565b73ffffffffffffffffffffffffffffffffffffffff1614610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890613649565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000806000600e549250600f5491506010549050909192565b6000610990610989611da4565b8484611dac565b6001905092915050565b6109a2611da4565b73ffffffffffffffffffffffffffffffffffffffff166109c061155c565b73ffffffffffffffffffffffffffffffffffffffff1614610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d90613649565b60405180910390fd5b6005811015610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a51906136db565b60405180910390fd5b6103e8610a65610abc565b82610a70919061372a565b610a7a919061379b565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a54604051610ab19190613307565b60405180910390a150565b6000600254905090565b6000610ad3848484611f75565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b1e611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b959061383e565b60405180910390fd5b610bb285610baa611da4565b858403611dac565b60019150509392505050565b610bc6611da4565b73ffffffffffffffffffffffffffffffffffffffff16610be461155c565b73ffffffffffffffffffffffffffffffffffffffff1614610c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3190613649565b60405180910390fd5b6001821015610c7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c75906138d0565b60405180910390fd5b81811015610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890613962565b60405180910390fd5b82600560156101000a81548160ff02191690831515021790555061271082610ce7610abc565b610cf1919061372a565b610cfb919061379b565b60068190555061271081610d0d610abc565b610d17919061372a565b610d21919061379b565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c779838383604051610d5a93929190613526565b60405180910390a1505050565b610d6f611da4565b73ffffffffffffffffffffffffffffffffffffffff16610d8d61155c565b73ffffffffffffffffffffffffffffffffffffffff1614610de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dda90613649565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610e8091906132bf565b60405180910390a25050565b60006012905090565b610e9d611da4565b73ffffffffffffffffffffffffffffffffffffffff16610ebb61155c565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890613649565b60405180910390fd5b80600e819055506064600e541115610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f55906139f4565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e54604051610f979392919061319e565b60405180910390a150565b6000611044610faf611da4565b848460016000610fbd611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103f9190613a14565b611dac565b6001905092915050565b611056611da4565b73ffffffffffffffffffffffffffffffffffffffff1661107461155c565b73ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190613649565b60405180910390fd5b80600f819055506064600f541115611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90613aba565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f546040516111509392919061319e565b60405180910390a150565b611163611da4565b73ffffffffffffffffffffffffffffffffffffffff1661118161155c565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90613649565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900460ff1681565b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b61141d611da4565b73ffffffffffffffffffffffffffffffffffffffff1661143b61155c565b73ffffffffffffffffffffffffffffffffffffffff1614611491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148890613649565b60405180910390fd5b61149b6000612a0f565b565b6114a5611da4565b73ffffffffffffffffffffffffffffffffffffffff166114c361155c565b73ffffffffffffffffffffffffffffffffffffffff1614611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613649565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b6060600480546115bb906135cc565b80601f01602080910402602001604051908101604052809291908181526020018280546115e7906135cc565b80156116345780601f1061160957610100808354040283529160200191611634565b820191906000526020600020905b81548152906001019060200180831161161757829003601f168201915b5050505050905090565b6000806001600061164d611da4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170190613b4c565b60405180910390fd5b61171e611715611da4565b85858403611dac565b600191505092915050565b600061173d611736611da4565b8484611f75565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90613bde565b60405180910390fd5b60006117e2306112d4565b90506000606483836117f4919061372a565b6117fe919061379b565b905061180981612ad5565b505050565b611816611da4565b73ffffffffffffffffffffffffffffffffffffffff1661183461155c565b73ffffffffffffffffffffffffffffffffffffffff161461188a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188190613649565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161192791906132bf565b60405180910390a25050565b61193b611da4565b73ffffffffffffffffffffffffffffffffffffffff1661195961155c565b73ffffffffffffffffffffffffffffffffffffffff16146119af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a690613649565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611a1c611da4565b73ffffffffffffffffffffffffffffffffffffffff16611a3a61155c565b73ffffffffffffffffffffffffffffffffffffffff1614611a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8790613649565b60405180910390fd5b8060108190555060646010541115611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613c70565b60405180910390fd5b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b6f611da4565b73ffffffffffffffffffffffffffffffffffffffff16611b8d61155c565b73ffffffffffffffffffffffffffffffffffffffff1614611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90613649565b60405180910390fd5b6002811015611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613cdc565b60405180910390fd5b6103e8611c32610abc565b82611c3d919061372a565b611c47919061379b565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b54604051611c7e9190613307565b60405180910390a150565b7f000000000000000000000000f7fd07300250184f509b164399a49fee6018aaf081565b611cb5611da4565b73ffffffffffffffffffffffffffffffffffffffff16611cd361155c565b73ffffffffffffffffffffffffffffffffffffffff1614611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090613649565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8f90613d6e565b60405180910390fd5b611da181612a0f565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1290613e00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8190613e92565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f689190613307565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fe4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdb90613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90613fb6565b60405180910390fd5b6000810361206c5761206783836000612d12565b612a0a565b600960009054906101000a900460ff16156125675761208961155c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f757506120c761155c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121305750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561216a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156121835750600560149054906101000a900460ff16155b1561256657600d60009054906101000a900460ff1661227d57601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061223d5750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61227c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227390614048565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123205750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123c757600b5481111561236a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612361906140da565b60405180910390fd5b600a54612376836112d4565b826123819190613a14565b11156123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614146565b60405180910390fd5b612565565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246a5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b957600b548111156124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab906141d8565b60405180910390fd5b612564565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661256357600a54612516836112d4565b826125219190613a14565b1115612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990614146565b60405180910390fd5b5b5b5b5b5b6000612572306112d4565b9050600060065482101590508080156125975750600560159054906101000a900460ff165b80156125b05750600560149054906101000a900460ff16155b80156126065750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561265c5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126b25750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126c057504260085414155b1561270c576001600560146101000a81548160ff0219169083151502179055506126e983612f91565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127c25750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127cc57600090505b600081156129fa57601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561282f57506000600f54115b156128635761285c606461284e600f548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d6565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128be57506000600e54115b156128f2576128eb60646128dd600e548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90506129d5565b600060105411801561294e5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156129a45750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129d4576129d160646129c36010548861309d90919063ffffffff16565b6130b390919063ffffffff16565b90505b5b5b60008111156129eb576129ea873083612d12565b5b80856129f791906141f8565b94505b612a05878787612d12565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115612af257612af161422c565b5b604051908082528060200260200182016040528015612b205781602001602082028036833780820191505090505b5090503081600081518110612b3857612b3761425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bdd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c01919061429f565b81600181518110612c1557612c1461425b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c7a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611dac565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cdc9594939291906143cf565b600060405180830381600087803b158015612cf657600080fd5b505af1158015612d0a573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7890613f24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de790613fb6565b60405180910390fd5b612dfb8383836130c9565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e789061449b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f149190613a14565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f789190613307565b60405180910390a3612f8b8484846130ce565b50505050565b6000612f9c306112d4565b90506000808203612fae57505061309a565b600754821115612fbe5760075491505b601460009054906101000a900460ff168015612fe55750600a83612fe2919061372a565b82115b15612ffa57600a83612ff7919061372a565b91505b600082905061300881612ad5565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161304e906144ec565b60006040518083038185875af1925050503d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b5050809250505050505b50565b600081836130ab919061372a565b905092915050565b600081836130c1919061379b565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561310d5780820151818401526020810190506130f2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613135826130d3565b61313f81856130de565b935061314f8185602086016130ef565b61315881613119565b840191505092915050565b6000602082019050818103600083015261317d818461312a565b905092915050565b6000819050919050565b61319881613185565b82525050565b60006060820190506131b3600083018661318f565b6131c0602083018561318f565b6131cd604083018461318f565b949350505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613205826131da565b9050919050565b613215816131fa565b811461322057600080fd5b50565b6000813590506132328161320c565b92915050565b61324181613185565b811461324c57600080fd5b50565b60008135905061325e81613238565b92915050565b6000806040838503121561327b5761327a6131d5565b5b600061328985828601613223565b925050602061329a8582860161324f565b9150509250929050565b60008115159050919050565b6132b9816132a4565b82525050565b60006020820190506132d460008301846132b0565b92915050565b6000602082840312156132f0576132ef6131d5565b5b60006132fe8482850161324f565b91505092915050565b600060208201905061331c600083018461318f565b92915050565b60008060006060848603121561333b5761333a6131d5565b5b600061334986828701613223565b935050602061335a86828701613223565b925050604061336b8682870161324f565b9150509250925092565b61337e816132a4565b811461338957600080fd5b50565b60008135905061339b81613375565b92915050565b6000806000606084860312156133ba576133b96131d5565b5b60006133c88682870161338c565b93505060206133d98682870161324f565b92505060406133ea8682870161324f565b9150509250925092565b6000806040838503121561340b5761340a6131d5565b5b600061341985828601613223565b925050602061342a8582860161338c565b9150509250929050565b600060ff82169050919050565b61344a81613434565b82525050565b60006020820190506134656000830184613441565b92915050565b600060208284031215613481576134806131d5565b5b600061348f84828501613223565b91505092915050565b6134a1816131fa565b82525050565b60006020820190506134bc6000830184613498565b92915050565b60006060820190506134d760008301866132b0565b6134e460208301856132b0565b6134f160408301846132b0565b949350505050565b60006020828403121561350f5761350e6131d5565b5b600061351d8482850161338c565b91505092915050565b600060608201905061353b60008301866132b0565b613548602083018561318f565b613555604083018461318f565b949350505050565b60008060408385031215613574576135736131d5565b5b600061358285828601613223565b925050602061359385828601613223565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135e457607f821691505b6020821081036135f7576135f661359d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136336020836130de565b915061363e826135fd565b602082019050919050565b6000602082019050818103600083015261366281613626565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006136c56024836130de565b91506136d082613669565b604082019050919050565b600060208201905081810360008301526136f4816136b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061373582613185565b915061374083613185565b925082820261374e81613185565b91508282048414831517613765576137646136fb565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137a682613185565b91506137b183613185565b9250826137c1576137c061376c565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006138286028836130de565b9150613833826137cc565b604082019050919050565b600060208201905081810360008301526138578161381b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b60006138ba6034836130de565b91506138c58261385e565b604082019050919050565b600060208201905081810360008301526138e9816138ad565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b600061394c602a836130de565b9150613957826138f0565b604082019050919050565b6000602082019050818103600083015261397b8161393f565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b60006139de6028836130de565b91506139e982613982565b604082019050919050565b60006020820190508181036000830152613a0d816139d1565b9050919050565b6000613a1f82613185565b9150613a2a83613185565b9250828201905080821115613a4257613a416136fb565b5b92915050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613aa46029836130de565b9150613aaf82613a48565b604082019050919050565b60006020820190508181036000830152613ad381613a97565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613b366025836130de565b9150613b4182613ada565b604082019050919050565b60006020820190508181036000830152613b6581613b29565b9050919050565b7f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613bc8602c836130de565b9150613bd382613b6c565b604082019050919050565b60006020820190508181036000830152613bf781613bbb565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b6000613c5a602d836130de565b9150613c6582613bfe565b604082019050919050565b60006020820190508181036000830152613c8981613c4d565b9050919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613cc66020836130de565b9150613cd182613c90565b602082019050919050565b60006020820190508181036000830152613cf581613cb9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d586026836130de565b9150613d6382613cfc565b604082019050919050565b60006020820190508181036000830152613d8781613d4b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613dea6024836130de565b9150613df582613d8e565b604082019050919050565b60006020820190508181036000830152613e1981613ddd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e7c6022836130de565b9150613e8782613e20565b604082019050919050565b60006020820190508181036000830152613eab81613e6f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f0e6025836130de565b9150613f1982613eb2565b604082019050919050565b60006020820190508181036000830152613f3d81613f01565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fa06023836130de565b9150613fab82613f44565b604082019050919050565b60006020820190508181036000830152613fcf81613f93565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006140326022836130de565b915061403d82613fd6565b604082019050919050565b6000602082019050818103600083015261406181614025565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006140c46026836130de565b91506140cf82614068565b604082019050919050565b600060208201905081810360008301526140f3816140b7565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006141306013836130de565b915061413b826140fa565b602082019050919050565b6000602082019050818103600083015261415f81614123565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006141c26027836130de565b91506141cd82614166565b604082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b600061420382613185565b915061420e83613185565b9250828203905081811115614226576142256136fb565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506142998161320c565b92915050565b6000602082840312156142b5576142b46131d5565b5b60006142c38482850161428a565b91505092915050565b6000819050919050565b6000819050919050565b60006142fb6142f66142f1846142cc565b6142d6565b613185565b9050919050565b61430b816142e0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614346816131fa565b82525050565b6000614358838361433d565b60208301905092915050565b6000602082019050919050565b600061437c82614311565b614386818561431c565b93506143918361432d565b8060005b838110156143c25781516143a9888261434c565b97506143b483614364565b925050600181019050614395565b5085935050505092915050565b600060a0820190506143e4600083018861318f565b6143f16020830187614302565b81810360408301526144038186614371565b90506144126060830185613498565b61441f608083018461318f565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006144856026836130de565b915061449082614429565b604082019050919050565b600060208201905081810360008301526144b481614478565b9050919050565b600081905092915050565b50565b60006144d66000836144bb565b91506144e1826144c6565b600082019050919050565b60006144f7826144c9565b915081905091905056fea2646970667358221220c2c73183b4ba9a9e3f52d3acfa6d6721e057ce8db2471cee8b7ffaf10fb7068864736f6c63430008130033
Deployed Bytecode Sourcemap
25410:18241:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11008:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29991:175;;;;;;;;;;;;;:::i;:::-;;36955:332;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13241:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32022:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12128:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13913:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30652:671;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32593:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11970:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33048:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14847:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33542:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34903:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26022:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36558:151;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12299:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37747:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22347:103;;;;;;;;;;;;;:::i;:::-;;42535:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36137:258;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;21696:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35439:351;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11227:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15636:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12655:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42622:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34345:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29674:162;;;;;;;;;;;;;:::i;:::-;;33852:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12918:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31562:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25529:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22605:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11008:100;11062:13;11095:5;11088:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11008:100;:::o;29991:175::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30076:5:::1;30060:13;;:21;;;;;;;;;;;;;;;;;;30111:1;30092:16;:20;;;;30142:15;30128:30;;;;;;;;;;29991:175::o:0;36955:332::-;37043:20;37078:21;37114:25;37182:11;;37167:26;;37220:12;;37204:28;;37263:16;;37243:36;;36955:332;;;:::o;13241:194::-;13349:4;13366:39;13375:12;:10;:12::i;:::-;13389:7;13398:6;13366:8;:39::i;:::-;13423:4;13416:11;;13241:194;;;;:::o;32022:300::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32166:1:::1;32147:15;:20;;32139:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32267:4;32250:13;:11;:13::i;:::-;32232:15;:31;;;;:::i;:::-;32231:40;;;;:::i;:::-;32219:9;:52;;;;32287:27;32304:9;;32287:27;;;;;;:::i;:::-;;;;;;;;32022:300:::0;:::o;12128:108::-;12189:7;12216:12;;12209:19;;12128:108;:::o;13913:529::-;14053:4;14070:36;14080:6;14088:9;14099:6;14070:9;:36::i;:::-;14119:24;14146:11;:19;14158:6;14146:19;;;;;;;;;;;;;;;:33;14166:12;:10;:12::i;:::-;14146:33;;;;;;;;;;;;;;;;14119:60;;14232:6;14212:16;:26;;14190:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14342:57;14351:6;14359:12;:10;:12::i;:::-;14392:6;14373:16;:25;14342:8;:57::i;:::-;14430:4;14423:11;;;13913:529;;;;;:::o;30652:671::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30841:1:::1;30824:13;:18;;30802:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;30970:13;30955:11;:28;;30933:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;31084:13;31066:15;;:31;;;;;;;;;;;;;;;;;;31161:5;31144:13;31128;:11;:13::i;:::-;:29;;;;:::i;:::-;31127:39;;;;:::i;:::-;31108:16;:58;;;;31228:5;31213:11;31197:13;:11;:13::i;:::-;:27;;;;:::i;:::-;31196:37;;;;:::i;:::-;31177:16;:56;;;;31249:66;31273:13;31288;31303:11;31249:66;;;;;;;;:::i;:::-;;;;;;;;30652:671:::0;;;:::o;32593:220::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32746:9:::1;32718:19;:25;32738:4;32718:25;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;32789:4;32771:34;;;32795:9;32771:34;;;;;;:::i;:::-;;;;;;;;32593:220:::0;;:::o;11970:93::-;12028:5;12053:2;12046:9;;11970:93;:::o;33048:257::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33136:11:::1;33122;:25;;;;33181:3;33166:11;;:18;;33158:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33245:52;33259:11;;33272;;33285;;33245:52;;;;;;;;:::i;:::-;;;;;;;;33048:257:::0;:::o;14847:290::-;14960:4;14977:130;15000:12;:10;:12::i;:::-;15027:7;15086:10;15049:11;:25;15061:12;:10;:12::i;:::-;15049:25;;;;;;;;;;;;;;;:34;15075:7;15049:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14977:8;:130::i;:::-;15125:4;15118:11;;14847:290;;;;:::o;33542:302::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33632:11:::1;33617:12;:26;;;;33692:3;33676:12;;:19;;33654:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33780:56;33795:12;;33809;;33823;;33780:56;;;;;;;;:::i;:::-;;;;;;;;33542:302:::0;:::o;34903:177::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35017:15:::1;;;;;;;;;;;34982:51;;35005:10;34982:51;;;;;;;;;;;;35062:10;35044:15;;:28;;;;;;;;;;;;;;;;;;34903:177:::0;:::o;26022:34::-;;;;;;;;;;;;;:::o;36558:151::-;36635:24;36685:15;;;;;;;;;;;36677:24;;36558:151;:::o;12299:143::-;12389:7;12416:9;:18;12426:7;12416:18;;;;;;;;;;;;;;;;12409:25;;12299:143;;;:::o;37747:448::-;37867:23;37905:25;37945:31;38025:17;:26;38043:7;38025:26;;;;;;;;;;;;;;;;;;;;;;;;;38004:47;;38085:19;:28;38105:7;38085:28;;;;;;;;;;;;;;;;;;;;;;;;;38062:51;;38153:25;:34;38179:7;38153:34;;;;;;;;;;;;;;;;;;;;;;;;;38124:63;;37747:448;;;;;:::o;22347:103::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22412:30:::1;22439:1;22412:18;:30::i;:::-;22347:103::o:0;42535:79::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42601:5:::1;42594:4;;:12;;;;;;;;;;;;;;;;;;42535:79:::0;:::o;36137:258::-;36226:19;36247:18;36267:14;36316:13;;;;;;;;;;;36299:30;;36353:9;;36340:22;;36382:5;;36373:14;;36137:258;;;:::o;21696:87::-;21742:7;21769:6;;;;;;;;;;;21762:13;;21696:87;:::o;35439:351::-;35525:21;35561:25;35601;35673:15;;;;;;;;;;;35654:34;;35719:16;;35699:36;;35766:16;;35746:36;;35439:351;;;:::o;11227:104::-;11283:13;11316:7;11309:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11227:104;:::o;15636:475::-;15754:4;15771:24;15798:11;:25;15810:12;:10;:12::i;:::-;15798:25;;;;;;;;;;;;;;;:34;15824:7;15798:34;;;;;;;;;;;;;;;;15771:61;;15885:15;15865:16;:35;;15843:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16001:67;16010:12;:10;:12::i;:::-;16024:7;16052:15;16033:16;:34;16001:8;:67::i;:::-;16099:4;16092:11;;;15636:475;;;;:::o;12655:200::-;12766:4;12783:42;12793:12;:10;:12::i;:::-;12807:9;12818:6;12783:9;:42::i;:::-;12843:4;12836:11;;12655:200;;;;:::o;42622:369::-;42720:10;42701:29;;:15;;;;;;;;;;;:29;;;42679:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;42815:23;42841:24;42859:4;42841:9;:24::i;:::-;42815:50;;42876:25;42934:3;42923:7;42905:15;:25;;;;:::i;:::-;42904:33;;;;:::i;:::-;42876:61;;42948:35;42965:17;42948:16;:35::i;:::-;42668:323;;42622:369;:::o;34345:201::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34481:9:::1;34455:17;:23;34473:4;34455:23;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34522:4;34506:32;;;34528:9;34506:32;;;;;;:::i;:::-;;;;;;;;34345:201:::0;;:::o;29674:162::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29744:4:::1;29727:14;;:21;;;;;;;;;;;;;;;;;;29777:4;29759:15;;:22;;;;;;;;;;;;;;;;;;29812:15;29797:31;;;;;;;;;;29674:162::o:0;33852:246::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33950:11:::1;33931:16;:30;;;;34014:3;33994:16;;:23;;33972:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33852:246:::0;:::o;12918:176::-;13032:7;13059:11;:18;13071:5;13059:18;;;;;;;;;;;;;;;:27;13078:7;13059:27;;;;;;;;;;;;;;;;13052:34;;12918:176;;;;:::o;31562:244::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31672:1:::1;31659:9;:14;;31651:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;31759:4;31742:13;:11;:13::i;:::-;31730:9;:25;;;;:::i;:::-;31729:34;;;;:::i;:::-;31721:5;:42;;;;31779:19;31792:5;;31779:19;;;;;;:::i;:::-;;;;;;;;31562:244:::0;:::o;25529:32::-;;;:::o;22605:238::-;21927:12;:10;:12::i;:::-;21916:23;;:7;:5;:7::i;:::-;:23;;;21908:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22728:1:::1;22708:22;;:8;:22;;::::0;22686:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22807:28;22826:8;22807:18;:28::i;:::-;22605:238:::0;:::o;10014:98::-;10067:7;10094:10;10087:17;;10014:98;:::o;19419:380::-;19572:1;19555:19;;:5;:19;;;19547:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19653:1;19634:21;;:7;:21;;;19626:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19737:6;19707:11;:18;19719:5;19707:18;;;;;;;;;;;;;;;:27;19726:7;19707:27;;;;;;;;;;;;;;;:36;;;;19775:7;19759:32;;19768:5;19759:32;;;19784:6;19759:32;;;;;;:::i;:::-;;;;;;;;19419:380;;;:::o;38203:3720::-;38351:1;38335:18;;:4;:18;;;38327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38428:1;38414:16;;:2;:16;;;38406:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38497:1;38487:6;:11;38483:93;;38515:28;38531:4;38537:2;38541:1;38515:15;:28::i;:::-;38558:7;;38483:93;38592:13;;;;;;;;;;;38588:1564;;;38652:7;:5;:7::i;:::-;38644:15;;:4;:15;;;;:49;;;;;38686:7;:5;:7::i;:::-;38680:13;;:2;:13;;;;38644:49;:86;;;;;38728:1;38714:16;;:2;:16;;;;38644:86;:128;;;;;38765:6;38751:21;;:2;:21;;;;38644:128;:158;;;;;38794:8;;;;;;;;;;;38793:9;38644:158;38622:1519;;;38842:14;;;;;;;;;;;38837:232;;38915:17;:23;38933:4;38915:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;38942:17;:21;38960:2;38942:21;;;;;;;;;;;;;;;;;;;;;;;;;38915:48;38881:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;38837:232;39143:25;:31;39169:4;39143:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39179:19;:23;39199:2;39179:23;;;;;;;;;;;;;;;;;;;;;;;;;39178:24;39143:59;39117:1009;;;39289:5;;39279:6;:15;;39245:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;39467:9;;39450:13;39460:2;39450:9;:13::i;:::-;39441:6;:22;;;;:::i;:::-;:35;;39407:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39117:1009;;;39645:25;:29;39671:2;39645:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39679:19;:25;39699:4;39679:25;;;;;;;;;;;;;;;;;;;;;;;;;39678:26;39645:59;39619:507;;;39791:5;;39781:6;:15;;39747:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39619:507;;;39918:19;:23;39938:2;39918:23;;;;;;;;;;;;;;;;;;;;;;;;;39913:213;;40026:9;;40009:13;40019:2;40009:9;:13::i;:::-;40000:6;:22;;;;:::i;:::-;:35;;39966:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39913:213;39619:507;39117:1009;38622:1519;38588:1564;40164:28;40195:24;40213:4;40195:9;:24::i;:::-;40164:55;;40232:12;40271:16;;40247:20;:40;;40232:55;;40318:7;:39;;;;;40342:15;;;;;;;;;;;40318:39;:65;;;;;40375:8;;;;;;;;;;;40374:9;40318:65;:114;;;;;40401:25;:31;40427:4;40401:31;;;;;;;;;;;;;;;;;;;;;;;;;40400:32;40318:114;:155;;;;;40450:17;:23;40468:4;40450:23;;;;;;;;;;;;;;;;;;;;;;;;;40449:24;40318:155;:194;;;;;40491:17;:21;40509:2;40491:21;;;;;;;;;;;;;;;;;;;;;;;;;40490:22;40318:194;:246;;;;;40549:15;40529:16;;:35;;40318:246;40300:435;;;40602:4;40591:8;;:15;;;;;;;;;;;;;;;;;;40623:16;40632:6;40623:8;:16::i;:::-;40675:15;40656:16;:34;;;;40718:5;40707:8;;:16;;;;;;;;;;;;;;;;;;40300:435;40747:12;40763:8;;;;;;;;;;;40762:9;40747:24;;40873:17;:23;40891:4;40873:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;40900:17;:21;40918:2;40900:21;;;;;;;;;;;;;;;;;;;;;;;;;40873:48;40869:96;;;40948:5;40938:15;;40869:96;40977:12;41082:7;41078:792;;;41134:25;:29;41160:2;41134:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;41182:1;41167:12;;:16;41134:49;41130:591;;;41211:33;41240:3;41211:24;41222:12;;41211:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41204:40;;41130:591;;;41306:25;:31;41332:4;41306:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41355:1;41341:11;;:15;41306:50;41302:419;;;41384:32;41412:3;41384:23;41395:11;;41384:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;41377:39;;41302:419;;;41521:1;41502:16;;:20;:73;;;;;41544:25;:31;41570:4;41544:31;;;;;;;;;;;;;;;;;;;;;;;;;41543:32;41502:73;:124;;;;;41597:25;:29;41623:2;41597:29;;;;;;;;;;;;;;;;;;;;;;;;;41596:30;41502:124;41480:241;;;41668:37;41701:3;41668:28;41679:16;;41668:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;41661:44;;41480:241;41302:419;41130:591;41748:1;41741:4;:8;41737:91;;;41770:42;41786:4;41800;41807;41770:15;:42::i;:::-;41737:91;41854:4;41844:14;;;;;:::i;:::-;;;41078:792;41882:33;41898:4;41904:2;41908:6;41882:15;:33::i;:::-;38316:3607;;;;38203:3720;;;;:::o;23003:191::-;23077:16;23096:6;;;;;;;;;;;23077:25;;23122:8;23113:6;;:17;;;;;;;;;;;;;;;;;;23177:8;23146:40;;23167:8;23146:40;;;;;;;;;;;;23066:128;23003:191;:::o;41931:571::-;42057:21;42095:1;42081:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42057:40;;42126:4;42108;42113:1;42108:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42152:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42142:4;42147:1;42142:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;42181:56;42198:4;42213:9;42225:11;42181:8;:56::i;:::-;42276:9;:60;;;42351:11;42377:1;42421:4;42448;42468:15;42276:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41986:516;41931:571;:::o;16601:770::-;16759:1;16741:20;;:6;:20;;;16733:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16843:1;16822:23;;:9;:23;;;16814:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16898:47;16919:6;16927:9;16938:6;16898:20;:47::i;:::-;16958:21;16982:9;:17;16992:6;16982:17;;;;;;;;;;;;;;;;16958:41;;17049:6;17032:13;:23;;17010:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17193:6;17177:13;:22;17157:9;:17;17167:6;17157:17;;;;;;;;;;;;;;;:42;;;;17245:6;17221:9;:20;17231:9;17221:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17286:9;17269:35;;17278:6;17269:35;;;17297:6;17269:35;;;;;;:::i;:::-;;;;;;;;17317:46;17337:6;17345:9;17356:6;17317:19;:46::i;:::-;16722:649;16601:770;;;:::o;42999:649::-;43052:23;43078:24;43096:4;43078:9;:24::i;:::-;43052:50;;43113:12;43161:1;43142:15;:20;43138:59;;43179:7;;;;43138:59;43231:16;;43213:15;:34;43209:101;;;43282:16;;43264:34;;43209:101;43326:4;;;;;;;;;;;:37;;;;;43361:2;43352:6;:11;;;;:::i;:::-;43334:15;:29;43326:37;43322:99;;;43407:2;43398:6;:11;;;;:::i;:::-;43380:29;;43322:99;43433:26;43462:15;43433:44;;43490:36;43507:18;43490:16;:36::i;:::-;43561:15;;;;;;;;;;;43553:29;;43604:21;43553:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43539:101;;;;;43041:607;;;42999:649;;:::o;3373:98::-;3431:7;3462:1;3458;:5;;;;:::i;:::-;3451:12;;3373:98;;;;:::o;3772:::-;3830:7;3861:1;3857;:5;;;;:::i;:::-;3850:12;;3772:98;;;;:::o;20399:125::-;;;;:::o;21128:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:442::-;1705:4;1743:2;1732:9;1728:18;1720:26;;1756:71;1824:1;1813:9;1809:17;1800:6;1756:71;:::i;:::-;1837:72;1905:2;1894:9;1890:18;1881:6;1837:72;:::i;:::-;1919;1987:2;1976:9;1972:18;1963:6;1919:72;:::i;:::-;1556:442;;;;;;:::o;2085:117::-;2194:1;2191;2184:12;2331:126;2368:7;2408:42;2401:5;2397:54;2386:65;;2331:126;;;:::o;2463:96::-;2500:7;2529:24;2547:5;2529:24;:::i;:::-;2518:35;;2463:96;;;:::o;2565:122::-;2638:24;2656:5;2638:24;:::i;:::-;2631:5;2628:35;2618:63;;2677:1;2674;2667:12;2618:63;2565:122;:::o;2693:139::-;2739:5;2777:6;2764:20;2755:29;;2793:33;2820:5;2793:33;:::i;:::-;2693:139;;;;:::o;2838:122::-;2911:24;2929:5;2911:24;:::i;:::-;2904:5;2901:35;2891:63;;2950:1;2947;2940:12;2891:63;2838:122;:::o;2966:139::-;3012:5;3050:6;3037:20;3028:29;;3066:33;3093:5;3066:33;:::i;:::-;2966:139;;;;:::o;3111:474::-;3179:6;3187;3236:2;3224:9;3215:7;3211:23;3207:32;3204:119;;;3242:79;;:::i;:::-;3204:119;3362:1;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3333:117;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3111:474;;;;;:::o;3591:90::-;3625:7;3668:5;3661:13;3654:21;3643:32;;3591:90;;;:::o;3687:109::-;3768:21;3783:5;3768:21;:::i;:::-;3763:3;3756:34;3687:109;;:::o;3802:210::-;3889:4;3927:2;3916:9;3912:18;3904:26;;3940:65;4002:1;3991:9;3987:17;3978:6;3940:65;:::i;:::-;3802:210;;;;:::o;4018:329::-;4077:6;4126:2;4114:9;4105:7;4101:23;4097:32;4094:119;;;4132:79;;:::i;:::-;4094:119;4252:1;4277:53;4322:7;4313:6;4302:9;4298:22;4277:53;:::i;:::-;4267:63;;4223:117;4018:329;;;;:::o;4353:222::-;4446:4;4484:2;4473:9;4469:18;4461:26;;4497:71;4565:1;4554:9;4550:17;4541:6;4497:71;:::i;:::-;4353:222;;;;:::o;4581:619::-;4658:6;4666;4674;4723:2;4711:9;4702:7;4698:23;4694:32;4691:119;;;4729:79;;:::i;:::-;4691:119;4849:1;4874:53;4919:7;4910:6;4899:9;4895:22;4874:53;:::i;:::-;4864:63;;4820:117;4976:2;5002:53;5047:7;5038:6;5027:9;5023:22;5002:53;:::i;:::-;4992:63;;4947:118;5104:2;5130:53;5175:7;5166:6;5155:9;5151:22;5130:53;:::i;:::-;5120:63;;5075:118;4581:619;;;;;:::o;5206:116::-;5276:21;5291:5;5276:21;:::i;:::-;5269:5;5266:32;5256:60;;5312:1;5309;5302:12;5256:60;5206:116;:::o;5328:133::-;5371:5;5409:6;5396:20;5387:29;;5425:30;5449:5;5425:30;:::i;:::-;5328:133;;;;:::o;5467:613::-;5541:6;5549;5557;5606:2;5594:9;5585:7;5581:23;5577:32;5574:119;;;5612:79;;:::i;:::-;5574:119;5732:1;5757:50;5799:7;5790:6;5779:9;5775:22;5757:50;:::i;:::-;5747:60;;5703:114;5856:2;5882:53;5927:7;5918:6;5907:9;5903:22;5882:53;:::i;:::-;5872:63;;5827:118;5984:2;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5955:118;5467:613;;;;;:::o;6086:468::-;6151:6;6159;6208:2;6196:9;6187:7;6183:23;6179:32;6176:119;;;6214:79;;:::i;:::-;6176:119;6334:1;6359:53;6404:7;6395:6;6384:9;6380:22;6359:53;:::i;:::-;6349:63;;6305:117;6461:2;6487:50;6529:7;6520:6;6509:9;6505:22;6487:50;:::i;:::-;6477:60;;6432:115;6086:468;;;;;:::o;6560:86::-;6595:7;6635:4;6628:5;6624:16;6613:27;;6560:86;;;:::o;6652:112::-;6735:22;6751:5;6735:22;:::i;:::-;6730:3;6723:35;6652:112;;:::o;6770:214::-;6859:4;6897:2;6886:9;6882:18;6874:26;;6910:67;6974:1;6963:9;6959:17;6950:6;6910:67;:::i;:::-;6770:214;;;;:::o;6990:329::-;7049:6;7098:2;7086:9;7077:7;7073:23;7069:32;7066:119;;;7104:79;;:::i;:::-;7066:119;7224:1;7249:53;7294:7;7285:6;7274:9;7270:22;7249:53;:::i;:::-;7239:63;;7195:117;6990:329;;;;:::o;7325:118::-;7412:24;7430:5;7412:24;:::i;:::-;7407:3;7400:37;7325:118;;:::o;7449:222::-;7542:4;7580:2;7569:9;7565:18;7557:26;;7593:71;7661:1;7650:9;7646:17;7637:6;7593:71;:::i;:::-;7449:222;;;;:::o;7677:406::-;7808:4;7846:2;7835:9;7831:18;7823:26;;7859:65;7921:1;7910:9;7906:17;7897:6;7859:65;:::i;:::-;7934:66;7996:2;7985:9;7981:18;7972:6;7934:66;:::i;:::-;8010;8072:2;8061:9;8057:18;8048:6;8010:66;:::i;:::-;7677:406;;;;;;:::o;8089:323::-;8145:6;8194:2;8182:9;8173:7;8169:23;8165:32;8162:119;;;8200:79;;:::i;:::-;8162:119;8320:1;8345:50;8387:7;8378:6;8367:9;8363:22;8345:50;:::i;:::-;8335:60;;8291:114;8089:323;;;;:::o;8418:430::-;8561:4;8599:2;8588:9;8584:18;8576:26;;8612:65;8674:1;8663:9;8659:17;8650:6;8612:65;:::i;:::-;8687:72;8755:2;8744:9;8740:18;8731:6;8687:72;:::i;:::-;8769;8837:2;8826:9;8822:18;8813:6;8769:72;:::i;:::-;8418:430;;;;;;:::o;8854:474::-;8922:6;8930;8979:2;8967:9;8958:7;8954:23;8950:32;8947:119;;;8985:79;;:::i;:::-;8947:119;9105:1;9130:53;9175:7;9166:6;9155:9;9151:22;9130:53;:::i;:::-;9120:63;;9076:117;9232:2;9258:53;9303:7;9294:6;9283:9;9279:22;9258:53;:::i;:::-;9248:63;;9203:118;8854:474;;;;;:::o;9334:180::-;9382:77;9379:1;9372:88;9479:4;9476:1;9469:15;9503:4;9500:1;9493:15;9520:320;9564:6;9601:1;9595:4;9591:12;9581:22;;9648:1;9642:4;9638:12;9669:18;9659:81;;9725:4;9717:6;9713:17;9703:27;;9659:81;9787:2;9779:6;9776:14;9756:18;9753:38;9750:84;;9806:18;;:::i;:::-;9750:84;9571:269;9520:320;;;:::o;9846:182::-;9986:34;9982:1;9974:6;9970:14;9963:58;9846:182;:::o;10034:366::-;10176:3;10197:67;10261:2;10256:3;10197:67;:::i;:::-;10190:74;;10273:93;10362:3;10273:93;:::i;:::-;10391:2;10386:3;10382:12;10375:19;;10034:366;;;:::o;10406:419::-;10572:4;10610:2;10599:9;10595:18;10587:26;;10659:9;10653:4;10649:20;10645:1;10634:9;10630:17;10623:47;10687:131;10813:4;10687:131;:::i;:::-;10679:139;;10406:419;;;:::o;10831:223::-;10971:34;10967:1;10959:6;10955:14;10948:58;11040:6;11035:2;11027:6;11023:15;11016:31;10831:223;:::o;11060:366::-;11202:3;11223:67;11287:2;11282:3;11223:67;:::i;:::-;11216:74;;11299:93;11388:3;11299:93;:::i;:::-;11417:2;11412:3;11408:12;11401:19;;11060:366;;;:::o;11432:419::-;11598:4;11636:2;11625:9;11621:18;11613:26;;11685:9;11679:4;11675:20;11671:1;11660:9;11656:17;11649:47;11713:131;11839:4;11713:131;:::i;:::-;11705:139;;11432:419;;;:::o;11857:180::-;11905:77;11902:1;11895:88;12002:4;11999:1;11992:15;12026:4;12023:1;12016:15;12043:410;12083:7;12106:20;12124:1;12106:20;:::i;:::-;12101:25;;12140:20;12158:1;12140:20;:::i;:::-;12135:25;;12195:1;12192;12188:9;12217:30;12235:11;12217:30;:::i;:::-;12206:41;;12396:1;12387:7;12383:15;12380:1;12377:22;12357:1;12350:9;12330:83;12307:139;;12426:18;;:::i;:::-;12307:139;12091:362;12043:410;;;;:::o;12459:180::-;12507:77;12504:1;12497:88;12604:4;12601:1;12594:15;12628:4;12625:1;12618:15;12645:185;12685:1;12702:20;12720:1;12702:20;:::i;:::-;12697:25;;12736:20;12754:1;12736:20;:::i;:::-;12731:25;;12775:1;12765:35;;12780:18;;:::i;:::-;12765:35;12822:1;12819;12815:9;12810:14;;12645:185;;;;:::o;12836:227::-;12976:34;12972:1;12964:6;12960:14;12953:58;13045:10;13040:2;13032:6;13028:15;13021:35;12836:227;:::o;13069:366::-;13211:3;13232:67;13296:2;13291:3;13232:67;:::i;:::-;13225:74;;13308:93;13397:3;13308:93;:::i;:::-;13426:2;13421:3;13417:12;13410:19;;13069:366;;;:::o;13441:419::-;13607:4;13645:2;13634:9;13630:18;13622:26;;13694:9;13688:4;13684:20;13680:1;13669:9;13665:17;13658:47;13722:131;13848:4;13722:131;:::i;:::-;13714:139;;13441:419;;;:::o;13866:239::-;14006:34;14002:1;13994:6;13990:14;13983:58;14075:22;14070:2;14062:6;14058:15;14051:47;13866:239;:::o;14111:366::-;14253:3;14274:67;14338:2;14333:3;14274:67;:::i;:::-;14267:74;;14350:93;14439:3;14350:93;:::i;:::-;14468:2;14463:3;14459:12;14452:19;;14111:366;;;:::o;14483:419::-;14649:4;14687:2;14676:9;14672:18;14664:26;;14736:9;14730:4;14726:20;14722:1;14711:9;14707:17;14700:47;14764:131;14890:4;14764:131;:::i;:::-;14756:139;;14483:419;;;:::o;14908:229::-;15048:34;15044:1;15036:6;15032:14;15025:58;15117:12;15112:2;15104:6;15100:15;15093:37;14908:229;:::o;15143:366::-;15285:3;15306:67;15370:2;15365:3;15306:67;:::i;:::-;15299:74;;15382:93;15471:3;15382:93;:::i;:::-;15500:2;15495:3;15491:12;15484:19;;15143:366;;;:::o;15515:419::-;15681:4;15719:2;15708:9;15704:18;15696:26;;15768:9;15762:4;15758:20;15754:1;15743:9;15739:17;15732:47;15796:131;15922:4;15796:131;:::i;:::-;15788:139;;15515:419;;;:::o;15940:227::-;16080:34;16076:1;16068:6;16064:14;16057:58;16149:10;16144:2;16136:6;16132:15;16125:35;15940:227;:::o;16173:366::-;16315:3;16336:67;16400:2;16395:3;16336:67;:::i;:::-;16329:74;;16412:93;16501:3;16412:93;:::i;:::-;16530:2;16525:3;16521:12;16514:19;;16173:366;;;:::o;16545:419::-;16711:4;16749:2;16738:9;16734:18;16726:26;;16798:9;16792:4;16788:20;16784:1;16773:9;16769:17;16762:47;16826:131;16952:4;16826:131;:::i;:::-;16818:139;;16545:419;;;:::o;16970:191::-;17010:3;17029:20;17047:1;17029:20;:::i;:::-;17024:25;;17063:20;17081:1;17063:20;:::i;:::-;17058:25;;17106:1;17103;17099:9;17092:16;;17127:3;17124:1;17121:10;17118:36;;;17134:18;;:::i;:::-;17118:36;16970:191;;;;:::o;17167:228::-;17307:34;17303:1;17295:6;17291:14;17284:58;17376:11;17371:2;17363:6;17359:15;17352:36;17167:228;:::o;17401:366::-;17543:3;17564:67;17628:2;17623:3;17564:67;:::i;:::-;17557:74;;17640:93;17729:3;17640:93;:::i;:::-;17758:2;17753:3;17749:12;17742:19;;17401:366;;;:::o;17773:419::-;17939:4;17977:2;17966:9;17962:18;17954:26;;18026:9;18020:4;18016:20;18012:1;18001:9;17997:17;17990:47;18054:131;18180:4;18054:131;:::i;:::-;18046:139;;17773:419;;;:::o;18198:224::-;18338:34;18334:1;18326:6;18322:14;18315:58;18407:7;18402:2;18394:6;18390:15;18383:32;18198:224;:::o;18428:366::-;18570:3;18591:67;18655:2;18650:3;18591:67;:::i;:::-;18584:74;;18667:93;18756:3;18667:93;:::i;:::-;18785:2;18780:3;18776:12;18769:19;;18428:366;;;:::o;18800:419::-;18966:4;19004:2;18993:9;18989:18;18981:26;;19053:9;19047:4;19043:20;19039:1;19028:9;19024:17;19017:47;19081:131;19207:4;19081:131;:::i;:::-;19073:139;;18800:419;;;:::o;19225:231::-;19365:34;19361:1;19353:6;19349:14;19342:58;19434:14;19429:2;19421:6;19417:15;19410:39;19225:231;:::o;19462:366::-;19604:3;19625:67;19689:2;19684:3;19625:67;:::i;:::-;19618:74;;19701:93;19790:3;19701:93;:::i;:::-;19819:2;19814:3;19810:12;19803:19;;19462:366;;;:::o;19834:419::-;20000:4;20038:2;20027:9;20023:18;20015:26;;20087:9;20081:4;20077:20;20073:1;20062:9;20058:17;20051:47;20115:131;20241:4;20115:131;:::i;:::-;20107:139;;19834:419;;;:::o;20259:232::-;20399:34;20395:1;20387:6;20383:14;20376:58;20468:15;20463:2;20455:6;20451:15;20444:40;20259:232;:::o;20497:366::-;20639:3;20660:67;20724:2;20719:3;20660:67;:::i;:::-;20653:74;;20736:93;20825:3;20736:93;:::i;:::-;20854:2;20849:3;20845:12;20838:19;;20497:366;;;:::o;20869:419::-;21035:4;21073:2;21062:9;21058:18;21050:26;;21122:9;21116:4;21112:20;21108:1;21097:9;21093:17;21086:47;21150:131;21276:4;21150:131;:::i;:::-;21142:139;;20869:419;;;:::o;21294:182::-;21434:34;21430:1;21422:6;21418:14;21411:58;21294:182;:::o;21482:366::-;21624:3;21645:67;21709:2;21704:3;21645:67;:::i;:::-;21638:74;;21721:93;21810:3;21721:93;:::i;:::-;21839:2;21834:3;21830:12;21823:19;;21482:366;;;:::o;21854:419::-;22020:4;22058:2;22047:9;22043:18;22035:26;;22107:9;22101:4;22097:20;22093:1;22082:9;22078:17;22071:47;22135:131;22261:4;22135:131;:::i;:::-;22127:139;;21854:419;;;:::o;22279:225::-;22419:34;22415:1;22407:6;22403:14;22396:58;22488:8;22483:2;22475:6;22471:15;22464:33;22279:225;:::o;22510:366::-;22652:3;22673:67;22737:2;22732:3;22673:67;:::i;:::-;22666:74;;22749:93;22838:3;22749:93;:::i;:::-;22867:2;22862:3;22858:12;22851:19;;22510:366;;;:::o;22882:419::-;23048:4;23086:2;23075:9;23071:18;23063:26;;23135:9;23129:4;23125:20;23121:1;23110:9;23106:17;23099:47;23163:131;23289:4;23163:131;:::i;:::-;23155:139;;22882:419;;;:::o;23307:223::-;23447:34;23443:1;23435:6;23431:14;23424:58;23516:6;23511:2;23503:6;23499:15;23492:31;23307:223;:::o;23536:366::-;23678:3;23699:67;23763:2;23758:3;23699:67;:::i;:::-;23692:74;;23775:93;23864:3;23775:93;:::i;:::-;23893:2;23888:3;23884:12;23877:19;;23536:366;;;:::o;23908:419::-;24074:4;24112:2;24101:9;24097:18;24089:26;;24161:9;24155:4;24151:20;24147:1;24136:9;24132:17;24125:47;24189:131;24315:4;24189:131;:::i;:::-;24181:139;;23908:419;;;:::o;24333:221::-;24473:34;24469:1;24461:6;24457:14;24450:58;24542:4;24537:2;24529:6;24525:15;24518:29;24333:221;:::o;24560:366::-;24702:3;24723:67;24787:2;24782:3;24723:67;:::i;:::-;24716:74;;24799:93;24888:3;24799:93;:::i;:::-;24917:2;24912:3;24908:12;24901:19;;24560:366;;;:::o;24932:419::-;25098:4;25136:2;25125:9;25121:18;25113:26;;25185:9;25179:4;25175:20;25171:1;25160:9;25156:17;25149:47;25213:131;25339:4;25213:131;:::i;:::-;25205:139;;24932:419;;;:::o;25357:224::-;25497:34;25493:1;25485:6;25481:14;25474:58;25566:7;25561:2;25553:6;25549:15;25542:32;25357:224;:::o;25587:366::-;25729:3;25750:67;25814:2;25809:3;25750:67;:::i;:::-;25743:74;;25826:93;25915:3;25826:93;:::i;:::-;25944:2;25939:3;25935:12;25928:19;;25587:366;;;:::o;25959:419::-;26125:4;26163:2;26152:9;26148:18;26140:26;;26212:9;26206:4;26202:20;26198:1;26187:9;26183:17;26176:47;26240:131;26366:4;26240:131;:::i;:::-;26232:139;;25959:419;;;:::o;26384:222::-;26524:34;26520:1;26512:6;26508:14;26501:58;26593:5;26588:2;26580:6;26576:15;26569:30;26384:222;:::o;26612:366::-;26754:3;26775:67;26839:2;26834:3;26775:67;:::i;:::-;26768:74;;26851:93;26940:3;26851:93;:::i;:::-;26969:2;26964:3;26960:12;26953:19;;26612:366;;;:::o;26984:419::-;27150:4;27188:2;27177:9;27173:18;27165:26;;27237:9;27231:4;27227:20;27223:1;27212:9;27208:17;27201:47;27265:131;27391:4;27265:131;:::i;:::-;27257:139;;26984:419;;;:::o;27409:221::-;27549:34;27545:1;27537:6;27533:14;27526:58;27618:4;27613:2;27605:6;27601:15;27594:29;27409:221;:::o;27636:366::-;27778:3;27799:67;27863:2;27858:3;27799:67;:::i;:::-;27792:74;;27875:93;27964:3;27875:93;:::i;:::-;27993:2;27988:3;27984:12;27977:19;;27636:366;;;:::o;28008:419::-;28174:4;28212:2;28201:9;28197:18;28189:26;;28261:9;28255:4;28251:20;28247:1;28236:9;28232:17;28225:47;28289:131;28415:4;28289:131;:::i;:::-;28281:139;;28008:419;;;:::o;28433:225::-;28573:34;28569:1;28561:6;28557:14;28550:58;28642:8;28637:2;28629:6;28625:15;28618:33;28433:225;:::o;28664:366::-;28806:3;28827:67;28891:2;28886:3;28827:67;:::i;:::-;28820:74;;28903:93;28992:3;28903:93;:::i;:::-;29021:2;29016:3;29012:12;29005:19;;28664:366;;;:::o;29036:419::-;29202:4;29240:2;29229:9;29225:18;29217:26;;29289:9;29283:4;29279:20;29275:1;29264:9;29260:17;29253:47;29317:131;29443:4;29317:131;:::i;:::-;29309:139;;29036:419;;;:::o;29461:169::-;29601:21;29597:1;29589:6;29585:14;29578:45;29461:169;:::o;29636:366::-;29778:3;29799:67;29863:2;29858:3;29799:67;:::i;:::-;29792:74;;29875:93;29964:3;29875:93;:::i;:::-;29993:2;29988:3;29984:12;29977:19;;29636:366;;;:::o;30008:419::-;30174:4;30212:2;30201:9;30197:18;30189:26;;30261:9;30255:4;30251:20;30247:1;30236:9;30232:17;30225:47;30289:131;30415:4;30289:131;:::i;:::-;30281:139;;30008:419;;;:::o;30433:226::-;30573:34;30569:1;30561:6;30557:14;30550:58;30642:9;30637:2;30629:6;30625:15;30618:34;30433:226;:::o;30665:366::-;30807:3;30828:67;30892:2;30887:3;30828:67;:::i;:::-;30821:74;;30904:93;30993:3;30904:93;:::i;:::-;31022:2;31017:3;31013:12;31006:19;;30665:366;;;:::o;31037:419::-;31203:4;31241:2;31230:9;31226:18;31218:26;;31290:9;31284:4;31280:20;31276:1;31265:9;31261:17;31254:47;31318:131;31444:4;31318:131;:::i;:::-;31310:139;;31037:419;;;:::o;31462:194::-;31502:4;31522:20;31540:1;31522:20;:::i;:::-;31517:25;;31556:20;31574:1;31556:20;:::i;:::-;31551:25;;31600:1;31597;31593:9;31585:17;;31624:1;31618:4;31615:11;31612:37;;;31629:18;;:::i;:::-;31612:37;31462:194;;;;:::o;31662:180::-;31710:77;31707:1;31700:88;31807:4;31804:1;31797:15;31831:4;31828:1;31821:15;31848:180;31896:77;31893:1;31886:88;31993:4;31990:1;31983:15;32017:4;32014:1;32007:15;32034:143;32091:5;32122:6;32116:13;32107:22;;32138:33;32165:5;32138:33;:::i;:::-;32034:143;;;;:::o;32183:351::-;32253:6;32302:2;32290:9;32281:7;32277:23;32273:32;32270:119;;;32308:79;;:::i;:::-;32270:119;32428:1;32453:64;32509:7;32500:6;32489:9;32485:22;32453:64;:::i;:::-;32443:74;;32399:128;32183:351;;;;:::o;32540:85::-;32585:7;32614:5;32603:16;;32540:85;;;:::o;32631:60::-;32659:3;32680:5;32673:12;;32631:60;;;:::o;32697:158::-;32755:9;32788:61;32806:42;32815:32;32841:5;32815:32;:::i;:::-;32806:42;:::i;:::-;32788:61;:::i;:::-;32775:74;;32697:158;;;:::o;32861:147::-;32956:45;32995:5;32956:45;:::i;:::-;32951:3;32944:58;32861:147;;:::o;33014:114::-;33081:6;33115:5;33109:12;33099:22;;33014:114;;;:::o;33134:184::-;33233:11;33267:6;33262:3;33255:19;33307:4;33302:3;33298:14;33283:29;;33134:184;;;;:::o;33324:132::-;33391:4;33414:3;33406:11;;33444:4;33439:3;33435:14;33427:22;;33324:132;;;:::o;33462:108::-;33539:24;33557:5;33539:24;:::i;:::-;33534:3;33527:37;33462:108;;:::o;33576:179::-;33645:10;33666:46;33708:3;33700:6;33666:46;:::i;:::-;33744:4;33739:3;33735:14;33721:28;;33576:179;;;;:::o;33761:113::-;33831:4;33863;33858:3;33854:14;33846:22;;33761:113;;;:::o;33910:732::-;34029:3;34058:54;34106:5;34058:54;:::i;:::-;34128:86;34207:6;34202:3;34128:86;:::i;:::-;34121:93;;34238:56;34288:5;34238:56;:::i;:::-;34317:7;34348:1;34333:284;34358:6;34355:1;34352:13;34333:284;;;34434:6;34428:13;34461:63;34520:3;34505:13;34461:63;:::i;:::-;34454:70;;34547:60;34600:6;34547:60;:::i;:::-;34537:70;;34393:224;34380:1;34377;34373:9;34368:14;;34333:284;;;34337:14;34633:3;34626:10;;34034:608;;;33910:732;;;;:::o;34648:831::-;34911:4;34949:3;34938:9;34934:19;34926:27;;34963:71;35031:1;35020:9;35016:17;35007:6;34963:71;:::i;:::-;35044:80;35120:2;35109:9;35105:18;35096:6;35044:80;:::i;:::-;35171:9;35165:4;35161:20;35156:2;35145:9;35141:18;35134:48;35199:108;35302:4;35293:6;35199:108;:::i;:::-;35191:116;;35317:72;35385:2;35374:9;35370:18;35361:6;35317:72;:::i;:::-;35399:73;35467:3;35456:9;35452:19;35443:6;35399:73;:::i;:::-;34648:831;;;;;;;;:::o;35485:225::-;35625:34;35621:1;35613:6;35609:14;35602:58;35694:8;35689:2;35681:6;35677:15;35670:33;35485:225;:::o;35716:366::-;35858:3;35879:67;35943:2;35938:3;35879:67;:::i;:::-;35872:74;;35955:93;36044:3;35955:93;:::i;:::-;36073:2;36068:3;36064:12;36057:19;;35716:366;;;:::o;36088:419::-;36254:4;36292:2;36281:9;36277:18;36269:26;;36341:9;36335:4;36331:20;36327:1;36316:9;36312:17;36305:47;36369:131;36495:4;36369:131;:::i;:::-;36361:139;;36088:419;;;:::o;36513:147::-;36614:11;36651:3;36636:18;;36513:147;;;;:::o;36666:114::-;;:::o;36786:398::-;36945:3;36966:83;37047:1;37042:3;36966:83;:::i;:::-;36959:90;;37058:93;37147:3;37058:93;:::i;:::-;37176:1;37171:3;37167:11;37160:18;;36786:398;;;:::o;37190:379::-;37374:3;37396:147;37539:3;37396:147;:::i;:::-;37389:154;;37560:3;37553:10;;37190:379;;;:::o
Swarm Source
ipfs://c2c73183b4ba9a9e3f52d3acfa6d6721e057ce8db2471cee8b7ffaf10fb70688
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.