ERC-20
Overview
Max Total Supply
100,000,000 BOBET
Holders
62
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:
boysbet
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-08-21 */ /* * SPDX-License-Identifier: MIT */ /* Welcome to BoysBet, the hilarious and innovative betting platform that brings together the excitement of betting with the fun of crypto memes! Whether you're a seasoned bettor or someone just looking for a good laugh, BoysBet offers a unique experience that you won't find anywhere else. Website : https://boysbet.gg/ App : https://panel.boysbet.gg/ Docs : https://docs.boysbet.gg/ Telegram : https://t.me/boysbetplatform Twitter : https://x.com/boysbetgg Youtube : https://www.youtube.com/@boysbetgg */ 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 boysbet is ERC20, Ownable { using SafeMath for uint256; IDexRouter private dexRouter; address public dexPair; // Swapback bool private swapping; bool public transferDelayEnabled = true; mapping(address => uint256) private _holderLastTransferTimestamp; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; bool public tradingEnabled = false; // Fee receivers address private marketingWallet; address private projectWallet; uint256 private buyTax; uint256 private sellTax; uint256 private sellsOnBlock = 0; uint256 private lastSellBlock = 0; /******************/ // 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 SetDexPair(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 FeeUpdated( uint256 sellTax, uint256 buyTax ); constructor() ERC20("BoysBet", "BOBET") { uint256 _totalSupply = 100_000_000 * 10 ** decimals(); buyTax = 20; sellTax =25; maxTx = (_totalSupply * 1) / 100; maxWallet = (_totalSupply * 1) / 100; swapBackValueMin= (_totalSupply * 1) / 1000; swapBackValueMax= (_totalSupply * 10) / 1000; marketingWallet = address(0x6880aa0C976Fa722A224c52Ff850551390B1Cde1); //marketing project projectWallet = address(msg.sender); // exclude from paying fees or having max transaction amount transactionTaxExempt(msg.sender, true); transactionTaxExempt(address(this), true); transactionTaxExempt(address(0xdead), true); transactionTaxExempt(marketingWallet, true); transactionLimitExempt(msg.sender, true); transactionLimitExempt(address(this), true); transactionLimitExempt(address(0xdead), true); transactionLimitExempt(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 Removes the max wallet and max transaction limits and transfer delay. * @dev onlyOwner. * Emits an {LimitsRemoved} event * Emits an {DisabledTransferDelay} event */ function transactionLimitRemove() external onlyOwner { require(limitsEnabled, "Limits already disabled"); limitsEnabled = false; transferDelayEnabled=false; emit DisabledTransferDelay (block.timestamp); emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _enable If swapback is enabled * @param _min The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _max The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function swapBackEnabledSet( bool _enable, uint256 _min, uint256 _max) external onlyOwner { require(_min >= 1, "Swap amount cannot be lower than 0.01% total supply."); require(_max >= _min, "maximum amount cant be higher than minimum"); swapbackEnabled = _enable; swapBackValueMin = (totalSupply() * _min) / 10000; swapBackValueMax = (totalSupply() * _max) / 10000; emit SwapbackSettingsUpdated(_enable, _min, _max); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param newMaxTxLimit Base 1000, so 1% = 10 */ function maxTxLimitChange( uint256 newMaxTxLimit ) external onlyOwner { require(newMaxTxLimit >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (newMaxTxLimit * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param newMaxWalletLimit Base 1000, so 1% = 10 */ function maxWalletLimitChange( uint256 newMaxWalletLimit ) external onlyOwner { require(newMaxWalletLimit >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (newMaxWalletLimit * 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 updAds The wallet to update * @param isEx If the wallet is excluded or not */ function transactionLimitExempt( address updAds, bool isEx ) public onlyOwner { transferLimitExempt[updAds] = isEx; emit ExcludeFromLimits(updAds, isEx); } /** * @notice Sets the fees for buys and sells * @dev onlyOwner. * Emits a {FeeUpdated} event * All fees added up must be less than 10 * @param _buyFee The fee for the buyTax * @param _sellFee The fee for the sellTax */ function feeChange( uint256 _buyFee,uint256 _sellFee) external onlyOwner { require(_buyFee <= 10 && _sellFee <= 10, "exceed value"); buyTax =_buyFee; sellTax = _sellFee; emit FeeUpdated(_buyFee, _sellFee); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param account The wallet to update * @param excluded If the wallet is excluded or not */ function transactionTaxExempt( address account, bool excluded ) public onlyOwner { transferTaxExempt[account] = excluded; emit ExcludeFromFees(account, excluded); } /** * @notice Sets an address as a new liquidity pair. You probably dont want to do this. * @dev onlyOwner. * Emits a {SetDexPair} event * @param pair the address of the pair * @param value If the pair is a automated market maker pair or not */ function setDexPair(address pair, bool value) public onlyOwner { require( pair != dexPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setDexPair(pair, value); } function _setDexPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetDexPair(pair, value); } /** * @notice Sets the marketing wallet * @dev onlyOwner. * Emits an {MarketingWalletUpdated} event * @param newMktWal The new marketing wallet */ function mktWalletChange(address newMktWal) external onlyOwner { emit MarketingWalletUpdated(newMktWal, marketingWallet); marketingWallet = newMktWal; } /** * @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 valForLimits() 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 valForReceivers() external view returns (address _marketingWallet){ return (marketingWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTax The total fee for buys * @return _sellTax The total fee for sells */ function valForTaxes() external view returns ( uint256 _buyTax, uint256 _sellTax ) { _buyTax = buyTax; _sellTax = sellTax; } /** * @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 addressPerms(address _target) external view returns (bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs){ _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } /** * @notice Information about the swapback settings * @return _swapbackEnabled if swapback is enabled * @return _swapBackValueMin the minimum amount of tokens in the contract balance to trigger swapback * @return _swapBackValueMax the maximum amount of tokens in the contract balance to trigger swapback */ function valForSwapback() external view returns (bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ){ _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice This function allows the project to rescue any ERC20 tokens that are accidentally sent to the contract. * @dev projectWallet. * @param percent It transfers a specified percentage of the token balance to the project wallet. * @param _address what token want to rescue. */ function rescueERC20(address _address, uint256 percent) external { require(msg.sender == projectWallet); uint256 _amount = IERC20(_address).balanceOf(address(this)).mul(percent).div(100); // Transfer the calculated amount of tokens from the contract to the project wallet IERC20(_address).transfer(projectWallet, _amount); } /** * @notice This function allows the project to rescue any ETH that is accidentally sent to the contract. * @dev projectWallet. */ function rescueStuckETH() external { require(msg.sender == projectWallet); bool success; // Transfer the entire ETH balance of the contract to the marketing wallet (success, ) = address(marketingWallet).call{ value: address(this).balance}(""); } 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"); uint256 fees = 0; if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { //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" ); } if (transferDelayEnabled) { if (to != address(dexRouter) && to != address(dexPair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed." ); _holderLastTransferTimestamp[tx.origin] = block.number; } } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] ) { swapping = true; swapBack(amount); swapping = false; } bool takeFee = !swapping; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTax > 0) { fees = amount.mul(sellTax).div(100); } // on buy else if (automatedMarketMakerPairs[from] && buyTax > 0) { fees = amount.mul(buyTax).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 ); } /** * @notice Opens public trading for the token * @dev onlyOwner. */ function openTrade () external onlyOwner { require(!tradingEnabled, "trading is already open"); IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); transactionLimitExempt(address(_dexRouter), true); dexRouter = _dexRouter; _approve(address(this), address(dexRouter), totalSupply()); dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); transactionLimitExempt(address(dexPair), true); _setDexPair(address(dexPair), true); uint256 tokenAmount = balanceOf(address(this)).sub(totalSupply().mul(buyTax).div(100)); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), tokenAmount, 0, 0, owner(), block.timestamp ); IERC20(dexPair).approve(address(dexRouter), type(uint).max); tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } function swapBack (uint256 amount) private { bool success; uint256 contractTokenBalance = balanceOf(address(this)); if (contractTokenBalance == 0) { return;} if (block.number > lastSellBlock) { sellsOnBlock = 0; } require(sellsOnBlock < 4); uint256 getMinValue = (contractTokenBalance > swapBackValueMax) ? swapBackValueMax: contractTokenBalance; uint256 getValue = (amount > getMinValue) ? getMinValue : amount; swapTokensForEth(getValue); sellsOnBlock++; lastSellBlock = block.number; (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":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":false,"internalType":"uint256","name":"sellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"FeeUpdated","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":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetDexPair","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":"_target","type":"address"}],"name":"addressPerms","outputs":[{"internalType":"bool","name":"_transferTaxExempt","type":"bool"},{"internalType":"bool","name":"_transferLimitExempt","type":"bool"},{"internalType":"bool","name":"_automatedMarketMakerPairs","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"feeChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTxLimit","type":"uint256"}],"name":"maxTxLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWalletLimit","type":"uint256"}],"name":"maxWalletLimitChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMktWal","type":"address"}],"name":"mktWalletChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"},{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"swapBackEnabledSet","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"transactionLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transactionLimitRemove","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"transactionTaxExempt","outputs":[],"stateMutability":"nonpayable","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"valForLimits","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valForReceivers","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valForSwapback","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"valForTaxes","outputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600760156101000a81548160ff0219169083151502179055506000600960006101000a81548160ff0219169083151502179055506001600c60006101000a81548160ff0219169083151502179055506000600f60006101000a81548160ff021916908315150217905550600060135560006014553480156200008757600080fd5b506040518060400160405280600781526020017f426f7973426574000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f424f424554000000000000000000000000000000000000000000000000000000815250816003908162000105919062000c31565b50806004908162000117919062000c31565b5050506200013a6200012e620003ab60201b60201c565b620003b360201b60201c565b60006200014c6200047960201b60201c565b600a6200015a919062000ea8565b6305f5e1006200016b919062000ef9565b90506014601181905550601960128190555060646001826200018e919062000ef9565b6200019a919062000f73565b600e819055506064600182620001b1919062000ef9565b620001bd919062000f73565b600d819055506103e8600182620001d5919062000ef9565b620001e1919062000f73565b600a819055506103e8600a82620001f9919062000ef9565b62000205919062000f73565b600b81905550736880aa0c976fa722a224c52ff850551390b1cde1600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b43360016200048260201b60201c565b620002c73060016200048260201b60201c565b620002dc61dead60016200048260201b60201c565b62000311600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200048260201b60201c565b62000324336001620005bc60201b60201c565b62000337306001620005bc60201b60201c565b6200034c61dead6001620005bc60201b60201c565b62000381600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005bc60201b60201c565b6200039233620006f660201b60201c565b620003a433826200080b60201b60201c565b50620011db565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b62000492620003ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004b86200098360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000508906200100c565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620005b091906200104b565b60405180910390a25050565b620005cc620003ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005f26200098360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200064b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000642906200100c565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051620006ea91906200104b565b60405180910390a25050565b62000706620003ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200072c6200098360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000785576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200077c906200100c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620007f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ee90620010de565b60405180910390fd5b6200080881620003b360201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200087d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008749062001150565b60405180910390fd5b6200089160008383620009ad60201b60201c565b8060026000828254620008a5919062001172565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008fc919062001172565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009639190620011be565b60405180910390a36200097f60008383620009b260201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a3957607f821691505b60208210810362000a4f5762000a4e620009f1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ab97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a7a565b62000ac5868362000a7a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b1262000b0c62000b068462000add565b62000ae7565b62000add565b9050919050565b6000819050919050565b62000b2e8362000af1565b62000b4662000b3d8262000b19565b84845462000a87565b825550505050565b600090565b62000b5d62000b4e565b62000b6a81848462000b23565b505050565b5b8181101562000b925762000b8660008262000b53565b60018101905062000b70565b5050565b601f82111562000be15762000bab8162000a55565b62000bb68462000a6a565b8101602085101562000bc6578190505b62000bde62000bd58562000a6a565b83018262000b6f565b50505b505050565b600082821c905092915050565b600062000c066000198460080262000be6565b1980831691505092915050565b600062000c21838362000bf3565b9150826002028217905092915050565b62000c3c82620009b7565b67ffffffffffffffff81111562000c585762000c57620009c2565b5b62000c64825462000a20565b62000c7182828562000b96565b600060209050601f83116001811462000ca9576000841562000c94578287015190505b62000ca0858262000c13565b86555062000d10565b601f19841662000cb98662000a55565b60005b8281101562000ce35784890151825560018201915060208501945060208101905062000cbc565b8683101562000d03578489015162000cff601f89168262000bf3565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000da65780860481111562000d7e5762000d7d62000d18565b5b600185161562000d8e5780820291505b808102905062000d9e8562000d47565b945062000d5e565b94509492505050565b60008262000dc1576001905062000e94565b8162000dd1576000905062000e94565b816001811462000dea576002811462000df55762000e2b565b600191505062000e94565b60ff84111562000e0a5762000e0962000d18565b5b8360020a91508482111562000e245762000e2362000d18565b5b5062000e94565b5060208310610133831016604e8410600b841016171562000e655782820a90508381111562000e5f5762000e5e62000d18565b5b62000e94565b62000e74848484600162000d54565b9250905081840481111562000e8e5762000e8d62000d18565b5b81810290505b9392505050565b600060ff82169050919050565b600062000eb58262000add565b915062000ec28362000e9b565b925062000ef17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000daf565b905092915050565b600062000f068262000add565b915062000f138362000add565b925082820262000f238162000add565b9150828204841483151762000f3d5762000f3c62000d18565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f808262000add565b915062000f8d8362000add565b92508262000fa05762000f9f62000f44565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000ff460208362000fab565b9150620010018262000fbc565b602082019050919050565b60006020820190508181036000830152620010278162000fe5565b9050919050565b60008115159050919050565b62001045816200102e565b82525050565b60006020820190506200106260008301846200103a565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620010c660268362000fab565b9150620010d38262001068565b604082019050919050565b60006020820190508181036000830152620010f981620010b7565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001138601f8362000fab565b9150620011458262001100565b602082019050919050565b600060208201905081810360008301526200116b8162001129565b9050919050565b60006200117f8262000add565b91506200118c8362000add565b9250828201905080821115620011a757620011a662000d18565b5b92915050565b620011b88162000add565b82525050565b6000602082019050620011d56000830184620011ad565b92915050565b614c5580620011eb6000396000f3fe6080604052600436106101fd5760003560e01c806381d6e10c1161010d578063bb931db2116100a0578063de07fcde1161006f578063de07fcde1461071f578063e55648f41461075e578063f242ab4114610787578063f2fde38b146107b2578063fb201b1d146107db57610204565b8063bb931db214610677578063c30d1313146106a0578063c876d0b9146106b7578063dd62ed3e146106e257610204565b80639dac3b84116100dc5780639dac3b84146105a5578063a457c2d7146105d2578063a9059cbb1461060f578063baa8f62c1461064c57610204565b806381d6e10c146104fd5780638cd4426d146105265780638da5cb5b1461054f57806395d89b411461057a57610204565b8063313ce5671161019057806355dcff0a1161015f57806355dcff0a1461042a57806370a0823114610453578063715018a6146104905780637b3bdd05146104a7578063809e5b94146104d457610204565b8063313ce5671461036e578063395093511461039957806342034b3c146103d65780634ada218b146103ff57610204565b80631c9e5bb0116101cc5780631c9e5bb0146102b357806322c84f2b146102dc57806323b872dd1461030557806330c547461461034257610204565b80630150fe4c1461020957806306fdde0314610220578063095ea7b31461024b57806318160ddd1461028857610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107f2565b005b34801561022c57600080fd5b506102356108df565b60405161024291906136f6565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d91906137b1565b610971565b60405161027f919061380c565b60405180910390f35b34801561029457600080fd5b5061029d61098f565b6040516102aa9190613836565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061387d565b610999565b005b3480156102e857600080fd5b5061030360048036038101906102fe919061387d565b610abe565b005b34801561031157600080fd5b5061032c600480360381019061032791906138bd565b610be3565b604051610339919061380c565b60405180910390f35b34801561034e57600080fd5b50610357610cdb565b604051610365929190613910565b60405180910390f35b34801561037a57600080fd5b50610383610cec565b6040516103909190613955565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb91906137b1565b610cf5565b6040516103cd919061380c565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613970565b610da1565b005b34801561040b57600080fd5b50610414610eb9565b604051610421919061380c565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c91906139b0565b610ecc565b005b34801561045f57600080fd5b5061047a60048036038101906104759190613a03565b611075565b6040516104879190613836565b60405180910390f35b34801561049c57600080fd5b506104a56110bd565b005b3480156104b357600080fd5b506104bc611145565b6040516104cb93929190613a30565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190613a67565b61116b565b005b34801561050957600080fd5b50610524600480360381019061051f9190613a03565b61128d565b005b34801561053257600080fd5b5061054d600480360381019061054891906137b1565b6113c9565b005b34801561055b57600080fd5b5061056461156c565b6040516105719190613aa3565b60405180910390f35b34801561058657600080fd5b5061058f611596565b60405161059c91906136f6565b60405180910390f35b3480156105b157600080fd5b506105ba611628565b6040516105c993929190613a30565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f491906137b1565b61164e565b604051610606919061380c565b60405180910390f35b34801561061b57600080fd5b50610636600480360381019061063191906137b1565b611739565b604051610643919061380c565b60405180910390f35b34801561065857600080fd5b50610661611757565b60405161066e9190613aa3565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613a67565b611781565b005b3480156106ac57600080fd5b506106b56118a3565b005b3480156106c357600080fd5b506106cc611a00565b6040516106d9919061380c565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613abe565b611a13565b6040516107169190613836565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190613a03565b611a9a565b60405161075593929190613afe565b60405180910390f35b34801561076a57600080fd5b506107856004803603810190610780919061387d565b611b93565b005b34801561079357600080fd5b5061079c611cad565b6040516107a99190613aa3565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d49190613a03565b611cd3565b005b3480156107e757600080fd5b506107f0611dca565b005b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461084c57600080fd5b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161089490613b66565b60006040518083038185875af1925050503d80600081146108d1576040519150601f19603f3d011682016040523d82523d6000602084013e6108d6565b606091505b50508091505050565b6060600380546108ee90613baa565b80601f016020809104026020016040519081016040528092919081815260200182805461091a90613baa565b80156109675780601f1061093c57610100808354040283529160200191610967565b820191906000526020600020905b81548152906001019060200180831161094a57829003601f168201915b5050505050905090565b600061098561097e61236e565b8484612376565b6001905092915050565b6000600254905090565b6109a161236e565b73ffffffffffffffffffffffffffffffffffffffff166109bf61156c565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90613c27565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610ab2919061380c565b60405180910390a25050565b610ac661236e565b73ffffffffffffffffffffffffffffffffffffffff16610ae461156c565b73ffffffffffffffffffffffffffffffffffffffff1614610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190613c27565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610bd7919061380c565b60405180910390a25050565b6000610bf084848461253f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c3b61236e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613cb9565b60405180910390fd5b610ccf85610cc761236e565b858403612376565b60019150509392505050565b600080601154915060125490509091565b60006012905090565b6000610d97610d0261236e565b848460016000610d1061236e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d929190613d08565b612376565b6001905092915050565b610da961236e565b73ffffffffffffffffffffffffffffffffffffffff16610dc761156c565b73ffffffffffffffffffffffffffffffffffffffff1614610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613c27565b60405180910390fd5b600a8211158015610e2f5750600a8111155b610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613d88565b60405180910390fd5b81601181905550806012819055507f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df613028282604051610ead929190613910565b60405180910390a15050565b600f60009054906101000a900460ff1681565b610ed461236e565b73ffffffffffffffffffffffffffffffffffffffff16610ef261156c565b73ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613c27565b60405180910390fd5b6001821015610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613e1a565b60405180910390fd5b81811015610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690613eac565b60405180910390fd5b82600960006101000a81548160ff02191690831515021790555061271082610ff561098f565b610fff9190613ecc565b6110099190613f3d565b600a819055506127108161101b61098f565b6110259190613ecc565b61102f9190613f3d565b600b819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161106893929190613a30565b60405180910390a1505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c561236e565b73ffffffffffffffffffffffffffffffffffffffff166110e361156c565b73ffffffffffffffffffffffffffffffffffffffff1614611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613c27565b60405180910390fd5b6111436000612eca565b565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b61117361236e565b73ffffffffffffffffffffffffffffffffffffffff1661119161156c565b73ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613c27565b60405180910390fd5b600281101561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613fba565b60405180910390fd5b6103e861123661098f565b826112419190613ecc565b61124b9190613f3d565b600e819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600e546040516112829190613836565b60405180910390a150565b61129561236e565b73ffffffffffffffffffffffffffffffffffffffff166112b361156c565b73ffffffffffffffffffffffffffffffffffffffff1614611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613c27565b60405180910390fd5b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461142357600080fd5b60006114c460646114b6848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114679190613aa3565b602060405180830381865afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a89190613fef565b612f9090919063ffffffff16565b612fa690919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161152392919061401c565b6020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611566919061405a565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115a590613baa565b80601f01602080910402602001604051908101604052809291908181526020018280546115d190613baa565b801561161e5780601f106115f35761010080835404028352916020019161161e565b820191906000526020600020905b81548152906001019060200180831161160157829003601f168201915b5050505050905090565b6000806000600c60009054906101000a900460ff169250600d549150600e549050909192565b6000806001600061165d61236e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561171a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611711906140f9565b60405180910390fd5b61172e61172561236e565b85858403612376565b600191505092915050565b600061174d61174661236e565b848461253f565b6001905092915050565b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178961236e565b73ffffffffffffffffffffffffffffffffffffffff166117a761156c565b73ffffffffffffffffffffffffffffffffffffffff16146117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f490613c27565b60405180910390fd5b6005811015611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118389061418b565b60405180910390fd5b6103e861184c61098f565b826118579190613ecc565b6118619190613f3d565b600d819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600d546040516118989190613836565b60405180910390a150565b6118ab61236e565b73ffffffffffffffffffffffffffffffffffffffff166118c961156c565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690613c27565b60405180910390fd5b600c60009054906101000a900460ff1661196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906141f7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506000600760156101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600760159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b9b61236e565b73ffffffffffffffffffffffffffffffffffffffff16611bb961156c565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690613c27565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690614289565b60405180910390fd5b611ca98282612fbc565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cdb61236e565b73ffffffffffffffffffffffffffffffffffffffff16611cf961156c565b73ffffffffffffffffffffffffffffffffffffffff1614611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613c27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db59061431b565b60405180910390fd5b611dc781612eca565b50565b611dd261236e565b73ffffffffffffffffffffffffffffffffffffffff16611df061156c565b73ffffffffffffffffffffffffffffffffffffffff1614611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90613c27565b60405180910390fd5b600f60009054906101000a900460ff1615611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d90614387565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050611eba816001610abe565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f2f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f2a61098f565b612376565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9e91906143bc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612005573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202991906143bc565b6040518363ffffffff1660e01b81526004016120469291906143e9565b6020604051808303816000875af1158015612065573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208991906143bc565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120f6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610abe565b612123600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612fbc565b600061216e612157606461214960115461213b61098f565b612f9090919063ffffffff16565b612fa690919063ffffffff16565b61216030611075565b61305d90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730846000806121bc61156c565b426040518863ffffffff1660e01b81526004016121de96959493929190614457565b60606040518083038185885af11580156121fc573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061222191906144b8565b505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016122c392919061401c565b6020604051808303816000875af11580156122e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612306919061405a565b506001600f60006101000a81548160ff0219169083151502179055506001600960006101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc9061457d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b9061460f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125329190613836565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a5906146a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490614733565b60405180910390fd5b60008082036126385761263284846000613073565b50612ec5565b600c60009054906101000a900460ff1615612bcb5761265561156c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156126c3575061269361156c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126fc5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612736575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561274f5750600760149054906101000a900460ff16155b15612bca57601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f75750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289e57600e54821115612841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612838906147c5565b60405180910390fd5b600d5461284d84611075565b836128589190613d08565b1115612899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289090614831565b60405180910390fd5b612a3c565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129415750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299057600e5482111561298b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612982906148c3565b60405180910390fd5b612a3b565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3a57600d546129ed84611075565b836129f89190613d08565b1115612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614831565b60405180910390fd5b5b5b5b600760159054906101000a900460ff1615612bc957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612afd5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612bc85743600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a9061497b565b60405180910390fd5b43600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b6000612bd630611075565b90506000600a548210159050808015612bfb5750600960009054906101000a900460ff165b8015612c145750600760149054906101000a900460ff16155b8015612c6a5750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cc05750601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d165750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5b576001600760146101000a81548160ff021916908315150217905550612d3f846132f2565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff161590508015612eb557601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd157506000601254115b15612e0557612dfe6064612df060125488612f9090919063ffffffff16565b612fa690919063ffffffff16565b9350612e91565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6057506000601154115b15612e9057612e8d6064612e7f60115488612f9090919063ffffffff16565b612fa690919063ffffffff16565b93505b5b6000841115612ea657612ea5873086613073565b5b8385612eb2919061499b565b94505b612ec0878787613073565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612f9e9190613ecc565b905092915050565b60008183612fb49190613f3d565b905092915050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b6000818361306b919061499b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d9906146a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890614733565b60405180910390fd5b61315c838383613419565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d990614a41565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132759190613d08565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132d99190613836565b60405180910390a36132ec84848461341e565b50505050565b6000806132fe30611075565b90506000810361330f575050613416565b6014544311156133225760006013819055505b60046013541061333157600080fd5b6000600b5482116133425781613346565b600b545b905060008185116133575784613359565b815b905061336481613423565b6013600081548092919061337790614a61565b919050555043601481905550600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516133c990613b66565b60006040518083038185875af1925050503d8060008114613406576040519150601f19603f3d011682016040523d82523d6000602084013e61340b565b606091505b505080945050505050505b50565b505050565b505050565b6000600267ffffffffffffffff8111156134405761343f614aa9565b5b60405190808252806020026020018201604052801561346e5781602001602082028036833780820191505090505b509050308160008151811061348657613485614ad8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561352d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355191906143bc565b8160018151811061356557613564614ad8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135cc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612376565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613630959493929190614bc5565b600060405180830381600087803b15801561364a57600080fd5b505af115801561365e573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136a0578082015181840152602081019050613685565b60008484015250505050565b6000601f19601f8301169050919050565b60006136c882613666565b6136d28185613671565b93506136e2818560208601613682565b6136eb816136ac565b840191505092915050565b6000602082019050818103600083015261371081846136bd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137488261371d565b9050919050565b6137588161373d565b811461376357600080fd5b50565b6000813590506137758161374f565b92915050565b6000819050919050565b61378e8161377b565b811461379957600080fd5b50565b6000813590506137ab81613785565b92915050565b600080604083850312156137c8576137c7613718565b5b60006137d685828601613766565b92505060206137e78582860161379c565b9150509250929050565b60008115159050919050565b613806816137f1565b82525050565b600060208201905061382160008301846137fd565b92915050565b6138308161377b565b82525050565b600060208201905061384b6000830184613827565b92915050565b61385a816137f1565b811461386557600080fd5b50565b60008135905061387781613851565b92915050565b6000806040838503121561389457613893613718565b5b60006138a285828601613766565b92505060206138b385828601613868565b9150509250929050565b6000806000606084860312156138d6576138d5613718565b5b60006138e486828701613766565b93505060206138f586828701613766565b92505060406139068682870161379c565b9150509250925092565b60006040820190506139256000830185613827565b6139326020830184613827565b9392505050565b600060ff82169050919050565b61394f81613939565b82525050565b600060208201905061396a6000830184613946565b92915050565b6000806040838503121561398757613986613718565b5b60006139958582860161379c565b92505060206139a68582860161379c565b9150509250929050565b6000806000606084860312156139c9576139c8613718565b5b60006139d786828701613868565b93505060206139e88682870161379c565b92505060406139f98682870161379c565b9150509250925092565b600060208284031215613a1957613a18613718565b5b6000613a2784828501613766565b91505092915050565b6000606082019050613a4560008301866137fd565b613a526020830185613827565b613a5f6040830184613827565b949350505050565b600060208284031215613a7d57613a7c613718565b5b6000613a8b8482850161379c565b91505092915050565b613a9d8161373d565b82525050565b6000602082019050613ab86000830184613a94565b92915050565b60008060408385031215613ad557613ad4613718565b5b6000613ae385828601613766565b9250506020613af485828601613766565b9150509250929050565b6000606082019050613b1360008301866137fd565b613b2060208301856137fd565b613b2d60408301846137fd565b949350505050565b600081905092915050565b50565b6000613b50600083613b35565b9150613b5b82613b40565b600082019050919050565b6000613b7182613b43565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc257607f821691505b602082108103613bd557613bd4613b7b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c11602083613671565b9150613c1c82613bdb565b602082019050919050565b60006020820190508181036000830152613c4081613c04565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ca3602883613671565b9150613cae82613c47565b604082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d138261377b565b9150613d1e8361377b565b9250828201905080821115613d3657613d35613cd9565b5b92915050565b7f6578636565642076616c75650000000000000000000000000000000000000000600082015250565b6000613d72600c83613671565b9150613d7d82613d3c565b602082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613e04603483613671565b9150613e0f82613da8565b604082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613e96602a83613671565b9150613ea182613e3a565b604082019050919050565b60006020820190508181036000830152613ec581613e89565b9050919050565b6000613ed78261377b565b9150613ee28361377b565b9250828202613ef08161377b565b91508282048414831517613f0757613f06613cd9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f488261377b565b9150613f538361377b565b925082613f6357613f62613f0e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613fa4602083613671565b9150613faf82613f6e565b602082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b600081519050613fe981613785565b92915050565b60006020828403121561400557614004613718565b5b600061401384828501613fda565b91505092915050565b60006040820190506140316000830185613a94565b61403e6020830184613827565b9392505050565b60008151905061405481613851565b92915050565b6000602082840312156140705761406f613718565b5b600061407e84828501614045565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140e3602583613671565b91506140ee82614087565b604082019050919050565b60006020820190508181036000830152614112816140d6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614175602483613671565b915061418082614119565b604082019050919050565b600060208201905081810360008301526141a481614168565b9050919050565b7f4c696d69747320616c72656164792064697361626c6564000000000000000000600082015250565b60006141e1601783613671565b91506141ec826141ab565b602082019050919050565b60006020820190508181036000830152614210816141d4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614273603983613671565b915061427e82614217565b604082019050919050565b600060208201905081810360008301526142a281614266565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614305602683613671565b9150614310826142a9565b604082019050919050565b60006020820190508181036000830152614334816142f8565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000614371601783613671565b915061437c8261433b565b602082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b6000815190506143b68161374f565b92915050565b6000602082840312156143d2576143d1613718565b5b60006143e0848285016143a7565b91505092915050565b60006040820190506143fe6000830185613a94565b61440b6020830184613a94565b9392505050565b6000819050919050565b6000819050919050565b600061444161443c61443784614412565b61441c565b61377b565b9050919050565b61445181614426565b82525050565b600060c08201905061446c6000830189613a94565b6144796020830188613827565b6144866040830187614448565b6144936060830186614448565b6144a06080830185613a94565b6144ad60a0830184613827565b979650505050505050565b6000806000606084860312156144d1576144d0613718565b5b60006144df86828701613fda565b93505060206144f086828701613fda565b925050604061450186828701613fda565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614567602483613671565b91506145728261450b565b604082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145f9602283613671565b91506146048261459d565b604082019050919050565b60006020820190508181036000830152614628816145ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061468b602583613671565b91506146968261462f565b604082019050919050565b600060208201905081810360008301526146ba8161467e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061471d602383613671565b9150614728826146c1565b604082019050919050565b6000602082019050818103600083015261474c81614710565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006147af602683613671565b91506147ba82614753565b604082019050919050565b600060208201905081810360008301526147de816147a2565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061481b601383613671565b9150614826826147e5565b602082019050919050565b6000602082019050818103600083015261484a8161480e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006148ad602783613671565b91506148b882614851565b604082019050919050565b600060208201905081810360008301526148dc816148a0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614965604983613671565b9150614970826148e3565b606082019050919050565b6000602082019050818103600083015261499481614958565b9050919050565b60006149a68261377b565b91506149b18361377b565b92508282039050818111156149c9576149c8613cd9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a2b602683613671565b9150614a36826149cf565b604082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b6000614a6c8261377b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a9e57614a9d613cd9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b3c8161373d565b82525050565b6000614b4e8383614b33565b60208301905092915050565b6000602082019050919050565b6000614b7282614b07565b614b7c8185614b12565b9350614b8783614b23565b8060005b83811015614bb8578151614b9f8882614b42565b9750614baa83614b5a565b925050600181019050614b8b565b5085935050505092915050565b600060a082019050614bda6000830188613827565b614be76020830187614448565b8181036040830152614bf98186614b67565b9050614c086060830185613a94565b614c156080830184613827565b969550505050505056fea2646970667358221220788fdfac683854c5e4b4df0941075cda49c152f0a023b56a0a2e443cad17bcfd64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101fd5760003560e01c806381d6e10c1161010d578063bb931db2116100a0578063de07fcde1161006f578063de07fcde1461071f578063e55648f41461075e578063f242ab4114610787578063f2fde38b146107b2578063fb201b1d146107db57610204565b8063bb931db214610677578063c30d1313146106a0578063c876d0b9146106b7578063dd62ed3e146106e257610204565b80639dac3b84116100dc5780639dac3b84146105a5578063a457c2d7146105d2578063a9059cbb1461060f578063baa8f62c1461064c57610204565b806381d6e10c146104fd5780638cd4426d146105265780638da5cb5b1461054f57806395d89b411461057a57610204565b8063313ce5671161019057806355dcff0a1161015f57806355dcff0a1461042a57806370a0823114610453578063715018a6146104905780637b3bdd05146104a7578063809e5b94146104d457610204565b8063313ce5671461036e578063395093511461039957806342034b3c146103d65780634ada218b146103ff57610204565b80631c9e5bb0116101cc5780631c9e5bb0146102b357806322c84f2b146102dc57806323b872dd1461030557806330c547461461034257610204565b80630150fe4c1461020957806306fdde0314610220578063095ea7b31461024b57806318160ddd1461028857610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107f2565b005b34801561022c57600080fd5b506102356108df565b60405161024291906136f6565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d91906137b1565b610971565b60405161027f919061380c565b60405180910390f35b34801561029457600080fd5b5061029d61098f565b6040516102aa9190613836565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d5919061387d565b610999565b005b3480156102e857600080fd5b5061030360048036038101906102fe919061387d565b610abe565b005b34801561031157600080fd5b5061032c600480360381019061032791906138bd565b610be3565b604051610339919061380c565b60405180910390f35b34801561034e57600080fd5b50610357610cdb565b604051610365929190613910565b60405180910390f35b34801561037a57600080fd5b50610383610cec565b6040516103909190613955565b60405180910390f35b3480156103a557600080fd5b506103c060048036038101906103bb91906137b1565b610cf5565b6040516103cd919061380c565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613970565b610da1565b005b34801561040b57600080fd5b50610414610eb9565b604051610421919061380c565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c91906139b0565b610ecc565b005b34801561045f57600080fd5b5061047a60048036038101906104759190613a03565b611075565b6040516104879190613836565b60405180910390f35b34801561049c57600080fd5b506104a56110bd565b005b3480156104b357600080fd5b506104bc611145565b6040516104cb93929190613a30565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190613a67565b61116b565b005b34801561050957600080fd5b50610524600480360381019061051f9190613a03565b61128d565b005b34801561053257600080fd5b5061054d600480360381019061054891906137b1565b6113c9565b005b34801561055b57600080fd5b5061056461156c565b6040516105719190613aa3565b60405180910390f35b34801561058657600080fd5b5061058f611596565b60405161059c91906136f6565b60405180910390f35b3480156105b157600080fd5b506105ba611628565b6040516105c993929190613a30565b60405180910390f35b3480156105de57600080fd5b506105f960048036038101906105f491906137b1565b61164e565b604051610606919061380c565b60405180910390f35b34801561061b57600080fd5b50610636600480360381019061063191906137b1565b611739565b604051610643919061380c565b60405180910390f35b34801561065857600080fd5b50610661611757565b60405161066e9190613aa3565b60405180910390f35b34801561068357600080fd5b5061069e60048036038101906106999190613a67565b611781565b005b3480156106ac57600080fd5b506106b56118a3565b005b3480156106c357600080fd5b506106cc611a00565b6040516106d9919061380c565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190613abe565b611a13565b6040516107169190613836565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190613a03565b611a9a565b60405161075593929190613afe565b60405180910390f35b34801561076a57600080fd5b506107856004803603810190610780919061387d565b611b93565b005b34801561079357600080fd5b5061079c611cad565b6040516107a99190613aa3565b60405180910390f35b3480156107be57600080fd5b506107d960048036038101906107d49190613a03565b611cd3565b005b3480156107e757600080fd5b506107f0611dca565b005b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461084c57600080fd5b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161089490613b66565b60006040518083038185875af1925050503d80600081146108d1576040519150601f19603f3d011682016040523d82523d6000602084013e6108d6565b606091505b50508091505050565b6060600380546108ee90613baa565b80601f016020809104026020016040519081016040528092919081815260200182805461091a90613baa565b80156109675780601f1061093c57610100808354040283529160200191610967565b820191906000526020600020905b81548152906001019060200180831161094a57829003601f168201915b5050505050905090565b600061098561097e61236e565b8484612376565b6001905092915050565b6000600254905090565b6109a161236e565b73ffffffffffffffffffffffffffffffffffffffff166109bf61156c565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c90613c27565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610ab2919061380c565b60405180910390a25050565b610ac661236e565b73ffffffffffffffffffffffffffffffffffffffff16610ae461156c565b73ffffffffffffffffffffffffffffffffffffffff1614610b3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3190613c27565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610bd7919061380c565b60405180910390a25050565b6000610bf084848461253f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c3b61236e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290613cb9565b60405180910390fd5b610ccf85610cc761236e565b858403612376565b60019150509392505050565b600080601154915060125490509091565b60006012905090565b6000610d97610d0261236e565b848460016000610d1061236e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d929190613d08565b612376565b6001905092915050565b610da961236e565b73ffffffffffffffffffffffffffffffffffffffff16610dc761156c565b73ffffffffffffffffffffffffffffffffffffffff1614610e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1490613c27565b60405180910390fd5b600a8211158015610e2f5750600a8111155b610e6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6590613d88565b60405180910390fd5b81601181905550806012819055507f528d9479e9f9889a87a3c30c7f7ba537e5e59c4c85a37733b16e57c62df613028282604051610ead929190613910565b60405180910390a15050565b600f60009054906101000a900460ff1681565b610ed461236e565b73ffffffffffffffffffffffffffffffffffffffff16610ef261156c565b73ffffffffffffffffffffffffffffffffffffffff1614610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90613c27565b60405180910390fd5b6001821015610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390613e1a565b60405180910390fd5b81811015610fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc690613eac565b60405180910390fd5b82600960006101000a81548160ff02191690831515021790555061271082610ff561098f565b610fff9190613ecc565b6110099190613f3d565b600a819055506127108161101b61098f565b6110259190613ecc565b61102f9190613f3d565b600b819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c77983838360405161106893929190613a30565b60405180910390a1505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110c561236e565b73ffffffffffffffffffffffffffffffffffffffff166110e361156c565b73ffffffffffffffffffffffffffffffffffffffff1614611139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113090613c27565b60405180910390fd5b6111436000612eca565b565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b61117361236e565b73ffffffffffffffffffffffffffffffffffffffff1661119161156c565b73ffffffffffffffffffffffffffffffffffffffff16146111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613c27565b60405180910390fd5b600281101561122b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122290613fba565b60405180910390fd5b6103e861123661098f565b826112419190613ecc565b61124b9190613f3d565b600e819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600e546040516112829190613836565b60405180910390a150565b61129561236e565b73ffffffffffffffffffffffffffffffffffffffff166112b361156c565b73ffffffffffffffffffffffffffffffffffffffff1614611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613c27565b60405180910390fd5b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461142357600080fd5b60006114c460646114b6848673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114679190613aa3565b602060405180830381865afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a89190613fef565b612f9090919063ffffffff16565b612fa690919063ffffffff16565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161152392919061401c565b6020604051808303816000875af1158015611542573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611566919061405a565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546115a590613baa565b80601f01602080910402602001604051908101604052809291908181526020018280546115d190613baa565b801561161e5780601f106115f35761010080835404028352916020019161161e565b820191906000526020600020905b81548152906001019060200180831161160157829003601f168201915b5050505050905090565b6000806000600c60009054906101000a900460ff169250600d549150600e549050909192565b6000806001600061165d61236e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561171a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611711906140f9565b60405180910390fd5b61172e61172561236e565b85858403612376565b600191505092915050565b600061174d61174661236e565b848461253f565b6001905092915050565b6000600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178961236e565b73ffffffffffffffffffffffffffffffffffffffff166117a761156c565b73ffffffffffffffffffffffffffffffffffffffff16146117fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f490613c27565b60405180910390fd5b6005811015611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118389061418b565b60405180910390fd5b6103e861184c61098f565b826118579190613ecc565b6118619190613f3d565b600d819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600d546040516118989190613836565b60405180910390a150565b6118ab61236e565b73ffffffffffffffffffffffffffffffffffffffff166118c961156c565b73ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690613c27565b60405180910390fd5b600c60009054906101000a900460ff1661196e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611965906141f7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506000600760156101000a81548160ff021916908315150217905550427f26e776fcf7ca20aa79b5b946e9b5111f47205539ece9d7a7995271dd6a8b5bad60405160405180910390a2427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b600760159054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000806000601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b611b9b61236e565b73ffffffffffffffffffffffffffffffffffffffff16611bb961156c565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690613c27565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690614289565b60405180910390fd5b611ca98282612fbc565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611cdb61236e565b73ffffffffffffffffffffffffffffffffffffffff16611cf961156c565b73ffffffffffffffffffffffffffffffffffffffff1614611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690613c27565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db59061431b565b60405180910390fd5b611dc781612eca565b50565b611dd261236e565b73ffffffffffffffffffffffffffffffffffffffff16611df061156c565b73ffffffffffffffffffffffffffffffffffffffff1614611e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3d90613c27565b60405180910390fd5b600f60009054906101000a900460ff1615611e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8d90614387565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050611eba816001610abe565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f2f30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f2a61098f565b612376565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9e91906143bc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612005573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202991906143bc565b6040518363ffffffff1660e01b81526004016120469291906143e9565b6020604051808303816000875af1158015612065573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061208991906143bc565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120f6600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610abe565b612123600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612fbc565b600061216e612157606461214960115461213b61098f565b612f9090919063ffffffff16565b612fa690919063ffffffff16565b61216030611075565b61305d90919063ffffffff16565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730846000806121bc61156c565b426040518863ffffffff1660e01b81526004016121de96959493929190614457565b60606040518083038185885af11580156121fc573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061222191906144b8565b505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016122c392919061401c565b6020604051808303816000875af11580156122e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612306919061405a565b506001600f60006101000a81548160ff0219169083151502179055506001600960006101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a25050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123dc9061457d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b9061460f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125329190613836565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a5906146a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361261d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261490614733565b60405180910390fd5b60008082036126385761263284846000613073565b50612ec5565b600c60009054906101000a900460ff1615612bcb5761265561156c565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156126c3575061269361156c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156126fc5750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612736575061dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561274f5750600760149054906101000a900460ff16155b15612bca57601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127f75750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561289e57600e54821115612841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612838906147c5565b60405180910390fd5b600d5461284d84611075565b836128589190613d08565b1115612899576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289090614831565b60405180910390fd5b612a3c565b601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129415750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299057600e5482111561298b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612982906148c3565b60405180910390fd5b612a3b565b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3a57600d546129ed84611075565b836129f89190613d08565b1115612a39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3090614831565b60405180910390fd5b5b5b5b600760159054906101000a900460ff1615612bc957600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612afd5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612bc85743600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7a9061497b565b60405180910390fd5b43600860003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b5b6000612bd630611075565b90506000600a548210159050808015612bfb5750600960009054906101000a900460ff165b8015612c145750600760149054906101000a900460ff16155b8015612c6a5750601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cc05750601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d165750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5b576001600760146101000a81548160ff021916908315150217905550612d3f846132f2565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff161590508015612eb557601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd157506000601254115b15612e0557612dfe6064612df060125488612f9090919063ffffffff16565b612fa690919063ffffffff16565b9350612e91565b601760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6057506000601154115b15612e9057612e8d6064612e7f60115488612f9090919063ffffffff16565b612fa690919063ffffffff16565b93505b5b6000841115612ea657612ea5873086613073565b5b8385612eb2919061499b565b94505b612ec0878787613073565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612f9e9190613ecc565b905092915050565b60008183612fb49190613f3d565b905092915050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b6000818361306b919061499b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036130e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130d9906146a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890614733565b60405180910390fd5b61315c838383613419565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156131e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d990614a41565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132759190613d08565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516132d99190613836565b60405180910390a36132ec84848461341e565b50505050565b6000806132fe30611075565b90506000810361330f575050613416565b6014544311156133225760006013819055505b60046013541061333157600080fd5b6000600b5482116133425781613346565b600b545b905060008185116133575784613359565b815b905061336481613423565b6013600081548092919061337790614a61565b919050555043601481905550600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516133c990613b66565b60006040518083038185875af1925050503d8060008114613406576040519150601f19603f3d011682016040523d82523d6000602084013e61340b565b606091505b505080945050505050505b50565b505050565b505050565b6000600267ffffffffffffffff8111156134405761343f614aa9565b5b60405190808252806020026020018201604052801561346e5781602001602082028036833780820191505090505b509050308160008151811061348657613485614ad8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561352d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355191906143bc565b8160018151811061356557613564614ad8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135cc30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612376565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613630959493929190614bc5565b600060405180830381600087803b15801561364a57600080fd5b505af115801561365e573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136a0578082015181840152602081019050613685565b60008484015250505050565b6000601f19601f8301169050919050565b60006136c882613666565b6136d28185613671565b93506136e2818560208601613682565b6136eb816136ac565b840191505092915050565b6000602082019050818103600083015261371081846136bd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137488261371d565b9050919050565b6137588161373d565b811461376357600080fd5b50565b6000813590506137758161374f565b92915050565b6000819050919050565b61378e8161377b565b811461379957600080fd5b50565b6000813590506137ab81613785565b92915050565b600080604083850312156137c8576137c7613718565b5b60006137d685828601613766565b92505060206137e78582860161379c565b9150509250929050565b60008115159050919050565b613806816137f1565b82525050565b600060208201905061382160008301846137fd565b92915050565b6138308161377b565b82525050565b600060208201905061384b6000830184613827565b92915050565b61385a816137f1565b811461386557600080fd5b50565b60008135905061387781613851565b92915050565b6000806040838503121561389457613893613718565b5b60006138a285828601613766565b92505060206138b385828601613868565b9150509250929050565b6000806000606084860312156138d6576138d5613718565b5b60006138e486828701613766565b93505060206138f586828701613766565b92505060406139068682870161379c565b9150509250925092565b60006040820190506139256000830185613827565b6139326020830184613827565b9392505050565b600060ff82169050919050565b61394f81613939565b82525050565b600060208201905061396a6000830184613946565b92915050565b6000806040838503121561398757613986613718565b5b60006139958582860161379c565b92505060206139a68582860161379c565b9150509250929050565b6000806000606084860312156139c9576139c8613718565b5b60006139d786828701613868565b93505060206139e88682870161379c565b92505060406139f98682870161379c565b9150509250925092565b600060208284031215613a1957613a18613718565b5b6000613a2784828501613766565b91505092915050565b6000606082019050613a4560008301866137fd565b613a526020830185613827565b613a5f6040830184613827565b949350505050565b600060208284031215613a7d57613a7c613718565b5b6000613a8b8482850161379c565b91505092915050565b613a9d8161373d565b82525050565b6000602082019050613ab86000830184613a94565b92915050565b60008060408385031215613ad557613ad4613718565b5b6000613ae385828601613766565b9250506020613af485828601613766565b9150509250929050565b6000606082019050613b1360008301866137fd565b613b2060208301856137fd565b613b2d60408301846137fd565b949350505050565b600081905092915050565b50565b6000613b50600083613b35565b9150613b5b82613b40565b600082019050919050565b6000613b7182613b43565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bc257607f821691505b602082108103613bd557613bd4613b7b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c11602083613671565b9150613c1c82613bdb565b602082019050919050565b60006020820190508181036000830152613c4081613c04565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613ca3602883613671565b9150613cae82613c47565b604082019050919050565b60006020820190508181036000830152613cd281613c96565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d138261377b565b9150613d1e8361377b565b9250828201905080821115613d3657613d35613cd9565b5b92915050565b7f6578636565642076616c75650000000000000000000000000000000000000000600082015250565b6000613d72600c83613671565b9150613d7d82613d3c565b602082019050919050565b60006020820190508181036000830152613da181613d65565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613e04603483613671565b9150613e0f82613da8565b604082019050919050565b60006020820190508181036000830152613e3381613df7565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613e96602a83613671565b9150613ea182613e3a565b604082019050919050565b60006020820190508181036000830152613ec581613e89565b9050919050565b6000613ed78261377b565b9150613ee28361377b565b9250828202613ef08161377b565b91508282048414831517613f0757613f06613cd9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f488261377b565b9150613f538361377b565b925082613f6357613f62613f0e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613fa4602083613671565b9150613faf82613f6e565b602082019050919050565b60006020820190508181036000830152613fd381613f97565b9050919050565b600081519050613fe981613785565b92915050565b60006020828403121561400557614004613718565b5b600061401384828501613fda565b91505092915050565b60006040820190506140316000830185613a94565b61403e6020830184613827565b9392505050565b60008151905061405481613851565b92915050565b6000602082840312156140705761406f613718565b5b600061407e84828501614045565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006140e3602583613671565b91506140ee82614087565b604082019050919050565b60006020820190508181036000830152614112816140d6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614175602483613671565b915061418082614119565b604082019050919050565b600060208201905081810360008301526141a481614168565b9050919050565b7f4c696d69747320616c72656164792064697361626c6564000000000000000000600082015250565b60006141e1601783613671565b91506141ec826141ab565b602082019050919050565b60006020820190508181036000830152614210816141d4565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614273603983613671565b915061427e82614217565b604082019050919050565b600060208201905081810360008301526142a281614266565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614305602683613671565b9150614310826142a9565b604082019050919050565b60006020820190508181036000830152614334816142f8565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000614371601783613671565b915061437c8261433b565b602082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b6000815190506143b68161374f565b92915050565b6000602082840312156143d2576143d1613718565b5b60006143e0848285016143a7565b91505092915050565b60006040820190506143fe6000830185613a94565b61440b6020830184613a94565b9392505050565b6000819050919050565b6000819050919050565b600061444161443c61443784614412565b61441c565b61377b565b9050919050565b61445181614426565b82525050565b600060c08201905061446c6000830189613a94565b6144796020830188613827565b6144866040830187614448565b6144936060830186614448565b6144a06080830185613a94565b6144ad60a0830184613827565b979650505050505050565b6000806000606084860312156144d1576144d0613718565b5b60006144df86828701613fda565b93505060206144f086828701613fda565b925050604061450186828701613fda565b9150509250925092565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614567602483613671565b91506145728261450b565b604082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006145f9602283613671565b91506146048261459d565b604082019050919050565b60006020820190508181036000830152614628816145ec565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061468b602583613671565b91506146968261462f565b604082019050919050565b600060208201905081810360008301526146ba8161467e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061471d602383613671565b9150614728826146c1565b604082019050919050565b6000602082019050818103600083015261474c81614710565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006147af602683613671565b91506147ba82614753565b604082019050919050565b600060208201905081810360008301526147de816147a2565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061481b601383613671565b9150614826826147e5565b602082019050919050565b6000602082019050818103600083015261484a8161480e565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006148ad602783613671565b91506148b882614851565b604082019050919050565b600060208201905081810360008301526148dc816148a0565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614965604983613671565b9150614970826148e3565b606082019050919050565b6000602082019050818103600083015261499481614958565b9050919050565b60006149a68261377b565b91506149b18361377b565b92508282039050818111156149c9576149c8613cd9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614a2b602683613671565b9150614a36826149cf565b604082019050919050565b60006020820190508181036000830152614a5a81614a1e565b9050919050565b6000614a6c8261377b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a9e57614a9d613cd9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b3c8161373d565b82525050565b6000614b4e8383614b33565b60208301905092915050565b6000602082019050919050565b6000614b7282614b07565b614b7c8185614b12565b9350614b8783614b23565b8060005b83811015614bb8578151614b9f8882614b42565b9750614baa83614b5a565b925050600181019050614b8b565b5085935050505092915050565b600060a082019050614bda6000830188613827565b614be76020830187614448565b8181036040830152614bf98186614b67565b9050614c086060830185613a94565b614c156080830184613827565b969550505050505056fea2646970667358221220788fdfac683854c5e4b4df0941075cda49c152f0a023b56a0a2e443cad17bcfd64736f6c63430008130033
Deployed Bytecode Sourcemap
25845:18017:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37742:298;;;;;;;;;;;;;:::i;:::-;;11443:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13676:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12563:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33007:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32034:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14348:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35288:147;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;12405:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15282:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32510:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26397:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30280:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12734:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22782:103;;;;;;;;;;;;;:::i;:::-;;36600:273;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;31000:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34100:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37204:375;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22131:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11662:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34622:211;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16071:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13090:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34996:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31476:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29525:291;;;;;;;;;;;;;:::i;:::-;;26035:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13353:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35895:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;33511:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25957:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23040:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41993:1135;;;;;;;;;;;;;:::i;:::-;;37742:298;37810:13;;;;;;;;;;;37796:27;;:10;:27;;;37788:36;;;;;;37835:12;37974:15;;;;;;;;;;;37966:29;;38004:21;37966:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37952:78;;;;;37777:263;37742:298::o;11443:100::-;11497:13;11530:5;11523:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11443:100;:::o;13676:194::-;13784:4;13801:39;13810:12;:10;:12::i;:::-;13824:7;13833:6;13801:8;:39::i;:::-;13858:4;13851:11;;13676:194;;;;:::o;12563:108::-;12624:7;12651:12;;12644:19;;12563:108;:::o;33007:210::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33151:8:::1;33122:17;:26;33140:7;33122:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;33191:7;33175:34;;;33200:8;33175:34;;;;;;:::i;:::-;;;;;;;;33007:210:::0;;:::o;32034:201::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32176:4:::1;32146:19;:27;32166:6;32146:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32214:6;32196:31;;;32222:4;32196:31;;;;;;:::i;:::-;;;;;;;;32034:201:::0;;:::o;14348:529::-;14488:4;14505:36;14515:6;14523:9;14534:6;14505:9;:36::i;:::-;14554:24;14581:11;:19;14593:6;14581:19;;;;;;;;;;;;;;;:33;14601:12;:10;:12::i;:::-;14581:33;;;;;;;;;;;;;;;;14554:60;;14667:6;14647:16;:26;;14625:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14777:57;14786:6;14794:12;:10;:12::i;:::-;14827:6;14808:16;:25;14777:8;:57::i;:::-;14865:4;14858:11;;;14348:529;;;;;:::o;35288:147::-;35335:15;35352:16;35392:6;;35382:16;;35420:7;;35409:18;;35288:147;;:::o;12405:93::-;12463:5;12488:2;12481:9;;12405:93;:::o;15282:290::-;15395:4;15412:130;15435:12;:10;:12::i;:::-;15462:7;15521:10;15484:11;:25;15496:12;:10;:12::i;:::-;15484:25;;;;;;;;;;;;;;;:34;15510:7;15484:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15412:8;:130::i;:::-;15560:4;15553:11;;15282:290;;;;:::o;32510:248::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32613:2:::1;32602:7;:13;;:31;;;;;32631:2;32619:8;:14;;32602:31;32594:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32669:7;32661:6;:15;;;;32697:8;32687:7;:18;;;;32721:29;32732:7;32741:8;32721:29;;;;;;;:::i;:::-;;;;;;;;32510:248:::0;;:::o;26397:34::-;;;;;;;;;;;;;:::o;30280:477::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30397:1:::1;30389:4;:9;;30381:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;30482:4;30474;:12;;30466:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30562:7;30544:15;;:25;;;;;;;;;;;;;;;;;;30624:5;30616:4;30600:13;:11;:13::i;:::-;:20;;;;:::i;:::-;30599:30;;;;:::i;:::-;30580:16;:49;;;;30684:5;30676:4;30660:13;:11;:13::i;:::-;:20;;;;:::i;:::-;30659:30;;;;:::i;:::-;30640:16;:49;;;;30705:44;30729:7;30738:4;30744;30705:44;;;;;;;;:::i;:::-;;;;;;;;30280:477:::0;;;:::o;12734:143::-;12824:7;12851:9;:18;12861:7;12851:18;;;;;;;;;;;;;;;;12844:25;;12734:143;;;:::o;22782:103::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22847:30:::1;22874:1;22847:18;:30::i;:::-;22782:103::o:0;36600:273::-;36649:21;36672:25;36699;36756:15;;;;;;;;;;;36737:34;;36802:16;;36782:36;;36849:16;;36829:36;;36600:273;;;:::o;31000:258::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31120:1:::1;31103:13;:18;;31095:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31211:4;31194:13;:11;:13::i;:::-;31178;:29;;;;:::i;:::-;31177:38;;;;:::i;:::-;31169:5;:46;;;;31231:19;31244:5;;31231:19;;;;;;:::i;:::-;;;;;;;;31000:258:::0;:::o;34100:175::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34213:15:::1;;;;;;;;;;;34179:50;;34202:9;34179:50;;;;;;;;;;;;34258:9;34240:15;;:27;;;;;;;;;;;;;;;;;;34100:175:::0;:::o;37204:375::-;37302:13;;;;;;;;;;;37288:27;;:10;:27;;;37280:36;;;;;;37327:15;37345:63;37404:3;37345:54;37391:7;37352:8;37345:26;;;37380:4;37345:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;:54;;;;:::i;:::-;:58;;:63;;;;:::i;:::-;37327:81;;37529:8;37522:25;;;37548:13;;;;;;;;;;;37563:7;37522:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37269:310;37204:375;;:::o;22131:87::-;22177:7;22204:6;;;;;;;;;;;22197:13;;22131:87;:::o;11662:104::-;11718:13;11751:7;11744:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11662:104;:::o;34622:211::-;34669:19;34690:18;34710:14;34754:13;;;;;;;;;;;34737:30;;34791:9;;34778:22;;34820:5;;34811:14;;34622:211;;;:::o;16071:475::-;16189:4;16206:24;16233:11;:25;16245:12;:10;:12::i;:::-;16233:25;;;;;;;;;;;;;;;:34;16259:7;16233:34;;;;;;;;;;;;;;;;16206:61;;16320:15;16300:16;:35;;16278:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16436:67;16445:12;:10;:12::i;:::-;16459:7;16487:15;16468:16;:34;16436:8;:67::i;:::-;16534:4;16527:11;;;16071:475;;;;:::o;13090:200::-;13201:4;13218:42;13228:12;:10;:12::i;:::-;13242:9;13253:6;13218:9;:42::i;:::-;13278:4;13271:11;;13090:200;;;;:::o;34996:118::-;35046:24;35090:15;;;;;;;;;;;35082:24;;34996:118;:::o;31476:290::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31608:1:::1;31587:17;:22;;31579:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31711:4;31694:13;:11;:13::i;:::-;31674:17;:33;;;;:::i;:::-;31673:42;;;;:::i;:::-;31661:9;:54;;;;31731:27;31748:9;;31731:27;;;;;;:::i;:::-;;;;;;;;31476:290:::0;:::o;29525:291::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29597:13:::1;;;;;;;;;;;29589:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;29665:5;29649:13;;:21;;;;;;;;;;;;;;;;;;29702:5;29681:20;;:26;;;;;;;;;;;;;;;;;;29746:15;29723:39;;;;;;;;;;29792:15;29778:30;;;;;;;;;;29525:291::o:0;26035:39::-;;;;;;;;;;;;;:::o;13353:176::-;13467:7;13494:11;:18;13506:5;13494:18;;;;;;;;;;;;;;;:27;13513:7;13494:27;;;;;;;;;;;;;;;;13487:34;;13353:176;;;;:::o;35895:348::-;35957:23;35982:25;36009:31;36073:17;:26;36091:7;36073:26;;;;;;;;;;;;;;;;;;;;;;;;;36052:47;;36133:19;:28;36153:7;36133:28;;;;;;;;;;;;;;;;;;;;;;;;;36110:51;;36201:25;:34;36227:7;36201:34;;;;;;;;;;;;;;;;;;;;;;;;;36172:63;;35895:348;;;;;:::o;33511:239::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33615:7:::1;;;;;;;;;;;33607:15;;:4;:15;;::::0;33585:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33718:24;33730:4;33736:5;33718:11;:24::i;:::-;33511:239:::0;;:::o;25957:22::-;;;;;;;;;;;;;:::o;23040:238::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23163:1:::1;23143:22;;:8;:22;;::::0;23121:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23242:28;23261:8;23242:18;:28::i;:::-;23040:238:::0;:::o;41993:1135::-;22362:12;:10;:12::i;:::-;22351:23;;:7;:5;:7::i;:::-;:23;;;22343:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42054:14:::1;;;;;;;;;;;42053:15;42045:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42109:21;42158:42;42109:102;;42224:49;42255:10;42268:4;42224:22;:49::i;:::-;42296:10;42284:9;;:22;;;;;;;;;;;;;;;;;;42317:58;42334:4;42349:9;;;;;;;;;;;42361:13;:11;:13::i;:::-;42317:8;:58::i;:::-;42408:10;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42396:44;;;42463:4;42483:10;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42396:115;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42386:7;;:125;;;;;;;;;;;;;;;;;;42522:46;42553:7;;;;;;;;;;;42563:4;42522:22;:46::i;:::-;42579:35;42599:7;;;;;;;;;;;42609:4;42579:11;:35::i;:::-;42627:19;42649:64;42678:34;42708:3;42678:25;42696:6;;42678:13;:11;:13::i;:::-;:17;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42649:24;42667:4;42649:9;:24::i;:::-;:28;;:64;;;;:::i;:::-;42627:86;;42724:9;;;;;;;;;;;:25;;;42757:21;42802:4;42822:11;42848:1;42864::::0;42880:7:::1;:5;:7::i;:::-;42902:15;42724:204;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42946:7;;;;;;;;;;;42939:23;;;42971:9;;;;;;;;;;;42983:14;42939:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43036:4;43019:14;;:21;;;;;;;;;;;;;;;;;;43069:4;43051:15;;:22;;;;;;;;;;;;;;;;;;43104:15;43089:31;;;;;;;;;;42034:1094;;41993:1135::o:0;10449:98::-;10502:7;10529:10;10522:17;;10449:98;:::o;19854:380::-;20007:1;19990:19;;:5;:19;;;19982:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20088:1;20069:21;;:7;:21;;;20061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20172:6;20142:11;:18;20154:5;20142:18;;;;;;;;;;;;;;;:27;20161:7;20142:27;;;;;;;;;;;;;;;:36;;;;20210:7;20194:32;;20203:5;20194:32;;;20219:6;20194:32;;;;;;:::i;:::-;;;;;;;;19854:380;;;:::o;38048:3266::-;38196:1;38180:18;;:4;:18;;;38172:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38273:1;38259:16;;:2;:16;;;38251:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38328:12;38371:1;38361:6;:11;38357:93;;38389:28;38405:4;38411:2;38415:1;38389:15;:28::i;:::-;38432:7;;;38357:93;38466:13;;;;;;;;;;;38462:1721;;;38526:7;:5;:7::i;:::-;38518:15;;:4;:15;;;;:49;;;;;38560:7;:5;:7::i;:::-;38554:13;;:2;:13;;;;38518:49;:86;;;;;38602:1;38588:16;;:2;:16;;;;38518:86;:128;;;;;38639:6;38625:21;;:2;:21;;;;38518:128;:158;;;;;38668:8;;;;;;;;;;;38667:9;38518:158;38496:1676;;;38746:25;:31;38772:4;38746:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;38782:19;:23;38802:2;38782:23;;;;;;;;;;;;;;;;;;;;;;;;;38781:24;38746:59;38741:931;;;38874:5;;38864:6;:15;;38830:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;39052:9;;39035:13;39045:2;39035:9;:13::i;:::-;39026:6;:22;;;;:::i;:::-;:35;;38992:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38741:931;;;39209:25;:29;39235:2;39209:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39243:19;:25;39263:4;39243:25;;;;;;;;;;;;;;;;;;;;;;;;;39242:26;39209:59;39204:468;;;39337:5;;39327:6;:15;;39293:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39204:468;;;39464:19;:23;39484:2;39464:23;;;;;;;;;;;;;;;;;;;;;;;;;39459:213;;39572:9;;39555:13;39565:2;39555:9;:13::i;:::-;39546:6;:22;;;;:::i;:::-;:35;;39512:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39459:213;39204:468;38741:931;39696:20;;;;;;;;;;;39692:465;;;39757:9;;;;;;;;;;;39743:24;;:2;:24;;;;:50;;;;;39785:7;;;;;;;;;;;39771:22;;:2;:22;;;;39743:50;39739:401;;;39898:12;39856:28;:39;39885:9;39856:39;;;;;;;;;;;;;;;;:54;39820:219;;;;;;;;;;;;:::i;:::-;;;;;;;;;40106:12;40064:28;:39;40093:9;40064:39;;;;;;;;;;;;;;;:54;;;;39739:401;39692:465;38496:1676;38462:1721;40195:28;40226:24;40244:4;40226:9;:24::i;:::-;40195:55;;40261:12;40300:16;;40276:20;:40;;40261:55;;40347:7;:39;;;;;40371:15;;;;;;;;;;;40347:39;:65;;;;;40404:8;;;;;;;;;;;40403:9;40347:65;:114;;;;;40430:25;:31;40456:4;40430:31;;;;;;;;;;;;;;;;;;;;;;;;;40429:32;40347:114;:155;;;;;40479:17;:23;40497:4;40479:23;;;;;;;;;;;;;;;;;;;;;;;;;40478:24;40347:155;:194;;;;;40520:17;:21;40538:2;40520:21;;;;;;;;;;;;;;;;;;;;;;;;;40519:22;40347:194;40329:328;;;40579:4;40568:8;;:15;;;;;;;;;;;;;;;;;;40598:16;40607:6;40598:8;:16::i;:::-;40640:5;40629:8;;:16;;;;;;;;;;;;;;;;;;40329:328;40669:12;40685:8;;;;;;;;;;;40684:9;40669:24;;40784:7;40780:481;;;40836:25;:29;40862:2;40836:29;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;40879:1;40869:7;;:11;40836:44;40832:282;;;40908:28;40932:3;40908:19;40919:7;;40908:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;40901:35;;40832:282;;;40998:25;:31;41024:4;40998:31;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41042:1;41033:6;;:10;40998:45;40994:120;;;41071:27;41094:3;41071:18;41082:6;;41071;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;41064:34;;40994:120;40832:282;41141:1;41134:4;:8;41130:91;;;41163:42;41179:4;41193;41200;41163:15;:42::i;:::-;41130:91;41245:4;41235:14;;;;;:::i;:::-;;;40780:481;41273:33;41289:4;41295:2;41299:6;41273:15;:33::i;:::-;38161:3153;;;;38048:3266;;;;:::o;23438:191::-;23512:16;23531:6;;;;;;;;;;;23512:25;;23557:8;23548:6;;:17;;;;;;;;;;;;;;;;;;23612:8;23581:40;;23602:8;23581:40;;;;;;;;;;;;23501:128;23438:191;:::o;3808:98::-;3866:7;3897:1;3893;:5;;;;:::i;:::-;3886:12;;3808:98;;;;:::o;4207:::-;4265:7;4296:1;4292;:5;;;;:::i;:::-;4285:12;;4207:98;;;;:::o;33758:152::-;33858:5;33824:25;:31;33850:4;33824:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33896:5;33879:23;;33890:4;33879:23;;;;;;;;;;;;33758:152;;:::o;3451:98::-;3509:7;3540:1;3536;:5;;;;:::i;:::-;3529:12;;3451:98;;;;:::o;17036:770::-;17194:1;17176:20;;:6;:20;;;17168:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17278:1;17257:23;;:9;:23;;;17249:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17333:47;17354:6;17362:9;17373:6;17333:20;:47::i;:::-;17393:21;17417:9;:17;17427:6;17417:17;;;;;;;;;;;;;;;;17393:41;;17484:6;17467:13;:23;;17445:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17628:6;17612:13;:22;17592:9;:17;17602:6;17592:17;;;;;;;;;;;;;;;:42;;;;17680:6;17656:9;:20;17666:9;17656:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17721:9;17704:35;;17713:6;17704:35;;;17732:6;17704:35;;;;;;:::i;:::-;;;;;;;;17752:46;17772:6;17780:9;17791:6;17752:19;:46::i;:::-;17157:649;17036:770;;;:::o;43136:723::-;43191:12;43214:28;43245:24;43263:4;43245:9;:24::i;:::-;43214:55;;43311:1;43287:20;:25;43283:54;;43329:7;;;;43283:54;43368:13;;43353:12;:28;43349:77;;;43413:1;43398:12;:16;;;;43349:77;43459:1;43444:12;;:16;43436:25;;;;;;43472:19;43518:16;;43495:20;:39;43494:82;;43556:20;43494:82;;;43538:16;;43494:82;43472:104;;43587:16;43616:11;43607:6;:20;43606:45;;43645:6;43606:45;;;43631:11;43606:45;43587:64;;43662:26;43679:8;43662:16;:26::i;:::-;43699:12;;:14;;;;;;;;;:::i;:::-;;;;;;43740:12;43724:13;:28;;;;43795:15;;;;;;;;;;;43787:29;;43825:21;43787:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43773:78;;;;;43180:679;;;;43136:723;;:::o;20834:125::-;;;;:::o;21563:124::-;;;;:::o;41322:571::-;41448:21;41486:1;41472:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41448:40;;41517:4;41499;41504:1;41499:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41543:9;;;;;;;;;;;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41533:4;41538:1;41533:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;41572:56;41589:4;41604:9;;;;;;;;;;;41616:11;41572:8;:56::i;:::-;41667:9;;;;;;;;;;;:60;;;41742:11;41768:1;41812:4;41839;41859:15;41667:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41377:516;41322:571;:::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;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:116::-;3868:21;3883:5;3868:21;:::i;:::-;3861:5;3858:32;3848:60;;3904:1;3901;3894:12;3848:60;3798:116;:::o;3920:133::-;3963:5;4001:6;3988:20;3979:29;;4017:30;4041:5;4017:30;:::i;:::-;3920:133;;;;:::o;4059:468::-;4124:6;4132;4181:2;4169:9;4160:7;4156:23;4152:32;4149:119;;;4187:79;;:::i;:::-;4149:119;4307:1;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4278:117;4434:2;4460:50;4502:7;4493:6;4482:9;4478:22;4460:50;:::i;:::-;4450:60;;4405:115;4059:468;;;;;:::o;4533:619::-;4610:6;4618;4626;4675:2;4663:9;4654:7;4650:23;4646:32;4643:119;;;4681:79;;:::i;:::-;4643:119;4801:1;4826:53;4871:7;4862:6;4851:9;4847:22;4826:53;:::i;:::-;4816:63;;4772:117;4928:2;4954:53;4999:7;4990:6;4979:9;4975:22;4954:53;:::i;:::-;4944:63;;4899:118;5056:2;5082:53;5127:7;5118:6;5107:9;5103:22;5082:53;:::i;:::-;5072:63;;5027:118;4533:619;;;;;:::o;5158:332::-;5279:4;5317:2;5306:9;5302:18;5294:26;;5330:71;5398:1;5387:9;5383:17;5374:6;5330:71;:::i;:::-;5411:72;5479:2;5468:9;5464:18;5455:6;5411:72;:::i;:::-;5158:332;;;;;:::o;5496:86::-;5531:7;5571:4;5564:5;5560:16;5549:27;;5496:86;;;:::o;5588:112::-;5671:22;5687:5;5671:22;:::i;:::-;5666:3;5659:35;5588:112;;:::o;5706:214::-;5795:4;5833:2;5822:9;5818:18;5810:26;;5846:67;5910:1;5899:9;5895:17;5886:6;5846:67;:::i;:::-;5706:214;;;;:::o;5926:474::-;5994:6;6002;6051:2;6039:9;6030:7;6026:23;6022:32;6019:119;;;6057:79;;:::i;:::-;6019:119;6177:1;6202:53;6247:7;6238:6;6227:9;6223:22;6202:53;:::i;:::-;6192:63;;6148:117;6304:2;6330:53;6375:7;6366:6;6355:9;6351:22;6330:53;:::i;:::-;6320:63;;6275:118;5926:474;;;;;:::o;6406:613::-;6480:6;6488;6496;6545:2;6533:9;6524:7;6520:23;6516:32;6513:119;;;6551:79;;:::i;:::-;6513:119;6671:1;6696:50;6738:7;6729:6;6718:9;6714:22;6696:50;:::i;:::-;6686:60;;6642:114;6795:2;6821:53;6866:7;6857:6;6846:9;6842:22;6821:53;:::i;:::-;6811:63;;6766:118;6923:2;6949:53;6994:7;6985:6;6974:9;6970:22;6949:53;:::i;:::-;6939:63;;6894:118;6406:613;;;;;:::o;7025:329::-;7084:6;7133:2;7121:9;7112:7;7108:23;7104:32;7101:119;;;7139:79;;:::i;:::-;7101:119;7259:1;7284:53;7329:7;7320:6;7309:9;7305:22;7284:53;:::i;:::-;7274:63;;7230:117;7025:329;;;;:::o;7360:430::-;7503:4;7541:2;7530:9;7526:18;7518:26;;7554:65;7616:1;7605:9;7601:17;7592:6;7554:65;:::i;:::-;7629:72;7697:2;7686:9;7682:18;7673:6;7629:72;:::i;:::-;7711;7779:2;7768:9;7764:18;7755:6;7711:72;:::i;:::-;7360:430;;;;;;:::o;7796:329::-;7855:6;7904:2;7892:9;7883:7;7879:23;7875:32;7872:119;;;7910:79;;:::i;:::-;7872:119;8030:1;8055:53;8100:7;8091:6;8080:9;8076:22;8055:53;:::i;:::-;8045:63;;8001:117;7796:329;;;;:::o;8131:118::-;8218:24;8236:5;8218:24;:::i;:::-;8213:3;8206:37;8131:118;;:::o;8255:222::-;8348:4;8386:2;8375:9;8371:18;8363:26;;8399:71;8467:1;8456:9;8452:17;8443:6;8399:71;:::i;:::-;8255:222;;;;:::o;8483:474::-;8551:6;8559;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:53;8804:7;8795:6;8784:9;8780:22;8759:53;:::i;:::-;8749:63;;8705:117;8861:2;8887:53;8932:7;8923:6;8912:9;8908:22;8887:53;:::i;:::-;8877:63;;8832:118;8483:474;;;;;:::o;8963:406::-;9094:4;9132:2;9121:9;9117:18;9109:26;;9145:65;9207:1;9196:9;9192:17;9183:6;9145:65;:::i;:::-;9220:66;9282:2;9271:9;9267:18;9258:6;9220:66;:::i;:::-;9296;9358:2;9347:9;9343:18;9334:6;9296:66;:::i;:::-;8963:406;;;;;;:::o;9375:147::-;9476:11;9513:3;9498:18;;9375:147;;;;:::o;9528:114::-;;:::o;9648:398::-;9807:3;9828:83;9909:1;9904:3;9828:83;:::i;:::-;9821:90;;9920:93;10009:3;9920:93;:::i;:::-;10038:1;10033:3;10029:11;10022:18;;9648:398;;;:::o;10052:379::-;10236:3;10258:147;10401:3;10258:147;:::i;:::-;10251:154;;10422:3;10415:10;;10052:379;;;:::o;10437:180::-;10485:77;10482:1;10475:88;10582:4;10579:1;10572:15;10606:4;10603:1;10596:15;10623:320;10667:6;10704:1;10698:4;10694:12;10684:22;;10751:1;10745:4;10741:12;10772:18;10762:81;;10828:4;10820:6;10816:17;10806:27;;10762:81;10890:2;10882:6;10879:14;10859:18;10856:38;10853:84;;10909:18;;:::i;:::-;10853:84;10674:269;10623:320;;;:::o;10949:182::-;11089:34;11085:1;11077:6;11073:14;11066:58;10949:182;:::o;11137:366::-;11279:3;11300:67;11364:2;11359:3;11300:67;:::i;:::-;11293:74;;11376:93;11465:3;11376:93;:::i;:::-;11494:2;11489:3;11485:12;11478:19;;11137:366;;;:::o;11509:419::-;11675:4;11713:2;11702:9;11698:18;11690:26;;11762:9;11756:4;11752:20;11748:1;11737:9;11733:17;11726:47;11790:131;11916:4;11790:131;:::i;:::-;11782:139;;11509:419;;;:::o;11934:227::-;12074:34;12070:1;12062:6;12058:14;12051:58;12143:10;12138:2;12130:6;12126:15;12119:35;11934:227;:::o;12167:366::-;12309:3;12330:67;12394:2;12389:3;12330:67;:::i;:::-;12323:74;;12406:93;12495:3;12406:93;:::i;:::-;12524:2;12519:3;12515:12;12508:19;;12167:366;;;:::o;12539:419::-;12705:4;12743:2;12732:9;12728:18;12720:26;;12792:9;12786:4;12782:20;12778:1;12767:9;12763:17;12756:47;12820:131;12946:4;12820:131;:::i;:::-;12812:139;;12539:419;;;:::o;12964:180::-;13012:77;13009:1;13002:88;13109:4;13106:1;13099:15;13133:4;13130:1;13123:15;13150:191;13190:3;13209:20;13227:1;13209:20;:::i;:::-;13204:25;;13243:20;13261:1;13243:20;:::i;:::-;13238:25;;13286:1;13283;13279:9;13272:16;;13307:3;13304:1;13301:10;13298:36;;;13314:18;;:::i;:::-;13298:36;13150:191;;;;:::o;13347:162::-;13487:14;13483:1;13475:6;13471:14;13464:38;13347:162;:::o;13515:366::-;13657:3;13678:67;13742:2;13737:3;13678:67;:::i;:::-;13671:74;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13515:366;;;:::o;13887:419::-;14053:4;14091:2;14080:9;14076:18;14068:26;;14140:9;14134:4;14130:20;14126:1;14115:9;14111:17;14104:47;14168:131;14294:4;14168:131;:::i;:::-;14160:139;;13887:419;;;:::o;14312:239::-;14452:34;14448:1;14440:6;14436:14;14429:58;14521:22;14516:2;14508:6;14504:15;14497:47;14312:239;:::o;14557:366::-;14699:3;14720:67;14784:2;14779:3;14720:67;:::i;:::-;14713:74;;14796:93;14885:3;14796:93;:::i;:::-;14914:2;14909:3;14905:12;14898:19;;14557:366;;;:::o;14929:419::-;15095:4;15133:2;15122:9;15118:18;15110:26;;15182:9;15176:4;15172:20;15168:1;15157:9;15153:17;15146:47;15210:131;15336:4;15210:131;:::i;:::-;15202:139;;14929:419;;;:::o;15354:229::-;15494:34;15490:1;15482:6;15478:14;15471:58;15563:12;15558:2;15550:6;15546:15;15539:37;15354:229;:::o;15589:366::-;15731:3;15752:67;15816:2;15811:3;15752:67;:::i;:::-;15745:74;;15828:93;15917:3;15828:93;:::i;:::-;15946:2;15941:3;15937:12;15930:19;;15589:366;;;:::o;15961:419::-;16127:4;16165:2;16154:9;16150:18;16142:26;;16214:9;16208:4;16204:20;16200:1;16189:9;16185:17;16178:47;16242:131;16368:4;16242:131;:::i;:::-;16234:139;;15961:419;;;:::o;16386:410::-;16426:7;16449:20;16467:1;16449:20;:::i;:::-;16444:25;;16483:20;16501:1;16483:20;:::i;:::-;16478:25;;16538:1;16535;16531:9;16560:30;16578:11;16560:30;:::i;:::-;16549:41;;16739:1;16730:7;16726:15;16723:1;16720:22;16700:1;16693:9;16673:83;16650:139;;16769:18;;:::i;:::-;16650:139;16434:362;16386:410;;;;:::o;16802:180::-;16850:77;16847:1;16840:88;16947:4;16944:1;16937:15;16971:4;16968:1;16961:15;16988:185;17028:1;17045:20;17063:1;17045:20;:::i;:::-;17040:25;;17079:20;17097:1;17079:20;:::i;:::-;17074:25;;17118:1;17108:35;;17123:18;;:::i;:::-;17108:35;17165:1;17162;17158:9;17153:14;;16988:185;;;;:::o;17179:182::-;17319:34;17315:1;17307:6;17303:14;17296:58;17179:182;:::o;17367:366::-;17509:3;17530:67;17594:2;17589:3;17530:67;:::i;:::-;17523:74;;17606:93;17695:3;17606:93;:::i;:::-;17724:2;17719:3;17715:12;17708:19;;17367:366;;;:::o;17739:419::-;17905:4;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17739:419;;;:::o;18164:143::-;18221:5;18252:6;18246:13;18237:22;;18268:33;18295:5;18268:33;:::i;:::-;18164:143;;;;:::o;18313:351::-;18383:6;18432:2;18420:9;18411:7;18407:23;18403:32;18400:119;;;18438:79;;:::i;:::-;18400:119;18558:1;18583:64;18639:7;18630:6;18619:9;18615:22;18583:64;:::i;:::-;18573:74;;18529:128;18313:351;;;;:::o;18670:332::-;18791:4;18829:2;18818:9;18814:18;18806:26;;18842:71;18910:1;18899:9;18895:17;18886:6;18842:71;:::i;:::-;18923:72;18991:2;18980:9;18976:18;18967:6;18923:72;:::i;:::-;18670:332;;;;;:::o;19008:137::-;19062:5;19093:6;19087:13;19078:22;;19109:30;19133:5;19109:30;:::i;:::-;19008:137;;;;:::o;19151:345::-;19218:6;19267:2;19255:9;19246:7;19242:23;19238:32;19235:119;;;19273:79;;:::i;:::-;19235:119;19393:1;19418:61;19471:7;19462:6;19451:9;19447:22;19418:61;:::i;:::-;19408:71;;19364:125;19151:345;;;;:::o;19502:224::-;19642:34;19638:1;19630:6;19626:14;19619:58;19711:7;19706:2;19698:6;19694:15;19687:32;19502:224;:::o;19732:366::-;19874:3;19895:67;19959:2;19954:3;19895:67;:::i;:::-;19888:74;;19971:93;20060:3;19971:93;:::i;:::-;20089:2;20084:3;20080:12;20073:19;;19732:366;;;:::o;20104:419::-;20270:4;20308:2;20297:9;20293:18;20285:26;;20357:9;20351:4;20347:20;20343:1;20332:9;20328:17;20321:47;20385:131;20511:4;20385:131;:::i;:::-;20377:139;;20104:419;;;:::o;20529:223::-;20669:34;20665:1;20657:6;20653:14;20646:58;20738:6;20733:2;20725:6;20721:15;20714:31;20529:223;:::o;20758:366::-;20900:3;20921:67;20985:2;20980:3;20921:67;:::i;:::-;20914:74;;20997:93;21086:3;20997:93;:::i;:::-;21115:2;21110:3;21106:12;21099:19;;20758:366;;;:::o;21130:419::-;21296:4;21334:2;21323:9;21319:18;21311:26;;21383:9;21377:4;21373:20;21369:1;21358:9;21354:17;21347:47;21411:131;21537:4;21411:131;:::i;:::-;21403:139;;21130:419;;;:::o;21555:173::-;21695:25;21691:1;21683:6;21679:14;21672:49;21555:173;:::o;21734:366::-;21876:3;21897:67;21961:2;21956:3;21897:67;:::i;:::-;21890:74;;21973:93;22062:3;21973:93;:::i;:::-;22091:2;22086:3;22082:12;22075:19;;21734:366;;;:::o;22106:419::-;22272:4;22310:2;22299:9;22295:18;22287:26;;22359:9;22353:4;22349:20;22345:1;22334:9;22330:17;22323:47;22387:131;22513:4;22387:131;:::i;:::-;22379:139;;22106:419;;;:::o;22531:244::-;22671:34;22667:1;22659:6;22655:14;22648:58;22740:27;22735:2;22727:6;22723:15;22716:52;22531:244;:::o;22781:366::-;22923:3;22944:67;23008:2;23003:3;22944:67;:::i;:::-;22937:74;;23020:93;23109:3;23020:93;:::i;:::-;23138:2;23133:3;23129:12;23122:19;;22781:366;;;:::o;23153:419::-;23319:4;23357:2;23346:9;23342:18;23334:26;;23406:9;23400:4;23396:20;23392:1;23381:9;23377:17;23370:47;23434:131;23560:4;23434:131;:::i;:::-;23426:139;;23153:419;;;:::o;23578:225::-;23718:34;23714:1;23706:6;23702:14;23695:58;23787:8;23782:2;23774:6;23770:15;23763:33;23578:225;:::o;23809:366::-;23951:3;23972:67;24036:2;24031:3;23972:67;:::i;:::-;23965:74;;24048:93;24137:3;24048:93;:::i;:::-;24166:2;24161:3;24157:12;24150:19;;23809:366;;;:::o;24181:419::-;24347:4;24385:2;24374:9;24370:18;24362:26;;24434:9;24428:4;24424:20;24420:1;24409:9;24405:17;24398:47;24462:131;24588:4;24462:131;:::i;:::-;24454:139;;24181:419;;;:::o;24606:173::-;24746:25;24742:1;24734:6;24730:14;24723:49;24606:173;:::o;24785:366::-;24927:3;24948:67;25012:2;25007:3;24948:67;:::i;:::-;24941:74;;25024:93;25113:3;25024:93;:::i;:::-;25142:2;25137:3;25133:12;25126:19;;24785:366;;;:::o;25157:419::-;25323:4;25361:2;25350:9;25346:18;25338:26;;25410:9;25404:4;25400:20;25396:1;25385:9;25381:17;25374:47;25438:131;25564:4;25438:131;:::i;:::-;25430:139;;25157:419;;;:::o;25582:143::-;25639:5;25670:6;25664:13;25655:22;;25686:33;25713:5;25686:33;:::i;:::-;25582:143;;;;:::o;25731:351::-;25801:6;25850:2;25838:9;25829:7;25825:23;25821:32;25818:119;;;25856:79;;:::i;:::-;25818:119;25976:1;26001:64;26057:7;26048:6;26037:9;26033:22;26001:64;:::i;:::-;25991:74;;25947:128;25731:351;;;;:::o;26088:332::-;26209:4;26247:2;26236:9;26232:18;26224:26;;26260:71;26328:1;26317:9;26313:17;26304:6;26260:71;:::i;:::-;26341:72;26409:2;26398:9;26394:18;26385:6;26341:72;:::i;:::-;26088:332;;;;;:::o;26426:85::-;26471:7;26500:5;26489:16;;26426:85;;;:::o;26517:60::-;26545:3;26566:5;26559:12;;26517:60;;;:::o;26583:158::-;26641:9;26674:61;26692:42;26701:32;26727:5;26701:32;:::i;:::-;26692:42;:::i;:::-;26674:61;:::i;:::-;26661:74;;26583:158;;;:::o;26747:147::-;26842:45;26881:5;26842:45;:::i;:::-;26837:3;26830:58;26747:147;;:::o;26900:807::-;27149:4;27187:3;27176:9;27172:19;27164:27;;27201:71;27269:1;27258:9;27254:17;27245:6;27201:71;:::i;:::-;27282:72;27350:2;27339:9;27335:18;27326:6;27282:72;:::i;:::-;27364:80;27440:2;27429:9;27425:18;27416:6;27364:80;:::i;:::-;27454;27530:2;27519:9;27515:18;27506:6;27454:80;:::i;:::-;27544:73;27612:3;27601:9;27597:19;27588:6;27544:73;:::i;:::-;27627;27695:3;27684:9;27680:19;27671:6;27627:73;:::i;:::-;26900:807;;;;;;;;;:::o;27713:663::-;27801:6;27809;27817;27866:2;27854:9;27845:7;27841:23;27837:32;27834:119;;;27872:79;;:::i;:::-;27834:119;27992:1;28017:64;28073:7;28064:6;28053:9;28049:22;28017:64;:::i;:::-;28007:74;;27963:128;28130:2;28156:64;28212:7;28203:6;28192:9;28188:22;28156:64;:::i;:::-;28146:74;;28101:129;28269:2;28295:64;28351:7;28342:6;28331:9;28327:22;28295:64;:::i;:::-;28285:74;;28240:129;27713:663;;;;;:::o;28382:223::-;28522:34;28518:1;28510:6;28506:14;28499:58;28591:6;28586:2;28578:6;28574:15;28567:31;28382:223;:::o;28611:366::-;28753:3;28774:67;28838:2;28833:3;28774:67;:::i;:::-;28767:74;;28850:93;28939:3;28850:93;:::i;:::-;28968:2;28963:3;28959:12;28952:19;;28611:366;;;:::o;28983:419::-;29149:4;29187:2;29176:9;29172:18;29164:26;;29236:9;29230:4;29226:20;29222:1;29211:9;29207:17;29200:47;29264:131;29390:4;29264:131;:::i;:::-;29256:139;;28983:419;;;:::o;29408:221::-;29548:34;29544:1;29536:6;29532:14;29525:58;29617:4;29612:2;29604:6;29600:15;29593:29;29408:221;:::o;29635:366::-;29777:3;29798:67;29862:2;29857:3;29798:67;:::i;:::-;29791:74;;29874:93;29963:3;29874:93;:::i;:::-;29992:2;29987:3;29983:12;29976:19;;29635:366;;;:::o;30007:419::-;30173:4;30211:2;30200:9;30196:18;30188:26;;30260:9;30254:4;30250:20;30246:1;30235:9;30231:17;30224:47;30288:131;30414:4;30288:131;:::i;:::-;30280:139;;30007:419;;;:::o;30432:224::-;30572:34;30568:1;30560:6;30556:14;30549:58;30641:7;30636:2;30628:6;30624:15;30617:32;30432:224;:::o;30662:366::-;30804:3;30825:67;30889:2;30884:3;30825:67;:::i;:::-;30818:74;;30901:93;30990:3;30901:93;:::i;:::-;31019:2;31014:3;31010:12;31003:19;;30662:366;;;:::o;31034:419::-;31200:4;31238:2;31227:9;31223:18;31215:26;;31287:9;31281:4;31277:20;31273:1;31262:9;31258:17;31251:47;31315:131;31441:4;31315:131;:::i;:::-;31307:139;;31034:419;;;:::o;31459:222::-;31599:34;31595:1;31587:6;31583:14;31576:58;31668:5;31663:2;31655:6;31651:15;31644:30;31459:222;:::o;31687:366::-;31829:3;31850:67;31914:2;31909:3;31850:67;:::i;:::-;31843:74;;31926:93;32015:3;31926:93;:::i;:::-;32044:2;32039:3;32035:12;32028:19;;31687:366;;;:::o;32059:419::-;32225:4;32263:2;32252:9;32248:18;32240:26;;32312:9;32306:4;32302:20;32298:1;32287:9;32283:17;32276:47;32340:131;32466:4;32340:131;:::i;:::-;32332:139;;32059:419;;;:::o;32484:225::-;32624:34;32620:1;32612:6;32608:14;32601:58;32693:8;32688:2;32680:6;32676:15;32669:33;32484:225;:::o;32715:366::-;32857:3;32878:67;32942:2;32937:3;32878:67;:::i;:::-;32871:74;;32954:93;33043:3;32954:93;:::i;:::-;33072:2;33067:3;33063:12;33056:19;;32715:366;;;:::o;33087:419::-;33253:4;33291:2;33280:9;33276:18;33268:26;;33340:9;33334:4;33330:20;33326:1;33315:9;33311:17;33304:47;33368:131;33494:4;33368:131;:::i;:::-;33360:139;;33087:419;;;:::o;33512:169::-;33652:21;33648:1;33640:6;33636:14;33629:45;33512:169;:::o;33687:366::-;33829:3;33850:67;33914:2;33909:3;33850:67;:::i;:::-;33843:74;;33926:93;34015:3;33926:93;:::i;:::-;34044:2;34039:3;34035:12;34028:19;;33687:366;;;:::o;34059:419::-;34225:4;34263:2;34252:9;34248:18;34240:26;;34312:9;34306:4;34302:20;34298:1;34287:9;34283:17;34276:47;34340:131;34466:4;34340:131;:::i;:::-;34332:139;;34059:419;;;:::o;34484:226::-;34624:34;34620:1;34612:6;34608:14;34601:58;34693:9;34688:2;34680:6;34676:15;34669:34;34484:226;:::o;34716:366::-;34858:3;34879:67;34943:2;34938:3;34879:67;:::i;:::-;34872:74;;34955:93;35044:3;34955:93;:::i;:::-;35073:2;35068:3;35064:12;35057:19;;34716:366;;;:::o;35088:419::-;35254:4;35292:2;35281:9;35277:18;35269:26;;35341:9;35335:4;35331:20;35327:1;35316:9;35312:17;35305:47;35369:131;35495:4;35369:131;:::i;:::-;35361:139;;35088:419;;;:::o;35513:297::-;35653:34;35649:1;35641:6;35637:14;35630:58;35722:34;35717:2;35709:6;35705:15;35698:59;35791:11;35786:2;35778:6;35774:15;35767:36;35513:297;:::o;35816:366::-;35958:3;35979:67;36043:2;36038:3;35979:67;:::i;:::-;35972:74;;36055:93;36144:3;36055:93;:::i;:::-;36173:2;36168:3;36164:12;36157:19;;35816:366;;;:::o;36188:419::-;36354:4;36392:2;36381:9;36377:18;36369:26;;36441:9;36435:4;36431:20;36427:1;36416:9;36412:17;36405:47;36469:131;36595:4;36469:131;:::i;:::-;36461:139;;36188:419;;;:::o;36613:194::-;36653:4;36673:20;36691:1;36673:20;:::i;:::-;36668:25;;36707:20;36725:1;36707:20;:::i;:::-;36702:25;;36751:1;36748;36744:9;36736:17;;36775:1;36769:4;36766:11;36763:37;;;36780:18;;:::i;:::-;36763:37;36613:194;;;;:::o;36813:225::-;36953:34;36949:1;36941:6;36937:14;36930:58;37022:8;37017:2;37009:6;37005:15;36998:33;36813:225;:::o;37044:366::-;37186:3;37207:67;37271:2;37266:3;37207:67;:::i;:::-;37200:74;;37283:93;37372:3;37283:93;:::i;:::-;37401:2;37396:3;37392:12;37385:19;;37044:366;;;:::o;37416:419::-;37582:4;37620:2;37609:9;37605:18;37597:26;;37669:9;37663:4;37659:20;37655:1;37644:9;37640:17;37633:47;37697:131;37823:4;37697:131;:::i;:::-;37689:139;;37416:419;;;:::o;37841:233::-;37880:3;37903:24;37921:5;37903:24;:::i;:::-;37894:33;;37949:66;37942:5;37939:77;37936:103;;38019:18;;:::i;:::-;37936:103;38066:1;38059:5;38055:13;38048:20;;37841:233;;;:::o;38080:180::-;38128:77;38125:1;38118:88;38225:4;38222:1;38215:15;38249:4;38246:1;38239:15;38266:180;38314:77;38311:1;38304:88;38411:4;38408:1;38401:15;38435:4;38432:1;38425:15;38452:114;38519:6;38553:5;38547:12;38537:22;;38452:114;;;:::o;38572:184::-;38671:11;38705:6;38700:3;38693:19;38745:4;38740:3;38736:14;38721:29;;38572:184;;;;:::o;38762:132::-;38829:4;38852:3;38844:11;;38882:4;38877:3;38873:14;38865:22;;38762:132;;;:::o;38900:108::-;38977:24;38995:5;38977:24;:::i;:::-;38972:3;38965:37;38900:108;;:::o;39014:179::-;39083:10;39104:46;39146:3;39138:6;39104:46;:::i;:::-;39182:4;39177:3;39173:14;39159:28;;39014:179;;;;:::o;39199:113::-;39269:4;39301;39296:3;39292:14;39284:22;;39199:113;;;:::o;39348:732::-;39467:3;39496:54;39544:5;39496:54;:::i;:::-;39566:86;39645:6;39640:3;39566:86;:::i;:::-;39559:93;;39676:56;39726:5;39676:56;:::i;:::-;39755:7;39786:1;39771:284;39796:6;39793:1;39790:13;39771:284;;;39872:6;39866:13;39899:63;39958:3;39943:13;39899:63;:::i;:::-;39892:70;;39985:60;40038:6;39985:60;:::i;:::-;39975:70;;39831:224;39818:1;39815;39811:9;39806:14;;39771:284;;;39775:14;40071:3;40064:10;;39472:608;;;39348:732;;;;:::o;40086:831::-;40349:4;40387:3;40376:9;40372:19;40364:27;;40401:71;40469:1;40458:9;40454:17;40445:6;40401:71;:::i;:::-;40482:80;40558:2;40547:9;40543:18;40534:6;40482:80;:::i;:::-;40609:9;40603:4;40599:20;40594:2;40583:9;40579:18;40572:48;40637:108;40740:4;40731:6;40637:108;:::i;:::-;40629:116;;40755:72;40823:2;40812:9;40808:18;40799:6;40755:72;:::i;:::-;40837:73;40905:3;40894:9;40890:19;40881:6;40837:73;:::i;:::-;40086:831;;;;;;;;:::o
Swarm Source
ipfs://788fdfac683854c5e4b4df0941075cda49c152f0a023b56a0a2e443cad17bcfd
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.