More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
No addresses found
Latest 25 from a total of 73 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20844706 | 186 days ago | IN | 0 ETH | 0.000436 | ||||
Approve | 20843623 | 187 days ago | IN | 0 ETH | 0.00063453 | ||||
Approve | 20060987 | 296 days ago | IN | 0 ETH | 0.00025589 | ||||
Approve | 19362291 | 394 days ago | IN | 0 ETH | 0.00643502 | ||||
Approve | 19362212 | 394 days ago | IN | 0 ETH | 0.00344729 | ||||
Approve | 19360667 | 394 days ago | IN | 0 ETH | 0.00292696 | ||||
Approve | 19360665 | 394 days ago | IN | 0 ETH | 0.00331779 | ||||
Approve | 19360665 | 394 days ago | IN | 0 ETH | 0.00331779 | ||||
Approve | 19360665 | 394 days ago | IN | 0 ETH | 0.00331779 | ||||
Approve | 19360665 | 394 days ago | IN | 0 ETH | 0.00331779 | ||||
Approve | 19360658 | 394 days ago | IN | 0 ETH | 0.00279765 | ||||
Transfer | 19360619 | 394 days ago | IN | 0 ETH | 0.00350883 | ||||
Approve | 19360608 | 394 days ago | IN | 0 ETH | 0.00335721 | ||||
Renounce Ownersh... | 19360571 | 394 days ago | IN | 0 ETH | 0.00159965 | ||||
Remove Limits | 19360568 | 394 days ago | IN | 0 ETH | 0.00200719 | ||||
Approve | 19360565 | 394 days ago | IN | 0 ETH | 0.0018972 | ||||
Approve | 19360565 | 394 days ago | IN | 0 ETH | 0.0018972 | ||||
Approve | 19360563 | 394 days ago | IN | 0 ETH | 0.00339284 | ||||
Approve | 19360561 | 394 days ago | IN | 0 ETH | 0.00319155 | ||||
Approve | 19360540 | 394 days ago | IN | 0 ETH | 0.00338942 | ||||
Approve | 19360525 | 394 days ago | IN | 0 ETH | 0.00297133 | ||||
Approve | 19360522 | 394 days ago | IN | 0 ETH | 0.00280048 | ||||
Approve | 19360511 | 394 days ago | IN | 0 ETH | 0.00278983 | ||||
Remove Limits | 19360510 | 394 days ago | IN | 0 ETH | 0.00225016 | ||||
Approve | 19360510 | 394 days ago | IN | 0 ETH | 0.00290598 |
Latest 11 internal transactions
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
Transfer | 19360560 | 394 days ago | 0.04143443 ETH | ||||
Transfer | 19360560 | 394 days ago | 0.04143443 ETH | ||||
Transfer | 19360559 | 394 days ago | 0.27747504 ETH | ||||
Transfer | 19360559 | 394 days ago | 0.27747504 ETH | ||||
Transfer | 19360554 | 394 days ago | 0.38511665 ETH | ||||
Transfer | 19360554 | 394 days ago | 0.38511665 ETH | ||||
Transfer | 19360521 | 394 days ago | 0.52541445 ETH | ||||
Transfer | 19360521 | 394 days ago | 0.52541445 ETH | ||||
Transfer | 19360467 | 394 days ago | 0.11696617 ETH | ||||
Transfer | 19360467 | 394 days ago | 0.11696617 ETH | ||||
Add Liquidity ET... | 19360425 | 394 days ago | 1 ETH |
Loading...
Loading
Contract Name:
Kermit
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-04 */ /* * SPDX-License-Identifier: MIT * https://twitter.com/KermitToken_Eth * https://t.me/kermit_On_Eth */ pragma solidity 0.8.19; library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod( uint256 a, uint256 b ) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer( address recipient, uint256 amount ) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance( address owner, address spender ) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf( address account ) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer( address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance( address owner, address spender ) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve( address spender, uint256 amount ) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the upd allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require( currentAllowance >= amount, "ERC20: transfer amount exceeds allowance" ); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance( address spender, uint256 addedValue ) public virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender] + addedValue ); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the upd allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance( address spender, uint256 subtractedValue ) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require( currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero" ); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require( senderBalance >= amount, "ERC20: transfer amount exceeds balance" ); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IDexFactory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair( address tokenA, address tokenB ) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair( address tokenA, address tokenB ) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract Kermit is Context, ERC20, Ownable { using SafeMath for uint256; mapping(address => bool) private _isExcludedFromFee; address payable private _taxWallet; uint256 firstBlock; uint64 private lastLiquifyTime; uint256 private _taxOnBuys = 10; uint256 private _taxOnSells = 10; uint256 private _preventSwapBefore = 1; uint256 private _buyCount = 0; uint256 private _txAmountLimit; uint256 private _walletAmountLimit; uint256 private _swapbackMin; uint256 private _swapbackMax; IDexRouter private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; bool private launchmode = true; mapping(address => bool) private _canTx; event MaxTxAmountUpdated(uint _txAmountLimit); event MaxWalletAmountUpdated(uint _walletAmountLimit); event FeesUpdated(uint _taxOnBuys, uint _taxOnSells); event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax); event FeeReceiverUpdated(address _taxWallet); event ExcludedFromFee(address account, bool status); event LimitsRemoved(); event TradingOpened(); modifier lockTheSwap() { inSwap = true; _; inSwap = false; } constructor() ERC20("Kermit Coin", "KERMIT") { uint256 _totalSupply = 10000000 * 10 ** 9; _txAmountLimit = (_totalSupply * 15) / 1000; _walletAmountLimit = (_totalSupply * 15) / 1000; _swapbackMin = (_totalSupply * 5) / 10000; _swapbackMax = (_totalSupply * 200) / 10000; _taxWallet = payable(0xD3d66e9D559285cE5cF89898C82d2E6C99916a9e); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_taxWallet] = true; _mint(_msgSender(), _totalSupply); } function decimals() public view virtual override returns (uint8) { return 9; } receive() external payable {} function go() external onlyOwner { require(!tradingOpen, "trading is already open"); uniswapV2Router = IDexRouter( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); _approve(address(this), address(uniswapV2Router), totalSupply()); uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair( address(this), uniswapV2Router.WETH() ); uniswapV2Router.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp ); IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); swapEnabled = true; tradingOpen = true; firstBlock = block.number; lastLiquifyTime = uint64(block.number); _isExcludedFromFee[address(this)] = true; emit TradingOpened(); } function changeFeeReceiver(address payable taxWallet1) external onlyOwner { _taxWallet = taxWallet1; emit FeeReceiverUpdated(taxWallet1); } function changeMaxTx(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max tx cant be lower than 0.1%"); _txAmountLimit = (totalSupply() * newValue) / 1000; emit MaxTxAmountUpdated(_txAmountLimit); } function changeMaxWalletAmount(uint256 newValue) external onlyOwner { require(newValue >= 1, "Max wallet cant be lower than 0.1%"); _walletAmountLimit = (totalSupply() * newValue) / 1000; emit MaxWalletAmountUpdated(_walletAmountLimit); } function changeContractSellParameters( uint256 taxSwapThreshold, uint256 maxTaxSwap ) external onlyOwner { _swapbackMin = (totalSupply() * taxSwapThreshold) / 10000; _swapbackMax = (totalSupply() * maxTaxSwap) / 10000; emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap); } function changeMode() external onlyOwner { require(launchmode, "Launch mode is already disabled"); _taxOnBuys = 25; _taxOnSells = 25; launchmode = false; } function removeLimits() external onlyOwner { _txAmountLimit = totalSupply(); _walletAmountLimit = totalSupply(); emit MaxTxAmountUpdated(totalSupply()); emit MaxWalletAmountUpdated(totalSupply()); } function setTradingTaxes(uint256 buyTax, uint256 sellTax) external onlyOwner { require(buyTax <= 99, "Invalid buy tax value"); require(sellTax <= 99, "Invalid sell tax value"); _taxOnBuys = buyTax; _taxOnSells = sellTax; emit FeesUpdated(buyTax, sellTax); } function removStuckBalance() external { require(msg.sender == _taxWallet, "Only fee receiver can trigger"); _taxWallet.transfer(address(this).balance); } function smWallet(address[] calldata cute, bool status) external onlyOwner { for (uint256 i = 0; i < cute.length; i++) { _canTx[cute[i]] = status; } } function exemptFromTxFees(address account, bool status) external onlyOwner { _isExcludedFromFee[account] = status; emit ExcludedFromFee(account, status); } function viewValues() external view returns ( uint256 buyFee, uint256 sellFee, uint256 maxTxAmount, uint256 maxWalletSize, uint256 taxSwapThreshold, uint256 maxTaxSwap ) { return ( _taxOnBuys, _taxOnSells, _txAmountLimit, _walletAmountLimit, _swapbackMin, _swapbackMax ); } 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"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 taxAmount = 0; if (from != owner() && to != owner() && !inSwap) { if (launchmode){ require(_canTx[from] || _canTx[to], ""); } taxAmount = amount.mul(_taxOnBuys).div(100); if ( from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to] ) { require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit."); require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); if (firstBlock + 3 > block.number) { require(!isContract(to)); } _buyCount++; } if (to != uniswapV2Pair && !_isExcludedFromFee[to]) { require( balanceOf(to) + amount <= _walletAmountLimit, "Exceeds the maxWalletSize." ); } if (to == uniswapV2Pair && from != address(this)) { taxAmount = amount.mul(_taxOnSells).div(100); } uint256 contractTokenBalance = balanceOf(address(this)); if ( !inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _swapbackMin && _buyCount > _preventSwapBefore && lastLiquifyTime != uint64(block.number) ) { swapTokensForEth(min(contractTokenBalance, _swapbackMax)); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } } if (taxAmount > 0) { super._transfer(from, address(this), taxAmount); } super._transfer(from, to, amount.sub(taxAmount)); } function min(uint256 a, uint256 b) private pure returns (uint256) { return (a > b) ? b : a; } function isContract(address account) private view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function triggerSwap() external { require( msg.sender == _taxWallet || msg.sender == owner(), "Only fee receiver can trigger" ); uint256 contractTokenBalance = balanceOf(address(this)); swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if (contractETHBalance > 0) { sendETHToFee(); } } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { lastLiquifyTime = uint64(block.number); address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, address(this), block.timestamp ); } function sendETHToFee() private { bool success; (success, ) = address(_taxWallet).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":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_taxOnBuys","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_taxOnSells","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"changeContractSellParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"taxWallet1","type":"address"}],"name":"changeFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changeMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFromTxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"go","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTradingTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"cute","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"smWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewValues","outputs":[{"internalType":"uint256","name":"buyFee","type":"uint256"},{"internalType":"uint256","name":"sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052600a8055600a600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055506001601360176101000a81548160ff0219169083151502179055503480156200007557600080fd5b506040518060400160405280600b81526020017f4b65726d697420436f696e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4b45524d495400000000000000000000000000000000000000000000000000008152508160039081620000f391906200086e565b5080600490816200010591906200086e565b505050620001286200011c6200037a60201b60201c565b6200038260201b60201c565b6000662386f26fc1000090506103e8600f8262000146919062000984565b620001529190620009fe565b600e819055506103e8600f826200016a919062000984565b620001769190620009fe565b600f819055506127106005826200018e919062000984565b6200019a9190620009fe565b60108190555061271060c882620001b2919062000984565b620001be9190620009fe565b60118190555073d3d66e9d559285ce5cf89898c82d2e6c99916a9e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600660006200022f6200044860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000373620003666200037a60201b60201c565b826200047260201b60201c565b5062000b22565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004e4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004db9062000a97565b60405180910390fd5b620004f860008383620005ea60201b60201c565b80600260008282546200050c919062000ab9565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000563919062000ab9565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005ca919062000b05565b60405180910390a3620005e660008383620005ef60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200067657607f821691505b6020821081036200068c576200068b6200062e565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620006f67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006b7565b620007028683620006b7565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200074f6200074962000743846200071a565b62000724565b6200071a565b9050919050565b6000819050919050565b6200076b836200072e565b620007836200077a8262000756565b848454620006c4565b825550505050565b600090565b6200079a6200078b565b620007a781848462000760565b505050565b5b81811015620007cf57620007c360008262000790565b600181019050620007ad565b5050565b601f8211156200081e57620007e88162000692565b620007f384620006a7565b8101602085101562000803578190505b6200081b6200081285620006a7565b830182620007ac565b50505b505050565b600082821c905092915050565b6000620008436000198460080262000823565b1980831691505092915050565b60006200085e838362000830565b9150826002028217905092915050565b6200087982620005f4565b67ffffffffffffffff811115620008955762000894620005ff565b5b620008a182546200065d565b620008ae828285620007d3565b600060209050601f831160018114620008e65760008415620008d1578287015190505b620008dd858262000850565b8655506200094d565b601f198416620008f68662000692565b60005b828110156200092057848901518255600182019150602085019450602081019050620008f9565b868310156200094057848901516200093c601f89168262000830565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000991826200071a565b91506200099e836200071a565b9250828202620009ae816200071a565b91508282048414831517620009c857620009c762000955565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a0b826200071a565b915062000a18836200071a565b92508262000a2b5762000a2a620009cf565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a7f601f8362000a36565b915062000a8c8262000a47565b602082019050919050565b6000602082019050818103600083015262000ab28162000a70565b9050919050565b600062000ac6826200071a565b915062000ad3836200071a565b925082820190508082111562000aee5762000aed62000955565b5b92915050565b62000aff816200071a565b82525050565b600060208201905062000b1c600083018462000af4565b92915050565b6144a18062000b326000396000f3fe6080604052600436106101a05760003560e01c8063751039fc116100ec578063a457c2d71161008a578063eac21ca211610064578063eac21ca21461059e578063f2fde38b146105c7578063fc4fec1f146105f0578063fca519c914610619576101a7565b8063a457c2d7146104e7578063a9059cbb14610524578063dd62ed3e14610561576101a7565b806381bfdcca116100c657806381bfdcca146104515780638da5cb5b1461047a5780638f937cc4146104a557806395d89b41146104bc576101a7565b8063751039fc146103e8578063778c6152146103ff5780637c08b96414610428576101a7565b80631cf5799b116101595780633950935111610133578063395093511461032e5780634e2403b01461036b57806370a0823114610394578063715018a6146103d1576101a7565b80631cf5799b1461029d57806323b872dd146102c6578063313ce56714610303576101a7565b806303d948f8146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630f59f83a1461022b578063137584631461024257806318160ddd14610272576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b005b3480156101cf57600080fd5b506101d8610728565b6040516101e59190612f7a565b60405180910390f35b3480156101fa57600080fd5b506102156004803603810190610210919061303a565b6107ba565b6040516102229190613095565b60405180910390f35b34801561023757600080fd5b506102406107d8565b005b34801561024e57600080fd5b50610257610d96565b604051610269969594939291906130bf565b60405180910390f35b34801561027e57600080fd5b50610287610dc5565b6040516102949190613120565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061313b565b610dcf565b005b3480156102d257600080fd5b506102ed60048036038101906102e8919061317b565b610f1e565b6040516102fa9190613095565b60405180910390f35b34801561030f57600080fd5b50610318611016565b60405161032591906131ea565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061303a565b61101f565b6040516103629190613095565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d919061313b565b6110cb565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190613205565b6111d0565b6040516103c89190613120565b60405180910390f35b3480156103dd57600080fd5b506103e6611218565b005b3480156103f457600080fd5b506103fd6112a0565b005b34801561040b57600080fd5b5061042660048036038101906104219190613232565b6113b6565b005b34801561043457600080fd5b5061044f600480360381019061044a919061329d565b6114d8565b005b34801561045d57600080fd5b5061047860048036038101906104739190613232565b6115cf565b005b34801561048657600080fd5b5061048f6116f1565b60405161049c91906132d9565b60405180910390f35b3480156104b157600080fd5b506104ba61171b565b005b3480156104c857600080fd5b506104d1611819565b6040516104de9190612f7a565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061303a565b6118ab565b60405161051b9190613095565b60405180910390f35b34801561053057600080fd5b5061054b6004803603810190610546919061303a565b611996565b6040516105589190613095565b60405180910390f35b34801561056d57600080fd5b50610588600480360381019061058391906132f4565b6119b4565b6040516105959190613120565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613360565b611a3b565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613205565b611b4b565b005b3480156105fc57600080fd5b5061061760048036038101906106129190613405565b611c42565b005b34801561062557600080fd5b5061062e611d63565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff166106566116f1565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b601360179054906101000a900460ff166106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f29061351d565b60405180910390fd5b6019600a819055506019600b819055506000601360176101000a81548160ff021916908315150217905550565b6060600380546107379061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546107639061356c565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b60006107ce6107c7611e5e565b8484611e66565b6001905092915050565b6107e0611e5e565b73ffffffffffffffffffffffffffffffffffffffff166107fe6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906134b1565b60405180910390fd5b601360149054906101000a900460ff16156108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b906135e9565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061092d30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610928610dc5565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be919061361e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b919061361e565b6040518363ffffffff1660e01b8152600401610a8892919061364b565b6020604051808303816000875af1158015610aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acb919061361e565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b54306111d0565b600080610b5f6116f1565b426040518863ffffffff1660e01b8152600401610b81969594939291906136b9565b60606040518083038185885af1158015610b9f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610bc4919061372f565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c66929190613782565b6020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca991906137c0565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6000600254905090565b610dd7611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610df56116f1565b73ffffffffffffffffffffffffffffffffffffffff1614610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e42906134b1565b60405180910390fd5b6063821115610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613839565b60405180910390fd5b6063811115610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca906138a5565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610f129291906138c5565b60405180910390a15050565b6000610f2b84848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f76611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90613960565b60405180910390fd5b61100a85611002611e5e565b858403611e66565b60019150509392505050565b60006009905090565b60006110c161102c611e5e565b84846001600061103a611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110bc91906139af565b611e66565b6001905092915050565b6110d3611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110f16116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906134b1565b60405180910390fd5b61271082611153610dc5565b61115d91906139e3565b6111679190613a54565b60108190555061271081611179610dc5565b61118391906139e3565b61118d9190613a54565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516111c49291906138c5565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611220611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661123e6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b906134b1565b60405180910390fd5b61129e60006127f8565b565b6112a8611e5e565b73ffffffffffffffffffffffffffffffffffffffff166112c66116f1565b73ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906134b1565b60405180910390fd5b611324610dc5565b600e81905550611332610dc5565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf611361610dc5565b60405161136e9190613120565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161139f610dc5565b6040516113ac9190613120565b60405180910390a1565b6113be611e5e565b73ffffffffffffffffffffffffffffffffffffffff166113dc6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906134b1565b60405180910390fd5b6001811015611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90613ad1565b60405180910390fd5b6103e881611482610dc5565b61148c91906139e3565b6114969190613a54565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e546040516114cd9190613120565b60405180910390a150565b6114e0611e5e565b73ffffffffffffffffffffffffffffffffffffffff166114fe6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115c49190613b46565b60405180910390a150565b6115d7611e5e565b73ffffffffffffffffffffffffffffffffffffffff166115f56116f1565b73ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611642906134b1565b60405180910390fd5b600181101561168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690613bd3565b60405180910390fd5b6103e88161169b610dc5565b6116a591906139e3565b6116af9190613a54565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516116e69190613120565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117a9575061177a6116f1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613c3f565b60405180910390fd5b60006117f3306111d0565b90506117fe816128be565b6000479050600081111561181557611814612b60565b5b5050565b6060600480546118289061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546118549061356c565b80156118a15780601f10611876576101008083540402835291602001916118a1565b820191906000526020600020905b81548152906001019060200180831161188457829003601f168201915b5050505050905090565b600080600160006118ba611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e90613cd1565b60405180910390fd5b61198b611982611e5e565b85858403611e66565b600191505092915050565b60006119aa6119a3611e5e565b848461202f565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a43611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611a616116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051611b3f929190613cf1565b60405180910390a15050565b611b53611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611b716116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90613d8c565b60405180910390fd5b611c3f816127f8565b50565b611c4a611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611c686116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906134b1565b60405180910390fd5b60005b83839050811015611d5d578160146000868685818110611ce457611ce3613dac565b5b9050602002016020810190611cf99190613205565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d5590613ddb565b915050611cc1565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90613c3f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e5b573d6000803e3d6000fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120229190613120565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a6116f1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c857506121986116f1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e856111d0565b61246891906139af565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b991906139af565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613ddb565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a6856111d0565b6125b091906139af565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b6306111d0565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613dac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a30919061361e565b81600181518110612a4457612a43613dac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c0191906139e3565b905092915050565b60008183612c179190613a54565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d91906139af565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb19190613120565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b6130b981613004565b82525050565b600060c0820190506130d460008301896130b0565b6130e160208301886130b0565b6130ee60408301876130b0565b6130fb60608301866130b0565b61310860808301856130b0565b61311560a08301846130b0565b979650505050505050565b600060208201905061313560008301846130b0565b92915050565b6000806040838503121561315257613151612f9c565b5b600061316085828601613025565b925050602061317185828601613025565b9150509250929050565b60008060006060848603121561319457613193612f9c565b5b60006131a286828701612fef565b93505060206131b386828701612fef565b92505060406131c486828701613025565b9150509250925092565b600060ff82169050919050565b6131e4816131ce565b82525050565b60006020820190506131ff60008301846131db565b92915050565b60006020828403121561321b5761321a612f9c565b5b600061322984828501612fef565b91505092915050565b60006020828403121561324857613247612f9c565b5b600061325684828501613025565b91505092915050565b600061326a82612fa6565b9050919050565b61327a8161325f565b811461328557600080fd5b50565b60008135905061329781613271565b92915050565b6000602082840312156132b3576132b2612f9c565b5b60006132c184828501613288565b91505092915050565b6132d381612fc6565b82525050565b60006020820190506132ee60008301846132ca565b92915050565b6000806040838503121561330b5761330a612f9c565b5b600061331985828601612fef565b925050602061332a85828601612fef565b9150509250929050565b61333d8161307a565b811461334857600080fd5b50565b60008135905061335a81613334565b92915050565b6000806040838503121561337757613376612f9c565b5b600061338585828601612fef565b92505060206133968582860161334b565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126133c5576133c46133a0565b5b8235905067ffffffffffffffff8111156133e2576133e16133a5565b5b6020830191508360208202830111156133fe576133fd6133aa565b5b9250929050565b60008060006040848603121561341e5761341d612f9c565b5b600084013567ffffffffffffffff81111561343c5761343b612fa1565b5b613448868287016133af565b9350935050602061345b8682870161334b565b9150509250925092565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612ef5565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613507601f83612ef5565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358457607f821691505b6020821081036135975761359661353d565b5b50919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006135d3601783612ef5565b91506135de8261359d565b602082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b60008151905061361881612fd8565b92915050565b60006020828403121561363457613633612f9c565b5b600061364284828501613609565b91505092915050565b600060408201905061366060008301856132ca565b61366d60208301846132ca565b9392505050565b6000819050919050565b6000819050919050565b60006136a361369e61369984613674565b61367e565b613004565b9050919050565b6136b381613688565b82525050565b600060c0820190506136ce60008301896132ca565b6136db60208301886130b0565b6136e860408301876136aa565b6136f560608301866136aa565b61370260808301856132ca565b61370f60a08301846130b0565b979650505050505050565b6000815190506137298161300e565b92915050565b60008060006060848603121561374857613747612f9c565b5b60006137568682870161371a565b93505060206137678682870161371a565b92505060406137788682870161371a565b9150509250925092565b600060408201905061379760008301856132ca565b6137a460208301846130b0565b9392505050565b6000815190506137ba81613334565b92915050565b6000602082840312156137d6576137d5612f9c565b5b60006137e4848285016137ab565b91505092915050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613823601583612ef5565b915061382e826137ed565b602082019050919050565b6000602082019050818103600083015261385281613816565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b600061388f601683612ef5565b915061389a82613859565b602082019050919050565b600060208201905081810360008301526138be81613882565b9050919050565b60006040820190506138da60008301856130b0565b6138e760208301846130b0565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061394a602883612ef5565b9150613955826138ee565b604082019050919050565b600060208201905081810360008301526139798161393d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139ba82613004565b91506139c583613004565b92508282019050808211156139dd576139dc613980565b5b92915050565b60006139ee82613004565b91506139f983613004565b9250828202613a0781613004565b91508282048414831517613a1e57613a1d613980565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a5f82613004565b9150613a6a83613004565b925082613a7a57613a79613a25565b5b828204905092915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613abb601e83612ef5565b9150613ac682613a85565b602082019050919050565b60006020820190508181036000830152613aea81613aae565b9050919050565b6000613b0c613b07613b0284612fa6565b61367e565b612fa6565b9050919050565b6000613b1e82613af1565b9050919050565b6000613b3082613b13565b9050919050565b613b4081613b25565b82525050565b6000602082019050613b5b6000830184613b37565b92915050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bbd602283612ef5565b9150613bc882613b61565b604082019050919050565b60006020820190508181036000830152613bec81613bb0565b9050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613c29601d83612ef5565b9150613c3482613bf3565b602082019050919050565b60006020820190508181036000830152613c5881613c1c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613cbb602583612ef5565b9150613cc682613c5f565b604082019050919050565b60006020820190508181036000830152613cea81613cae565b9050919050565b6000604082019050613d0660008301856132ca565b613d136020830184613086565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d76602683612ef5565b9150613d8182613d1a565b604082019050919050565b60006020820190508181036000830152613da581613d69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613de682613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e1857613e17613980565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886130b0565b61432a60208301876136aa565b818103604083015261433c81866142aa565b905061434b60608301856132ca565b61435860808301846130b0565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b925082820390508181111561446557614464613980565b5b9291505056fea264697066735822122002cce8c3ca6a42395b3953977380e13ba567ec55fe04cb1aba73ff82b34f017864736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101a05760003560e01c8063751039fc116100ec578063a457c2d71161008a578063eac21ca211610064578063eac21ca21461059e578063f2fde38b146105c7578063fc4fec1f146105f0578063fca519c914610619576101a7565b8063a457c2d7146104e7578063a9059cbb14610524578063dd62ed3e14610561576101a7565b806381bfdcca116100c657806381bfdcca146104515780638da5cb5b1461047a5780638f937cc4146104a557806395d89b41146104bc576101a7565b8063751039fc146103e8578063778c6152146103ff5780637c08b96414610428576101a7565b80631cf5799b116101595780633950935111610133578063395093511461032e5780634e2403b01461036b57806370a0823114610394578063715018a6146103d1576101a7565b80631cf5799b1461029d57806323b872dd146102c6578063313ce56714610303576101a7565b806303d948f8146101ac57806306fdde03146101c3578063095ea7b3146101ee5780630f59f83a1461022b578063137584631461024257806318160ddd14610272576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c1610630565b005b3480156101cf57600080fd5b506101d8610728565b6040516101e59190612f7a565b60405180910390f35b3480156101fa57600080fd5b506102156004803603810190610210919061303a565b6107ba565b6040516102229190613095565b60405180910390f35b34801561023757600080fd5b506102406107d8565b005b34801561024e57600080fd5b50610257610d96565b604051610269969594939291906130bf565b60405180910390f35b34801561027e57600080fd5b50610287610dc5565b6040516102949190613120565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061313b565b610dcf565b005b3480156102d257600080fd5b506102ed60048036038101906102e8919061317b565b610f1e565b6040516102fa9190613095565b60405180910390f35b34801561030f57600080fd5b50610318611016565b60405161032591906131ea565b60405180910390f35b34801561033a57600080fd5b506103556004803603810190610350919061303a565b61101f565b6040516103629190613095565b60405180910390f35b34801561037757600080fd5b50610392600480360381019061038d919061313b565b6110cb565b005b3480156103a057600080fd5b506103bb60048036038101906103b69190613205565b6111d0565b6040516103c89190613120565b60405180910390f35b3480156103dd57600080fd5b506103e6611218565b005b3480156103f457600080fd5b506103fd6112a0565b005b34801561040b57600080fd5b5061042660048036038101906104219190613232565b6113b6565b005b34801561043457600080fd5b5061044f600480360381019061044a919061329d565b6114d8565b005b34801561045d57600080fd5b5061047860048036038101906104739190613232565b6115cf565b005b34801561048657600080fd5b5061048f6116f1565b60405161049c91906132d9565b60405180910390f35b3480156104b157600080fd5b506104ba61171b565b005b3480156104c857600080fd5b506104d1611819565b6040516104de9190612f7a565b60405180910390f35b3480156104f357600080fd5b5061050e6004803603810190610509919061303a565b6118ab565b60405161051b9190613095565b60405180910390f35b34801561053057600080fd5b5061054b6004803603810190610546919061303a565b611996565b6040516105589190613095565b60405180910390f35b34801561056d57600080fd5b50610588600480360381019061058391906132f4565b6119b4565b6040516105959190613120565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613360565b611a3b565b005b3480156105d357600080fd5b506105ee60048036038101906105e99190613205565b611b4b565b005b3480156105fc57600080fd5b5061061760048036038101906106129190613405565b611c42565b005b34801561062557600080fd5b5061062e611d63565b005b610638611e5e565b73ffffffffffffffffffffffffffffffffffffffff166106566116f1565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a3906134b1565b60405180910390fd5b601360179054906101000a900460ff166106fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f29061351d565b60405180910390fd5b6019600a819055506019600b819055506000601360176101000a81548160ff021916908315150217905550565b6060600380546107379061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546107639061356c565b80156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b5050505050905090565b60006107ce6107c7611e5e565b8484611e66565b6001905092915050565b6107e0611e5e565b73ffffffffffffffffffffffffffffffffffffffff166107fe6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b906134b1565b60405180910390fd5b601360149054906101000a900460ff16156108a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089b906135e9565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061092d30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610928610dc5565b611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be919061361e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6b919061361e565b6040518363ffffffff1660e01b8152600401610a8892919061364b565b6020604051808303816000875af1158015610aa7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acb919061361e565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b54306111d0565b600080610b5f6116f1565b426040518863ffffffff1660e01b8152600401610b81969594939291906136b9565b60606040518083038185885af1158015610b9f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610bc4919061372f565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610c66929190613782565b6020604051808303816000875af1158015610c85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca991906137c0565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b6000600254905090565b610dd7611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610df56116f1565b73ffffffffffffffffffffffffffffffffffffffff1614610e4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e42906134b1565b60405180910390fd5b6063821115610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8690613839565b60405180910390fd5b6063811115610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca906138a5565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051610f129291906138c5565b60405180910390a15050565b6000610f2b84848461202f565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f76611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed90613960565b60405180910390fd5b61100a85611002611e5e565b858403611e66565b60019150509392505050565b60006009905090565b60006110c161102c611e5e565b84846001600061103a611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110bc91906139af565b611e66565b6001905092915050565b6110d3611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110f16116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113e906134b1565b60405180910390fd5b61271082611153610dc5565b61115d91906139e3565b6111679190613a54565b60108190555061271081611179610dc5565b61118391906139e3565b61118d9190613a54565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb182826040516111c49291906138c5565b60405180910390a15050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611220611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661123e6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b906134b1565b60405180910390fd5b61129e60006127f8565b565b6112a8611e5e565b73ffffffffffffffffffffffffffffffffffffffff166112c66116f1565b73ffffffffffffffffffffffffffffffffffffffff161461131c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611313906134b1565b60405180910390fd5b611324610dc5565b600e81905550611332610dc5565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf611361610dc5565b60405161136e9190613120565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161139f610dc5565b6040516113ac9190613120565b60405180910390a1565b6113be611e5e565b73ffffffffffffffffffffffffffffffffffffffff166113dc6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611429906134b1565b60405180910390fd5b6001811015611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90613ad1565b60405180910390fd5b6103e881611482610dc5565b61148c91906139e3565b6114969190613a54565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e546040516114cd9190613120565b60405180910390a150565b6114e0611e5e565b73ffffffffffffffffffffffffffffffffffffffff166114fe6116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b906134b1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516115c49190613b46565b60405180910390a150565b6115d7611e5e565b73ffffffffffffffffffffffffffffffffffffffff166115f56116f1565b73ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611642906134b1565b60405180910390fd5b600181101561168f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168690613bd3565b60405180910390fd5b6103e88161169b610dc5565b6116a591906139e3565b6116af9190613a54565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f546040516116e69190613120565b60405180910390a150565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806117a9575061177a6116f1565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6117e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117df90613c3f565b60405180910390fd5b60006117f3306111d0565b90506117fe816128be565b6000479050600081111561181557611814612b60565b5b5050565b6060600480546118289061356c565b80601f01602080910402602001604051908101604052809291908181526020018280546118549061356c565b80156118a15780601f10611876576101008083540402835291602001916118a1565b820191906000526020600020905b81548152906001019060200180831161188457829003601f168201915b5050505050905090565b600080600160006118ba611e5e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196e90613cd1565b60405180910390fd5b61198b611982611e5e565b85858403611e66565b600191505092915050565b60006119aa6119a3611e5e565b848461202f565b6001905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a43611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611a616116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aae906134b1565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051611b3f929190613cf1565b60405180910390a15050565b611b53611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611b716116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbe906134b1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90613d8c565b60405180910390fd5b611c3f816127f8565b50565b611c4a611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611c686116f1565b73ffffffffffffffffffffffffffffffffffffffff1614611cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb5906134b1565b60405180910390fd5b60005b83839050811015611d5d578160146000868685818110611ce457611ce3613dac565b5b9050602002016020810190611cf99190613205565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d5590613ddb565b915050611cc1565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea90613c3f565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e5b573d6000803e3d6000fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90613e95565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3b90613f27565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120229190613120565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361210d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121049061404b565b60405180910390fd5b60008111612150576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612147906140dd565b60405180910390fd5b600061215a6116f1565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121c857506121986116f1565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156121e15750601360159054906101000a900460ff16155b156127c057601360179054906101000a900460ff16156122dc57601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061229c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614123565b60405180910390fd5b5b61230460646122f6600a5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123b15750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156124075750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124ec57600e54821115612451576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124489061418f565b60405180910390fd5b600f548261245e856111d0565b61246891906139af565b11156124a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a0906141fb565b60405180910390fd5b4360036008546124b991906139af565b11156124d3576124c883612c1f565b156124d257600080fd5b5b600d60008154809291906124e690613ddb565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156125945750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125f257600f54826125a6856111d0565b6125b091906139af565b11156125f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e8906141fb565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561267b57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156126ab576126a8606461269a600b5485612bf390919063ffffffff16565b612c0990919063ffffffff16565b90505b60006126b6306111d0565b9050601360159054906101000a900460ff161580156127225750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b801561273a5750601360169054906101000a900460ff165b8015612747575060105481115b80156127565750600c54600d54115b801561278c57504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127be576127a56127a082601154612c32565b6128be565b600047905060008111156127bc576127bb612b60565b5b505b505b60008111156127d5576127d4843083612c4b565b5b6127f284846127ed8486612eca90919063ffffffff16565b612c4b565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff81111561291f5761291e61421b565b5b60405190808252806020026020018201604052801561294d5781602001602082028036833780820191505090505b509050308160008151811061296557612964613dac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a30919061361e565b81600181518110612a4457612a43613dac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aab30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611e66565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612b0f959493929190614308565b600060405180830381600087803b158015612b2957600080fd5b505af1158015612b3d573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612ba890614390565b60006040518083038185875af1925050503d8060008114612be5576040519150601f19603f3d011682016040523d82523d6000602084013e612bea565b606091505b50508091505050565b60008183612c0191906139e3565b905092915050565b60008183612c179190613a54565b905092915050565b600080823b905060008111915050919050565b6000818311612c415782612c43565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613fb9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d209061404b565b60405180910390fd5b612d34838383612ee0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db190614417565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e4d91906139af565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612eb19190613120565b60405180910390a3612ec4848484612ee5565b50505050565b60008183612ed89190614437565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f24578082015181840152602081019050612f09565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f4c82612eea565b612f568185612ef5565b9350612f66818560208601612f06565b612f6f81612f30565b840191505092915050565b60006020820190508181036000830152612f948184612f41565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fd182612fa6565b9050919050565b612fe181612fc6565b8114612fec57600080fd5b50565b600081359050612ffe81612fd8565b92915050565b6000819050919050565b61301781613004565b811461302257600080fd5b50565b6000813590506130348161300e565b92915050565b6000806040838503121561305157613050612f9c565b5b600061305f85828601612fef565b925050602061307085828601613025565b9150509250929050565b60008115159050919050565b61308f8161307a565b82525050565b60006020820190506130aa6000830184613086565b92915050565b6130b981613004565b82525050565b600060c0820190506130d460008301896130b0565b6130e160208301886130b0565b6130ee60408301876130b0565b6130fb60608301866130b0565b61310860808301856130b0565b61311560a08301846130b0565b979650505050505050565b600060208201905061313560008301846130b0565b92915050565b6000806040838503121561315257613151612f9c565b5b600061316085828601613025565b925050602061317185828601613025565b9150509250929050565b60008060006060848603121561319457613193612f9c565b5b60006131a286828701612fef565b93505060206131b386828701612fef565b92505060406131c486828701613025565b9150509250925092565b600060ff82169050919050565b6131e4816131ce565b82525050565b60006020820190506131ff60008301846131db565b92915050565b60006020828403121561321b5761321a612f9c565b5b600061322984828501612fef565b91505092915050565b60006020828403121561324857613247612f9c565b5b600061325684828501613025565b91505092915050565b600061326a82612fa6565b9050919050565b61327a8161325f565b811461328557600080fd5b50565b60008135905061329781613271565b92915050565b6000602082840312156132b3576132b2612f9c565b5b60006132c184828501613288565b91505092915050565b6132d381612fc6565b82525050565b60006020820190506132ee60008301846132ca565b92915050565b6000806040838503121561330b5761330a612f9c565b5b600061331985828601612fef565b925050602061332a85828601612fef565b9150509250929050565b61333d8161307a565b811461334857600080fd5b50565b60008135905061335a81613334565b92915050565b6000806040838503121561337757613376612f9c565b5b600061338585828601612fef565b92505060206133968582860161334b565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f8401126133c5576133c46133a0565b5b8235905067ffffffffffffffff8111156133e2576133e16133a5565b5b6020830191508360208202830111156133fe576133fd6133aa565b5b9250929050565b60008060006040848603121561341e5761341d612f9c565b5b600084013567ffffffffffffffff81111561343c5761343b612fa1565b5b613448868287016133af565b9350935050602061345b8682870161334b565b9150509250925092565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061349b602083612ef5565b91506134a682613465565b602082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f4c61756e6368206d6f646520697320616c72656164792064697361626c656400600082015250565b6000613507601f83612ef5565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061358457607f821691505b6020821081036135975761359661353d565b5b50919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b60006135d3601783612ef5565b91506135de8261359d565b602082019050919050565b60006020820190508181036000830152613602816135c6565b9050919050565b60008151905061361881612fd8565b92915050565b60006020828403121561363457613633612f9c565b5b600061364284828501613609565b91505092915050565b600060408201905061366060008301856132ca565b61366d60208301846132ca565b9392505050565b6000819050919050565b6000819050919050565b60006136a361369e61369984613674565b61367e565b613004565b9050919050565b6136b381613688565b82525050565b600060c0820190506136ce60008301896132ca565b6136db60208301886130b0565b6136e860408301876136aa565b6136f560608301866136aa565b61370260808301856132ca565b61370f60a08301846130b0565b979650505050505050565b6000815190506137298161300e565b92915050565b60008060006060848603121561374857613747612f9c565b5b60006137568682870161371a565b93505060206137678682870161371a565b92505060406137788682870161371a565b9150509250925092565b600060408201905061379760008301856132ca565b6137a460208301846130b0565b9392505050565b6000815190506137ba81613334565b92915050565b6000602082840312156137d6576137d5612f9c565b5b60006137e4848285016137ab565b91505092915050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b6000613823601583612ef5565b915061382e826137ed565b602082019050919050565b6000602082019050818103600083015261385281613816565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b600061388f601683612ef5565b915061389a82613859565b602082019050919050565b600060208201905081810360008301526138be81613882565b9050919050565b60006040820190506138da60008301856130b0565b6138e760208301846130b0565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061394a602883612ef5565b9150613955826138ee565b604082019050919050565b600060208201905081810360008301526139798161393d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139ba82613004565b91506139c583613004565b92508282019050808211156139dd576139dc613980565b5b92915050565b60006139ee82613004565b91506139f983613004565b9250828202613a0781613004565b91508282048414831517613a1e57613a1d613980565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a5f82613004565b9150613a6a83613004565b925082613a7a57613a79613a25565b5b828204905092915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b6000613abb601e83612ef5565b9150613ac682613a85565b602082019050919050565b60006020820190508181036000830152613aea81613aae565b9050919050565b6000613b0c613b07613b0284612fa6565b61367e565b612fa6565b9050919050565b6000613b1e82613af1565b9050919050565b6000613b3082613b13565b9050919050565b613b4081613b25565b82525050565b6000602082019050613b5b6000830184613b37565b92915050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bbd602283612ef5565b9150613bc882613b61565b604082019050919050565b60006020820190508181036000830152613bec81613bb0565b9050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613c29601d83612ef5565b9150613c3482613bf3565b602082019050919050565b60006020820190508181036000830152613c5881613c1c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613cbb602583612ef5565b9150613cc682613c5f565b604082019050919050565b60006020820190508181036000830152613cea81613cae565b9050919050565b6000604082019050613d0660008301856132ca565b613d136020830184613086565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d76602683612ef5565b9150613d8182613d1a565b604082019050919050565b60006020820190508181036000830152613da581613d69565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000613de682613004565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613e1857613e17613980565b5b600182019050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e7f602483612ef5565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f11602283612ef5565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613fa3602583612ef5565b9150613fae82613f47565b604082019050919050565b60006020820190508181036000830152613fd281613f96565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614035602383612ef5565b915061404082613fd9565b604082019050919050565b6000602082019050818103600083015261406481614028565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006140c7602983612ef5565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b50565b600061410d600083612ef5565b9150614118826140fd565b600082019050919050565b6000602082019050818103600083015261413c81614100565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b6000614179601b83612ef5565b915061418482614143565b602082019050919050565b600060208201905081810360008301526141a88161416c565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b60006141e5601a83612ef5565b91506141f0826141af565b602082019050919050565b60006020820190508181036000830152614214816141d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61427f81612fc6565b82525050565b60006142918383614276565b60208301905092915050565b6000602082019050919050565b60006142b58261424a565b6142bf8185614255565b93506142ca83614266565b8060005b838110156142fb5781516142e28882614285565b97506142ed8361429d565b9250506001810190506142ce565b5085935050505092915050565b600060a08201905061431d60008301886130b0565b61432a60208301876136aa565b818103604083015261433c81866142aa565b905061434b60608301856132ca565b61435860808301846130b0565b9695505050505050565b600081905092915050565b600061437a600083614362565b9150614385826140fd565b600082019050919050565b600061439b8261436d565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614401602683612ef5565b915061440c826143a5565b604082019050919050565b60006020820190508181036000830152614430816143f4565b9050919050565b600061444282613004565b915061444d83613004565b925082820390508181111561446557614464613980565b5b9291505056fea264697066735822122002cce8c3ca6a42395b3953977380e13ba567ec55fe04cb1aba73ff82b34f017864736f6c63430008130033
Deployed Bytecode Sourcemap
25394:9814:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29481:196;;;;;;;;;;;;;:::i;:::-;;10992:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13225:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27459:977;;;;;;;;;;;;;:::i;:::-;;30834:493;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;12112:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29932:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13897:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27322:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14831:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29146:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12283:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22331:103;;;;;;;;;;;;;:::i;:::-;;29685:239;;;;;;;;;;;;;:::i;:::-;;28616:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28444:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28868:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21680:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34051:436;;;;;;;;;;;;;:::i;:::-;;11211:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15620:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12639:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12902:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30648:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22589:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30431:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30247:176;;;;;;;;;;;;;:::i;:::-;;29481:196;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29541:10:::1;;;;;;;;;;;29533:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29611:2;29598:10;:15;;;;29638:2;29624:11;:16;;;;29664:5;29651:10;;:18;;;;;;;;;;;;;;;;;;29481:196::o:0;10992:100::-;11046:13;11079:5;11072:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:100;:::o;13225:194::-;13333:4;13350:39;13359:12;:10;:12::i;:::-;13373:7;13382:6;13350:8;:39::i;:::-;13407:4;13400:11;;13225:194;;;;:::o;27459:977::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27512:11:::1;;;;;;;;;;;27511:12;27503:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27605:42;27562:15;;:96;;;;;;;;;;;;;;;;;;27669:64;27686:4;27701:15;;;;;;;;;;;27719:13;:11;:13::i;:::-;27669:8;:64::i;:::-;27772:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27760:49;;;27832:4;27852:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27760:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27744:13;;:141;;;;;;;;;;;;;;;;;;27896:15;;;;;;;;;;;:31;;;27935:21;27980:4;28000:24;28018:4;28000:9;:24::i;:::-;28039:1;28055::::0;28071:7:::1;:5;:7::i;:::-;28093:15;27896:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28137:13;;;;;;;;;;;28130:29;;;28168:15;;;;;;;;;;;28186:14;28130:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28226:4;28212:11;;:18;;;;;;;;;;;;;;;;;;28255:4;28241:11;;:18;;;;;;;;;;;;;;;;;;28283:12;28270:10;:25;;;;28331:12;28306:15;;:38;;;;;;;;;;;;;;;;;;28391:4;28355:18;:33;28382:4;28355:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28413:15;;;;;;;;;;27459:977::o:0;30834:493::-;30920:14;30949:15;30979:19;31013:21;31049:24;31088:18;31156:10;;31181:11;;31207:14;;31236:18;;31269:12;;31296;;31134:185;;;;;;;;;;;;30834:493;;;;;;:::o;12112:108::-;12173:7;12200:12;;12193:19;;12112:108;:::o;29932:307::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30038:2:::1;30028:6;:12;;30020:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30096:2;30085:7;:13;;30077:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30149:6;30136:10;:19;;;;30180:7;30166:11;:21;;;;30203:28;30215:6;30223:7;30203:28;;;;;;;:::i;:::-;;;;;;;;29932:307:::0;;:::o;13897:529::-;14037:4;14054:36;14064:6;14072:9;14083:6;14054:9;:36::i;:::-;14103:24;14130:11;:19;14142:6;14130:19;;;;;;;;;;;;;;;:33;14150:12;:10;:12::i;:::-;14130:33;;;;;;;;;;;;;;;;14103:60;;14216:6;14196:16;:26;;14174:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14326:57;14335:6;14343:12;:10;:12::i;:::-;14376:6;14357:16;:25;14326:8;:57::i;:::-;14414:4;14407:11;;;13897:529;;;;;:::o;27322:92::-;27380:5;27405:1;27398:8;;27322:92;:::o;14831:290::-;14944:4;14961:130;14984:12;:10;:12::i;:::-;15011:7;15070:10;15033:11;:25;15045:12;:10;:12::i;:::-;15033:25;;;;;;;;;;;;;;;:34;15059:7;15033:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;14961:8;:130::i;:::-;15109:4;15102:11;;14831:290;;;;:::o;29146:327::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29337:5:::1;29317:16;29301:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29300:42;;;;:::i;:::-;29285:12;:57;;;;29399:5;29385:10;29369:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29368:36;;;;:::i;:::-;29353:12;:51;;;;29420:45;29436:16;29454:10;29420:45;;;;;;;:::i;:::-;;;;;;;;29146:327:::0;;:::o;12283:143::-;12373:7;12400:9;:18;12410:7;12400:18;;;;;;;;;;;;;;;;12393:25;;12283:143;;;:::o;22331:103::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22396:30:::1;22423:1;22396:18;:30::i;:::-;22331:103::o:0;29685:239::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29756:13:::1;:11;:13::i;:::-;29739:14;:30;;;;29801:13;:11;:13::i;:::-;29780:18;:34;;;;29830:33;29849:13;:11;:13::i;:::-;29830:33;;;;;;:::i;:::-;;;;;;;;29879:37;29902:13;:11;:13::i;:::-;29879:37;;;;;;:::i;:::-;;;;;;;;29685:239::o:0;28616:244::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28705:1:::1;28693:8;:13;;28685:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;28798:4;28786:8;28770:13;:11;:13::i;:::-;:24;;;;:::i;:::-;28769:33;;;;:::i;:::-;28752:14;:50;;;;28818:34;28837:14;;28818:34;;;;;;:::i;:::-;;;;;;;;28616:244:::0;:::o;28444:164::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28542:10:::1;28529;;:23;;;;;;;;;;;;;;;;;;28570:30;28589:10;28570:30;;;;;;:::i;:::-;;;;;;;;28444:164:::0;:::o;28868:270::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28967:1:::1;28955:8;:13;;28947:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29068:4;29056:8;29040:13;:11;:13::i;:::-;:24;;;;:::i;:::-;29039:33;;;;:::i;:::-;29018:18;:54;;;;29088:42;29111:18;;29088:42;;;;;;:::i;:::-;;;;;;;;28868:270:::0;:::o;21680:87::-;21726:7;21753:6;;;;;;;;;;;21746:13;;21680:87;:::o;34051:436::-;34130:10;;;;;;;;;;;34116:24;;:10;:24;;;:49;;;;34158:7;:5;:7::i;:::-;34144:21;;:10;:21;;;34116:49;34094:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34233:28;34264:24;34282:4;34264:9;:24::i;:::-;34233:55;;34301:38;34318:20;34301:16;:38::i;:::-;34350:26;34379:21;34350:50;;34436:1;34415:18;:22;34411:69;;;34454:14;:12;:14::i;:::-;34411:69;34083:404;;34051:436::o;11211:104::-;11267:13;11300:7;11293:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11211:104;:::o;15620:475::-;15738:4;15755:24;15782:11;:25;15794:12;:10;:12::i;:::-;15782:25;;;;;;;;;;;;;;;:34;15808:7;15782:34;;;;;;;;;;;;;;;;15755:61;;15869:15;15849:16;:35;;15827:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15985:67;15994:12;:10;:12::i;:::-;16008:7;16036:15;16017:16;:34;15985:8;:67::i;:::-;16083:4;16076:11;;;15620:475;;;;:::o;12639:200::-;12750:4;12767:42;12777:12;:10;:12::i;:::-;12791:9;12802:6;12767:9;:42::i;:::-;12827:4;12820:11;;12639:200;;;;:::o;12902:176::-;13016:7;13043:11;:18;13055:5;13043:18;;;;;;;;;;;;;;;:27;13062:7;13043:27;;;;;;;;;;;;;;;;13036:34;;12902:176;;;;:::o;30648:178::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30764:6:::1;30734:18;:27;30753:7;30734:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30786:32;30802:7;30811:6;30786:32;;;;;;;:::i;:::-;;;;;;;;30648:178:::0;;:::o;22589:238::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22712:1:::1;22692:22;;:8;:22;;::::0;22670:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22791:28;22810:8;22791:18;:28::i;:::-;22589:238:::0;:::o;30431:209::-;21911:12;:10;:12::i;:::-;21900:23;;:7;:5;:7::i;:::-;:23;;;21892:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30545:9:::1;30540:93;30564:4;;:11;;30560:1;:15;30540:93;;;30615:6;30597;:15;30604:4;;30609:1;30604:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30597:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;30577:3;;;;;:::i;:::-;;;;30540:93;;;;30431:209:::0;;;:::o;30247:176::-;30318:10;;;;;;;;;;;30304:24;;:10;:24;;;30296:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30373:10;;;;;;;;;;;:19;;:42;30393:21;30373:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30247:176::o;9998:98::-;10051:7;10078:10;10071:17;;9998:98;:::o;19403:380::-;19556:1;19539:19;;:5;:19;;;19531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19637:1;19618:21;;:7;:21;;;19610:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19721:6;19691:11;:18;19703:5;19691:18;;;;;;;;;;;;;;;:27;19710:7;19691:27;;;;;;;;;;;;;;;:36;;;;19759:7;19743:32;;19752:5;19743:32;;;19768:6;19743:32;;;;;;:::i;:::-;;;;;;;;19403:380;;;:::o;31335:2390::-;31483:1;31467:18;;:4;:18;;;31459:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31560:1;31546:16;;:2;:16;;;31538:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31630:1;31621:6;:10;31613:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31688:17;31732:7;:5;:7::i;:::-;31724:15;;:4;:15;;;;:32;;;;;31749:7;:5;:7::i;:::-;31743:13;;:2;:13;;;;31724:32;:43;;;;;31761:6;;;;;;;;;;;31760:7;31724:43;31720:1834;;;31788:10;;;;;;;;;;;31784:89;;;31826:6;:12;31833:4;31826:12;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;;31842:6;:10;31849:2;31842:10;;;;;;;;;;;;;;;;;;;;;;;;;31826:26;31818:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;31784:89;31901:31;31928:3;31901:22;31912:10;;31901:6;:10;;:22;;;;:::i;:::-;:26;;:31;;;;:::i;:::-;31889:43;;31979:13;;;;;;;;;;;31971:21;;:4;:21;;;:72;;;;;32027:15;;;;;;;;;;;32013:30;;:2;:30;;;;31971:72;:116;;;;;32065:18;:22;32084:2;32065:22;;;;;;;;;;;;;;;;;;;;;;;;;32064:23;31971:116;31949:568;;;32140:14;;32130:6;:24;;32122:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32261:18;;32251:6;32235:13;32245:2;32235:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32205:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32391:12;32387:1;32374:10;;:14;;;;:::i;:::-;:29;32370:102;;;32437:14;32448:2;32437:10;:14::i;:::-;32436:15;32428:24;;;;;;32370:102;32490:9;;:11;;;;;;;;;:::i;:::-;;;;;;31949:568;32543:13;;;;;;;;;;;32537:19;;:2;:19;;;;:46;;;;;32561:18;:22;32580:2;32561:22;;;;;;;;;;;;;;;;;;;;;;;;;32560:23;32537:46;32533:231;;;32660:18;;32650:6;32634:13;32644:2;32634:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32604:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32533:231;32790:13;;;;;;;;;;;32784:19;;:2;:19;;;:44;;;;;32823:4;32807:21;;:4;:21;;;;32784:44;32780:129;;;32861:32;32889:3;32861:23;32872:11;;32861:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;32849:44;;32780:129;32925:28;32956:24;32974:4;32956:9;:24::i;:::-;32925:55;;33018:6;;;;;;;;;;;33017:7;:47;;;;;33051:13;;;;;;;;;;;33045:19;;:2;:19;;;33017:47;:79;;;;;33085:11;;;;;;;;;;;33017:79;:135;;;;;33140:12;;33117:20;:35;33017:135;:186;;;;;33185:18;;33173:9;;:30;33017:186;:246;;;;;33250:12;33224:39;;:15;;;;;;;;;;;:39;;;;33017:246;32995:548;;;33298:57;33315:39;33319:20;33341:12;;33315:3;:39::i;:::-;33298:16;:57::i;:::-;33374:26;33403:21;33374:50;;33468:1;33447:18;:22;33443:85;;;33494:14;:12;:14::i;:::-;33443:85;33279:264;32995:548;31769:1785;31720:1834;33582:1;33570:9;:13;33566:93;;;33600:47;33616:4;33630;33637:9;33600:15;:47::i;:::-;33566:93;33669:48;33685:4;33691:2;33695:21;33706:9;33695:6;:10;;:21;;;;:::i;:::-;33669:15;:48::i;:::-;31448:2277;31335:2390;;;:::o;22987:191::-;23061:16;23080:6;;;;;;;;;;;23061:25;;23106:8;23097:6;;:17;;;;;;;;;;;;;;;;;;23161:8;23130:40;;23151:8;23130:40;;;;;;;;;;;;23050:128;22987:191;:::o;34495:532::-;26665:4;26656:6;;:13;;;;;;;;;;;;;;;;;;34598:12:::1;34573:15;;:38;;;;;;;;;;;;;;;;;;34622:21;34660:1;34646:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34622:40;;34691:4;34673;34678:1;34673:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34717:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34707:4;34712:1;34707:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34750:62;34767:4;34782:15;;;;;;;;;;;34800:11;34750:8;:62::i;:::-;34823:15;;;;;;;;;;;:66;;;34904:11;34930:1;34946:4;34973;34993:15;34823:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34562:465;26701:5:::0;26692:6;;:14;;;;;;;;;;;;;;;;;;34495:532;:::o;35035:170::-;35078:12;35123:10;;;;;;;;;;;35115:24;;35147:21;35115:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35101:96;;;;;35067:138;35035:170::o;3357:98::-;3415:7;3446:1;3442;:5;;;;:::i;:::-;3435:12;;3357:98;;;;:::o;3756:::-;3814:7;3845:1;3841;:5;;;;:::i;:::-;3834:12;;3756:98;;;;:::o;33848:195::-;33907:4;33924:12;33991:7;33979:20;33971:28;;34034:1;34027:4;:8;34020:15;;;33848:195;;;:::o;33733:107::-;33790:7;33822:1;33818;:5;33817:15;;33831:1;33817:15;;;33827:1;33817:15;33810:22;;33733:107;;;;:::o;16585:770::-;16743:1;16725:20;;:6;:20;;;16717:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;16827:1;16806:23;;:9;:23;;;16798:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16882:47;16903:6;16911:9;16922:6;16882:20;:47::i;:::-;16942:21;16966:9;:17;16976:6;16966:17;;;;;;;;;;;;;;;;16942:41;;17033:6;17016:13;:23;;16994:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17177:6;17161:13;:22;17141:9;:17;17151:6;17141:17;;;;;;;;;;;;;;;:42;;;;17229:6;17205:9;:20;17215:9;17205:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17270:9;17253:35;;17262:6;17253:35;;;17281:6;17253:35;;;;;;:::i;:::-;;;;;;;;17301:46;17321:6;17329:9;17340:6;17301:19;:46::i;:::-;16706:649;16585:770;;;:::o;3000:98::-;3058:7;3089:1;3085;:5;;;;:::i;:::-;3078:12;;3000:98;;;;:::o;20383:125::-;;;;:::o;21112: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;1553:117;1662:1;1659;1652: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:775::-;3803:4;3841:3;3830:9;3826:19;3818:27;;3855:71;3923:1;3912:9;3908:17;3899:6;3855:71;:::i;:::-;3936:72;4004:2;3993:9;3989:18;3980:6;3936:72;:::i;:::-;4018;4086:2;4075:9;4071:18;4062:6;4018:72;:::i;:::-;4100;4168:2;4157:9;4153:18;4144:6;4100:72;:::i;:::-;4182:73;4250:3;4239:9;4235:19;4226:6;4182:73;:::i;:::-;4265;4333:3;4322:9;4318:19;4309:6;4265:73;:::i;:::-;3570:775;;;;;;;;;:::o;4351:222::-;4444:4;4482:2;4471:9;4467:18;4459:26;;4495:71;4563:1;4552:9;4548:17;4539:6;4495:71;:::i;:::-;4351:222;;;;:::o;4579:474::-;4647:6;4655;4704:2;4692:9;4683:7;4679:23;4675:32;4672:119;;;4710:79;;:::i;:::-;4672:119;4830:1;4855:53;4900:7;4891:6;4880:9;4876:22;4855:53;:::i;:::-;4845:63;;4801:117;4957:2;4983:53;5028:7;5019:6;5008:9;5004:22;4983:53;:::i;:::-;4973:63;;4928:118;4579:474;;;;;:::o;5059:619::-;5136:6;5144;5152;5201:2;5189:9;5180:7;5176:23;5172:32;5169:119;;;5207:79;;:::i;:::-;5169:119;5327:1;5352:53;5397:7;5388:6;5377:9;5373:22;5352:53;:::i;:::-;5342:63;;5298:117;5454:2;5480:53;5525:7;5516:6;5505:9;5501:22;5480:53;:::i;:::-;5470:63;;5425:118;5582:2;5608:53;5653:7;5644:6;5633:9;5629:22;5608:53;:::i;:::-;5598:63;;5553:118;5059:619;;;;;:::o;5684:86::-;5719:7;5759:4;5752:5;5748:16;5737:27;;5684:86;;;:::o;5776:112::-;5859:22;5875:5;5859:22;:::i;:::-;5854:3;5847:35;5776:112;;:::o;5894:214::-;5983:4;6021:2;6010:9;6006:18;5998:26;;6034:67;6098:1;6087:9;6083:17;6074:6;6034:67;:::i;:::-;5894:214;;;;:::o;6114:329::-;6173:6;6222:2;6210:9;6201:7;6197:23;6193:32;6190:119;;;6228:79;;:::i;:::-;6190:119;6348:1;6373:53;6418:7;6409:6;6398:9;6394:22;6373:53;:::i;:::-;6363:63;;6319:117;6114:329;;;;:::o;6449:::-;6508:6;6557:2;6545:9;6536:7;6532:23;6528:32;6525:119;;;6563:79;;:::i;:::-;6525:119;6683:1;6708:53;6753:7;6744:6;6733:9;6729:22;6708:53;:::i;:::-;6698:63;;6654:117;6449:329;;;;:::o;6784:104::-;6829:7;6858:24;6876:5;6858:24;:::i;:::-;6847:35;;6784:104;;;:::o;6894:138::-;6975:32;7001:5;6975:32;:::i;:::-;6968:5;6965:43;6955:71;;7022:1;7019;7012:12;6955:71;6894:138;:::o;7038:155::-;7092:5;7130:6;7117:20;7108:29;;7146:41;7181:5;7146:41;:::i;:::-;7038:155;;;;:::o;7199:345::-;7266:6;7315:2;7303:9;7294:7;7290:23;7286:32;7283:119;;;7321:79;;:::i;:::-;7283:119;7441:1;7466:61;7519:7;7510:6;7499:9;7495:22;7466:61;:::i;:::-;7456:71;;7412:125;7199:345;;;;:::o;7550:118::-;7637:24;7655:5;7637:24;:::i;:::-;7632:3;7625:37;7550:118;;:::o;7674:222::-;7767:4;7805:2;7794:9;7790:18;7782:26;;7818:71;7886:1;7875:9;7871:17;7862:6;7818:71;:::i;:::-;7674:222;;;;:::o;7902:474::-;7970:6;7978;8027:2;8015:9;8006:7;8002:23;7998:32;7995:119;;;8033:79;;:::i;:::-;7995:119;8153:1;8178:53;8223:7;8214:6;8203:9;8199:22;8178:53;:::i;:::-;8168:63;;8124:117;8280:2;8306:53;8351:7;8342:6;8331:9;8327:22;8306:53;:::i;:::-;8296:63;;8251:118;7902:474;;;;;:::o;8382:116::-;8452:21;8467:5;8452:21;:::i;:::-;8445:5;8442:32;8432:60;;8488:1;8485;8478:12;8432:60;8382:116;:::o;8504:133::-;8547:5;8585:6;8572:20;8563:29;;8601:30;8625:5;8601:30;:::i;:::-;8504:133;;;;:::o;8643:468::-;8708:6;8716;8765:2;8753:9;8744:7;8740:23;8736:32;8733:119;;;8771:79;;:::i;:::-;8733:119;8891:1;8916:53;8961:7;8952:6;8941:9;8937:22;8916:53;:::i;:::-;8906:63;;8862:117;9018:2;9044:50;9086:7;9077:6;9066:9;9062:22;9044:50;:::i;:::-;9034:60;;8989:115;8643:468;;;;;:::o;9117:117::-;9226:1;9223;9216:12;9240:117;9349:1;9346;9339:12;9363:117;9472:1;9469;9462:12;9503:568;9576:8;9586:6;9636:3;9629:4;9621:6;9617:17;9613:27;9603:122;;9644:79;;:::i;:::-;9603:122;9757:6;9744:20;9734:30;;9787:18;9779:6;9776:30;9773:117;;;9809:79;;:::i;:::-;9773:117;9923:4;9915:6;9911:17;9899:29;;9977:3;9969:4;9961:6;9957:17;9947:8;9943:32;9940:41;9937:128;;;9984:79;;:::i;:::-;9937:128;9503:568;;;;;:::o;10077:698::-;10169:6;10177;10185;10234:2;10222:9;10213:7;10209:23;10205:32;10202:119;;;10240:79;;:::i;:::-;10202:119;10388:1;10377:9;10373:17;10360:31;10418:18;10410:6;10407:30;10404:117;;;10440:79;;:::i;:::-;10404:117;10553:80;10625:7;10616:6;10605:9;10601:22;10553:80;:::i;:::-;10535:98;;;;10331:312;10682:2;10708:50;10750:7;10741:6;10730:9;10726:22;10708:50;:::i;:::-;10698:60;;10653:115;10077:698;;;;;:::o;10781:182::-;10921:34;10917:1;10909:6;10905:14;10898:58;10781:182;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;10969:366;;;:::o;11341:419::-;11507:4;11545:2;11534:9;11530:18;11522:26;;11594:9;11588:4;11584:20;11580:1;11569:9;11565:17;11558:47;11622:131;11748:4;11622:131;:::i;:::-;11614:139;;11341:419;;;:::o;11766:181::-;11906:33;11902:1;11894:6;11890:14;11883:57;11766:181;:::o;11953:366::-;12095:3;12116:67;12180:2;12175:3;12116:67;:::i;:::-;12109:74;;12192:93;12281:3;12192:93;:::i;:::-;12310:2;12305:3;12301:12;12294:19;;11953:366;;;:::o;12325:419::-;12491:4;12529:2;12518:9;12514:18;12506:26;;12578:9;12572:4;12568:20;12564:1;12553:9;12549:17;12542:47;12606:131;12732:4;12606:131;:::i;:::-;12598:139;;12325:419;;;:::o;12750:180::-;12798:77;12795:1;12788:88;12895:4;12892:1;12885:15;12919:4;12916:1;12909:15;12936:320;12980:6;13017:1;13011:4;13007:12;12997:22;;13064:1;13058:4;13054:12;13085:18;13075:81;;13141:4;13133:6;13129:17;13119:27;;13075:81;13203:2;13195:6;13192:14;13172:18;13169:38;13166:84;;13222:18;;:::i;:::-;13166:84;12987:269;12936:320;;;:::o;13262:173::-;13402:25;13398:1;13390:6;13386:14;13379:49;13262:173;:::o;13441:366::-;13583:3;13604:67;13668:2;13663:3;13604:67;:::i;:::-;13597:74;;13680:93;13769:3;13680:93;:::i;:::-;13798:2;13793:3;13789:12;13782:19;;13441:366;;;:::o;13813:419::-;13979:4;14017:2;14006:9;14002:18;13994:26;;14066:9;14060:4;14056:20;14052:1;14041:9;14037:17;14030:47;14094:131;14220:4;14094:131;:::i;:::-;14086:139;;13813:419;;;:::o;14238:143::-;14295:5;14326:6;14320:13;14311:22;;14342:33;14369:5;14342:33;:::i;:::-;14238:143;;;;:::o;14387:351::-;14457:6;14506:2;14494:9;14485:7;14481:23;14477:32;14474:119;;;14512:79;;:::i;:::-;14474:119;14632:1;14657:64;14713:7;14704:6;14693:9;14689:22;14657:64;:::i;:::-;14647:74;;14603:128;14387:351;;;;:::o;14744:332::-;14865:4;14903:2;14892:9;14888:18;14880:26;;14916:71;14984:1;14973:9;14969:17;14960:6;14916:71;:::i;:::-;14997:72;15065:2;15054:9;15050:18;15041:6;14997:72;:::i;:::-;14744:332;;;;;:::o;15082:85::-;15127:7;15156:5;15145:16;;15082:85;;;:::o;15173:60::-;15201:3;15222:5;15215:12;;15173:60;;;:::o;15239:158::-;15297:9;15330:61;15348:42;15357:32;15383:5;15357:32;:::i;:::-;15348:42;:::i;:::-;15330:61;:::i;:::-;15317:74;;15239:158;;;:::o;15403:147::-;15498:45;15537:5;15498:45;:::i;:::-;15493:3;15486:58;15403:147;;:::o;15556:807::-;15805:4;15843:3;15832:9;15828:19;15820:27;;15857:71;15925:1;15914:9;15910:17;15901:6;15857:71;:::i;:::-;15938:72;16006:2;15995:9;15991:18;15982:6;15938:72;:::i;:::-;16020:80;16096:2;16085:9;16081:18;16072:6;16020:80;:::i;:::-;16110;16186:2;16175:9;16171:18;16162:6;16110:80;:::i;:::-;16200:73;16268:3;16257:9;16253:19;16244:6;16200:73;:::i;:::-;16283;16351:3;16340:9;16336:19;16327:6;16283:73;:::i;:::-;15556:807;;;;;;;;;:::o;16369:143::-;16426:5;16457:6;16451:13;16442:22;;16473:33;16500:5;16473:33;:::i;:::-;16369:143;;;;:::o;16518:663::-;16606:6;16614;16622;16671:2;16659:9;16650:7;16646:23;16642:32;16639:119;;;16677:79;;:::i;:::-;16639:119;16797:1;16822:64;16878:7;16869:6;16858:9;16854:22;16822:64;:::i;:::-;16812:74;;16768:128;16935:2;16961:64;17017:7;17008:6;16997:9;16993:22;16961:64;:::i;:::-;16951:74;;16906:129;17074:2;17100:64;17156:7;17147:6;17136:9;17132:22;17100:64;:::i;:::-;17090:74;;17045:129;16518:663;;;;;:::o;17187:332::-;17308:4;17346:2;17335:9;17331:18;17323:26;;17359:71;17427:1;17416:9;17412:17;17403:6;17359:71;:::i;:::-;17440:72;17508:2;17497:9;17493:18;17484:6;17440:72;:::i;:::-;17187:332;;;;;:::o;17525:137::-;17579:5;17610:6;17604:13;17595:22;;17626:30;17650:5;17626:30;:::i;:::-;17525:137;;;;:::o;17668:345::-;17735:6;17784:2;17772:9;17763:7;17759:23;17755:32;17752:119;;;17790:79;;:::i;:::-;17752:119;17910:1;17935:61;17988:7;17979:6;17968:9;17964:22;17935:61;:::i;:::-;17925:71;;17881:125;17668:345;;;;:::o;18019:171::-;18159:23;18155:1;18147:6;18143:14;18136:47;18019:171;:::o;18196:366::-;18338:3;18359:67;18423:2;18418:3;18359:67;:::i;:::-;18352:74;;18435:93;18524:3;18435:93;:::i;:::-;18553:2;18548:3;18544:12;18537:19;;18196:366;;;:::o;18568:419::-;18734:4;18772:2;18761:9;18757:18;18749:26;;18821:9;18815:4;18811:20;18807:1;18796:9;18792:17;18785:47;18849:131;18975:4;18849:131;:::i;:::-;18841:139;;18568:419;;;:::o;18993:172::-;19133:24;19129:1;19121:6;19117:14;19110:48;18993:172;:::o;19171:366::-;19313:3;19334:67;19398:2;19393:3;19334:67;:::i;:::-;19327:74;;19410:93;19499:3;19410:93;:::i;:::-;19528:2;19523:3;19519:12;19512:19;;19171:366;;;:::o;19543:419::-;19709:4;19747:2;19736:9;19732:18;19724:26;;19796:9;19790:4;19786:20;19782:1;19771:9;19767:17;19760:47;19824:131;19950:4;19824:131;:::i;:::-;19816:139;;19543:419;;;:::o;19968:332::-;20089:4;20127:2;20116:9;20112:18;20104:26;;20140:71;20208:1;20197:9;20193:17;20184:6;20140:71;:::i;:::-;20221:72;20289:2;20278:9;20274:18;20265:6;20221:72;:::i;:::-;19968:332;;;;;:::o;20306:227::-;20446:34;20442:1;20434:6;20430:14;20423:58;20515:10;20510:2;20502:6;20498:15;20491:35;20306:227;:::o;20539:366::-;20681:3;20702:67;20766:2;20761:3;20702:67;:::i;:::-;20695:74;;20778:93;20867:3;20778:93;:::i;:::-;20896:2;20891:3;20887:12;20880:19;;20539:366;;;:::o;20911:419::-;21077:4;21115:2;21104:9;21100:18;21092:26;;21164:9;21158:4;21154:20;21150:1;21139:9;21135:17;21128:47;21192:131;21318:4;21192:131;:::i;:::-;21184:139;;20911:419;;;:::o;21336:180::-;21384:77;21381:1;21374:88;21481:4;21478:1;21471:15;21505:4;21502:1;21495:15;21522:191;21562:3;21581:20;21599:1;21581:20;:::i;:::-;21576:25;;21615:20;21633:1;21615:20;:::i;:::-;21610:25;;21658:1;21655;21651:9;21644:16;;21679:3;21676:1;21673:10;21670:36;;;21686:18;;:::i;:::-;21670:36;21522:191;;;;:::o;21719:410::-;21759:7;21782:20;21800:1;21782:20;:::i;:::-;21777:25;;21816:20;21834:1;21816:20;:::i;:::-;21811:25;;21871:1;21868;21864:9;21893:30;21911:11;21893:30;:::i;:::-;21882:41;;22072:1;22063:7;22059:15;22056:1;22053:22;22033:1;22026:9;22006:83;21983:139;;22102:18;;:::i;:::-;21983:139;21767:362;21719:410;;;;:::o;22135:180::-;22183:77;22180:1;22173:88;22280:4;22277:1;22270:15;22304:4;22301:1;22294:15;22321:185;22361:1;22378:20;22396:1;22378:20;:::i;:::-;22373:25;;22412:20;22430:1;22412:20;:::i;:::-;22407:25;;22451:1;22441:35;;22456:18;;:::i;:::-;22441:35;22498:1;22495;22491:9;22486:14;;22321:185;;;;:::o;22512:180::-;22652:32;22648:1;22640:6;22636:14;22629:56;22512:180;:::o;22698:366::-;22840:3;22861:67;22925:2;22920:3;22861:67;:::i;:::-;22854:74;;22937:93;23026:3;22937:93;:::i;:::-;23055:2;23050:3;23046:12;23039:19;;22698:366;;;:::o;23070:419::-;23236:4;23274:2;23263:9;23259:18;23251:26;;23323:9;23317:4;23313:20;23309:1;23298:9;23294:17;23287:47;23351:131;23477:4;23351:131;:::i;:::-;23343:139;;23070:419;;;:::o;23495:142::-;23545:9;23578:53;23596:34;23605:24;23623:5;23605:24;:::i;:::-;23596:34;:::i;:::-;23578:53;:::i;:::-;23565:66;;23495:142;;;:::o;23643:126::-;23693:9;23726:37;23757:5;23726:37;:::i;:::-;23713:50;;23643:126;;;:::o;23775:134::-;23833:9;23866:37;23897:5;23866:37;:::i;:::-;23853:50;;23775:134;;;:::o;23915:147::-;24010:45;24049:5;24010:45;:::i;:::-;24005:3;23998:58;23915:147;;:::o;24068:238::-;24169:4;24207:2;24196:9;24192:18;24184:26;;24220:79;24296:1;24285:9;24281:17;24272:6;24220:79;:::i;:::-;24068:238;;;;:::o;24312:221::-;24452:34;24448:1;24440:6;24436:14;24429:58;24521:4;24516:2;24508:6;24504:15;24497:29;24312:221;:::o;24539:366::-;24681:3;24702:67;24766:2;24761:3;24702:67;:::i;:::-;24695:74;;24778:93;24867:3;24778:93;:::i;:::-;24896:2;24891:3;24887:12;24880:19;;24539:366;;;:::o;24911:419::-;25077:4;25115:2;25104:9;25100:18;25092:26;;25164:9;25158:4;25154:20;25150:1;25139:9;25135:17;25128:47;25192:131;25318:4;25192:131;:::i;:::-;25184:139;;24911:419;;;:::o;25336:179::-;25476:31;25472:1;25464:6;25460:14;25453:55;25336:179;:::o;25521:366::-;25663:3;25684:67;25748:2;25743:3;25684:67;:::i;:::-;25677:74;;25760:93;25849:3;25760:93;:::i;:::-;25878:2;25873:3;25869:12;25862:19;;25521:366;;;:::o;25893:419::-;26059:4;26097:2;26086:9;26082:18;26074:26;;26146:9;26140:4;26136:20;26132:1;26121:9;26117:17;26110:47;26174:131;26300:4;26174:131;:::i;:::-;26166:139;;25893:419;;;:::o;26318:224::-;26458:34;26454:1;26446:6;26442:14;26435:58;26527:7;26522:2;26514:6;26510:15;26503:32;26318:224;:::o;26548:366::-;26690:3;26711:67;26775:2;26770:3;26711:67;:::i;:::-;26704:74;;26787:93;26876:3;26787:93;:::i;:::-;26905:2;26900:3;26896:12;26889:19;;26548:366;;;:::o;26920:419::-;27086:4;27124:2;27113:9;27109:18;27101:26;;27173:9;27167:4;27163:20;27159:1;27148:9;27144:17;27137:47;27201:131;27327:4;27201:131;:::i;:::-;27193:139;;26920:419;;;:::o;27345:320::-;27460:4;27498:2;27487:9;27483:18;27475:26;;27511:71;27579:1;27568:9;27564:17;27555:6;27511:71;:::i;:::-;27592:66;27654:2;27643:9;27639:18;27630:6;27592:66;:::i;:::-;27345:320;;;;;:::o;27671:225::-;27811:34;27807:1;27799:6;27795:14;27788:58;27880:8;27875:2;27867:6;27863:15;27856:33;27671:225;:::o;27902:366::-;28044:3;28065:67;28129:2;28124:3;28065:67;:::i;:::-;28058:74;;28141:93;28230:3;28141:93;:::i;:::-;28259:2;28254:3;28250:12;28243:19;;27902:366;;;:::o;28274:419::-;28440:4;28478:2;28467:9;28463:18;28455:26;;28527:9;28521:4;28517:20;28513:1;28502:9;28498:17;28491:47;28555:131;28681:4;28555:131;:::i;:::-;28547:139;;28274:419;;;:::o;28699:180::-;28747:77;28744:1;28737:88;28844:4;28841:1;28834:15;28868:4;28865:1;28858:15;28885:233;28924:3;28947:24;28965:5;28947:24;:::i;:::-;28938:33;;28993:66;28986:5;28983:77;28980:103;;29063:18;;:::i;:::-;28980:103;29110:1;29103:5;29099:13;29092:20;;28885:233;;;:::o;29124:223::-;29264:34;29260:1;29252:6;29248:14;29241:58;29333:6;29328:2;29320:6;29316:15;29309:31;29124:223;:::o;29353:366::-;29495:3;29516:67;29580:2;29575:3;29516:67;:::i;:::-;29509:74;;29592:93;29681:3;29592:93;:::i;:::-;29710:2;29705:3;29701:12;29694:19;;29353:366;;;:::o;29725:419::-;29891:4;29929:2;29918:9;29914:18;29906:26;;29978:9;29972:4;29968:20;29964:1;29953:9;29949:17;29942:47;30006:131;30132:4;30006:131;:::i;:::-;29998:139;;29725:419;;;:::o;30150:221::-;30290:34;30286:1;30278:6;30274:14;30267:58;30359:4;30354:2;30346:6;30342:15;30335:29;30150:221;:::o;30377:366::-;30519:3;30540:67;30604:2;30599:3;30540:67;:::i;:::-;30533:74;;30616:93;30705:3;30616:93;:::i;:::-;30734:2;30729:3;30725:12;30718:19;;30377:366;;;:::o;30749:419::-;30915:4;30953:2;30942:9;30938:18;30930:26;;31002:9;30996:4;30992:20;30988:1;30977:9;30973:17;30966:47;31030:131;31156:4;31030:131;:::i;:::-;31022:139;;30749:419;;;:::o;31174:224::-;31314:34;31310:1;31302:6;31298:14;31291:58;31383:7;31378:2;31370:6;31366:15;31359:32;31174:224;:::o;31404:366::-;31546:3;31567:67;31631:2;31626:3;31567:67;:::i;:::-;31560:74;;31643:93;31732:3;31643:93;:::i;:::-;31761:2;31756:3;31752:12;31745:19;;31404:366;;;:::o;31776:419::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:222::-;32341:34;32337:1;32329:6;32325:14;32318:58;32410:5;32405:2;32397:6;32393:15;32386:30;32201:222;:::o;32429:366::-;32571:3;32592:67;32656:2;32651:3;32592:67;:::i;:::-;32585:74;;32668:93;32757:3;32668:93;:::i;:::-;32786:2;32781:3;32777:12;32770:19;;32429:366;;;:::o;32801:419::-;32967:4;33005:2;32994:9;32990:18;32982:26;;33054:9;33048:4;33044:20;33040:1;33029:9;33025:17;33018:47;33082:131;33208:4;33082:131;:::i;:::-;33074:139;;32801:419;;;:::o;33226:228::-;33366:34;33362:1;33354:6;33350:14;33343:58;33435:11;33430:2;33422:6;33418:15;33411:36;33226:228;:::o;33460:366::-;33602:3;33623:67;33687:2;33682:3;33623:67;:::i;:::-;33616:74;;33699:93;33788:3;33699:93;:::i;:::-;33817:2;33812:3;33808:12;33801:19;;33460:366;;;:::o;33832:419::-;33998:4;34036:2;34025:9;34021:18;34013:26;;34085:9;34079:4;34075:20;34071:1;34060:9;34056:17;34049:47;34113:131;34239:4;34113:131;:::i;:::-;34105:139;;33832:419;;;:::o;34257:114::-;;:::o;34377:364::-;34519:3;34540:66;34604:1;34599:3;34540:66;:::i;:::-;34533:73;;34615:93;34704:3;34615:93;:::i;:::-;34733:1;34728:3;34724:11;34717:18;;34377:364;;;:::o;34747:419::-;34913:4;34951:2;34940:9;34936:18;34928:26;;35000:9;34994:4;34990:20;34986:1;34975:9;34971:17;34964:47;35028:131;35154:4;35028:131;:::i;:::-;35020:139;;34747:419;;;:::o;35172:177::-;35312:29;35308:1;35300:6;35296:14;35289:53;35172:177;:::o;35355:366::-;35497:3;35518:67;35582:2;35577:3;35518:67;:::i;:::-;35511:74;;35594:93;35683:3;35594:93;:::i;:::-;35712:2;35707:3;35703:12;35696:19;;35355:366;;;:::o;35727:419::-;35893:4;35931:2;35920:9;35916:18;35908:26;;35980:9;35974:4;35970:20;35966:1;35955:9;35951:17;35944:47;36008:131;36134:4;36008:131;:::i;:::-;36000:139;;35727:419;;;:::o;36152:176::-;36292:28;36288:1;36280:6;36276:14;36269:52;36152:176;:::o;36334:366::-;36476:3;36497:67;36561:2;36556:3;36497:67;:::i;:::-;36490:74;;36573:93;36662:3;36573:93;:::i;:::-;36691:2;36686:3;36682:12;36675:19;;36334:366;;;:::o;36706:419::-;36872:4;36910:2;36899:9;36895:18;36887:26;;36959:9;36953:4;36949:20;36945:1;36934:9;36930:17;36923:47;36987:131;37113:4;36987:131;:::i;:::-;36979:139;;36706:419;;;:::o;37131:180::-;37179:77;37176:1;37169:88;37276:4;37273:1;37266:15;37300:4;37297:1;37290:15;37317:114;37384:6;37418:5;37412:12;37402:22;;37317:114;;;:::o;37437:184::-;37536:11;37570:6;37565:3;37558:19;37610:4;37605:3;37601:14;37586:29;;37437:184;;;;:::o;37627:132::-;37694:4;37717:3;37709:11;;37747:4;37742:3;37738:14;37730:22;;37627:132;;;:::o;37765:108::-;37842:24;37860:5;37842:24;:::i;:::-;37837:3;37830:37;37765:108;;:::o;37879:179::-;37948:10;37969:46;38011:3;38003:6;37969:46;:::i;:::-;38047:4;38042:3;38038:14;38024:28;;37879:179;;;;:::o;38064:113::-;38134:4;38166;38161:3;38157:14;38149:22;;38064:113;;;:::o;38213:732::-;38332:3;38361:54;38409:5;38361:54;:::i;:::-;38431:86;38510:6;38505:3;38431:86;:::i;:::-;38424:93;;38541:56;38591:5;38541:56;:::i;:::-;38620:7;38651:1;38636:284;38661:6;38658:1;38655:13;38636:284;;;38737:6;38731:13;38764:63;38823:3;38808:13;38764:63;:::i;:::-;38757:70;;38850:60;38903:6;38850:60;:::i;:::-;38840:70;;38696:224;38683:1;38680;38676:9;38671:14;;38636:284;;;38640:14;38936:3;38929:10;;38337:608;;;38213:732;;;;:::o;38951:831::-;39214:4;39252:3;39241:9;39237:19;39229:27;;39266:71;39334:1;39323:9;39319:17;39310:6;39266:71;:::i;:::-;39347:80;39423:2;39412:9;39408:18;39399:6;39347:80;:::i;:::-;39474:9;39468:4;39464:20;39459:2;39448:9;39444:18;39437:48;39502:108;39605:4;39596:6;39502:108;:::i;:::-;39494:116;;39620:72;39688:2;39677:9;39673:18;39664:6;39620:72;:::i;:::-;39702:73;39770:3;39759:9;39755:19;39746:6;39702:73;:::i;:::-;38951:831;;;;;;;;:::o;39788:147::-;39889:11;39926:3;39911:18;;39788:147;;;;:::o;39941:398::-;40100:3;40121:83;40202:1;40197:3;40121:83;:::i;:::-;40114:90;;40213:93;40302:3;40213:93;:::i;:::-;40331:1;40326:3;40322:11;40315:18;;39941:398;;;:::o;40345:379::-;40529:3;40551:147;40694:3;40551:147;:::i;:::-;40544:154;;40715:3;40708:10;;40345:379;;;:::o;40730:225::-;40870:34;40866:1;40858:6;40854:14;40847:58;40939:8;40934:2;40926:6;40922:15;40915:33;40730:225;:::o;40961:366::-;41103:3;41124:67;41188:2;41183:3;41124:67;:::i;:::-;41117:74;;41200:93;41289:3;41200:93;:::i;:::-;41318:2;41313:3;41309:12;41302:19;;40961:366;;;:::o;41333:419::-;41499:4;41537:2;41526:9;41522:18;41514:26;;41586:9;41580:4;41576:20;41572:1;41561:9;41557:17;41550:47;41614:131;41740:4;41614:131;:::i;:::-;41606:139;;41333:419;;;:::o;41758:194::-;41798:4;41818:20;41836:1;41818:20;:::i;:::-;41813:25;;41852:20;41870:1;41852:20;:::i;:::-;41847:25;;41896:1;41893;41889:9;41881:17;;41920:1;41914:4;41911:11;41908:37;;;41925:18;;:::i;:::-;41908:37;41758:194;;;;:::o
Swarm Source
ipfs://02cce8c3ca6a42395b3953977380e13ba567ec55fe04cb1aba73ff82b34f0178
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.