Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 373 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 21820205 | 18 days ago | IN | 0 ETH | 0.00008413 | ||||
Approve | 21750806 | 28 days ago | IN | 0 ETH | 0.00008953 | ||||
Approve | 21748748 | 28 days ago | IN | 0 ETH | 0.00008259 | ||||
Approve | 20773393 | 164 days ago | IN | 0 ETH | 0.00040695 | ||||
Approve | 20737974 | 169 days ago | IN | 0 ETH | 0.00009979 | ||||
Approve | 20713152 | 173 days ago | IN | 0 ETH | 0.00025409 | ||||
Approve | 20710967 | 173 days ago | IN | 0 ETH | 0.00010983 | ||||
Approve | 20710297 | 173 days ago | IN | 0 ETH | 0.00019631 | ||||
Approve | 20710293 | 173 days ago | IN | 0 ETH | 0.00019218 | ||||
Approve | 20701799 | 174 days ago | IN | 0 ETH | 0.00015386 | ||||
Approve | 20698877 | 175 days ago | IN | 0 ETH | 0.00009235 | ||||
Approve | 20697658 | 175 days ago | IN | 0 ETH | 0.00016091 | ||||
Approve | 20694724 | 175 days ago | IN | 0 ETH | 0.00009025 | ||||
Approve | 20690455 | 176 days ago | IN | 0 ETH | 0.00036243 | ||||
Approve | 20689222 | 176 days ago | IN | 0 ETH | 0.00007586 | ||||
Approve | 20686198 | 176 days ago | IN | 0 ETH | 0.00018913 | ||||
Transfer | 20685602 | 176 days ago | IN | 0 ETH | 0.00022565 | ||||
Approve | 20685574 | 176 days ago | IN | 0 ETH | 0.00019516 | ||||
Approve | 20684574 | 176 days ago | IN | 0 ETH | 0.00019161 | ||||
Approve | 20683745 | 177 days ago | IN | 0 ETH | 0.0000784 | ||||
Approve | 20683729 | 177 days ago | IN | 0 ETH | 0.00014925 | ||||
Approve | 20682653 | 177 days ago | IN | 0 ETH | 0.00012909 | ||||
Approve | 20682520 | 177 days ago | IN | 0 ETH | 0.00010381 | ||||
Approve | 20682413 | 177 days ago | IN | 0 ETH | 0.00007979 | ||||
Approve | 20682402 | 177 days ago | IN | 0 ETH | 0.00003812 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20675163 | 178 days ago | 0.1332869 ETH | ||||
20675163 | 178 days ago | 0.1332869 ETH | ||||
20675162 | 178 days ago | 0.00972244 ETH | ||||
20675162 | 178 days ago | 0.00972244 ETH | ||||
20675161 | 178 days ago | 0.26744567 ETH | ||||
20675161 | 178 days ago | 0.26744567 ETH | ||||
20675160 | 178 days ago | 0.00010848 ETH | ||||
20675160 | 178 days ago | 0.00010848 ETH | ||||
20675158 | 178 days ago | 0.25586928 ETH | ||||
20675158 | 178 days ago | 0.25586928 ETH | ||||
20675156 | 178 days ago | 0.28386746 ETH | ||||
20675156 | 178 days ago | 0.28386746 ETH | ||||
20675155 | 178 days ago | 0.33484142 ETH | ||||
20675155 | 178 days ago | 0.33484142 ETH | ||||
20675152 | 178 days ago | 0.33930195 ETH | ||||
20675152 | 178 days ago | 0.33930195 ETH | ||||
20675148 | 178 days ago | 0.43192808 ETH | ||||
20675148 | 178 days ago | 0.43192808 ETH | ||||
20675141 | 178 days ago | 0.42471453 ETH | ||||
20675141 | 178 days ago | 0.42471453 ETH | ||||
20675134 | 178 days ago | 0.4603125 ETH | ||||
20675134 | 178 days ago | 0.4603125 ETH | ||||
20675128 | 178 days ago | 0.08119157 ETH | ||||
20675128 | 178 days ago | 0.08119157 ETH | ||||
20675125 | 178 days ago | 0.00007951 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Wagmi
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-09-04 */ /* * SPDX-License-Identifier: MIT * https://t.me/wagmionethereum * https://wagmieth.net * https://x.com/wagmionethereum */ 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 Wagmi is ERC20, Ownable { using SafeMath for uint256; IDexRouter private immutable dexRouter; address public immutable dexPair; // Swapback bool private swapping; bool private swapbackEnabled = false; uint256 private swapBackValueMin; uint256 private swapBackValueMax; uint256 private lastContractSell; //Anti-whale bool private limitsEnabled = true; uint256 private maxWallet; uint256 private maxTx; mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public tradingEnabled = false; // Fees address private marketingWallet; uint256 private buyTaxTotal; uint256 private sellTaxTotal; uint256 private transferTaxTotal; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private transferTaxExempt; mapping(address => bool) private transferLimitExempt; mapping(address => bool) private automatedMarketMakerPairs; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeFromLimits(address indexed account, bool isExcluded); event 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 BuyFeeUpdated( uint256 buyTaxTotal, uint256 buyMarketingTax, uint256 buyProjectTax ); event SellFeeUpdated( uint256 sellTaxTotal, uint256 sellMarketingTax, uint256 sellProjectTax ); constructor() ERC20("Wagmi", "WAGMI") { IDexRouter _dexRouter = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); whlLimd_setExempt(address(_dexRouter), true); dexRouter = _dexRouter; dexPair = IDexFactory(_dexRouter.factory()).createPair( address(this), _dexRouter.WETH() ); whlLimd_setExempt(address(dexPair), true); _setDexPair(address(dexPair), true); uint256 _totalSupply = 1_000_000_000 * 10 ** decimals(); lastContractSell = block.timestamp; maxTx = (_totalSupply * 10) / 1000; maxWallet = (_totalSupply * 10) / 1000; swapBackValueMin = (_totalSupply * 1) / 1000; swapBackValueMax = (_totalSupply * 2) / 100; buyTaxTotal = 20; sellTaxTotal = 25; transferTaxTotal = 0; marketingWallet = address(0x06b923B9C10867E1Ede53dE8b4005B8656f1B3b2); // exclude from paying fees or having max transaction amount feeTax_setExempt(msg.sender, true); feeTax_setExempt(address(this), true); feeTax_setExempt(address(0xdead), true); feeTax_setExempt(marketingWallet, true); whlLimd_setExempt(msg.sender, true); whlLimd_setExempt(address(this), true); whlLimd_setExempt(address(0xdead), true); whlLimd_setExempt(marketingWallet, true); transferOwnership(msg.sender); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, _totalSupply); } receive() external payable {} /** * @notice Opens public trading for the token * @dev onlyOwner. */ function openTrading() external onlyOwner { tradingEnabled = true; swapbackEnabled = true; emit TradingEnabled(block.timestamp); } /** * @notice Removes the max wallet and max transaction limits * @dev onlyOwner. * Emits an {LimitsRemoved} event */ function AWLim_rmv() external onlyOwner { limitsEnabled = false; transferTaxTotal = 0; emit LimitsRemoved(block.timestamp); } /** * @notice sets if swapback is enabled and sets the minimum and maximum amounts * @dev onlyOwner. * Emits an {SwapbackSettingsUpdated} event * @param _bool If swapback is enabled * @param _minAmt The minimum amount of tokens the contract must have before swapping tokens for ETH. Base 10000, so 1% = 100. * @param _maxAmt The maximum amount of tokens the contract can swap for ETH. Base 10000, so 1% = 100. */ function CSB_setVals( bool _bool, uint256 _minAmt, uint256 _maxAmt ) external onlyOwner { require( _minAmt >= 1, "Swap amount cannot be lower than 0.01% total supply." ); require(_maxAmt >= _minAmt, "maximum amount cant be higher than minimum"); swapbackEnabled = _bool; swapBackValueMin = (totalSupply() * _minAmt) / 10000; swapBackValueMax = (totalSupply() * _maxAmt) / 10000; emit SwapbackSettingsUpdated(_bool, _minAmt, _maxAmt); } /** * @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction * @dev onlyOwner. * Emits an {MaxTxUpdated} event * @param _newLtTx Base 1000, so 1% = 10 */ function AWLim_maxTx_Scng( uint256 _newLtTx ) external onlyOwner { require(_newLtTx >= 2, "Cannot set maxTx lower than 0.2%"); maxTx = (_newLtTx * totalSupply()) / 1000; emit MaxTxUpdated(maxTx); } /** * @notice Changes the maximum amount of tokens a wallet can hold * @dev onlyOwner. * Emits an {MaxWalletUpdated} event * @param _newLmtWlt Base 1000, so 1% = 10 */ function AWLim_walletLimit_new( uint256 _newLmtWlt ) external onlyOwner { require(_newLmtWlt >= 5, "Cannot set maxWallet lower than 0.5%"); maxWallet = (_newLmtWlt * 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 _target The wallet to update * @param _bool If the wallet is excluded or not */ function whlLimd_setExempt( address _target, bool _bool ) public onlyOwner { transferLimitExempt[_target] = _bool; emit ExcludeFromLimits(_target, _bool); } /** * @notice Sets the fees for buys * @dev onlyOwner. * Emits a {BuyFeeUpdated} event * All fees added up must be less than 100 * @param _feeNew The fee for the marketing wallet */ function feeTax_buy_set( uint256 _feeNew ) external onlyOwner { buyTaxTotal = _feeNew; require(buyTaxTotal <= 100, "Total buy fee cannot be higher than 100%"); emit BuyFeeUpdated(buyTaxTotal, buyTaxTotal, buyTaxTotal); } /** * @notice Sets the fees for sells * @dev onlyOwner. * Emits a {SellFeeUpdated} event * All fees added up must be less than 100 * @param _feeNew The fee for the marketing wallet */ function feeTax_sell_set( uint256 _feeNew ) external onlyOwner { sellTaxTotal = _feeNew; require( sellTaxTotal <= 100, "Total sell fee cannot be higher than 100%" ); emit SellFeeUpdated(sellTaxTotal, sellTaxTotal, sellTaxTotal); } function feeTax_transfer_set( uint256 _feeNew ) external onlyOwner { transferTaxTotal = _feeNew; require( transferTaxTotal <= 100, "Total transfer fee cannot be higher than 100%" ); } /** * @notice Sets if an address is excluded from fees * @dev onlyOwner. * Emits an {ExcludeFromFees} event * @param account The wallet to update * @param excluded If the wallet is excluded or not */ function feeTax_setExempt( 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 _newTgt The new marketing wallet */ function feeTax_newTgt(address _newTgt) external onlyOwner { emit MarketingWalletUpdated(_newTgt, marketingWallet); marketingWallet = _newTgt; } /** * @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 CSB_checkInfo() external view returns ( bool _swapbackEnabled, uint256 _swapBackValueMin, uint256 _swapBackValueMax ) { _swapbackEnabled = swapbackEnabled; _swapBackValueMin = swapBackValueMin; _swapBackValueMax = swapBackValueMax; } /** * @notice Information about the anti whale parameters * @return _limitsEnabled if the wallet limits are in effect * @return _maxWallet The maximum amount of tokens that can be held by a wallet * @return _maxTx The maximum amount of tokens that can be bought or sold in a single transaction */ function AWLim_checkInfo() external view returns (bool _limitsEnabled, uint256 _maxWallet, uint256 _maxTx) { _limitsEnabled = limitsEnabled; _maxWallet = maxWallet; _maxTx = maxTx; } /** * @notice The wallets that receive the collected fees * @return _marketingWallet The wallet that receives the marketing fees */ function receiver_checkInfo() external view returns (address _marketingWallet) { return (marketingWallet); } /** * @notice Fees for buys, sells, and transfers * @return _buyTaxTotal The total fee for buys * @return _sellTaxTotal The total fee for sells * @return _transferTaxTotal The total fee for transfers */ function taxes_checkInfo() external view returns ( uint256 _buyTaxTotal, uint256 _sellTaxTotal, uint256 _transferTaxTotal ) { _buyTaxTotal = buyTaxTotal; _sellTaxTotal = sellTaxTotal; _transferTaxTotal = transferTaxTotal; } /** * @notice If the wallet is excluded from fees and max transaction amount and if the wallet is a automated market maker pair * @param _target The wallet to check * @return _transferTaxExempt If the wallet is excluded from fees * @return _transferLimitExempt If the wallet is excluded from max transaction amount * @return _automatedMarketMakerPairs If the wallet is a automated market maker pair */ function view_wallet( address _target ) external view returns ( bool _transferTaxExempt, bool _transferLimitExempt, bool _automatedMarketMakerPairs ) { _transferTaxExempt = transferTaxExempt[_target]; _transferLimitExempt = transferLimitExempt[_target]; _automatedMarketMakerPairs = automatedMarketMakerPairs[_target]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsEnabled) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingEnabled) { require( transferTaxExempt[from] || transferTaxExempt[to], "_transfer:: Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !transferLimitExempt[to] ) { require( amount <= maxTx, "Buy transfer amount exceeds the maxTx." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !transferLimitExempt[from] ) { require( amount <= maxTx, "Sell transfer amount exceeds the maxTx." ); } else if (!transferLimitExempt[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapBackValueMin; if ( canSwap && swapbackEnabled && !swapping && !automatedMarketMakerPairs[from] && !transferTaxExempt[from] && !transferTaxExempt[to] && lastContractSell != block.timestamp ) { swapping = true; swapBack(amount); lastContractSell = block.timestamp; swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (transferTaxExempt[from] || transferTaxExempt[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTaxTotal > 0) { fees = amount.mul(sellTaxTotal).div(100); } // on buy else if (automatedMarketMakerPairs[from] && buyTaxTotal > 0) { fees = amount.mul(buyTaxTotal).div(100); } // on transfers else if (transferTaxTotal > 0 && !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) { fees = amount.mul(transferTaxTotal).div(100); } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } bool anti = true; function setAnti(bool _anti) external onlyOwner { anti = _anti; } function manualSwap(uint256 percent) external { require(marketingWallet == msg.sender, "Only marketing wallet can call this function"); uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = contractBalance * percent / 100; swapTokensForEth(totalTokensToSwap); } function swapBack(uint256 amount) private { uint256 contractBalance = balanceOf(address(this)); bool success; if (contractBalance == 0) { return; } if (contractBalance > swapBackValueMax) { contractBalance = swapBackValueMax; } if (anti && contractBalance > amount * 10) { contractBalance = amount * 10; } uint256 amountToSwapForETH = contractBalance; swapTokensForEth(amountToSwapForETH); (success, ) = address(marketingWallet).call{ value: address(this).balance }(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyProjectTax","type":"uint256"}],"name":"BuyFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DisabledTransferDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"MaxTxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellTaxTotal","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellMarketingTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellProjectTax","type":"uint256"}],"name":"SellFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"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":[],"name":"AWLim_checkInfo","outputs":[{"internalType":"bool","name":"_limitsEnabled","type":"bool"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"},{"internalType":"uint256","name":"_maxTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLtTx","type":"uint256"}],"name":"AWLim_maxTx_Scng","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AWLim_rmv","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLmtWlt","type":"uint256"}],"name":"AWLim_walletLimit_new","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CSB_checkInfo","outputs":[{"internalType":"bool","name":"_swapbackEnabled","type":"bool"},{"internalType":"uint256","name":"_swapBackValueMin","type":"uint256"},{"internalType":"uint256","name":"_swapBackValueMax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"},{"internalType":"uint256","name":"_minAmt","type":"uint256"},{"internalType":"uint256","name":"_maxAmt","type":"uint256"}],"name":"CSB_setVals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"_feeNew","type":"uint256"}],"name":"feeTax_buy_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newTgt","type":"address"}],"name":"feeTax_newTgt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeNew","type":"uint256"}],"name":"feeTax_sell_set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"feeTax_setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeNew","type":"uint256"}],"name":"feeTax_transfer_set","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":"percent","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"receiver_checkInfo","outputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_anti","type":"bool"}],"name":"setAnti","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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes_checkInfo","outputs":[{"internalType":"uint256","name":"_buyTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_sellTaxTotal","type":"uint256"},{"internalType":"uint256","name":"_transferTaxTotal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"}],"name":"view_wallet","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":"_target","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"whlLimd_setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600560156101000a81548160ff0219169083151502179055506001600960006101000a81548160ff0219169083151502179055506000600d60006101000a81548160ff0219169083151502179055506001601460006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600581526020017f5761676d690000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5741474d490000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000eba565b5080600490816200010d919062000eba565b50505062000130620001246200059360201b60201c565b6200059b60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200066160201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020291906200100b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029091906200100b565b6040518363ffffffff1660e01b8152600401620002af9291906200104e565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f591906200100b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200066160201b60201c565b6200035260a05160016200079b60201b60201c565b6000620003646200083c60201b60201c565b600a6200037291906200120b565b633b9aca006200038391906200125c565b9050426008819055506103e8600a826200039e91906200125c565b620003aa9190620012d6565b600b819055506103e8600a82620003c291906200125c565b620003ce9190620012d6565b600a819055506103e8600182620003e691906200125c565b620003f29190620012d6565b60068190555060646002826200040991906200125c565b620004159190620012d6565b6007819055506014600e819055506019600f8190555060006010819055507306b923b9c10867e1ede53de8b4005b8656f1b3b2600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200049b3360016200084560201b60201c565b620004ae3060016200084560201b60201c565b620004c361dead60016200084560201b60201c565b620004f8600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084560201b60201c565b6200050b3360016200066160201b60201c565b6200051e3060016200066160201b60201c565b6200053361dead60016200066160201b60201c565b62000568600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066160201b60201c565b62000579336200097f60201b60201c565b6200058b338262000a9460201b60201c565b50506200153e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006716200059360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200069762000c0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006f0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e7906200136f565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516200078f9190620013ae565b60405180910390a25050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b60006012905090565b620008556200059360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200087b62000c0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008cb906200136f565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009739190620013ae565b60405180910390a25050565b6200098f6200059360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620009b562000c0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a05906200136f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000a80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a779062001441565b60405180910390fd5b62000a91816200059b60201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afd90620014b3565b60405180910390fd5b62000b1a6000838362000c3660201b60201c565b806002600082825462000b2e9190620014d5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b859190620014d5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bec919062001521565b60405180910390a362000c086000838362000c3b60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cc257607f821691505b60208210810362000cd85762000cd762000c7a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d427fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d03565b62000d4e868362000d03565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d9b62000d9562000d8f8462000d66565b62000d70565b62000d66565b9050919050565b6000819050919050565b62000db78362000d7a565b62000dcf62000dc68262000da2565b84845462000d10565b825550505050565b600090565b62000de662000dd7565b62000df381848462000dac565b505050565b5b8181101562000e1b5762000e0f60008262000ddc565b60018101905062000df9565b5050565b601f82111562000e6a5762000e348162000cde565b62000e3f8462000cf3565b8101602085101562000e4f578190505b62000e6762000e5e8562000cf3565b83018262000df8565b50505b505050565b600082821c905092915050565b600062000e8f6000198460080262000e6f565b1980831691505092915050565b600062000eaa838362000e7c565b9150826002028217905092915050565b62000ec58262000c40565b67ffffffffffffffff81111562000ee15762000ee062000c4b565b5b62000eed825462000ca9565b62000efa82828562000e1f565b600060209050601f83116001811462000f32576000841562000f1d578287015190505b62000f29858262000e9c565b86555062000f99565b601f19841662000f428662000cde565b60005b8281101562000f6c5784890151825560018201915060208501945060208101905062000f45565b8683101562000f8c578489015162000f88601f89168262000e7c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fd38262000fa6565b9050919050565b62000fe58162000fc6565b811462000ff157600080fd5b50565b600081519050620010058162000fda565b92915050565b60006020828403121562001024576200102362000fa1565b5b6000620010348482850162000ff4565b91505092915050565b620010488162000fc6565b82525050565b60006040820190506200106560008301856200103d565b6200107460208301846200103d565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200110957808604811115620010e157620010e06200107b565b5b6001851615620010f15780820291505b80810290506200110185620010aa565b9450620010c1565b94509492505050565b600082620011245760019050620011f7565b81620011345760009050620011f7565b81600181146200114d576002811462001158576200118e565b6001915050620011f7565b60ff8411156200116d576200116c6200107b565b5b8360020a9150848211156200118757620011866200107b565b5b50620011f7565b5060208310610133831016604e8410600b8410161715620011c85782820a905083811115620011c257620011c16200107b565b5b620011f7565b620011d78484846001620010b7565b92509050818404811115620011f157620011f06200107b565b5b81810290505b9392505050565b600060ff82169050919050565b6000620012188262000d66565b91506200122583620011fe565b9250620012547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001112565b905092915050565b6000620012698262000d66565b9150620012768362000d66565b9250828202620012868162000d66565b91508282048414831517620012a0576200129f6200107b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620012e38262000d66565b9150620012f08362000d66565b925082620013035762001302620012a7565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013576020836200130e565b915062001364826200131f565b602082019050919050565b600060208201905081810360008301526200138a8162001348565b9050919050565b60008115159050919050565b620013a88162001391565b82525050565b6000602082019050620013c560008301846200139d565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620014296026836200130e565b91506200143682620013cb565b604082019050919050565b600060208201905081810360008301526200145c816200141a565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200149b601f836200130e565b9150620014a88262001463565b602082019050919050565b60006020820190508181036000830152620014ce816200148c565b9050919050565b6000620014e28262000d66565b9150620014ef8362000d66565b92508282019050808211156200150a57620015096200107b565b5b92915050565b6200151b8162000d66565b82525050565b600060208201905062001538600083018462001510565b92915050565b60805160a0516147b66200157960003960008181611b500152611cb8015260008181612cc001528181612da10152612dc801526147b66000f3fe6080604052600436106102085760003560e01c80638da5cb5b11610118578063dd62ed3e116100a0578063e94275861161006f578063e94275861461074e578063f242ab4114610777578063f2fde38b146107a2578063f5703332146107cb578063fb70961b146107f85761020f565b8063dd62ed3e14610696578063ddd1e9a4146106d3578063e19da7ce146106fc578063e55648f4146107255761020f565b8063a9059cbb116100e7578063a9059cbb146105c3578063b70143c914610600578063c8706a5014610629578063c9567bf914610656578063cfddbf171461066d5761020f565b80638da5cb5b1461050757806395d89b4114610532578063a0c7616b1461055d578063a457c2d7146105865761020f565b80633da6c1971161019b57806370a082311161016a57806370a0823114610448578063715018a6146104855780637ff6f7b91461049c57806385ca59b9146104c557806387f77cde146104dc5761020f565b80633da6c197146103a2578063454b7163146103cb5780634ada218b146103f457806364c13c8a1461041f5761020f565b806323b872dd116101d757806323b872dd146102d05780632e78e6241461030d578063313ce5671461033a57806339509351146103655761020f565b806306fdde0314610214578063095ea7b31461023f57806318160ddd1461027c5780631a8a4d5b146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610837565b6040516102369190613350565b60405180910390f35b34801561024b57600080fd5b506102666004803603810190610261919061340b565b6108c9565b6040516102739190613466565b60405180910390f35b34801561028857600080fd5b506102916108e7565b60405161029e9190613490565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c991906134ab565b6108f1565b005b3480156102dc57600080fd5b506102f760048036038101906102f291906134d8565b610a13565b6040516103049190613466565b60405180910390f35b34801561031957600080fd5b50610322610b0b565b6040516103319392919061352b565b60405180910390f35b34801561034657600080fd5b5061034f610b31565b60405161035c919061357e565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061340b565b610b3a565b6040516103999190613466565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906135c5565b610be6565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190613605565b610d0b565b005b34801561040057600080fd5b50610409610e47565b6040516104169190613466565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906134ab565b610e5a565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613605565b610f7c565b60405161047c9190613490565b60405180910390f35b34801561049157600080fd5b5061049a610fc4565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613632565b61104c565b005b3480156104d157600080fd5b506104da6110e5565b005b3480156104e857600080fd5b506104f16111b3565b6040516104fe919061366e565b60405180910390f35b34801561051357600080fd5b5061051c6111dd565b604051610529919061366e565b60405180910390f35b34801561053e57600080fd5b50610547611207565b6040516105549190613350565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906134ab565b611299565b005b34801561059257600080fd5b506105ad60048036038101906105a8919061340b565b6113a6565b6040516105ba9190613466565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e5919061340b565b611491565b6040516105f79190613466565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906134ab565b6114af565b005b34801561063557600080fd5b5061063e611576565b60405161064d93929190613689565b60405180910390f35b34801561066257600080fd5b5061066b61158f565b005b34801561067957600080fd5b50610694600480360381019061068f91906134ab565b611670565b005b3480156106a257600080fd5b506106bd60048036038101906106b891906136c0565b61177d565b6040516106ca9190613490565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613700565b611804565b005b34801561070857600080fd5b50610723600480360381019061071e91906135c5565b6119ad565b005b34801561073157600080fd5b5061074c600480360381019061074791906135c5565b611ad2565b005b34801561075a57600080fd5b50610775600480360381019061077091906134ab565b611bea565b005b34801561078357600080fd5b5061078c611cb6565b604051610799919061366e565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613605565b611cda565b005b3480156107d757600080fd5b506107e0611dd1565b6040516107ef9392919061352b565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190613605565b611df7565b60405161082e93929190613753565b60405180910390f35b606060038054610846906137b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610872906137b9565b80156108bf5780601f10610894576101008083540402835291602001916108bf565b820191906000526020600020905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b60006108dd6108d6611ef0565b8484611ef8565b6001905092915050565b6000600254905090565b6108f9611ef0565b73ffffffffffffffffffffffffffffffffffffffff166109176111dd565b73ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613836565b60405180910390fd5b60058110156109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a8906138c8565b60405180910390fd5b6103e86109bc6108e7565b826109c79190613917565b6109d19190613988565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a54604051610a089190613490565b60405180910390a150565b6000610a208484846120c1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a6b611ef0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae290613a2b565b60405180910390fd5b610aff85610af7611ef0565b858403611ef8565b60019150509392505050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b60006012905090565b6000610bdc610b47611ef0565b848460016000610b55611ef0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd79190613a4b565b611ef8565b6001905092915050565b610bee611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610c0c6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990613836565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610cff9190613466565b60405180910390a25050565b610d13611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610d316111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613836565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900460ff1681565b610e62611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610e806111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613836565b60405180910390fd5b6002811015610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613acb565b60405180910390fd5b6103e8610f256108e7565b82610f309190613917565b610f3a9190613988565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b54604051610f719190613490565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fcc611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610fea6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613836565b60405180910390fd5b61104a6000612b5b565b565b611054611ef0565b73ffffffffffffffffffffffffffffffffffffffff166110726111dd565b73ffffffffffffffffffffffffffffffffffffffff16146110c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bf90613836565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6110ed611ef0565b73ffffffffffffffffffffffffffffffffffffffff1661110b6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613836565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611216906137b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611242906137b9565b801561128f5780601f106112645761010080835404028352916020019161128f565b820191906000526020600020905b81548152906001019060200180831161127257829003601f168201915b5050505050905090565b6112a1611ef0565b73ffffffffffffffffffffffffffffffffffffffff166112bf6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613836565b60405180910390fd5b80600e819055506064600e541115611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613b5d565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e5460405161139b93929190613689565b60405180910390a150565b600080600160006113b5611ef0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990613bef565b60405180910390fd5b61148661147d611ef0565b85858403611ef8565b600191505092915050565b60006114a561149e611ef0565b84846120c1565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690613c81565b60405180910390fd5b600061154a30610f7c565b905060006064838361155c9190613917565b6115669190613988565b905061157181612c21565b505050565b6000806000600e549250600f5491506010549050909192565b611597611ef0565b73ffffffffffffffffffffffffffffffffffffffff166115b56111dd565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613836565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611678611ef0565b73ffffffffffffffffffffffffffffffffffffffff166116966111dd565b73ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613836565b60405180910390fd5b80600f819055506064600f541115611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090613d13565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f5460405161177293929190613689565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61180c611ef0565b73ffffffffffffffffffffffffffffffffffffffff1661182a6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790613836565b60405180910390fd5b60018210156118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb90613da5565b60405180910390fd5b81811015611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613e37565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261192d6108e7565b6119379190613917565b6119419190613988565b600681905550612710816119536108e7565b61195d9190613917565b6119679190613988565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516119a09392919061352b565b60405180910390a1505050565b6119b5611ef0565b73ffffffffffffffffffffffffffffffffffffffff166119d36111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090613836565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ac69190613466565b60405180910390a25050565b611ada611ef0565b73ffffffffffffffffffffffffffffffffffffffff16611af86111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613836565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390613ec9565b60405180910390fd5b611be68282612e5e565b5050565b611bf2611ef0565b73ffffffffffffffffffffffffffffffffffffffff16611c106111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613836565b60405180910390fd5b8060108190555060646010541115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90613f5b565b60405180910390fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b611ce2611ef0565b73ffffffffffffffffffffffffffffffffffffffff16611d006111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613836565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90613fed565b60405180910390fd5b611dce81612b5b565b50565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e9061407f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd90614111565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120b49190613490565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612127906141a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614235565b60405180910390fd5b600081036121b8576121b383836000612eff565b612b56565b600960009054906101000a900460ff16156126b3576121d56111dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561224357506122136111dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561227c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122cf5750600560149054906101000a900460ff16155b156126b257600d60009054906101000a900460ff166123c957601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123895750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf906142c7565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246c5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251357600b548111156124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad90614359565b60405180910390fd5b600a546124c283610f7c565b826124cd9190613a4b565b111561250e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612505906143c5565b60405180910390fd5b6126b1565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125b65750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561260557600b54811115612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614457565b60405180910390fd5b6126b0565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126af57600a5461266283610f7c565b8261266d9190613a4b565b11156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a5906143c5565b60405180910390fd5b5b5b5b5b5b60006126be30610f7c565b9050600060065482101590508080156126e35750600560159054906101000a900460ff165b80156126fc5750600560149054906101000a900460ff16155b80156127525750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127a85750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127fe5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561280c57504260085414155b15612858576001600560146101000a81548160ff0219169083151502179055506128358361317e565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061290e5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561291857600090505b60008115612b4657601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297b57506000600f54115b156129af576129a8606461299a600f548861328a90919063ffffffff16565b6132a090919063ffffffff16565b9050612b22565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a0a57506000600e54115b15612a3e57612a376064612a29600e548861328a90919063ffffffff16565b6132a090919063ffffffff16565b9050612b21565b6000601054118015612a9a5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af05750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2057612b1d6064612b0f6010548861328a90919063ffffffff16565b6132a090919063ffffffff16565b90505b5b5b6000811115612b3757612b36873083612eff565b5b8085612b439190614477565b94505b612b51878787612eff565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115612c3e57612c3d6144ab565b5b604051908082528060200260200182016040528015612c6c5781602001602082028036833780820191505090505b5090503081600081518110612c8457612c836144da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d919061451e565b81600181518110612d6157612d606144da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dc6307f000000000000000000000000000000000000000000000000000000000000000084611ef8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e2895949392919061464e565b600060405180830381600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f65906141a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490614235565b60405180910390fd5b612fe88383836132b6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561306e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130659061471a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131019190613a4b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131659190613490565b60405180910390a36131788484846132bb565b50505050565b600061318930610f7c565b9050600080820361319b575050613287565b6007548211156131ab5760075491505b601460009054906101000a900460ff1680156131d25750600a836131cf9190613917565b82115b156131e757600a836131e49190613917565b91505b60008290506131f581612c21565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161323b9061476b565b60006040518083038185875af1925050503d8060008114613278576040519150601f19603f3d011682016040523d82523d6000602084013e61327d565b606091505b5050809250505050505b50565b600081836132989190613917565b905092915050565b600081836132ae9190613988565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132fa5780820151818401526020810190506132df565b60008484015250505050565b6000601f19601f8301169050919050565b6000613322826132c0565b61332c81856132cb565b935061333c8185602086016132dc565b61334581613306565b840191505092915050565b6000602082019050818103600083015261336a8184613317565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133a282613377565b9050919050565b6133b281613397565b81146133bd57600080fd5b50565b6000813590506133cf816133a9565b92915050565b6000819050919050565b6133e8816133d5565b81146133f357600080fd5b50565b600081359050613405816133df565b92915050565b6000806040838503121561342257613421613372565b5b6000613430858286016133c0565b9250506020613441858286016133f6565b9150509250929050565b60008115159050919050565b6134608161344b565b82525050565b600060208201905061347b6000830184613457565b92915050565b61348a816133d5565b82525050565b60006020820190506134a56000830184613481565b92915050565b6000602082840312156134c1576134c0613372565b5b60006134cf848285016133f6565b91505092915050565b6000806000606084860312156134f1576134f0613372565b5b60006134ff868287016133c0565b9350506020613510868287016133c0565b9250506040613521868287016133f6565b9150509250925092565b60006060820190506135406000830186613457565b61354d6020830185613481565b61355a6040830184613481565b949350505050565b600060ff82169050919050565b61357881613562565b82525050565b6000602082019050613593600083018461356f565b92915050565b6135a28161344b565b81146135ad57600080fd5b50565b6000813590506135bf81613599565b92915050565b600080604083850312156135dc576135db613372565b5b60006135ea858286016133c0565b92505060206135fb858286016135b0565b9150509250929050565b60006020828403121561361b5761361a613372565b5b6000613629848285016133c0565b91505092915050565b60006020828403121561364857613647613372565b5b6000613656848285016135b0565b91505092915050565b61366881613397565b82525050565b6000602082019050613683600083018461365f565b92915050565b600060608201905061369e6000830186613481565b6136ab6020830185613481565b6136b86040830184613481565b949350505050565b600080604083850312156136d7576136d6613372565b5b60006136e5858286016133c0565b92505060206136f6858286016133c0565b9150509250929050565b60008060006060848603121561371957613718613372565b5b6000613727868287016135b0565b9350506020613738868287016133f6565b9250506040613749868287016133f6565b9150509250925092565b60006060820190506137686000830186613457565b6137756020830185613457565b6137826040830184613457565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137d157607f821691505b6020821081036137e4576137e361378a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138206020836132cb565b915061382b826137ea565b602082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006138b26024836132cb565b91506138bd82613856565b604082019050919050565b600060208201905081810360008301526138e1816138a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613922826133d5565b915061392d836133d5565b925082820261393b816133d5565b91508282048414831517613952576139516138e8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613993826133d5565b915061399e836133d5565b9250826139ae576139ad613959565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a156028836132cb565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b6000613a56826133d5565b9150613a61836133d5565b9250828201905080821115613a7957613a786138e8565b5b92915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613ab56020836132cb565b9150613ac082613a7f565b602082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613b476028836132cb565b9150613b5282613aeb565b604082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613bd96025836132cb565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613c6b602c836132cb565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613cfd6029836132cb565b9150613d0882613ca1565b604082019050919050565b60006020820190508181036000830152613d2c81613cf0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613d8f6034836132cb565b9150613d9a82613d33565b604082019050919050565b60006020820190508181036000830152613dbe81613d82565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613e21602a836132cb565b9150613e2c82613dc5565b604082019050919050565b60006020820190508181036000830152613e5081613e14565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613eb36039836132cb565b9150613ebe82613e57565b604082019050919050565b60006020820190508181036000830152613ee281613ea6565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b6000613f45602d836132cb565b9150613f5082613ee9565b604082019050919050565b60006020820190508181036000830152613f7481613f38565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fd76026836132cb565b9150613fe282613f7b565b604082019050919050565b6000602082019050818103600083015261400681613fca565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140696024836132cb565b91506140748261400d565b604082019050919050565b600060208201905081810360008301526140988161405c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140fb6022836132cb565b91506141068261409f565b604082019050919050565b6000602082019050818103600083015261412a816140ee565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061418d6025836132cb565b915061419882614131565b604082019050919050565b600060208201905081810360008301526141bc81614180565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061421f6023836132cb565b915061422a826141c3565b604082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b16022836132cb565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143436026836132cb565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006143af6013836132cb565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144416027836132cb565b915061444c826143e5565b604082019050919050565b6000602082019050818103600083015261447081614434565b9050919050565b6000614482826133d5565b915061448d836133d5565b92508282039050818111156144a5576144a46138e8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614518816133a9565b92915050565b60006020828403121561453457614533613372565b5b600061454284828501614509565b91505092915050565b6000819050919050565b6000819050919050565b600061457a6145756145708461454b565b614555565b6133d5565b9050919050565b61458a8161455f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145c581613397565b82525050565b60006145d783836145bc565b60208301905092915050565b6000602082019050919050565b60006145fb82614590565b614605818561459b565b9350614610836145ac565b8060005b8381101561464157815161462888826145cb565b9750614633836145e3565b925050600181019050614614565b5085935050505092915050565b600060a0820190506146636000830188613481565b6146706020830187614581565b818103604083015261468281866145f0565b9050614691606083018561365f565b61469e6080830184613481565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147046026836132cb565b915061470f826146a8565b604082019050919050565b60006020820190508181036000830152614733816146f7565b9050919050565b600081905092915050565b50565b600061475560008361473a565b915061476082614745565b600082019050919050565b600061477682614748565b915081905091905056fea26469706673582212203c0bd021a7bb0cd72c5312d4a9e01172343dea705056134d8d850271a749ecaa64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102085760003560e01c80638da5cb5b11610118578063dd62ed3e116100a0578063e94275861161006f578063e94275861461074e578063f242ab4114610777578063f2fde38b146107a2578063f5703332146107cb578063fb70961b146107f85761020f565b8063dd62ed3e14610696578063ddd1e9a4146106d3578063e19da7ce146106fc578063e55648f4146107255761020f565b8063a9059cbb116100e7578063a9059cbb146105c3578063b70143c914610600578063c8706a5014610629578063c9567bf914610656578063cfddbf171461066d5761020f565b80638da5cb5b1461050757806395d89b4114610532578063a0c7616b1461055d578063a457c2d7146105865761020f565b80633da6c1971161019b57806370a082311161016a57806370a0823114610448578063715018a6146104855780637ff6f7b91461049c57806385ca59b9146104c557806387f77cde146104dc5761020f565b80633da6c197146103a2578063454b7163146103cb5780634ada218b146103f457806364c13c8a1461041f5761020f565b806323b872dd116101d757806323b872dd146102d05780632e78e6241461030d578063313ce5671461033a57806339509351146103655761020f565b806306fdde0314610214578063095ea7b31461023f57806318160ddd1461027c5780631a8a4d5b146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610837565b6040516102369190613350565b60405180910390f35b34801561024b57600080fd5b506102666004803603810190610261919061340b565b6108c9565b6040516102739190613466565b60405180910390f35b34801561028857600080fd5b506102916108e7565b60405161029e9190613490565b60405180910390f35b3480156102b357600080fd5b506102ce60048036038101906102c991906134ab565b6108f1565b005b3480156102dc57600080fd5b506102f760048036038101906102f291906134d8565b610a13565b6040516103049190613466565b60405180910390f35b34801561031957600080fd5b50610322610b0b565b6040516103319392919061352b565b60405180910390f35b34801561034657600080fd5b5061034f610b31565b60405161035c919061357e565b60405180910390f35b34801561037157600080fd5b5061038c6004803603810190610387919061340b565b610b3a565b6040516103999190613466565b60405180910390f35b3480156103ae57600080fd5b506103c960048036038101906103c491906135c5565b610be6565b005b3480156103d757600080fd5b506103f260048036038101906103ed9190613605565b610d0b565b005b34801561040057600080fd5b50610409610e47565b6040516104169190613466565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906134ab565b610e5a565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613605565b610f7c565b60405161047c9190613490565b60405180910390f35b34801561049157600080fd5b5061049a610fc4565b005b3480156104a857600080fd5b506104c360048036038101906104be9190613632565b61104c565b005b3480156104d157600080fd5b506104da6110e5565b005b3480156104e857600080fd5b506104f16111b3565b6040516104fe919061366e565b60405180910390f35b34801561051357600080fd5b5061051c6111dd565b604051610529919061366e565b60405180910390f35b34801561053e57600080fd5b50610547611207565b6040516105549190613350565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f91906134ab565b611299565b005b34801561059257600080fd5b506105ad60048036038101906105a8919061340b565b6113a6565b6040516105ba9190613466565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e5919061340b565b611491565b6040516105f79190613466565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906134ab565b6114af565b005b34801561063557600080fd5b5061063e611576565b60405161064d93929190613689565b60405180910390f35b34801561066257600080fd5b5061066b61158f565b005b34801561067957600080fd5b50610694600480360381019061068f91906134ab565b611670565b005b3480156106a257600080fd5b506106bd60048036038101906106b891906136c0565b61177d565b6040516106ca9190613490565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190613700565b611804565b005b34801561070857600080fd5b50610723600480360381019061071e91906135c5565b6119ad565b005b34801561073157600080fd5b5061074c600480360381019061074791906135c5565b611ad2565b005b34801561075a57600080fd5b50610775600480360381019061077091906134ab565b611bea565b005b34801561078357600080fd5b5061078c611cb6565b604051610799919061366e565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c49190613605565b611cda565b005b3480156107d757600080fd5b506107e0611dd1565b6040516107ef9392919061352b565b60405180910390f35b34801561080457600080fd5b5061081f600480360381019061081a9190613605565b611df7565b60405161082e93929190613753565b60405180910390f35b606060038054610846906137b9565b80601f0160208091040260200160405190810160405280929190818152602001828054610872906137b9565b80156108bf5780601f10610894576101008083540402835291602001916108bf565b820191906000526020600020905b8154815290600101906020018083116108a257829003601f168201915b5050505050905090565b60006108dd6108d6611ef0565b8484611ef8565b6001905092915050565b6000600254905090565b6108f9611ef0565b73ffffffffffffffffffffffffffffffffffffffff166109176111dd565b73ffffffffffffffffffffffffffffffffffffffff161461096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096490613836565b60405180910390fd5b60058110156109b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a8906138c8565b60405180910390fd5b6103e86109bc6108e7565b826109c79190613917565b6109d19190613988565b600a819055507f12528a3c61e0f3b2d6fc707a9fc58b1af86e252cad0d7f4c154ebeabb162dace600a54604051610a089190613490565b60405180910390a150565b6000610a208484846120c1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a6b611ef0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae290613a2b565b60405180910390fd5b610aff85610af7611ef0565b858403611ef8565b60019150509392505050565b6000806000600560159054906101000a900460ff16925060065491506007549050909192565b60006012905090565b6000610bdc610b47611ef0565b848460016000610b55611ef0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bd79190613a4b565b611ef8565b6001905092915050565b610bee611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610c0c6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990613836565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9282604051610cff9190613466565b60405180910390a25050565b610d13611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610d316111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90613836565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d60009054906101000a900460ff1681565b610e62611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610e806111dd565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613836565b60405180910390fd5b6002811015610f1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1190613acb565b60405180910390fd5b6103e8610f256108e7565b82610f309190613917565b610f3a9190613988565b600b819055507fff3dd5e80294197918c284bbfc3dadd97d0b40ce92106110946329088f80068a600b54604051610f719190613490565b60405180910390a150565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fcc611ef0565b73ffffffffffffffffffffffffffffffffffffffff16610fea6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613836565b60405180910390fd5b61104a6000612b5b565b565b611054611ef0565b73ffffffffffffffffffffffffffffffffffffffff166110726111dd565b73ffffffffffffffffffffffffffffffffffffffff16146110c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bf90613836565b60405180910390fd5b80601460006101000a81548160ff02191690831515021790555050565b6110ed611ef0565b73ffffffffffffffffffffffffffffffffffffffff1661110b6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115890613836565b60405180910390fd5b6000600960006101000a81548160ff0219169083151502179055506000601081905550427ff4eaa75eae08ae80c3daf791438dac1cff2cfd3b0bad2304ec7bbb067e50261660405160405180910390a2565b6000600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611216906137b9565b80601f0160208091040260200160405190810160405280929190818152602001828054611242906137b9565b801561128f5780601f106112645761010080835404028352916020019161128f565b820191906000526020600020905b81548152906001019060200180831161127257829003601f168201915b5050505050905090565b6112a1611ef0565b73ffffffffffffffffffffffffffffffffffffffff166112bf6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611315576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130c90613836565b60405180910390fd5b80600e819055506064600e541115611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613b5d565b60405180910390fd5b7f38513c502b0ab4834ac1df9502b76f75dcf7092469782cfd0db7fe664388e25e600e54600e54600e5460405161139b93929190613689565b60405180910390a150565b600080600160006113b5611ef0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990613bef565b60405180910390fd5b61148661147d611ef0565b85858403611ef8565b600191505092915050565b60006114a561149e611ef0565b84846120c1565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153690613c81565b60405180910390fd5b600061154a30610f7c565b905060006064838361155c9190613917565b6115669190613988565b905061157181612c21565b505050565b6000806000600e549250600f5491506010549050909192565b611597611ef0565b73ffffffffffffffffffffffffffffffffffffffff166115b56111dd565b73ffffffffffffffffffffffffffffffffffffffff161461160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613836565b60405180910390fd5b6001600d60006101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550427fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92360405160405180910390a2565b611678611ef0565b73ffffffffffffffffffffffffffffffffffffffff166116966111dd565b73ffffffffffffffffffffffffffffffffffffffff16146116ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e390613836565b60405180910390fd5b80600f819055506064600f541115611739576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173090613d13565b60405180910390fd5b7fcb5f36df892836a2eaedc349de29a7581176990398ee185d16eaa8f6c1abd8f1600f54600f54600f5460405161177293929190613689565b60405180910390a150565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61180c611ef0565b73ffffffffffffffffffffffffffffffffffffffff1661182a6111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790613836565b60405180910390fd5b60018210156118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb90613da5565b60405180910390fd5b81811015611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe90613e37565b60405180910390fd5b82600560156101000a81548160ff0219169083151502179055506127108261192d6108e7565b6119379190613917565b6119419190613988565b600681905550612710816119536108e7565b61195d9190613917565b6119679190613988565b6007819055507f52cd2cdb42ff0eeec9362d7ed5b04f64c8d022697128b5378fc51cea7e63c7798383836040516119a09392919061352b565b60405180910390a1505050565b6119b5611ef0565b73ffffffffffffffffffffffffffffffffffffffff166119d36111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090613836565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ac69190613466565b60405180910390a25050565b611ada611ef0565b73ffffffffffffffffffffffffffffffffffffffff16611af86111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4590613836565b60405180910390fd5b7f0000000000000000000000000034b8ef5f6adc52ad0503b3faf48091d576fbae73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd390613ec9565b60405180910390fd5b611be68282612e5e565b5050565b611bf2611ef0565b73ffffffffffffffffffffffffffffffffffffffff16611c106111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5d90613836565b60405180910390fd5b8060108190555060646010541115611cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caa90613f5b565b60405180910390fd5b50565b7f0000000000000000000000000034b8ef5f6adc52ad0503b3faf48091d576fbae81565b611ce2611ef0565b73ffffffffffffffffffffffffffffffffffffffff16611d006111dd565b73ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613836565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbc90613fed565b60405180910390fd5b611dce81612b5b565b50565b6000806000600960009054906101000a900460ff169250600a549150600b549050909192565b6000806000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169250601260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169150601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690509193909250565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e9061407f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcd90614111565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120b49190613490565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612127906141a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361219f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219690614235565b60405180910390fd5b600081036121b8576121b383836000612eff565b612b56565b600960009054906101000a900460ff16156126b3576121d56111dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561224357506122136111dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561227c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122b6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122cf5750600560149054906101000a900460ff16155b156126b257600d60009054906101000a900460ff166123c957601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123895750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6123c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bf906142c7565b60405180910390fd5b5b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561246c5750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561251357600b548111156124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad90614359565b60405180910390fd5b600a546124c283610f7c565b826124cd9190613a4b565b111561250e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612505906143c5565b60405180910390fd5b6126b1565b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125b65750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561260557600b54811115612600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f790614457565b60405180910390fd5b6126b0565b601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126af57600a5461266283610f7c565b8261266d9190613a4b565b11156126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a5906143c5565b60405180910390fd5b5b5b5b5b5b60006126be30610f7c565b9050600060065482101590508080156126e35750600560159054906101000a900460ff165b80156126fc5750600560149054906101000a900460ff16155b80156127525750601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127a85750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127fe5750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561280c57504260085414155b15612858576001600560146101000a81548160ff0219169083151502179055506128358361317e565b426008819055506000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061290e5750601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561291857600090505b60008115612b4657601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561297b57506000600f54115b156129af576129a8606461299a600f548861328a90919063ffffffff16565b6132a090919063ffffffff16565b9050612b22565b601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a0a57506000600e54115b15612a3e57612a376064612a29600e548861328a90919063ffffffff16565b6132a090919063ffffffff16565b9050612b21565b6000601054118015612a9a5750601360008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612af05750601360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b2057612b1d6064612b0f6010548861328a90919063ffffffff16565b6132a090919063ffffffff16565b90505b5b5b6000811115612b3757612b36873083612eff565b5b8085612b439190614477565b94505b612b51878787612eff565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600267ffffffffffffffff811115612c3e57612c3d6144ab565b5b604051908082528060200260200182016040528015612c6c5781602001602082028036833780820191505090505b5090503081600081518110612c8457612c836144da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d4d919061451e565b81600181518110612d6157612d606144da565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612dc6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ef8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612e2895949392919061464e565b600060405180830381600087803b158015612e4257600080fd5b505af1158015612e56573d6000803e3d6000fd5b505050505050565b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f02d59e6bf2c101e2d8367c2a27c51357eccfebcca0d09aa27c00e24e946c0d6a60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f65906141a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490614235565b60405180910390fd5b612fe88383836132b6565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561306e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130659061471a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131019190613a4b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131659190613490565b60405180910390a36131788484846132bb565b50505050565b600061318930610f7c565b9050600080820361319b575050613287565b6007548211156131ab5760075491505b601460009054906101000a900460ff1680156131d25750600a836131cf9190613917565b82115b156131e757600a836131e49190613917565b91505b60008290506131f581612c21565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161323b9061476b565b60006040518083038185875af1925050503d8060008114613278576040519150601f19603f3d011682016040523d82523d6000602084013e61327d565b606091505b5050809250505050505b50565b600081836132989190613917565b905092915050565b600081836132ae9190613988565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132fa5780820151818401526020810190506132df565b60008484015250505050565b6000601f19601f8301169050919050565b6000613322826132c0565b61332c81856132cb565b935061333c8185602086016132dc565b61334581613306565b840191505092915050565b6000602082019050818103600083015261336a8184613317565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133a282613377565b9050919050565b6133b281613397565b81146133bd57600080fd5b50565b6000813590506133cf816133a9565b92915050565b6000819050919050565b6133e8816133d5565b81146133f357600080fd5b50565b600081359050613405816133df565b92915050565b6000806040838503121561342257613421613372565b5b6000613430858286016133c0565b9250506020613441858286016133f6565b9150509250929050565b60008115159050919050565b6134608161344b565b82525050565b600060208201905061347b6000830184613457565b92915050565b61348a816133d5565b82525050565b60006020820190506134a56000830184613481565b92915050565b6000602082840312156134c1576134c0613372565b5b60006134cf848285016133f6565b91505092915050565b6000806000606084860312156134f1576134f0613372565b5b60006134ff868287016133c0565b9350506020613510868287016133c0565b9250506040613521868287016133f6565b9150509250925092565b60006060820190506135406000830186613457565b61354d6020830185613481565b61355a6040830184613481565b949350505050565b600060ff82169050919050565b61357881613562565b82525050565b6000602082019050613593600083018461356f565b92915050565b6135a28161344b565b81146135ad57600080fd5b50565b6000813590506135bf81613599565b92915050565b600080604083850312156135dc576135db613372565b5b60006135ea858286016133c0565b92505060206135fb858286016135b0565b9150509250929050565b60006020828403121561361b5761361a613372565b5b6000613629848285016133c0565b91505092915050565b60006020828403121561364857613647613372565b5b6000613656848285016135b0565b91505092915050565b61366881613397565b82525050565b6000602082019050613683600083018461365f565b92915050565b600060608201905061369e6000830186613481565b6136ab6020830185613481565b6136b86040830184613481565b949350505050565b600080604083850312156136d7576136d6613372565b5b60006136e5858286016133c0565b92505060206136f6858286016133c0565b9150509250929050565b60008060006060848603121561371957613718613372565b5b6000613727868287016135b0565b9350506020613738868287016133f6565b9250506040613749868287016133f6565b9150509250925092565b60006060820190506137686000830186613457565b6137756020830185613457565b6137826040830184613457565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806137d157607f821691505b6020821081036137e4576137e361378a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138206020836132cb565b915061382b826137ea565b602082019050919050565b6000602082019050818103600083015261384f81613813565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006138b26024836132cb565b91506138bd82613856565b604082019050919050565b600060208201905081810360008301526138e1816138a5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613922826133d5565b915061392d836133d5565b925082820261393b816133d5565b91508282048414831517613952576139516138e8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613993826133d5565b915061399e836133d5565b9250826139ae576139ad613959565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613a156028836132cb565b9150613a20826139b9565b604082019050919050565b60006020820190508181036000830152613a4481613a08565b9050919050565b6000613a56826133d5565b9150613a61836133d5565b9250828201905080821115613a7957613a786138e8565b5b92915050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e3225600082015250565b6000613ab56020836132cb565b9150613ac082613a7f565b602082019050919050565b60006020820190508181036000830152613ae481613aa8565b9050919050565b7f546f74616c20627579206665652063616e6e6f7420626520686967686572207460008201527f68616e2031303025000000000000000000000000000000000000000000000000602082015250565b6000613b476028836132cb565b9150613b5282613aeb565b604082019050919050565b60006020820190508181036000830152613b7681613b3a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613bd96025836132cb565b9150613be482613b7d565b604082019050919050565b60006020820190508181036000830152613c0881613bcc565b9050919050565b7f4f6e6c79206d61726b6574696e672077616c6c65742063616e2063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b6000613c6b602c836132cb565b9150613c7682613c0f565b604082019050919050565b60006020820190508181036000830152613c9a81613c5e565b9050919050565b7f546f74616c2073656c6c206665652063616e6e6f74206265206869676865722060008201527f7468616e20313030250000000000000000000000000000000000000000000000602082015250565b6000613cfd6029836132cb565b9150613d0882613ca1565b604082019050919050565b60006020820190508181036000830152613d2c81613cf0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e30312520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613d8f6034836132cb565b9150613d9a82613d33565b604082019050919050565b60006020820190508181036000830152613dbe81613d82565b9050919050565b7f6d6178696d756d20616d6f756e742063616e742062652068696768657220746860008201527f616e206d696e696d756d00000000000000000000000000000000000000000000602082015250565b6000613e21602a836132cb565b9150613e2c82613dc5565b604082019050919050565b60006020820190508181036000830152613e5081613e14565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613eb36039836132cb565b9150613ebe82613e57565b604082019050919050565b60006020820190508181036000830152613ee281613ea6565b9050919050565b7f546f74616c207472616e73666572206665652063616e6e6f742062652068696760008201527f686572207468616e203130302500000000000000000000000000000000000000602082015250565b6000613f45602d836132cb565b9150613f5082613ee9565b604082019050919050565b60006020820190508181036000830152613f7481613f38565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fd76026836132cb565b9150613fe282613f7b565b604082019050919050565b6000602082019050818103600083015261400681613fca565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140696024836132cb565b91506140748261400d565b604082019050919050565b600060208201905081810360008301526140988161405c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140fb6022836132cb565b91506141068261409f565b604082019050919050565b6000602082019050818103600083015261412a816140ee565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061418d6025836132cb565b915061419882614131565b604082019050919050565b600060208201905081810360008301526141bc81614180565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061421f6023836132cb565b915061422a826141c3565b604082019050919050565b6000602082019050818103600083015261424e81614212565b9050919050565b7f5f7472616e736665723a3a2054726164696e67206973206e6f7420616374697660008201527f652e000000000000000000000000000000000000000000000000000000000000602082015250565b60006142b16022836132cb565b91506142bc82614255565b604082019050919050565b600060208201905081810360008301526142e0816142a4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b60006143436026836132cb565b915061434e826142e7565b604082019050919050565b6000602082019050818103600083015261437281614336565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006143af6013836132cb565b91506143ba82614379565b602082019050919050565b600060208201905081810360008301526143de816143a2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b60006144416027836132cb565b915061444c826143e5565b604082019050919050565b6000602082019050818103600083015261447081614434565b9050919050565b6000614482826133d5565b915061448d836133d5565b92508282039050818111156144a5576144a46138e8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614518816133a9565b92915050565b60006020828403121561453457614533613372565b5b600061454284828501614509565b91505092915050565b6000819050919050565b6000819050919050565b600061457a6145756145708461454b565b614555565b6133d5565b9050919050565b61458a8161455f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6145c581613397565b82525050565b60006145d783836145bc565b60208301905092915050565b6000602082019050919050565b60006145fb82614590565b614605818561459b565b9350614610836145ac565b8060005b8381101561464157815161462888826145cb565b9750614633836145e3565b925050600181019050614614565b5085935050505092915050565b600060a0820190506146636000830188613481565b6146706020830187614581565b818103604083015261468281866145f0565b9050614691606083018561365f565b61469e6080830184613481565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147046026836132cb565b915061470f826146a8565b604082019050919050565b60006020820190508181036000830152614733816146f7565b9050919050565b600081905092915050565b50565b600061475560008361473a565b915061476082614745565b600082019050919050565b600061477682614748565b915081905091905056fea26469706673582212203c0bd021a7bb0cd72c5312d4a9e01172343dea705056134d8d850271a749ecaa64736f6c63430008130033
Deployed Bytecode Sourcemap
25414:18382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13245:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12132:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31778:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13917:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35690:354;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11974:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14851:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32318:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35164:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26027:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31324:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12303:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22351:103;;;;;;;;;;;;;:::i;:::-;;42717:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29898:157;;;;;;;;;;;;;:::i;:::-;;36800:154;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21700:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11231:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32751:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15640:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12659:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42804:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37200:335;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;29581:162;;;;;;;;;;;;;:::i;:::-;;33250:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12922:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30523:563;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34073:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34573:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33569:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25534:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22609:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36391:246;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37995:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;11012:100;11066:13;11099:5;11092:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11012:100;:::o;13245:194::-;13353:4;13370:39;13379:12;:10;:12::i;:::-;13393:7;13402:6;13370:8;:39::i;:::-;13427:4;13420:11;;13245:194;;;;:::o;12132:108::-;12193:7;12220:12;;12213:19;;12132:108;:::o;31778:270::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31897:1:::1;31883:10;:15;;31875:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31993:4;31976:13;:11;:13::i;:::-;31963:10;:26;;;;:::i;:::-;31962:35;;;;:::i;:::-;31950:9;:47;;;;32013:27;32030:9;;32013:27;;;;;;:::i;:::-;;;;;;;;31778:270:::0;:::o;13917:529::-;14057:4;14074:36;14084:6;14092:9;14103:6;14074:9;:36::i;:::-;14123:24;14150:11;:19;14162:6;14150:19;;;;;;;;;;;;;;;:33;14170:12;:10;:12::i;:::-;14150:33;;;;;;;;;;;;;;;;14123:60;;14236:6;14216:16;:26;;14194:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14346:57;14355:6;14363:12;:10;:12::i;:::-;14396:6;14377:16;:25;14346:8;:57::i;:::-;14434:4;14427:11;;;13917:529;;;;;:::o;35690:354::-;35779:21;35815:25;35855;35927:15;;;;;;;;;;;35908:34;;35973:16;;35953:36;;36020:16;;36000:36;;35690:354;;;:::o;11974:93::-;12032:5;12057:2;12050:9;;11974:93;:::o;14851:290::-;14964:4;14981:130;15004:12;:10;:12::i;:::-;15031:7;15090:10;15053:11;:25;15065:12;:10;:12::i;:::-;15053:25;;;;;;;;;;;;;;;:34;15079:7;15053:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14981:8;:130::i;:::-;15129:4;15122:11;;14851:290;;;;:::o;32318:202::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32458:5:::1;32427:19;:28;32447:7;32427:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32497:7;32479:33;;;32506:5;32479:33;;;;;;:::i;:::-;;;;;;;;32318:202:::0;;:::o;35164:167::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35271:15:::1;;;;;;;;;;;35239:48;;35262:7;35239:48;;;;;;;;;;;;35316:7;35298:15;;:25;;;;;;;;;;;;;;;;;;35164:167:::0;:::o;26027:34::-;;;;;;;;;;;;;:::o;31324:243::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31434:1:::1;31422:8;:13;;31414:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31520:4;31503:13;:11;:13::i;:::-;31492:8;:24;;;;:::i;:::-;31491:33;;;;:::i;:::-;31483:5;:41;;;;31540:19;31553:5;;31540:19;;;;;;:::i;:::-;;;;;;;;31324:243:::0;:::o;12303:143::-;12393:7;12420:9;:18;12430:7;12420:18;;;;;;;;;;;;;;;;12413:25;;12303:143;;;:::o;22351:103::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22416:30:::1;22443:1;22416:18;:30::i;:::-;22351:103::o:0;42717:79::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42783:5:::1;42776:4;;:12;;;;;;;;;;;;;;;;;;42717:79:::0;:::o;29898:157::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29965:5:::1;29949:13;;:21;;;;;;;;;;;;;;;;;;30000:1;29981:16;:20;;;;30031:15;30017:30;;;;;;;;;;29898:157::o:0;36800:154::-;36880:24;36930:15;;;;;;;;;;;36922:24;;36800:154;:::o;21700:87::-;21746:7;21773:6;;;;;;;;;;;21766:13;;21700:87;:::o;11231:104::-;11287:13;11320:7;11313:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11231:104;:::o;32751:266::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32852:7:::1;32838:11;:21;;;;32893:3;32878:11;;:18;;32870:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32957:52;32971:11;;32984;;32997;;32957:52;;;;;;;;:::i;:::-;;;;;;;;32751:266:::0;:::o;15640:475::-;15758:4;15775:24;15802:11;:25;15814:12;:10;:12::i;:::-;15802:25;;;;;;;;;;;;;;;:34;15828:7;15802:34;;;;;;;;;;;;;;;;15775:61;;15889:15;15869:16;:35;;15847:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16005:67;16014:12;:10;:12::i;:::-;16028:7;16056:15;16037:16;:34;16005:8;:67::i;:::-;16103:4;16096:11;;;15640:475;;;;:::o;12659:200::-;12770:4;12787:42;12797:12;:10;:12::i;:::-;12811:9;12822:6;12787:9;:42::i;:::-;12847:4;12840:11;;12659:200;;;;:::o;42804:330::-;42888:10;42869:29;;:15;;;;;;;;;;;:29;;;42861:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;42960:23;42986:24;43004:4;42986:9;:24::i;:::-;42960:50;;43021:25;43077:3;43067:7;43049:15;:25;;;;:::i;:::-;:31;;;;:::i;:::-;43021:59;;43091:35;43108:17;43091:16;:35::i;:::-;42850:284;;42804:330;:::o;37200:335::-;37291:20;37326:21;37362:25;37430:11;;37415:26;;37468:12;;37452:28;;37511:16;;37491:36;;37200:335;;;:::o;29581:162::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29651:4:::1;29634:14;;:21;;;;;;;;;;;;;;;;;;29684:4;29666:15;;:22;;;;;;;;;;;;;;;;;;29719:15;29704:31;;;;;;;;;;29581:162::o:0;33250:311::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33353:7:::1;33338:12;:22;;;;33409:3;33393:12;;:19;;33371:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33497:56;33512:12;;33526;;33540;;33497:56;;;;;;;;:::i;:::-;;;;;;;;33250:311:::0;:::o;12922:176::-;13036:7;13063:11;:18;13075:5;13063:18;;;;;;;;;;;;;;;:27;13082:7;13063:27;;;;;;;;;;;;;;;;13056:34;;12922:176;;;;:::o;30523:563::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30687:1:::1;30676:7;:12;;30654:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;30798:7;30787;:18;;30779:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30883:5;30865:15;;:23;;;;;;;;;;;;;;;;;;30946:5;30935:7;30919:13;:11;:13::i;:::-;:23;;;;:::i;:::-;30918:33;;;;:::i;:::-;30899:16;:52;;;;31009:5;30998:7;30982:13;:11;:13::i;:::-;:23;;;;:::i;:::-;30981:33;;;;:::i;:::-;30962:16;:52;;;;31030:48;31054:5;31061:7;31070;31030:48;;;;;;;;:::i;:::-;;;;;;;;30523:563:::0;;;:::o;34073:206::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34213:8:::1;34184:17;:26;34202:7;34184:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;34253:7;34237:34;;;34262:8;34237:34;;;;;;:::i;:::-;;;;;;;;34073:206:::0;;:::o;34573:241::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34677:7:::1;34669:15;;:4;:15;;::::0;34647:122:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34782:24;34794:4;34800:5;34782:11;:24::i;:::-;34573:241:::0;;:::o;33569:255::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33680:7:::1;33661:16;:26;;;;33740:3;33720:16;;:23;;33698:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33569:255:::0;:::o;25534:32::-;;;:::o;22609:238::-;21931:12;:10;:12::i;:::-;21920:23;;:7;:5;:7::i;:::-;:23;;;21912:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22732:1:::1;22712:22;;:8;:22;;::::0;22690:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22811:28;22830:8;22811:18;:28::i;:::-;22609:238:::0;:::o;36391:246::-;36468:19;36489:18;36509:14;36558:13;;;;;;;;;;;36541:30;;36595:9;;36582:22;;36624:5;;36615:14;;36391:246;;;:::o;37995:446::-;38113:23;38151:25;38191:31;38271:17;:26;38289:7;38271:26;;;;;;;;;;;;;;;;;;;;;;;;;38250:47;;38331:19;:28;38351:7;38331:28;;;;;;;;;;;;;;;;;;;;;;;;;38308:51;;38399:25;:34;38425:7;38399:34;;;;;;;;;;;;;;;;;;;;;;;;;38370:63;;37995:446;;;;;:::o;10018:98::-;10071:7;10098:10;10091:17;;10018:98;:::o;19423:380::-;19576:1;19559:19;;:5;:19;;;19551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19657:1;19638:21;;:7;:21;;;19630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19741:6;19711:11;:18;19723:5;19711:18;;;;;;;;;;;;;;;:27;19730:7;19711:27;;;;;;;;;;;;;;;:36;;;;19779:7;19763:32;;19772:5;19763:32;;;19788:6;19763:32;;;;;;:::i;:::-;;;;;;;;19423:380;;;:::o;38449:3656::-;38597:1;38581:18;;:4;:18;;;38573:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38674:1;38660:16;;:2;:16;;;38652:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38743:1;38733:6;:11;38729:93;;38761:28;38777:4;38783:2;38787:1;38761:15;:28::i;:::-;38804:7;;38729:93;38838:13;;;;;;;;;;;38834:1564;;;38898:7;:5;:7::i;:::-;38890:15;;:4;:15;;;;:49;;;;;38932:7;:5;:7::i;:::-;38926:13;;:2;:13;;;;38890:49;:86;;;;;38974:1;38960:16;;:2;:16;;;;38890:86;:128;;;;;39011:6;38997:21;;:2;:21;;;;38890:128;:158;;;;;39040:8;;;;;;;;;;;39039:9;38890:158;38868:1519;;;39088:14;;;;;;;;;;;39083:232;;39161:17;:23;39179:4;39161:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;39188:17;:21;39206:2;39188:21;;;;;;;;;;;;;;;;;;;;;;;;;39161:48;39127:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;39083:232;39389:25;:31;39415:4;39389:31;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39425:19;:23;39445:2;39425:23;;;;;;;;;;;;;;;;;;;;;;;;;39424:24;39389:59;39363:1009;;;39535:5;;39525:6;:15;;39491:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;39713:9;;39696:13;39706:2;39696:9;:13::i;:::-;39687:6;:22;;;;:::i;:::-;:35;;39653:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39363:1009;;;39891:25;:29;39917:2;39891:29;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;;39925:19;:25;39945:4;39925:25;;;;;;;;;;;;;;;;;;;;;;;;;39924:26;39891:59;39865:507;;;40037:5;;40027:6;:15;;39993:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;39865:507;;;40164:19;:23;40184:2;40164:23;;;;;;;;;;;;;;;;;;;;;;;;;40159:213;;40272:9;;40255:13;40265:2;40255:9;:13::i;:::-;40246:6;:22;;;;:::i;:::-;:35;;40212:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40159:213;39865:507;39363:1009;38868:1519;38834:1564;40410:28;40441:24;40459:4;40441:9;:24::i;:::-;40410:55;;40478:12;40517:16;;40493:20;:40;;40478:55;;40564:7;:39;;;;;40588:15;;;;;;;;;;;40564:39;:65;;;;;40621:8;;;;;;;;;;;40620:9;40564:65;:114;;;;;40647:25;:31;40673:4;40647:31;;;;;;;;;;;;;;;;;;;;;;;;;40646:32;40564:114;:155;;;;;40696:17;:23;40714:4;40696:23;;;;;;;;;;;;;;;;;;;;;;;;;40695:24;40564:155;:194;;;;;40737:17;:21;40755:2;40737:21;;;;;;;;;;;;;;;;;;;;;;;;;40736:22;40564:194;:246;;;;;40795:15;40775:16;;:35;;40564:246;40546:435;;;40848:4;40837:8;;:15;;;;;;;;;;;;;;;;;;40869:16;40878:6;40869:8;:16::i;:::-;40921:15;40902:16;:34;;;;40964:5;40953:8;;:16;;;;;;;;;;;;;;;;;;40546:435;40993:12;41009:8;;;;;;;;;;;41008:9;40993:24;;41119:17;:23;41137:4;41119:23;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;41146:17;:21;41164:2;41146:21;;;;;;;;;;;;;;;;;;;;;;;;;41119:48;41115:96;;;41194:5;41184:15;;41115:96;41223:12;41328:7;41324:728;;;41380:25;:29;41406:2;41380:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;41428:1;41413:12;;:16;41380:49;41376:525;;;41457:33;41486:3;41457:24;41468:12;;41457:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41450:40;;41376:525;;;41552:25;:31;41578:4;41552:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41601:1;41587:11;;:15;41552:50;41548:353;;;41630:32;41658:3;41630:23;41641:11;;41630:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;41623:39;;41548:353;;;41749:1;41730:16;;:20;:56;;;;;41755:25;:31;41781:4;41755:31;;;;;;;;;;;;;;;;;;;;;;;;;41754:32;41730:56;:90;;;;;41791:25;:29;41817:2;41791:29;;;;;;;;;;;;;;;;;;;;;;;;;41790:30;41730:90;41726:175;;;41848:37;41881:3;41848:28;41859:16;;41848:6;:10;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;41841:44;;41726:175;41548:353;41376:525;41930:1;41923:4;:8;41919:91;;;41952:42;41968:4;41982;41989;41952:15;:42::i;:::-;41919:91;42036:4;42026:14;;;;;:::i;:::-;;;41324:728;42064:33;42080:4;42086:2;42090:6;42064:15;:33::i;:::-;38562:3543;;;;38449:3656;;;;:::o;23007:191::-;23081:16;23100:6;;;;;;;;;;;23081:25;;23126:8;23117:6;;:17;;;;;;;;;;;;;;;;;;23181:8;23150:40;;23171:8;23150:40;;;;;;;;;;;;23070:128;23007:191;:::o;42113:571::-;42239:21;42277:1;42263:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42239:40;;42308:4;42290;42295:1;42290:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42334:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42324:4;42329:1;42324:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;42363:56;42380:4;42395:9;42407:11;42363:8;:56::i;:::-;42458:9;:60;;;42533:11;42559:1;42603:4;42630;42650:15;42458:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42168:516;42113:571;:::o;34822:154::-;34922:5;34888:25;:31;34914:4;34888:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34962:5;34945:23;;34956:4;34945:23;;;;;;;;;;;;34822:154;;:::o;16605:770::-;16763:1;16745:20;;:6;:20;;;16737:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16847:1;16826:23;;:9;:23;;;16818:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16902:47;16923:6;16931:9;16942:6;16902:20;:47::i;:::-;16962:21;16986:9;:17;16996:6;16986:17;;;;;;;;;;;;;;;;16962:41;;17053:6;17036:13;:23;;17014:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17197:6;17181:13;:22;17161:9;:17;17171:6;17161:17;;;;;;;;;;;;;;;:42;;;;17249:6;17225:9;:20;17235:9;17225:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17290:9;17273:35;;17282:6;17273:35;;;17301:6;17273:35;;;;;;:::i;:::-;;;;;;;;17321:46;17341:6;17349:9;17360:6;17321:19;:46::i;:::-;16726:649;16605:770;;;:::o;43142:651::-;43195:23;43221:24;43239:4;43221:9;:24::i;:::-;43195:50;;43256:12;43304:1;43285:15;:20;43281:59;;43322:7;;;;43281:59;43374:16;;43356:15;:34;43352:101;;;43425:16;;43407:34;;43352:101;43469:4;;;;;;;;;;;:37;;;;;43504:2;43495:6;:11;;;;:::i;:::-;43477:15;:29;43469:37;43465:99;;;43550:2;43541:6;:11;;;;:::i;:::-;43523:29;;43465:99;43576:26;43605:15;43576:44;;43635:36;43652:18;43635:16;:36::i;:::-;43706:15;;;;;;;;;;;43698:29;;43749:21;43698:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43684:101;;;;;43184:609;;;43142:651;;:::o;3377:98::-;3435:7;3466:1;3462;:5;;;;:::i;:::-;3455:12;;3377:98;;;;:::o;3776:::-;3834:7;3865:1;3861;:5;;;;:::i;:::-;3854:12;;3776:98;;;;:::o;20403:125::-;;;;:::o;21132:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;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:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:430::-;4901:4;4939:2;4928:9;4924:18;4916:26;;4952:65;5014:1;5003:9;4999:17;4990:6;4952:65;:::i;:::-;5027:72;5095:2;5084:9;5080:18;5071:6;5027:72;:::i;:::-;5109;5177:2;5166:9;5162:18;5153:6;5109:72;:::i;:::-;4758:430;;;;;;:::o;5194:86::-;5229:7;5269:4;5262:5;5258:16;5247:27;;5194:86;;;:::o;5286:112::-;5369:22;5385:5;5369:22;:::i;:::-;5364:3;5357:35;5286:112;;:::o;5404:214::-;5493:4;5531:2;5520:9;5516:18;5508:26;;5544:67;5608:1;5597:9;5593:17;5584:6;5544:67;:::i;:::-;5404:214;;;;:::o;5624:116::-;5694:21;5709:5;5694:21;:::i;:::-;5687:5;5684:32;5674:60;;5730:1;5727;5720:12;5674:60;5624:116;:::o;5746:133::-;5789:5;5827:6;5814:20;5805:29;;5843:30;5867:5;5843:30;:::i;:::-;5746:133;;;;:::o;5885:468::-;5950:6;5958;6007:2;5995:9;5986:7;5982:23;5978:32;5975:119;;;6013:79;;:::i;:::-;5975:119;6133:1;6158:53;6203:7;6194:6;6183:9;6179:22;6158:53;:::i;:::-;6148:63;;6104:117;6260:2;6286:50;6328:7;6319:6;6308:9;6304:22;6286:50;:::i;:::-;6276:60;;6231:115;5885:468;;;;;:::o;6359:329::-;6418:6;6467:2;6455:9;6446:7;6442:23;6438:32;6435:119;;;6473:79;;:::i;:::-;6435:119;6593:1;6618:53;6663:7;6654:6;6643:9;6639:22;6618:53;:::i;:::-;6608:63;;6564:117;6359:329;;;;:::o;6694:323::-;6750:6;6799:2;6787:9;6778:7;6774:23;6770:32;6767:119;;;6805:79;;:::i;:::-;6767:119;6925:1;6950:50;6992:7;6983:6;6972:9;6968:22;6950:50;:::i;:::-;6940:60;;6896:114;6694:323;;;;:::o;7023:118::-;7110:24;7128:5;7110:24;:::i;:::-;7105:3;7098:37;7023:118;;:::o;7147:222::-;7240:4;7278:2;7267:9;7263:18;7255:26;;7291:71;7359:1;7348:9;7344:17;7335:6;7291:71;:::i;:::-;7147:222;;;;:::o;7375:442::-;7524:4;7562:2;7551:9;7547:18;7539:26;;7575:71;7643:1;7632:9;7628:17;7619:6;7575:71;:::i;:::-;7656:72;7724:2;7713:9;7709:18;7700:6;7656:72;:::i;:::-;7738;7806:2;7795:9;7791:18;7782:6;7738:72;:::i;:::-;7375:442;;;;;;:::o;7823:474::-;7891:6;7899;7948:2;7936:9;7927:7;7923:23;7919:32;7916:119;;;7954:79;;:::i;:::-;7916:119;8074:1;8099:53;8144:7;8135:6;8124:9;8120:22;8099:53;:::i;:::-;8089:63;;8045:117;8201:2;8227:53;8272:7;8263:6;8252:9;8248:22;8227:53;:::i;:::-;8217:63;;8172:118;7823:474;;;;;:::o;8303:613::-;8377:6;8385;8393;8442:2;8430:9;8421:7;8417:23;8413:32;8410:119;;;8448:79;;:::i;:::-;8410:119;8568:1;8593:50;8635:7;8626:6;8615:9;8611:22;8593:50;:::i;:::-;8583:60;;8539:114;8692:2;8718:53;8763:7;8754:6;8743:9;8739:22;8718:53;:::i;:::-;8708:63;;8663:118;8820:2;8846:53;8891:7;8882:6;8871:9;8867:22;8846:53;:::i;:::-;8836:63;;8791:118;8303:613;;;;;:::o;8922:406::-;9053:4;9091:2;9080:9;9076:18;9068:26;;9104:65;9166:1;9155:9;9151:17;9142:6;9104:65;:::i;:::-;9179:66;9241:2;9230:9;9226:18;9217:6;9179:66;:::i;:::-;9255;9317:2;9306:9;9302:18;9293:6;9255:66;:::i;:::-;8922:406;;;;;;:::o;9334:180::-;9382:77;9379:1;9372:88;9479:4;9476:1;9469:15;9503:4;9500:1;9493:15;9520:320;9564:6;9601:1;9595:4;9591:12;9581:22;;9648:1;9642:4;9638:12;9669:18;9659:81;;9725:4;9717:6;9713:17;9703:27;;9659:81;9787:2;9779:6;9776:14;9756:18;9753:38;9750:84;;9806:18;;:::i;:::-;9750:84;9571:269;9520:320;;;:::o;9846:182::-;9986:34;9982:1;9974:6;9970:14;9963:58;9846:182;:::o;10034:366::-;10176:3;10197:67;10261:2;10256:3;10197:67;:::i;:::-;10190:74;;10273:93;10362:3;10273:93;:::i;:::-;10391:2;10386:3;10382:12;10375:19;;10034:366;;;:::o;10406:419::-;10572:4;10610:2;10599:9;10595:18;10587:26;;10659:9;10653:4;10649:20;10645:1;10634:9;10630:17;10623:47;10687:131;10813:4;10687:131;:::i;:::-;10679:139;;10406:419;;;:::o;10831:223::-;10971:34;10967:1;10959:6;10955:14;10948:58;11040:6;11035:2;11027:6;11023:15;11016:31;10831:223;:::o;11060:366::-;11202:3;11223:67;11287:2;11282:3;11223:67;:::i;:::-;11216:74;;11299:93;11388:3;11299:93;:::i;:::-;11417:2;11412:3;11408:12;11401:19;;11060:366;;;:::o;11432:419::-;11598:4;11636:2;11625:9;11621:18;11613:26;;11685:9;11679:4;11675:20;11671:1;11660:9;11656:17;11649:47;11713:131;11839:4;11713:131;:::i;:::-;11705:139;;11432:419;;;:::o;11857:180::-;11905:77;11902:1;11895:88;12002:4;11999:1;11992:15;12026:4;12023:1;12016:15;12043:410;12083:7;12106:20;12124:1;12106:20;:::i;:::-;12101:25;;12140:20;12158:1;12140:20;:::i;:::-;12135:25;;12195:1;12192;12188:9;12217:30;12235:11;12217:30;:::i;:::-;12206:41;;12396:1;12387:7;12383:15;12380:1;12377:22;12357:1;12350:9;12330:83;12307:139;;12426:18;;:::i;:::-;12307:139;12091:362;12043:410;;;;:::o;12459:180::-;12507:77;12504:1;12497:88;12604:4;12601:1;12594:15;12628:4;12625:1;12618:15;12645:185;12685:1;12702:20;12720:1;12702:20;:::i;:::-;12697:25;;12736:20;12754:1;12736:20;:::i;:::-;12731:25;;12775:1;12765:35;;12780:18;;:::i;:::-;12765:35;12822:1;12819;12815:9;12810:14;;12645:185;;;;:::o;12836:227::-;12976:34;12972:1;12964:6;12960:14;12953:58;13045:10;13040:2;13032:6;13028:15;13021:35;12836:227;:::o;13069:366::-;13211:3;13232:67;13296:2;13291:3;13232:67;:::i;:::-;13225:74;;13308:93;13397:3;13308:93;:::i;:::-;13426:2;13421:3;13417:12;13410:19;;13069:366;;;:::o;13441:419::-;13607:4;13645:2;13634:9;13630:18;13622:26;;13694:9;13688:4;13684:20;13680:1;13669:9;13665:17;13658:47;13722:131;13848:4;13722:131;:::i;:::-;13714:139;;13441:419;;;:::o;13866:191::-;13906:3;13925:20;13943:1;13925:20;:::i;:::-;13920:25;;13959:20;13977:1;13959:20;:::i;:::-;13954:25;;14002:1;13999;13995:9;13988:16;;14023:3;14020:1;14017:10;14014:36;;;14030:18;;:::i;:::-;14014:36;13866:191;;;;:::o;14063:182::-;14203:34;14199:1;14191:6;14187:14;14180:58;14063:182;:::o;14251:366::-;14393:3;14414:67;14478:2;14473:3;14414:67;:::i;:::-;14407:74;;14490:93;14579:3;14490:93;:::i;:::-;14608:2;14603:3;14599:12;14592:19;;14251:366;;;:::o;14623:419::-;14789:4;14827:2;14816:9;14812:18;14804:26;;14876:9;14870:4;14866:20;14862:1;14851:9;14847:17;14840:47;14904:131;15030:4;14904:131;:::i;:::-;14896:139;;14623:419;;;:::o;15048:227::-;15188:34;15184:1;15176:6;15172:14;15165:58;15257:10;15252:2;15244:6;15240:15;15233:35;15048:227;:::o;15281:366::-;15423:3;15444:67;15508:2;15503:3;15444:67;:::i;:::-;15437:74;;15520:93;15609:3;15520:93;:::i;:::-;15638:2;15633:3;15629:12;15622:19;;15281:366;;;:::o;15653:419::-;15819:4;15857:2;15846:9;15842:18;15834:26;;15906:9;15900:4;15896:20;15892:1;15881:9;15877:17;15870:47;15934:131;16060:4;15934:131;:::i;:::-;15926:139;;15653:419;;;:::o;16078:224::-;16218:34;16214:1;16206:6;16202:14;16195:58;16287:7;16282:2;16274:6;16270:15;16263:32;16078:224;:::o;16308:366::-;16450:3;16471:67;16535:2;16530:3;16471:67;:::i;:::-;16464:74;;16547:93;16636:3;16547:93;:::i;:::-;16665:2;16660:3;16656:12;16649:19;;16308:366;;;:::o;16680:419::-;16846:4;16884:2;16873:9;16869:18;16861:26;;16933:9;16927:4;16923:20;16919:1;16908:9;16904:17;16897:47;16961:131;17087:4;16961:131;:::i;:::-;16953:139;;16680:419;;;:::o;17105:231::-;17245:34;17241:1;17233:6;17229:14;17222:58;17314:14;17309:2;17301:6;17297:15;17290:39;17105:231;:::o;17342:366::-;17484:3;17505:67;17569:2;17564:3;17505:67;:::i;:::-;17498:74;;17581:93;17670:3;17581:93;:::i;:::-;17699:2;17694:3;17690:12;17683:19;;17342:366;;;:::o;17714:419::-;17880:4;17918:2;17907:9;17903:18;17895:26;;17967:9;17961:4;17957:20;17953:1;17942:9;17938:17;17931:47;17995:131;18121:4;17995:131;:::i;:::-;17987:139;;17714:419;;;:::o;18139:228::-;18279:34;18275:1;18267:6;18263:14;18256:58;18348:11;18343:2;18335:6;18331:15;18324:36;18139:228;:::o;18373:366::-;18515:3;18536:67;18600:2;18595:3;18536:67;:::i;:::-;18529:74;;18612:93;18701:3;18612:93;:::i;:::-;18730:2;18725:3;18721:12;18714:19;;18373:366;;;:::o;18745:419::-;18911:4;18949:2;18938:9;18934:18;18926:26;;18998:9;18992:4;18988:20;18984:1;18973:9;18969:17;18962:47;19026:131;19152:4;19026:131;:::i;:::-;19018:139;;18745:419;;;:::o;19170:239::-;19310:34;19306:1;19298:6;19294:14;19287:58;19379:22;19374:2;19366:6;19362:15;19355:47;19170:239;:::o;19415:366::-;19557:3;19578:67;19642:2;19637:3;19578:67;:::i;:::-;19571:74;;19654:93;19743:3;19654:93;:::i;:::-;19772:2;19767:3;19763:12;19756:19;;19415:366;;;:::o;19787:419::-;19953:4;19991:2;19980:9;19976:18;19968:26;;20040:9;20034:4;20030:20;20026:1;20015:9;20011:17;20004:47;20068:131;20194:4;20068:131;:::i;:::-;20060:139;;19787:419;;;:::o;20212:229::-;20352:34;20348:1;20340:6;20336:14;20329:58;20421:12;20416:2;20408:6;20404:15;20397:37;20212:229;:::o;20447:366::-;20589:3;20610:67;20674:2;20669:3;20610:67;:::i;:::-;20603:74;;20686:93;20775:3;20686:93;:::i;:::-;20804:2;20799:3;20795:12;20788:19;;20447:366;;;:::o;20819:419::-;20985:4;21023:2;21012:9;21008:18;21000:26;;21072:9;21066:4;21062:20;21058:1;21047:9;21043:17;21036:47;21100:131;21226:4;21100:131;:::i;:::-;21092:139;;20819:419;;;:::o;21244:244::-;21384:34;21380:1;21372:6;21368:14;21361:58;21453:27;21448:2;21440:6;21436:15;21429:52;21244:244;:::o;21494:366::-;21636:3;21657:67;21721:2;21716:3;21657:67;:::i;:::-;21650:74;;21733:93;21822:3;21733:93;:::i;:::-;21851:2;21846:3;21842:12;21835:19;;21494:366;;;:::o;21866:419::-;22032:4;22070:2;22059:9;22055:18;22047:26;;22119:9;22113:4;22109:20;22105:1;22094:9;22090:17;22083:47;22147:131;22273:4;22147:131;:::i;:::-;22139:139;;21866:419;;;:::o;22291:232::-;22431:34;22427:1;22419:6;22415:14;22408:58;22500:15;22495:2;22487:6;22483:15;22476:40;22291:232;:::o;22529:366::-;22671:3;22692:67;22756:2;22751:3;22692:67;:::i;:::-;22685:74;;22768:93;22857:3;22768:93;:::i;:::-;22886:2;22881:3;22877:12;22870:19;;22529:366;;;:::o;22901:419::-;23067:4;23105:2;23094:9;23090:18;23082:26;;23154:9;23148:4;23144:20;23140:1;23129:9;23125:17;23118:47;23182:131;23308:4;23182:131;:::i;:::-;23174:139;;22901:419;;;:::o;23326:225::-;23466:34;23462:1;23454:6;23450:14;23443:58;23535:8;23530:2;23522:6;23518:15;23511:33;23326:225;:::o;23557:366::-;23699:3;23720:67;23784:2;23779:3;23720:67;:::i;:::-;23713:74;;23796:93;23885:3;23796:93;:::i;:::-;23914:2;23909:3;23905:12;23898:19;;23557:366;;;:::o;23929:419::-;24095:4;24133:2;24122:9;24118:18;24110:26;;24182:9;24176:4;24172:20;24168:1;24157:9;24153:17;24146:47;24210:131;24336:4;24210:131;:::i;:::-;24202:139;;23929:419;;;:::o;24354:223::-;24494:34;24490:1;24482:6;24478:14;24471:58;24563:6;24558:2;24550:6;24546:15;24539:31;24354:223;:::o;24583:366::-;24725:3;24746:67;24810:2;24805:3;24746:67;:::i;:::-;24739:74;;24822:93;24911:3;24822:93;:::i;:::-;24940:2;24935:3;24931:12;24924:19;;24583:366;;;:::o;24955:419::-;25121:4;25159:2;25148:9;25144:18;25136:26;;25208:9;25202:4;25198:20;25194:1;25183:9;25179:17;25172:47;25236:131;25362:4;25236:131;:::i;:::-;25228:139;;24955:419;;;:::o;25380:221::-;25520:34;25516:1;25508:6;25504:14;25497:58;25589:4;25584:2;25576:6;25572:15;25565:29;25380:221;:::o;25607:366::-;25749:3;25770:67;25834:2;25829:3;25770:67;:::i;:::-;25763:74;;25846:93;25935:3;25846:93;:::i;:::-;25964:2;25959:3;25955:12;25948:19;;25607:366;;;:::o;25979:419::-;26145:4;26183:2;26172:9;26168:18;26160:26;;26232:9;26226:4;26222:20;26218:1;26207:9;26203:17;26196:47;26260:131;26386:4;26260:131;:::i;:::-;26252:139;;25979:419;;;:::o;26404:224::-;26544:34;26540:1;26532:6;26528:14;26521:58;26613:7;26608:2;26600:6;26596:15;26589:32;26404:224;:::o;26634:366::-;26776:3;26797:67;26861:2;26856:3;26797:67;:::i;:::-;26790:74;;26873:93;26962:3;26873:93;:::i;:::-;26991:2;26986:3;26982:12;26975:19;;26634:366;;;:::o;27006:419::-;27172:4;27210:2;27199:9;27195:18;27187:26;;27259:9;27253:4;27249:20;27245:1;27234:9;27230:17;27223:47;27287:131;27413:4;27287:131;:::i;:::-;27279:139;;27006:419;;;:::o;27431:222::-;27571:34;27567:1;27559:6;27555:14;27548:58;27640:5;27635:2;27627:6;27623:15;27616:30;27431:222;:::o;27659:366::-;27801:3;27822:67;27886:2;27881:3;27822:67;:::i;:::-;27815:74;;27898:93;27987:3;27898:93;:::i;:::-;28016:2;28011:3;28007:12;28000:19;;27659:366;;;:::o;28031:419::-;28197:4;28235:2;28224:9;28220:18;28212:26;;28284:9;28278:4;28274:20;28270:1;28259:9;28255:17;28248:47;28312:131;28438:4;28312:131;:::i;:::-;28304:139;;28031:419;;;:::o;28456:221::-;28596:34;28592:1;28584:6;28580:14;28573:58;28665:4;28660:2;28652:6;28648:15;28641:29;28456:221;:::o;28683:366::-;28825:3;28846:67;28910:2;28905:3;28846:67;:::i;:::-;28839:74;;28922:93;29011:3;28922:93;:::i;:::-;29040:2;29035:3;29031:12;29024:19;;28683:366;;;:::o;29055:419::-;29221:4;29259:2;29248:9;29244:18;29236:26;;29308:9;29302:4;29298:20;29294:1;29283:9;29279:17;29272:47;29336:131;29462:4;29336:131;:::i;:::-;29328:139;;29055:419;;;:::o;29480:225::-;29620:34;29616:1;29608:6;29604:14;29597:58;29689:8;29684:2;29676:6;29672:15;29665:33;29480:225;:::o;29711:366::-;29853:3;29874:67;29938:2;29933:3;29874:67;:::i;:::-;29867:74;;29950:93;30039:3;29950:93;:::i;:::-;30068:2;30063:3;30059:12;30052:19;;29711:366;;;:::o;30083:419::-;30249:4;30287:2;30276:9;30272:18;30264:26;;30336:9;30330:4;30326:20;30322:1;30311:9;30307:17;30300:47;30364:131;30490:4;30364:131;:::i;:::-;30356:139;;30083:419;;;:::o;30508:169::-;30648:21;30644:1;30636:6;30632:14;30625:45;30508:169;:::o;30683:366::-;30825:3;30846:67;30910:2;30905:3;30846:67;:::i;:::-;30839:74;;30922:93;31011:3;30922:93;:::i;:::-;31040:2;31035:3;31031:12;31024:19;;30683:366;;;:::o;31055:419::-;31221:4;31259:2;31248:9;31244:18;31236:26;;31308:9;31302:4;31298:20;31294:1;31283:9;31279:17;31272:47;31336:131;31462:4;31336:131;:::i;:::-;31328:139;;31055:419;;;:::o;31480:226::-;31620:34;31616:1;31608:6;31604:14;31597:58;31689:9;31684:2;31676:6;31672:15;31665:34;31480:226;:::o;31712:366::-;31854:3;31875:67;31939:2;31934:3;31875:67;:::i;:::-;31868:74;;31951:93;32040:3;31951:93;:::i;:::-;32069:2;32064:3;32060:12;32053:19;;31712:366;;;:::o;32084:419::-;32250:4;32288:2;32277:9;32273:18;32265:26;;32337:9;32331:4;32327:20;32323:1;32312:9;32308:17;32301:47;32365:131;32491:4;32365:131;:::i;:::-;32357:139;;32084:419;;;:::o;32509:194::-;32549:4;32569:20;32587:1;32569:20;:::i;:::-;32564:25;;32603:20;32621:1;32603:20;:::i;:::-;32598:25;;32647:1;32644;32640:9;32632:17;;32671:1;32665:4;32662:11;32659:37;;;32676:18;;:::i;:::-;32659:37;32509:194;;;;:::o;32709:180::-;32757:77;32754:1;32747:88;32854:4;32851:1;32844:15;32878:4;32875:1;32868:15;32895:180;32943:77;32940:1;32933:88;33040:4;33037:1;33030:15;33064:4;33061:1;33054:15;33081:143;33138:5;33169:6;33163:13;33154:22;;33185:33;33212:5;33185:33;:::i;:::-;33081:143;;;;:::o;33230:351::-;33300:6;33349:2;33337:9;33328:7;33324:23;33320:32;33317:119;;;33355:79;;:::i;:::-;33317:119;33475:1;33500:64;33556:7;33547:6;33536:9;33532:22;33500:64;:::i;:::-;33490:74;;33446:128;33230:351;;;;:::o;33587:85::-;33632:7;33661:5;33650:16;;33587:85;;;:::o;33678:60::-;33706:3;33727:5;33720:12;;33678:60;;;:::o;33744:158::-;33802:9;33835:61;33853:42;33862:32;33888:5;33862:32;:::i;:::-;33853:42;:::i;:::-;33835:61;:::i;:::-;33822:74;;33744:158;;;:::o;33908:147::-;34003:45;34042:5;34003:45;:::i;:::-;33998:3;33991:58;33908:147;;:::o;34061:114::-;34128:6;34162:5;34156:12;34146:22;;34061:114;;;:::o;34181:184::-;34280:11;34314:6;34309:3;34302:19;34354:4;34349:3;34345:14;34330:29;;34181:184;;;;:::o;34371:132::-;34438:4;34461:3;34453:11;;34491:4;34486:3;34482:14;34474:22;;34371:132;;;:::o;34509:108::-;34586:24;34604:5;34586:24;:::i;:::-;34581:3;34574:37;34509:108;;:::o;34623:179::-;34692:10;34713:46;34755:3;34747:6;34713:46;:::i;:::-;34791:4;34786:3;34782:14;34768:28;;34623:179;;;;:::o;34808:113::-;34878:4;34910;34905:3;34901:14;34893:22;;34808:113;;;:::o;34957:732::-;35076:3;35105:54;35153:5;35105:54;:::i;:::-;35175:86;35254:6;35249:3;35175:86;:::i;:::-;35168:93;;35285:56;35335:5;35285:56;:::i;:::-;35364:7;35395:1;35380:284;35405:6;35402:1;35399:13;35380:284;;;35481:6;35475:13;35508:63;35567:3;35552:13;35508:63;:::i;:::-;35501:70;;35594:60;35647:6;35594:60;:::i;:::-;35584:70;;35440:224;35427:1;35424;35420:9;35415:14;;35380:284;;;35384:14;35680:3;35673:10;;35081:608;;;34957:732;;;;:::o;35695:831::-;35958:4;35996:3;35985:9;35981:19;35973:27;;36010:71;36078:1;36067:9;36063:17;36054:6;36010:71;:::i;:::-;36091:80;36167:2;36156:9;36152:18;36143:6;36091:80;:::i;:::-;36218:9;36212:4;36208:20;36203:2;36192:9;36188:18;36181:48;36246:108;36349:4;36340:6;36246:108;:::i;:::-;36238:116;;36364:72;36432:2;36421:9;36417:18;36408:6;36364:72;:::i;:::-;36446:73;36514:3;36503:9;36499:19;36490:6;36446:73;:::i;:::-;35695:831;;;;;;;;:::o;36532:225::-;36672:34;36668:1;36660:6;36656:14;36649:58;36741:8;36736:2;36728:6;36724:15;36717:33;36532:225;:::o;36763:366::-;36905:3;36926:67;36990:2;36985:3;36926:67;:::i;:::-;36919:74;;37002:93;37091:3;37002:93;:::i;:::-;37120:2;37115:3;37111:12;37104:19;;36763:366;;;:::o;37135:419::-;37301:4;37339:2;37328:9;37324:18;37316:26;;37388:9;37382:4;37378:20;37374:1;37363:9;37359:17;37352:47;37416:131;37542:4;37416:131;:::i;:::-;37408:139;;37135:419;;;:::o;37560:147::-;37661:11;37698:3;37683:18;;37560:147;;;;:::o;37713:114::-;;:::o;37833:398::-;37992:3;38013:83;38094:1;38089:3;38013:83;:::i;:::-;38006:90;;38105:93;38194:3;38105:93;:::i;:::-;38223:1;38218:3;38214:11;38207:18;;37833:398;;;:::o;38237:379::-;38421:3;38443:147;38586:3;38443:147;:::i;:::-;38436:154;;38607:3;38600:10;;38237:379;;;:::o
Swarm Source
ipfs://3c0bd021a7bb0cd72c5312d4a9e01172343dea705056134d8d850271a749ecaa
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.