ERC-20
Overview
Max Total Supply
10,000,000,000 RVR
Holders
194
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
182,412.515670671 RVRValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
CryptosWarrior
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-03-20 */ // SPDX-License-Identifier: GPL-3.0 // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // File: contracts/IUniswap.sol pragma solidity ^0.8.0; interface IUniswapV2Factory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ 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 subtraction 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; } } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions 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); } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: contracts/CryptosWarrior.sol pragma solidity ^0.8.0; contract CryptosWarrior is Context, IERC20, Ownable { using SafeMath for uint256; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private bots; mapping (address => uint) private cooldown; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 10_000_000_000 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; struct FeeValues { uint256 rAmount; uint256 rTransferAmount; uint256 rFee; uint256 tTransferAmount; uint256 tFee; uint256 tMkt; uint256 tBurn; } // launch event stuff mapping (address => uint256) private _lockedBalance; uint256 private _releasePeriodStartTime; // end launch event stuff uint256 private _burnFee = 2; // % to be burn on each transaction uint256 private _taxFee = 3; // Tax fee used for reflection uint256 private _mktFee = 7; // This % of tokens will remain in the contract address payable private _mktFeeWalletAddress; struct AccountTax { uint256 taxFee; uint256 mktFee; uint256 burnFee; bool isValue; } mapping (address => AccountTax) private taxesFromAccount; mapping (address => AccountTax) private taxesToAccount; string private constant _name = "ReVeR"; string private constant _symbol = "RVR"; uint8 private constant _decimals = 9; IUniswapV2Router02 private uniswapV2Router; address private uniswapV2Pair; bool private tradingOpen; bool private inSwap = false; bool private swapEnabled = false; bool swapAndLiquifyEnabled = false; bool private cooldownEnabled = false; uint256 private _maxTxAmount = _tTotal; modifier lockTheSwap { inSwap = true; _; inSwap = false; } constructor () { _mktFeeWalletAddress = payable(0x3a8CbcAEa1d26A0523613B4F31134C7f6b3f0Fb5); _rOwned[address(this)] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_mktFeeWalletAddress] = true; _maxTxAmount = _tTotal; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } function totalSupply() public pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { return tokenFromReflection(_rOwned[account]).sub(lockedBalanceOf(account)); } function lockedBalanceOf(address account) public view returns (uint256) { // If the release period has not started yet, lock all tokens if (block.timestamp < _releasePeriodStartTime || _releasePeriodStartTime == 0) { return _lockedBalance[account]; } uint256 ellapsed = block.timestamp.sub(_releasePeriodStartTime); uint256 duration = (70 * 24 * 3600); // 11 months if (ellapsed > duration) { return 0; } return _lockedBalance[account].mul(1000 - ellapsed.mul(1000).div(duration)).div(1000); } // The caller uses ETH to participate on the liquidity event function loadMigratedAccounts(address[] memory migratedAccounts, uint256[] memory balance, uint256[] memory lockedBalance) external onlyOwner { require(_releasePeriodStartTime == 0, "The migration is closed"); require(migratedAccounts.length == balance.length, "The length of the arrays must be equal"); require(migratedAccounts.length == lockedBalance.length, "The length of the arrays must be equal"); for (uint i = 0; i < migratedAccounts.length; i++) { (uint256 _rBalance,,) = _getRValues(balance[i].add(lockedBalance[i]), 0, 0, 0); _rOwned[address(this)] =_rOwned[address(this)].sub(_rBalance); // Move tokens from the contract _rOwned[migratedAccounts[i]] = _rBalance; _lockedBalance[migratedAccounts[i]] = lockedBalance[i]; emit Transfer(address(this), migratedAccounts[i], balance[i].add(lockedBalance[i])); } } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function setCooldownEnabled(bool onoff) external onlyOwner { cooldownEnabled = onoff; } function setMaxTxAmount(uint256 amount) external onlyOwner { _maxTxAmount = amount; } function setMarketingWallet(address payable account) external onlyOwner { _mktFeeWalletAddress = account; _isExcludedFromFee[account] = true; } function excludeAccountFromFee(address account) external onlyOwner { require(!_isExcludedFromFee[account], "Account is already excluded from fees"); _isExcludedFromFee[account] = true; } function includeAccountInFee(address account) external onlyOwner { require(_isExcludedFromFee[account], "Account is already included for fees"); _isExcludedFromFee[account] = false; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner() { swapAndLiquifyEnabled = _enabled; } function setFromAccountFees(address account, uint256 taxFee, uint256 mktFee, uint256 burnFee) external onlyOwner { require(_taxFee <= 3, "Tax fee cannot be more than 3"); require(mktFee <= 7, "Tax fee cannot be more than 7"); require(burnFee <= 2, "Burn fee cannot be more than 2"); taxesFromAccount[account] = AccountTax(taxFee, mktFee, burnFee, true); } function setToAccountFees(address account, uint256 taxFee, uint256 mktFee, uint256 burnFee) external onlyOwner { require(_taxFee <= 3, "Tax fee cannot be more than 3"); require(mktFee <= 7, "Tax fee cannot be more than 7"); require(burnFee <= 2, "Burn fee cannot be more than 2"); taxesToAccount[account] = AccountTax(taxFee, mktFee, burnFee, true); } function setMktFee(uint256 mktFee) external onlyOwner { require(mktFee <= 7, "Tax fee cannot be more than 7"); _mktFee = mktFee; } function setTaxFee(uint256 taxFee) external onlyOwner { require(_taxFee <= 3, "Tax fee cannot be more than 3"); _taxFee = taxFee; } function setBurnFee(uint256 burnFee) external onlyOwner { require(burnFee <= 2, "Burn fee cannot be more than 2"); _burnFee = burnFee; } function tokenFromReflection(uint256 rAmount) private view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function _approve(address owner, address spender, uint256 amount) private { 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); } function _transfer(address from, address to, uint256 amount) private { 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"); if (from != owner() && to != owner()) { require(tradingOpen, "Trading is not open"); require(!bots[from] && !bots[to]); require(amount <= _maxTxAmount, "Transfer amount exceeds the maximum allowed"); if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] && cooldownEnabled) { // Cooldown require(cooldown[to] < block.timestamp); cooldown[to] = block.timestamp + (30 seconds); } uint256 contractTokenBalance = balanceOf(address(this)); if (swapAndLiquifyEnabled) { if (contractTokenBalance > 100_000) { swapAndLiquify(contractTokenBalance); } } else if (contractTokenBalance > 0 && !inSwap && from != uniswapV2Pair && swapEnabled) { swapTokensForEth(contractTokenBalance); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { sendETHToFee(address(this).balance); } } } _tokenTransfer(from,to,amount); } function swapTokensForEth(uint256 tokenAmount) private lockTheSwap { 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(uint256 amount) private { _mktFeeWalletAddress.transfer(amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); // Get current ETH balance uint256 initialBalance = address(this).balance; // swap half of the tokens for ETH swapTokensForEth(half); // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); } function openTrading() external onlyOwner { require(!tradingOpen, "trading is already open"); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); uniswapV2Router = _uniswapV2Router; tradingOpen = true; _approve(address(this), address(uniswapV2Router), _tTotal); uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp); _releasePeriodStartTime = block.timestamp; swapEnabled = true; cooldownEnabled = true; IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max); } function stopTrading() external onlyOwner { tradingOpen = false; } function restartTrading() external onlyOwner { tradingOpen = true; } function setBots(address[] memory bots_) public onlyOwner { for (uint i = 0; i < bots_.length; i++) { bots[bots_[i]] = true; } } function delBot(address notbot) public onlyOwner { bots[notbot] = false; } function _tokenTransfer(address sender, address recipient, uint256 amount) private { _transferStandard(sender, recipient, amount); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { FeeValues memory _values; if (taxesFromAccount[sender].isValue) { _values = _getValues(tAmount, taxesFromAccount[sender].taxFee, taxesFromAccount[sender].mktFee, taxesFromAccount[sender].burnFee, !(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])); } else if (taxesToAccount[recipient].isValue) { _values = _getValues(tAmount, taxesToAccount[recipient].taxFee, taxesToAccount[recipient].mktFee, taxesToAccount[recipient].burnFee, !(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])); } else { _values = _getValues(tAmount, _taxFee, _mktFee, _burnFee, !(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])); } _rOwned[sender] = _rOwned[sender].sub(_values.rAmount); _rOwned[recipient] = _rOwned[recipient].add(_values.rTransferAmount); _takeMarketing(_values.tMkt); _burn(_values.tBurn); _reflectFee(_values.rFee, _values.tFee); emit Transfer(sender, recipient, _values.tTransferAmount); } function _burn(uint256 tBurn) private { uint256 currentRate = _getRate(); uint256 rBurn = tBurn.mul(currentRate); _rOwned[address(0)] = _rOwned[address(0)].add(rBurn); } function _takeMarketing(uint256 tMkt) private { uint256 currentRate = _getRate(); uint256 rMkt = tMkt.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMkt); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } receive() external payable {} function manualswap() external { require(_msgSender() == _mktFeeWalletAddress); uint256 contractBalance = balanceOf(address(this)); swapTokensForEth(contractBalance); } function manualsend() external { require(_msgSender() == _mktFeeWalletAddress); uint256 contractETHBalance = address(this).balance; sendETHToFee(contractETHBalance); } function _getValues(uint256 tAmount, uint256 currentTaxFee, uint256 currentMktFee, uint256 currentBurnFee, bool takeFees) private view returns (FeeValues memory) { (uint256 tTransferAmount, uint256 tFee, uint256 tMkt, uint256 tBurn) = _getTValues(tAmount, currentTaxFee.mul(takeFees ? 1 : 0), currentMktFee.mul(takeFees ? 1 : 0), currentBurnFee.mul(takeFees ? 1 : 0)); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMkt, tBurn); return FeeValues(rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMkt, tBurn); } function _getTValues(uint256 tAmount, uint256 taxFee, uint256 MarketingFee, uint256 BurnFee) private pure returns (uint256, uint256, uint256, uint256) { uint256 tFee = tAmount.mul(taxFee).div(100); uint256 tMkt = tAmount.mul(MarketingFee).div(100); uint256 tBurn = tAmount.mul(BurnFee).div(100); uint256 tDeg = tFee.add(tMkt).add(tBurn); uint256 tTransferAmount = tAmount.sub(tDeg); return (tTransferAmount, tFee, tMkt, tBurn); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMkt, uint256 tBurn) private view returns (uint256, uint256, uint256) { uint256 currentRate = _getRate(); uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMkt = tMkt.mul(currentRate); uint256 rBurn = tBurn.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rMkt).sub(rBurn); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccountFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccountInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"migratedAccounts","type":"address[]"},{"internalType":"uint256[]","name":"balance","type":"uint256[]"},{"internalType":"uint256[]","name":"lockedBalance","type":"uint256[]"}],"name":"loadMigratedAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restartTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"mktFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setFromAccountFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mktFee","type":"uint256"}],"name":"setMktFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"mktFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setToAccountFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052678ac7230489e800006000196200001c9190620004b3565b6000196200002b91906200046e565b6007556002600b556003600c556007600d556000601260156101000a81548160ff0219169083151502179055506000601260166101000a81548160ff0219169083151502179055506000601260176101000a81548160ff0219169083151502179055506000601260186101000a81548160ff021916908315150217905550678ac7230489e80000601355348015620000c257600080fd5b50620000e3620000d76200034b60201b60201c565b6200035360201b60201c565b733a8cbcaea1d26a0523613b4f31134c7f6b3f0fb5600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160046000620001946200041760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550678ac7230489e80000601381905550620002d66200034b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef678ac7230489e800006040516200033d919062000451565b60405180910390a362000549565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200044b81620004a9565b82525050565b600060208201905062000468600083018462000440565b92915050565b60006200047b82620004a9565b91506200048883620004a9565b9250828210156200049e576200049d620004eb565b5b828203905092915050565b6000819050919050565b6000620004c082620004a9565b9150620004cd83620004a9565b925082620004e057620004df6200051a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b614c9080620005596000396000f3fe6080604052600436106101e75760003560e01c80637185f16311610102578063c49b9a8011610095578063daa9334111610064578063daa9334114610671578063dd62ed3e1461069a578063ec28438a146106d7578063f2fde38b14610700576101ee565b8063c49b9a80146105df578063c9567bf914610608578063d504fdfc1461061f578063d6b4212b14610648576101ee565b8063af6e0ac1116100d1578063af6e0ac11461054d578063b515566a14610576578063c3c8cd801461059f578063c4081a4c146105b6576101ee565b80637185f163146104a35780638da5cb5b146104ba57806395d89b41146104e5578063a9059cbb14610510576101ee565b80634d9504491161017a5780635d098b38116101495780635d098b381461040f5780636fc3eaec1461043857806370a082311461044f578063715018a61461048c576101ee565b80634d95044914610357578063578c81f1146103805780635932ead1146103a957806359355736146103d2576101ee565b8063273123b7116101b6578063273123b7146102c35780632cdddc1b146102ec578063313ce567146103035780634bf2c7c91461032e576101ee565b806306fdde03146101f3578063095ea7b31461021e57806318160ddd1461025b57806323b872dd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610729565b6040516102159190614072565b60405180910390f35b34801561022a57600080fd5b5061024560048036038101906102409190613999565b610766565b6040516102529190614057565b60405180910390f35b34801561026757600080fd5b50610270610784565b60405161027d91906142d4565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190613946565b610794565b6040516102ba9190614057565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061387f565b61086d565b005b3480156102f857600080fd5b506103016108d0565b005b34801561030f57600080fd5b506103186108f5565b6040516103259190614349565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613b8a565b6108fe565b005b34801561036357600080fd5b5061037e60048036038101906103799190613b8a565b610954565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613a89565b6109aa565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613b30565b610d2f565b005b3480156103de57600080fd5b506103f960048036038101906103f4919061387f565b610d54565b60405161040691906142d4565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906138d9565b610e8b565b005b34801561044457600080fd5b5061044d610f2f565b005b34801561045b57600080fd5b506104766004803603810190610471919061387f565b610fa1565b60405161048391906142d4565b60405180910390f35b34801561049857600080fd5b506104a161100c565b005b3480156104af57600080fd5b506104b8611020565b005b3480156104c657600080fd5b506104cf611045565b6040516104dc9190613f89565b60405180910390f35b3480156104f157600080fd5b506104fa61106e565b6040516105079190614072565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613999565b6110ab565b6040516105449190614057565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906139d9565b6110c9565b005b34801561058257600080fd5b5061059d60048036038101906105989190613a40565b611249565b005b3480156105ab57600080fd5b506105b46112e6565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613b8a565b611360565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613b30565b6113b8565b005b34801561061457600080fd5b5061061d6113dd565b005b34801561062b57600080fd5b50610646600480360381019061064191906139d9565b6118a3565b005b34801561065457600080fd5b5061066f600480360381019061066a919061387f565b611a23565b005b34801561067d57600080fd5b506106986004803603810190610693919061387f565b611b13565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613906565b611c02565b6040516106ce91906142d4565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613b8a565b611c89565b005b34801561070c57600080fd5b506107276004803603810190610722919061387f565b611c9b565b005b60606040518060400160405280600581526020017f5265566552000000000000000000000000000000000000000000000000000000815250905090565b600061077a610773611d1f565b8484611d27565b6001905092915050565b6000678ac7230489e80000905090565b60006107a1848484611ef2565b610862846107ad611d1f565b61085d85604051806060016040528060288152602001614c3360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610813611d1f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124919092919063ffffffff16565b611d27565b600190509392505050565b6108756124e6565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108d86124e6565b6001601260146101000a81548160ff021916908315150217905550565b60006009905090565b6109066124e6565b600281111561094a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094190614114565b60405180910390fd5b80600b8190555050565b61095c6124e6565b60078111156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790614134565b60405180910390fd5b80600d8190555050565b6109b26124e6565b6000600a54146109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee906141b4565b60405180910390fd5b8151835114610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290614194565b60405180910390fd5b8051835114610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7690614194565b60405180910390fd5b60005b8351811015610d29576000610ae1610ad7848481518110610aa657610aa56146cf565b5b6020026020010151868581518110610ac157610ac06146cf565b5b602002602001015161256490919063ffffffff16565b600080600061257a565b50509050610b3781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060016000878581518110610b9257610b916146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550828281518110610beb57610bea6146cf565b5b602002602001015160096000878581518110610c0a57610c096146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550848281518110610c6357610c626146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610d00868681518110610ccf57610cce6146cf565b5b6020026020010151888781518110610cea57610ce96146cf565b5b602002602001015161256490919063ffffffff16565b604051610d0d91906142d4565b60405180910390a3508080610d2190614628565b915050610a82565b50505050565b610d376124e6565b80601260186101000a81548160ff02191690831515021790555050565b6000600a54421080610d6857506000600a54145b15610db457600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e86565b6000610dcb600a544261263a90919063ffffffff16565b90506000625c4900905080821115610de857600092505050610e86565b610e816103e8610e73610e1884610e0a6103e88861265090919063ffffffff16565b61266690919063ffffffff16565b6103e8610e259190614517565b600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265090919063ffffffff16565b61266690919063ffffffff16565b925050505b919050565b610e936124e6565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f70611d1f565b73ffffffffffffffffffffffffffffffffffffffff1614610f9057600080fd5b6000479050610f9e8161267c565b50565b6000611005610faf83610d54565b610ff7600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126e8565b61263a90919063ffffffff16565b9050919050565b6110146124e6565b61101e6000612756565b565b6110286124e6565b6000601260146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5256520000000000000000000000000000000000000000000000000000000000815250905090565b60006110bf6110b8611d1f565b8484611ef2565b6001905092915050565b6110d16124e6565b6003600c541115611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90614154565b60405180910390fd5b600782111561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614134565b60405180910390fd5b600281111561119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690614114565b60405180910390fd5b604051806080016040528084815260200183815260200182815260200160011515815250600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555090505050505050565b6112516124e6565b60005b81518110156112e257600160056000848481518110611276576112756146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112da90614628565b915050611254565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611327611d1f565b73ffffffffffffffffffffffffffffffffffffffff161461134757600080fd5b600061135230610fa1565b905061135d8161281a565b50565b6113686124e6565b6003600c5411156113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614154565b60405180910390fd5b80600c8190555050565b6113c06124e6565b80601260176101000a81548160ff02191690831515021790555050565b6113e56124e6565b601260149054906101000a900460ff1615611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c90614294565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260146101000a81548160ff0219169083151502179055506114df30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16678ac7230489e80000611d27565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561152557600080fd5b505afa158015611539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155d91906138ac565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115bf57600080fd5b505afa1580156115d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f791906138ac565b6040518363ffffffff1660e01b8152600401611614929190613fa4565b602060405180830381600087803b15801561162e57600080fd5b505af1158015611642573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166691906138ac565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116ef30610fa1565b6000806116fa611045565b426040518863ffffffff1660e01b815260040161171c96959493929190613ff6565b6060604051808303818588803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061176e9190613bb7565b50505042600a819055506001601260166101000a81548160ff0219169083151502179055506001601260186101000a81548160ff021916908315150217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161184d929190613fcd565b602060405180830381600087803b15801561186757600080fd5b505af115801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190613b5d565b5050565b6118ab6124e6565b6003600c5411156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890614154565b60405180910390fd5b6007821115611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c90614134565b60405180910390fd5b6002811115611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090614114565b60405180910390fd5b604051806080016040528084815260200183815260200182815260200160011515815250601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555090505050505050565b611a2b6124e6565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90614174565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b1b6124e6565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614234565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c916124e6565b8060138190555050565b611ca36124e6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906140d4565b60405180910390fd5b611d1c81612756565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90614274565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe906140f4565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ee591906142d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5990614254565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990614094565b60405180910390fd5b60008111612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c906141f4565b60405180910390fd5b61201d611045565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561208b575061205b611045565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561248157601260149054906101000a900460ff166120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614214565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121835750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61218c57600080fd5b6013548111156121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c8906142b4565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561227c5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d25750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122ea5750601260189054906101000a900460ff165b1561238b5742600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061233a57600080fd5b601e426123479190614436565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600061239630610fa1565b9050601260179054906101000a900460ff16156123c757620186a08111156123c2576123c181612aa2565b5b61247f565b6000811180156123e45750601260159054906101000a900460ff16155b801561243e5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124565750601260169054906101000a900460ff165b1561247e576124648161281a565b6000479050600081111561247c5761247b4761267c565b5b505b5b505b61248c838383612b3d565b505050565b60008383111582906124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d09190614072565b60405180910390fd5b5082840390509392505050565b6124ee611d1f565b73ffffffffffffffffffffffffffffffffffffffff1661250c611045565b73ffffffffffffffffffffffffffffffffffffffff1614612562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612559906141d4565b60405180910390fd5b565b600081836125729190614436565b905092915050565b600080600080612588612b4d565b9050600061259f828a61265090919063ffffffff16565b905060006125b6838a61265090919063ffffffff16565b905060006125cd848a61265090919063ffffffff16565b905060006125e4858a61265090919063ffffffff16565b9050600061261f8261261185612603888a61263a90919063ffffffff16565b61263a90919063ffffffff16565b61263a90919063ffffffff16565b90508481859850985098505050505050509450945094915050565b600081836126489190614517565b905092915050565b6000818361265e91906144bd565b905092915050565b60008183612674919061448c565b905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156126e4573d6000803e3d6000fd5b5050565b600060075482111561272f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612726906140b4565b60405180910390fd5b6000612739612b4d565b905061274e818461266690919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612852576128516146fe565b5b6040519080825280602002602001820160405280156128805781602001602082028036833780820191505090505b5090503081600081518110612898576128976146cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293a57600080fd5b505afa15801561294e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297291906138ac565b81600181518110612986576129856146cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129ed30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d27565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a519594939291906142ef565b600060405180830381600087803b158015612a6b57600080fd5b505af1158015612a7f573d6000803e3d6000fd5b50505050506000601260156101000a81548160ff02191690831515021790555050565b6001601260156101000a81548160ff0219169083151502179055506000612ad360028361266690919063ffffffff16565b90506000612aea828461263a90919063ffffffff16565b90506000479050612afa8361281a565b6000612b0f824761263a90919063ffffffff16565b9050612b1b8382612b78565b505050506000601260156101000a81548160ff02191690831515021790555050565b612b48838383612c6c565b505050565b6000806000612b5a613299565b91509150612b71818361266690919063ffffffff16565b9250505090565b612ba530601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d27565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bf1611045565b426040518863ffffffff1660e01b8152600401612c1396959493929190613ff6565b6060604051808303818588803b158015612c2c57600080fd5b505af1158015612c40573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c659190613bb7565b5050505050565b612c74613673565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff1615612e4457612e3d82600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e375750600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f8565b90506130cc565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff16156130145761300d82601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130075750600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f8565b90506130cb565b6130c882600c54600d54600b54600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130c25750600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f8565b90505b5b6131228160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263a90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131bb8160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061320b8160a001516133df565b6132188160c0015161349c565b61322a81604001518260800151613559565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836060015160405161328b91906142d4565b60405180910390a350505050565b600080600060075490506000678ac7230489e8000090506132cd678ac7230489e8000060075461266690919063ffffffff16565b8210156132eb57600754678ac7230489e800009350935050506132f4565b81819350935050505b9091565b613300613673565b60008060008061337b8a61332e8861331957600061331c565b60015b60ff168c61265090919063ffffffff16565b6133528961333d576000613340565b60015b60ff168c61265090919063ffffffff16565b6133768a613361576000613364565b60015b60ff168c61265090919063ffffffff16565b613593565b935093509350935060008060006133948d87878761257a565b9250925092506040518060e001604052808481526020018381526020018281526020018881526020018781526020018681526020018581525097505050505050505095945050505050565b60006133e9612b4d565b90506000613400828461265090919063ffffffff16565b905061345481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60006134a6612b4d565b905060006134bd828461265090919063ffffffff16565b905061351181600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256490919063ffffffff16565b600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b61356e8260075461263a90919063ffffffff16565b6007819055506135898160085461256490919063ffffffff16565b6008819055505050565b60008060008060006135c160646135b38a8c61265090919063ffffffff16565b61266690919063ffffffff16565b905060006135eb60646135dd8a8d61265090919063ffffffff16565b61266690919063ffffffff16565b9050600061361560646136078a8e61265090919063ffffffff16565b61266690919063ffffffff16565b9050600061363e82613630858761256490919063ffffffff16565b61256490919063ffffffff16565b90506000613655828e61263a90919063ffffffff16565b90508085858598509850985098505050505050945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006136c36136be84614389565b614364565b905080838252602082019050828560208602820111156136e6576136e5614732565b5b60005b8581101561371657816136fc8882613790565b8452602084019350602083019250506001810190506136e9565b5050509392505050565b600061373361372e846143b5565b614364565b9050808382526020820190508285602086028201111561375657613755614732565b5b60005b85811015613786578161376c8882613855565b845260208401935060208301925050600181019050613759565b5050509392505050565b60008135905061379f81614bd6565b92915050565b6000815190506137b481614bd6565b92915050565b6000813590506137c981614bed565b92915050565b600082601f8301126137e4576137e361472d565b5b81356137f48482602086016136b0565b91505092915050565b600082601f8301126138125761381161472d565b5b8135613822848260208601613720565b91505092915050565b60008135905061383a81614c04565b92915050565b60008151905061384f81614c04565b92915050565b60008135905061386481614c1b565b92915050565b60008151905061387981614c1b565b92915050565b6000602082840312156138955761389461473c565b5b60006138a384828501613790565b91505092915050565b6000602082840312156138c2576138c161473c565b5b60006138d0848285016137a5565b91505092915050565b6000602082840312156138ef576138ee61473c565b5b60006138fd848285016137ba565b91505092915050565b6000806040838503121561391d5761391c61473c565b5b600061392b85828601613790565b925050602061393c85828601613790565b9150509250929050565b60008060006060848603121561395f5761395e61473c565b5b600061396d86828701613790565b935050602061397e86828701613790565b925050604061398f86828701613855565b9150509250925092565b600080604083850312156139b0576139af61473c565b5b60006139be85828601613790565b92505060206139cf85828601613855565b9150509250929050565b600080600080608085870312156139f3576139f261473c565b5b6000613a0187828801613790565b9450506020613a1287828801613855565b9350506040613a2387828801613855565b9250506060613a3487828801613855565b91505092959194509250565b600060208284031215613a5657613a5561473c565b5b600082013567ffffffffffffffff811115613a7457613a73614737565b5b613a80848285016137cf565b91505092915050565b600080600060608486031215613aa257613aa161473c565b5b600084013567ffffffffffffffff811115613ac057613abf614737565b5b613acc868287016137cf565b935050602084013567ffffffffffffffff811115613aed57613aec614737565b5b613af9868287016137fd565b925050604084013567ffffffffffffffff811115613b1a57613b19614737565b5b613b26868287016137fd565b9150509250925092565b600060208284031215613b4657613b4561473c565b5b6000613b548482850161382b565b91505092915050565b600060208284031215613b7357613b7261473c565b5b6000613b8184828501613840565b91505092915050565b600060208284031215613ba057613b9f61473c565b5b6000613bae84828501613855565b91505092915050565b600080600060608486031215613bd057613bcf61473c565b5b6000613bde8682870161386a565b9350506020613bef8682870161386a565b9250506040613c008682870161386a565b9150509250925092565b6000613c168383613c22565b60208301905092915050565b613c2b8161454b565b82525050565b613c3a8161454b565b82525050565b6000613c4b826143f1565b613c558185614414565b9350613c60836143e1565b8060005b83811015613c91578151613c788882613c0a565b9750613c8383614407565b925050600181019050613c64565b5085935050505092915050565b613ca78161456f565b82525050565b613cb6816145b2565b82525050565b6000613cc7826143fc565b613cd18185614425565b9350613ce18185602086016145c4565b613cea81614741565b840191505092915050565b6000613d02602383614425565b9150613d0d82614752565b604082019050919050565b6000613d25602a83614425565b9150613d30826147a1565b604082019050919050565b6000613d48602683614425565b9150613d53826147f0565b604082019050919050565b6000613d6b602283614425565b9150613d768261483f565b604082019050919050565b6000613d8e601e83614425565b9150613d998261488e565b602082019050919050565b6000613db1601d83614425565b9150613dbc826148b7565b602082019050919050565b6000613dd4601d83614425565b9150613ddf826148e0565b602082019050919050565b6000613df7602583614425565b9150613e0282614909565b604082019050919050565b6000613e1a602683614425565b9150613e2582614958565b604082019050919050565b6000613e3d601783614425565b9150613e48826149a7565b602082019050919050565b6000613e60602083614425565b9150613e6b826149d0565b602082019050919050565b6000613e83602983614425565b9150613e8e826149f9565b604082019050919050565b6000613ea6601383614425565b9150613eb182614a48565b602082019050919050565b6000613ec9602483614425565b9150613ed482614a71565b604082019050919050565b6000613eec602583614425565b9150613ef782614ac0565b604082019050919050565b6000613f0f602483614425565b9150613f1a82614b0f565b604082019050919050565b6000613f32601783614425565b9150613f3d82614b5e565b602082019050919050565b6000613f55602b83614425565b9150613f6082614b87565b604082019050919050565b613f748161459b565b82525050565b613f83816145a5565b82525050565b6000602082019050613f9e6000830184613c31565b92915050565b6000604082019050613fb96000830185613c31565b613fc66020830184613c31565b9392505050565b6000604082019050613fe26000830185613c31565b613fef6020830184613f6b565b9392505050565b600060c08201905061400b6000830189613c31565b6140186020830188613f6b565b6140256040830187613cad565b6140326060830186613cad565b61403f6080830185613c31565b61404c60a0830184613f6b565b979650505050505050565b600060208201905061406c6000830184613c9e565b92915050565b6000602082019050818103600083015261408c8184613cbc565b905092915050565b600060208201905081810360008301526140ad81613cf5565b9050919050565b600060208201905081810360008301526140cd81613d18565b9050919050565b600060208201905081810360008301526140ed81613d3b565b9050919050565b6000602082019050818103600083015261410d81613d5e565b9050919050565b6000602082019050818103600083015261412d81613d81565b9050919050565b6000602082019050818103600083015261414d81613da4565b9050919050565b6000602082019050818103600083015261416d81613dc7565b9050919050565b6000602082019050818103600083015261418d81613dea565b9050919050565b600060208201905081810360008301526141ad81613e0d565b9050919050565b600060208201905081810360008301526141cd81613e30565b9050919050565b600060208201905081810360008301526141ed81613e53565b9050919050565b6000602082019050818103600083015261420d81613e76565b9050919050565b6000602082019050818103600083015261422d81613e99565b9050919050565b6000602082019050818103600083015261424d81613ebc565b9050919050565b6000602082019050818103600083015261426d81613edf565b9050919050565b6000602082019050818103600083015261428d81613f02565b9050919050565b600060208201905081810360008301526142ad81613f25565b9050919050565b600060208201905081810360008301526142cd81613f48565b9050919050565b60006020820190506142e96000830184613f6b565b92915050565b600060a0820190506143046000830188613f6b565b6143116020830187613cad565b81810360408301526143238186613c40565b90506143326060830185613c31565b61433f6080830184613f6b565b9695505050505050565b600060208201905061435e6000830184613f7a565b92915050565b600061436e61437f565b905061437a82826145f7565b919050565b6000604051905090565b600067ffffffffffffffff8211156143a4576143a36146fe565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d0576143cf6146fe565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006144418261459b565b915061444c8361459b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561448157614480614671565b5b828201905092915050565b60006144978261459b565b91506144a28361459b565b9250826144b2576144b16146a0565b5b828204905092915050565b60006144c88261459b565b91506144d38361459b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450c5761450b614671565b5b828202905092915050565b60006145228261459b565b915061452d8361459b565b9250828210156145405761453f614671565b5b828203905092915050565b60006145568261457b565b9050919050565b60006145688261457b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006145bd8261459b565b9050919050565b60005b838110156145e25780820151818401526020810190506145c7565b838111156145f1576000848401525b50505050565b61460082614741565b810181811067ffffffffffffffff8211171561461f5761461e6146fe565b5b80604052505050565b60006146338261459b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561466657614665614671565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4275726e206665652063616e6e6f74206265206d6f7265207468616e20320000600082015250565b7f546178206665652063616e6e6f74206265206d6f7265207468616e2037000000600082015250565b7f546178206665652063616e6e6f74206265206d6f7265207468616e2033000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60008201527f2066656573000000000000000000000000000000000000000000000000000000602082015250565b7f546865206c656e677468206f662074686520617272617973206d75737420626560008201527f20657175616c0000000000000000000000000000000000000000000000000000602082015250565b7f546865206d6967726174696f6e20697320636c6f736564000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206f70656e00000000000000000000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c7564656420666f722060008201527f6665657300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b614bdf8161454b565b8114614bea57600080fd5b50565b614bf68161455d565b8114614c0157600080fd5b50565b614c0d8161456f565b8114614c1857600080fd5b50565b614c248161459b565b8114614c2f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a8aed0d2ea5eee906a8a585bb8b63d100d819db9dad2b336adb6574ea93d9aba64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101e75760003560e01c80637185f16311610102578063c49b9a8011610095578063daa9334111610064578063daa9334114610671578063dd62ed3e1461069a578063ec28438a146106d7578063f2fde38b14610700576101ee565b8063c49b9a80146105df578063c9567bf914610608578063d504fdfc1461061f578063d6b4212b14610648576101ee565b8063af6e0ac1116100d1578063af6e0ac11461054d578063b515566a14610576578063c3c8cd801461059f578063c4081a4c146105b6576101ee565b80637185f163146104a35780638da5cb5b146104ba57806395d89b41146104e5578063a9059cbb14610510576101ee565b80634d9504491161017a5780635d098b38116101495780635d098b381461040f5780636fc3eaec1461043857806370a082311461044f578063715018a61461048c576101ee565b80634d95044914610357578063578c81f1146103805780635932ead1146103a957806359355736146103d2576101ee565b8063273123b7116101b6578063273123b7146102c35780632cdddc1b146102ec578063313ce567146103035780634bf2c7c91461032e576101ee565b806306fdde03146101f3578063095ea7b31461021e57806318160ddd1461025b57806323b872dd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610729565b6040516102159190614072565b60405180910390f35b34801561022a57600080fd5b5061024560048036038101906102409190613999565b610766565b6040516102529190614057565b60405180910390f35b34801561026757600080fd5b50610270610784565b60405161027d91906142d4565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a89190613946565b610794565b6040516102ba9190614057565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061387f565b61086d565b005b3480156102f857600080fd5b506103016108d0565b005b34801561030f57600080fd5b506103186108f5565b6040516103259190614349565b60405180910390f35b34801561033a57600080fd5b5061035560048036038101906103509190613b8a565b6108fe565b005b34801561036357600080fd5b5061037e60048036038101906103799190613b8a565b610954565b005b34801561038c57600080fd5b506103a760048036038101906103a29190613a89565b6109aa565b005b3480156103b557600080fd5b506103d060048036038101906103cb9190613b30565b610d2f565b005b3480156103de57600080fd5b506103f960048036038101906103f4919061387f565b610d54565b60405161040691906142d4565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906138d9565b610e8b565b005b34801561044457600080fd5b5061044d610f2f565b005b34801561045b57600080fd5b506104766004803603810190610471919061387f565b610fa1565b60405161048391906142d4565b60405180910390f35b34801561049857600080fd5b506104a161100c565b005b3480156104af57600080fd5b506104b8611020565b005b3480156104c657600080fd5b506104cf611045565b6040516104dc9190613f89565b60405180910390f35b3480156104f157600080fd5b506104fa61106e565b6040516105079190614072565b60405180910390f35b34801561051c57600080fd5b5061053760048036038101906105329190613999565b6110ab565b6040516105449190614057565b60405180910390f35b34801561055957600080fd5b50610574600480360381019061056f91906139d9565b6110c9565b005b34801561058257600080fd5b5061059d60048036038101906105989190613a40565b611249565b005b3480156105ab57600080fd5b506105b46112e6565b005b3480156105c257600080fd5b506105dd60048036038101906105d89190613b8a565b611360565b005b3480156105eb57600080fd5b5061060660048036038101906106019190613b30565b6113b8565b005b34801561061457600080fd5b5061061d6113dd565b005b34801561062b57600080fd5b50610646600480360381019061064191906139d9565b6118a3565b005b34801561065457600080fd5b5061066f600480360381019061066a919061387f565b611a23565b005b34801561067d57600080fd5b506106986004803603810190610693919061387f565b611b13565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613906565b611c02565b6040516106ce91906142d4565b60405180910390f35b3480156106e357600080fd5b506106fe60048036038101906106f99190613b8a565b611c89565b005b34801561070c57600080fd5b506107276004803603810190610722919061387f565b611c9b565b005b60606040518060400160405280600581526020017f5265566552000000000000000000000000000000000000000000000000000000815250905090565b600061077a610773611d1f565b8484611d27565b6001905092915050565b6000678ac7230489e80000905090565b60006107a1848484611ef2565b610862846107ad611d1f565b61085d85604051806060016040528060288152602001614c3360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610813611d1f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546124919092919063ffffffff16565b611d27565b600190509392505050565b6108756124e6565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6108d86124e6565b6001601260146101000a81548160ff021916908315150217905550565b60006009905090565b6109066124e6565b600281111561094a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094190614114565b60405180910390fd5b80600b8190555050565b61095c6124e6565b60078111156109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099790614134565b60405180910390fd5b80600d8190555050565b6109b26124e6565b6000600a54146109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee906141b4565b60405180910390fd5b8151835114610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290614194565b60405180910390fd5b8051835114610a7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7690614194565b60405180910390fd5b60005b8351811015610d29576000610ae1610ad7848481518110610aa657610aa56146cf565b5b6020026020010151868581518110610ac157610ac06146cf565b5b602002602001015161256490919063ffffffff16565b600080600061257a565b50509050610b3781600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060016000878581518110610b9257610b916146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550828281518110610beb57610bea6146cf565b5b602002602001015160096000878581518110610c0a57610c096146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550848281518110610c6357610c626146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610d00868681518110610ccf57610cce6146cf565b5b6020026020010151888781518110610cea57610ce96146cf565b5b602002602001015161256490919063ffffffff16565b604051610d0d91906142d4565b60405180910390a3508080610d2190614628565b915050610a82565b50505050565b610d376124e6565b80601260186101000a81548160ff02191690831515021790555050565b6000600a54421080610d6857506000600a54145b15610db457600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e86565b6000610dcb600a544261263a90919063ffffffff16565b90506000625c4900905080821115610de857600092505050610e86565b610e816103e8610e73610e1884610e0a6103e88861265090919063ffffffff16565b61266690919063ffffffff16565b6103e8610e259190614517565b600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461265090919063ffffffff16565b61266690919063ffffffff16565b925050505b919050565b610e936124e6565b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f70611d1f565b73ffffffffffffffffffffffffffffffffffffffff1614610f9057600080fd5b6000479050610f9e8161267c565b50565b6000611005610faf83610d54565b610ff7600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126e8565b61263a90919063ffffffff16565b9050919050565b6110146124e6565b61101e6000612756565b565b6110286124e6565b6000601260146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5256520000000000000000000000000000000000000000000000000000000000815250905090565b60006110bf6110b8611d1f565b8484611ef2565b6001905092915050565b6110d16124e6565b6003600c541115611117576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110e90614154565b60405180910390fd5b600782111561115b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115290614134565b60405180910390fd5b600281111561119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690614114565b60405180910390fd5b604051806080016040528084815260200183815260200182815260200160011515815250600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555090505050505050565b6112516124e6565b60005b81518110156112e257600160056000848481518110611276576112756146cf565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112da90614628565b915050611254565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611327611d1f565b73ffffffffffffffffffffffffffffffffffffffff161461134757600080fd5b600061135230610fa1565b905061135d8161281a565b50565b6113686124e6565b6003600c5411156113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a590614154565b60405180910390fd5b80600c8190555050565b6113c06124e6565b80601260176101000a81548160ff02191690831515021790555050565b6113e56124e6565b601260149054906101000a900460ff1615611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c90614294565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601260146101000a81548160ff0219169083151502179055506114df30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16678ac7230489e80000611d27565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561152557600080fd5b505afa158015611539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155d91906138ac565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156115bf57600080fd5b505afa1580156115d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f791906138ac565b6040518363ffffffff1660e01b8152600401611614929190613fa4565b602060405180830381600087803b15801561162e57600080fd5b505af1158015611642573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166691906138ac565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71947306116ef30610fa1565b6000806116fa611045565b426040518863ffffffff1660e01b815260040161171c96959493929190613ff6565b6060604051808303818588803b15801561173557600080fd5b505af1158015611749573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061176e9190613bb7565b50505042600a819055506001601260166101000a81548160ff0219169083151502179055506001601260186101000a81548160ff021916908315150217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161184d929190613fcd565b602060405180830381600087803b15801561186757600080fd5b505af115801561187b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061189f9190613b5d565b5050565b6118ab6124e6565b6003600c5411156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e890614154565b60405180910390fd5b6007821115611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192c90614134565b60405180910390fd5b6002811115611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197090614114565b60405180910390fd5b604051806080016040528084815260200183815260200182815260200160011515815250601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101556040820151816002015560608201518160030160006101000a81548160ff02191690831515021790555090505050505050565b611a2b6124e6565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90614174565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611b1b6124e6565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9e90614234565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611c916124e6565b8060138190555050565b611ca36124e6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0a906140d4565b60405180910390fd5b611d1c81612756565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8e90614274565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dfe906140f4565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ee591906142d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611f62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5990614254565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990614094565b60405180910390fd5b60008111612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c906141f4565b60405180910390fd5b61201d611045565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561208b575061205b611045565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561248157601260149054906101000a900460ff166120df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d690614214565b60405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121835750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61218c57600080fd5b6013548111156121d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c8906142b4565b60405180910390fd5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561227c5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122d25750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122ea5750601260189054906101000a900460ff165b1561238b5742600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061233a57600080fd5b601e426123479190614436565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600061239630610fa1565b9050601260179054906101000a900460ff16156123c757620186a08111156123c2576123c181612aa2565b5b61247f565b6000811180156123e45750601260159054906101000a900460ff16155b801561243e5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156124565750601260169054906101000a900460ff165b1561247e576124648161281a565b6000479050600081111561247c5761247b4761267c565b5b505b5b505b61248c838383612b3d565b505050565b60008383111582906124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d09190614072565b60405180910390fd5b5082840390509392505050565b6124ee611d1f565b73ffffffffffffffffffffffffffffffffffffffff1661250c611045565b73ffffffffffffffffffffffffffffffffffffffff1614612562576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612559906141d4565b60405180910390fd5b565b600081836125729190614436565b905092915050565b600080600080612588612b4d565b9050600061259f828a61265090919063ffffffff16565b905060006125b6838a61265090919063ffffffff16565b905060006125cd848a61265090919063ffffffff16565b905060006125e4858a61265090919063ffffffff16565b9050600061261f8261261185612603888a61263a90919063ffffffff16565b61263a90919063ffffffff16565b61263a90919063ffffffff16565b90508481859850985098505050505050509450945094915050565b600081836126489190614517565b905092915050565b6000818361265e91906144bd565b905092915050565b60008183612674919061448c565b905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156126e4573d6000803e3d6000fd5b5050565b600060075482111561272f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612726906140b4565b60405180910390fd5b6000612739612b4d565b905061274e818461266690919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612852576128516146fe565b5b6040519080825280602002602001820160405280156128805781602001602082028036833780820191505090505b5090503081600081518110612898576128976146cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293a57600080fd5b505afa15801561294e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297291906138ac565b81600181518110612986576129856146cf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129ed30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d27565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a519594939291906142ef565b600060405180830381600087803b158015612a6b57600080fd5b505af1158015612a7f573d6000803e3d6000fd5b50505050506000601260156101000a81548160ff02191690831515021790555050565b6001601260156101000a81548160ff0219169083151502179055506000612ad360028361266690919063ffffffff16565b90506000612aea828461263a90919063ffffffff16565b90506000479050612afa8361281a565b6000612b0f824761263a90919063ffffffff16565b9050612b1b8382612b78565b505050506000601260156101000a81548160ff02191690831515021790555050565b612b48838383612c6c565b505050565b6000806000612b5a613299565b91509150612b71818361266690919063ffffffff16565b9250505090565b612ba530601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611d27565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080612bf1611045565b426040518863ffffffff1660e01b8152600401612c1396959493929190613ff6565b6060604051808303818588803b158015612c2c57600080fd5b505af1158015612c40573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c659190613bb7565b5050505050565b612c74613673565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff1615612e4457612e3d82600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154600f60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e375750600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f8565b90506130cc565b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030160009054906101000a900460ff16156130145761300d82601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154601060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130075750600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f8565b90506130cb565b6130c882600c54600d54600b54600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130c25750600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132f8565b90505b5b6131228160000151600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263a90919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131bb8160200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256490919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061320b8160a001516133df565b6132188160c0015161349c565b61322a81604001518260800151613559565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836060015160405161328b91906142d4565b60405180910390a350505050565b600080600060075490506000678ac7230489e8000090506132cd678ac7230489e8000060075461266690919063ffffffff16565b8210156132eb57600754678ac7230489e800009350935050506132f4565b81819350935050505b9091565b613300613673565b60008060008061337b8a61332e8861331957600061331c565b60015b60ff168c61265090919063ffffffff16565b6133528961333d576000613340565b60015b60ff168c61265090919063ffffffff16565b6133768a613361576000613364565b60015b60ff168c61265090919063ffffffff16565b613593565b935093509350935060008060006133948d87878761257a565b9250925092506040518060e001604052808481526020018381526020018281526020018881526020018781526020018681526020018581525097505050505050505095945050505050565b60006133e9612b4d565b90506000613400828461265090919063ffffffff16565b905061345481600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60006134a6612b4d565b905060006134bd828461265090919063ffffffff16565b905061351181600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256490919063ffffffff16565b600160008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b61356e8260075461263a90919063ffffffff16565b6007819055506135898160085461256490919063ffffffff16565b6008819055505050565b60008060008060006135c160646135b38a8c61265090919063ffffffff16565b61266690919063ffffffff16565b905060006135eb60646135dd8a8d61265090919063ffffffff16565b61266690919063ffffffff16565b9050600061361560646136078a8e61265090919063ffffffff16565b61266690919063ffffffff16565b9050600061363e82613630858761256490919063ffffffff16565b61256490919063ffffffff16565b90506000613655828e61263a90919063ffffffff16565b90508085858598509850985098505050505050945094509450949050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006136c36136be84614389565b614364565b905080838252602082019050828560208602820111156136e6576136e5614732565b5b60005b8581101561371657816136fc8882613790565b8452602084019350602083019250506001810190506136e9565b5050509392505050565b600061373361372e846143b5565b614364565b9050808382526020820190508285602086028201111561375657613755614732565b5b60005b85811015613786578161376c8882613855565b845260208401935060208301925050600181019050613759565b5050509392505050565b60008135905061379f81614bd6565b92915050565b6000815190506137b481614bd6565b92915050565b6000813590506137c981614bed565b92915050565b600082601f8301126137e4576137e361472d565b5b81356137f48482602086016136b0565b91505092915050565b600082601f8301126138125761381161472d565b5b8135613822848260208601613720565b91505092915050565b60008135905061383a81614c04565b92915050565b60008151905061384f81614c04565b92915050565b60008135905061386481614c1b565b92915050565b60008151905061387981614c1b565b92915050565b6000602082840312156138955761389461473c565b5b60006138a384828501613790565b91505092915050565b6000602082840312156138c2576138c161473c565b5b60006138d0848285016137a5565b91505092915050565b6000602082840312156138ef576138ee61473c565b5b60006138fd848285016137ba565b91505092915050565b6000806040838503121561391d5761391c61473c565b5b600061392b85828601613790565b925050602061393c85828601613790565b9150509250929050565b60008060006060848603121561395f5761395e61473c565b5b600061396d86828701613790565b935050602061397e86828701613790565b925050604061398f86828701613855565b9150509250925092565b600080604083850312156139b0576139af61473c565b5b60006139be85828601613790565b92505060206139cf85828601613855565b9150509250929050565b600080600080608085870312156139f3576139f261473c565b5b6000613a0187828801613790565b9450506020613a1287828801613855565b9350506040613a2387828801613855565b9250506060613a3487828801613855565b91505092959194509250565b600060208284031215613a5657613a5561473c565b5b600082013567ffffffffffffffff811115613a7457613a73614737565b5b613a80848285016137cf565b91505092915050565b600080600060608486031215613aa257613aa161473c565b5b600084013567ffffffffffffffff811115613ac057613abf614737565b5b613acc868287016137cf565b935050602084013567ffffffffffffffff811115613aed57613aec614737565b5b613af9868287016137fd565b925050604084013567ffffffffffffffff811115613b1a57613b19614737565b5b613b26868287016137fd565b9150509250925092565b600060208284031215613b4657613b4561473c565b5b6000613b548482850161382b565b91505092915050565b600060208284031215613b7357613b7261473c565b5b6000613b8184828501613840565b91505092915050565b600060208284031215613ba057613b9f61473c565b5b6000613bae84828501613855565b91505092915050565b600080600060608486031215613bd057613bcf61473c565b5b6000613bde8682870161386a565b9350506020613bef8682870161386a565b9250506040613c008682870161386a565b9150509250925092565b6000613c168383613c22565b60208301905092915050565b613c2b8161454b565b82525050565b613c3a8161454b565b82525050565b6000613c4b826143f1565b613c558185614414565b9350613c60836143e1565b8060005b83811015613c91578151613c788882613c0a565b9750613c8383614407565b925050600181019050613c64565b5085935050505092915050565b613ca78161456f565b82525050565b613cb6816145b2565b82525050565b6000613cc7826143fc565b613cd18185614425565b9350613ce18185602086016145c4565b613cea81614741565b840191505092915050565b6000613d02602383614425565b9150613d0d82614752565b604082019050919050565b6000613d25602a83614425565b9150613d30826147a1565b604082019050919050565b6000613d48602683614425565b9150613d53826147f0565b604082019050919050565b6000613d6b602283614425565b9150613d768261483f565b604082019050919050565b6000613d8e601e83614425565b9150613d998261488e565b602082019050919050565b6000613db1601d83614425565b9150613dbc826148b7565b602082019050919050565b6000613dd4601d83614425565b9150613ddf826148e0565b602082019050919050565b6000613df7602583614425565b9150613e0282614909565b604082019050919050565b6000613e1a602683614425565b9150613e2582614958565b604082019050919050565b6000613e3d601783614425565b9150613e48826149a7565b602082019050919050565b6000613e60602083614425565b9150613e6b826149d0565b602082019050919050565b6000613e83602983614425565b9150613e8e826149f9565b604082019050919050565b6000613ea6601383614425565b9150613eb182614a48565b602082019050919050565b6000613ec9602483614425565b9150613ed482614a71565b604082019050919050565b6000613eec602583614425565b9150613ef782614ac0565b604082019050919050565b6000613f0f602483614425565b9150613f1a82614b0f565b604082019050919050565b6000613f32601783614425565b9150613f3d82614b5e565b602082019050919050565b6000613f55602b83614425565b9150613f6082614b87565b604082019050919050565b613f748161459b565b82525050565b613f83816145a5565b82525050565b6000602082019050613f9e6000830184613c31565b92915050565b6000604082019050613fb96000830185613c31565b613fc66020830184613c31565b9392505050565b6000604082019050613fe26000830185613c31565b613fef6020830184613f6b565b9392505050565b600060c08201905061400b6000830189613c31565b6140186020830188613f6b565b6140256040830187613cad565b6140326060830186613cad565b61403f6080830185613c31565b61404c60a0830184613f6b565b979650505050505050565b600060208201905061406c6000830184613c9e565b92915050565b6000602082019050818103600083015261408c8184613cbc565b905092915050565b600060208201905081810360008301526140ad81613cf5565b9050919050565b600060208201905081810360008301526140cd81613d18565b9050919050565b600060208201905081810360008301526140ed81613d3b565b9050919050565b6000602082019050818103600083015261410d81613d5e565b9050919050565b6000602082019050818103600083015261412d81613d81565b9050919050565b6000602082019050818103600083015261414d81613da4565b9050919050565b6000602082019050818103600083015261416d81613dc7565b9050919050565b6000602082019050818103600083015261418d81613dea565b9050919050565b600060208201905081810360008301526141ad81613e0d565b9050919050565b600060208201905081810360008301526141cd81613e30565b9050919050565b600060208201905081810360008301526141ed81613e53565b9050919050565b6000602082019050818103600083015261420d81613e76565b9050919050565b6000602082019050818103600083015261422d81613e99565b9050919050565b6000602082019050818103600083015261424d81613ebc565b9050919050565b6000602082019050818103600083015261426d81613edf565b9050919050565b6000602082019050818103600083015261428d81613f02565b9050919050565b600060208201905081810360008301526142ad81613f25565b9050919050565b600060208201905081810360008301526142cd81613f48565b9050919050565b60006020820190506142e96000830184613f6b565b92915050565b600060a0820190506143046000830188613f6b565b6143116020830187613cad565b81810360408301526143238186613c40565b90506143326060830185613c31565b61433f6080830184613f6b565b9695505050505050565b600060208201905061435e6000830184613f7a565b92915050565b600061436e61437f565b905061437a82826145f7565b919050565b6000604051905090565b600067ffffffffffffffff8211156143a4576143a36146fe565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143d0576143cf6146fe565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006144418261459b565b915061444c8361459b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561448157614480614671565b5b828201905092915050565b60006144978261459b565b91506144a28361459b565b9250826144b2576144b16146a0565b5b828204905092915050565b60006144c88261459b565b91506144d38361459b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450c5761450b614671565b5b828202905092915050565b60006145228261459b565b915061452d8361459b565b9250828210156145405761453f614671565b5b828203905092915050565b60006145568261457b565b9050919050565b60006145688261457b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006145bd8261459b565b9050919050565b60005b838110156145e25780820151818401526020810190506145c7565b838111156145f1576000848401525b50505050565b61460082614741565b810181811067ffffffffffffffff8211171561461f5761461e6146fe565b5b80604052505050565b60006146338261459b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561466657614665614671565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4275726e206665652063616e6e6f74206265206d6f7265207468616e20320000600082015250565b7f546178206665652063616e6e6f74206265206d6f7265207468616e2037000000600082015250565b7f546178206665652063616e6e6f74206265206d6f7265207468616e2033000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465642066726f6d60008201527f2066656573000000000000000000000000000000000000000000000000000000602082015250565b7f546865206c656e677468206f662074686520617272617973206d75737420626560008201527f20657175616c0000000000000000000000000000000000000000000000000000602082015250565b7f546865206d6967726174696f6e20697320636c6f736564000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206f70656e00000000000000000000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c7564656420666f722060008201527f6665657300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d20616c6c6f776564000000000000000000000000000000000000000000602082015250565b614bdf8161454b565b8114614bea57600080fd5b50565b614bf68161455d565b8114614c0157600080fd5b50565b614c0d8161456f565b8114614c1857600080fd5b50565b614c248161459b565b8114614c2f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a8aed0d2ea5eee906a8a585bb8b63d100d819db9dad2b336adb6574ea93d9aba64736f6c63430008070033
Deployed Bytecode Sourcemap
20477:17281:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22976:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23253:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25649:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33276:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33014:82;;;;;;;;;;;;;:::i;:::-;;23162:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28045:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27722:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24208:938;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25970:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23532:602;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26186:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35519:199;;;;;;;;;;;;;:::i;:::-;;23356:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16701:103;;;;;;;;;;;;;:::i;:::-;;32926:80;;;;;;;;;;;;;:::i;:::-;;16053:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23067;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25154:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26918:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33104:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35311:200;;;;;;;;;;;;;:::i;:::-;;27883:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26791:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32096:822;;;;;;;;;;;;;:::i;:::-;;27322:392;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26360:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26577:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25329:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26079:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16959:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22976:83;23013:13;23046:5;;;;;;;;;;;;;;;;;23039:12;;22976:83;:::o;25480:161::-;25555:4;25572:39;25581:12;:10;:12::i;:::-;25595:7;25604:6;25572:8;:39::i;:::-;25629:4;25622:11;;25480:161;;;;:::o;23253:95::-;23306:7;20984:22;23326:14;;23253:95;:::o;25649:313::-;25747:4;25764:36;25774:6;25782:9;25793:6;25764:9;:36::i;:::-;25811:121;25820:6;25828:12;:10;:12::i;:::-;25842:89;25880:6;25842:89;;;;;;;;;;;;;;;;;:11;:19;25854:6;25842:19;;;;;;;;;;;;;;;:33;25862:12;:10;:12::i;:::-;25842:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25811:8;:121::i;:::-;25950:4;25943:11;;25649:313;;;;;:::o;33276:88::-;15939:13;:11;:13::i;:::-;33351:5:::1;33336:4;:12;33341:6;33336:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;33276:88:::0;:::o;33014:82::-;15939:13;:11;:13::i;:::-;33084:4:::1;33070:11;;:18;;;;;;;;;;;;;;;;;;33014:82::o:0;23162:83::-;23203:5;22145:1;23221:16;;23162:83;:::o;28045:159::-;15939:13;:11;:13::i;:::-;28131:1:::1;28120:7;:12;;28112:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28189:7;28178:8;:18;;;;28045:159:::0;:::o;27722:153::-;15939:13;:11;:13::i;:::-;27805:1:::1;27795:6;:11;;27787:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;27861:6;27851:7;:16;;;;27722:153:::0;:::o;24208:938::-;15939:13;:11;:13::i;:::-;24396:1:::1;24369:23;;:28;24361:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24471:7;:14;24444:16;:23;:41;24436:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;24574:13;:20;24547:16;:23;:47;24539:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;24655:6;24650:489;24671:16;:23;24667:1;:27;24650:489;;;24717:17;24740:54;24752:32;24767:13;24781:1;24767:16;;;;;;;;:::i;:::-;;;;;;;;24752:7;24760:1;24752:10;;;;;;;;:::i;:::-;;;;;;;;:14;;:32;;;;:::i;:::-;24786:1;24789::::0;24792::::1;24740:11;:54::i;:::-;24716:78;;;;24835:37;24862:9;24835:7;:22;24851:4;24835:22;;;;;;;;;;;;;;;;:26;;:37;;;;:::i;:::-;24811:7;:22;24827:4;24811:22;;;;;;;;;;;;;;;:61;;;;24951:9;24920:7;:28;24928:16;24945:1;24928:19;;;;;;;;:::i;:::-;;;;;;;;24920:28;;;;;;;;;;;;;;;:40;;;;25013:13;25027:1;25013:16;;;;;;;;:::i;:::-;;;;;;;;24975:14;:35;24990:16;25007:1;24990:19;;;;;;;;:::i;:::-;;;;;;;;24975:35;;;;;;;;;;;;;;;:54;;;;25073:16;25090:1;25073:19;;;;;;;;:::i;:::-;;;;;;;;25049:78;;25066:4;25049:78;;;25094:32;25109:13;25123:1;25109:16;;;;;;;;:::i;:::-;;;;;;;;25094:7;25102:1;25094:10;;;;;;;;:::i;:::-;;;;;;;;:14;;:32;;;;:::i;:::-;25049:78;;;;;;:::i;:::-;;;;;;;;24701:438;24696:3;;;;;:::i;:::-;;;;24650:489;;;;24208:938:::0;;;:::o;25970:101::-;15939:13;:11;:13::i;:::-;26058:5:::1;26040:15;;:23;;;;;;;;;;;;;;;;;;25970:101:::0;:::o;23532:602::-;23595:7;23708:23;;23690:15;:41;:73;;;;23762:1;23735:23;;:28;23690:73;23686:136;;;23787:14;:23;23802:7;23787:23;;;;;;;;;;;;;;;;23780:30;;;;23686:136;23834:16;23853:44;23873:23;;23853:15;:19;;:44;;;;:::i;:::-;23834:63;;23908:16;23928:14;23908:35;;23984:8;23973;:19;23969:60;;;24016:1;24009:8;;;;;;23969:60;24048:78;24121:4;24048:68;24083:32;24106:8;24083:18;24096:4;24083:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;24076:4;:39;;;;:::i;:::-;24048:14;:23;24063:7;24048:23;;;;;;;;;;;;;;;;:27;;:68;;;;:::i;:::-;:72;;:78;;;;:::i;:::-;24041:85;;;;23532:602;;;;:::o;26186:166::-;15939:13;:11;:13::i;:::-;26292:7:::1;26269:20;;:30;;;;;;;;;;;;;;;;;;26340:4;26310:18;:27;26329:7;26310:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26186:166:::0;:::o;35519:199::-;35585:20;;;;;;;;;;;35569:36;;:12;:10;:12::i;:::-;:36;;;35561:45;;;;;;35617:26;35646:21;35617:50;;35678:32;35691:18;35678:12;:32::i;:::-;35550:168;35519:199::o;23356:168::-;23422:7;23449:67;23491:24;23507:7;23491:15;:24::i;:::-;23449:37;23469:7;:16;23477:7;23469:16;;;;;;;;;;;;;;;;23449:19;:37::i;:::-;:41;;:67;;;;:::i;:::-;23442:74;;23356:168;;;:::o;16701:103::-;15939:13;:11;:13::i;:::-;16766:30:::1;16793:1;16766:18;:30::i;:::-;16701:103::o:0;32926:80::-;15939:13;:11;:13::i;:::-;32993:5:::1;32979:11;;:19;;;;;;;;;;;;;;;;;;32926:80::o:0;16053:87::-;16099:7;16126:6;;;;;;;;;;;16119:13;;16053:87;:::o;23067:::-;23106:13;23139:7;;;;;;;;;;;;;;;;;23132:14;;23067:87;:::o;25154:167::-;25232:4;25249:42;25259:12;:10;:12::i;:::-;25273:9;25284:6;25249:9;:42::i;:::-;25309:4;25302:11;;25154:167;;;;:::o;26918:396::-;15939:13;:11;:13::i;:::-;27061:1:::1;27050:7;;:12;;27042:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27125:1;27115:6;:11;;27107:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;27190:1;27179:7;:12;;27171:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27265:41;;;;;;;;27276:6;27265:41;;;;27284:6;27265:41;;;;27292:7;27265:41;;;;27301:4;27265:41;;;;::::0;27237:16:::1;:25;27254:7;27237:25;;;;;;;;;;;;;;;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26918:396:::0;;;;:::o;33104:164::-;15939:13;:11;:13::i;:::-;33178:6:::1;33173:88;33194:5;:12;33190:1;:16;33173:88;;;33245:4;33228;:14;33233:5;33239:1;33233:8;;;;;;;;:::i;:::-;;;;;;;;33228:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33208:3;;;;;:::i;:::-;;;;33173:88;;;;33104:164:::0;:::o;35311:200::-;35377:20;;;;;;;;;;;35361:36;;:12;:10;:12::i;:::-;:36;;;35353:45;;;;;;35409:23;35435:24;35453:4;35435:9;:24::i;:::-;35409:50;;35470:33;35487:15;35470:16;:33::i;:::-;35342:169;35311:200::o;27883:154::-;15939:13;:11;:13::i;:::-;27967:1:::1;27956:7;;:12;;27948:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;28023:6;28013:7;:16;;;;27883:154:::0;:::o;26791:119::-;15939:13;:11;:13::i;:::-;26894:8:::1;26870:21;;:32;;;;;;;;;;;;;;;;;;26791:119:::0;:::o;32096:822::-;15939:13;:11;:13::i;:::-;32158:11:::1;;;;;;;;;;;32157:12;32149:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;32208:35;32265:42;32208:100;;32337:16;32319:15;;:34;;;;;;;;;;;;;;;;;;32378:4;32364:11;;:18;;;;;;;;;;;;;;;;;;32393:58;32410:4;32425:15;;;;;;;;;;;20984:22;32393:8;:58::i;:::-;32496:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32478:56;;;32543:4;32550:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32478:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32462:13;;:112;;;;;;;;;;;;;;;;;;32585:15;;;;;;;;;;;:31;;;32624:21;32655:4;32661:24;32679:4;32661:9;:24::i;:::-;32686:1;32688::::0;32690:7:::1;:5;:7::i;:::-;32698:15;32585:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32751:15;32725:23;:41;;;;32791:4;32777:11;;:18;;;;;;;;;;;;;;;;;;32824:4;32806:15;;:22;;;;;;;;;;;;;;;;;;32846:13;;;;;;;;;;;32839:29;;;32877:15;;;;;;;;;;;32895:14;32839:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32138:780;32096:822::o:0;27322:392::-;15939:13;:11;:13::i;:::-;27463:1:::1;27452:7;;:12;;27444:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;27527:1;27517:6;:11;;27509:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;27592:1;27581:7;:12;;27573:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27665:41;;;;;;;;27676:6;27665:41;;;;27684:6;27665:41;;;;27692:7;27665:41;;;;27701:4;27665:41;;;;::::0;27639:14:::1;:23;27654:7;27639:23;;;;;;;;;;;;;;;:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27322:392:::0;;;;:::o;26360:209::-;15939:13;:11;:13::i;:::-;26447:18:::1;:27;26466:7;26447:27;;;;;;;;;;;;;;;;;;;;;;;;;26446:28;26438:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;26557:4;26527:18;:27;26546:7;26527:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;26360:209:::0;:::o;26577:206::-;15939:13;:11;:13::i;:::-;26661:18:::1;:27;26680:7;26661:27;;;;;;;;;;;;;;;;;;;;;;;;;26653:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26770:5;26740:18;:27;26759:7;26740:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;26577:206:::0;:::o;25329:143::-;25410:7;25437:11;:18;25449:5;25437:18;;;;;;;;;;;;;;;:27;25456:7;25437:27;;;;;;;;;;;;;;;;25430:34;;25329:143;;;;:::o;26079:99::-;15939:13;:11;:13::i;:::-;26164:6:::1;26149:12;:21;;;;26079:99:::0;:::o;16959:201::-;15939:13;:11;:13::i;:::-;17068:1:::1;17048:22;;:8;:22;;;;17040:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17124:28;17143:8;17124:18;:28::i;:::-;16959:201:::0;:::o;14604:98::-;14657:7;14684:10;14677:17;;14604:98;:::o;28473:335::-;28583:1;28566:19;;:5;:19;;;;28558:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28664:1;28645:21;;:7;:21;;;;28637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28746:6;28716:11;:18;28728:5;28716:18;;;;;;;;;;;;;;;:27;28735:7;28716:27;;;;;;;;;;;;;;;:36;;;;28784:7;28768:32;;28777:5;28768:32;;;28793:6;28768:32;;;;;;:::i;:::-;;;;;;;;28473:335;;;:::o;28816:1513::-;28920:1;28904:18;;:4;:18;;;;28896:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28997:1;28983:16;;:2;:16;;;;28975:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29067:1;29058:6;:10;29050:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29137:7;:5;:7::i;:::-;29129:15;;:4;:15;;;;:32;;;;;29154:7;:5;:7::i;:::-;29148:13;;:2;:13;;;;29129:32;29125:1154;;;29186:11;;;;;;;;;;;29178:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;29245:4;:10;29250:4;29245:10;;;;;;;;;;;;;;;;;;;;;;;;;29244:11;:24;;;;;29260:4;:8;29265:2;29260:8;;;;;;;;;;;;;;;;;;;;;;;;;29259:9;29244:24;29236:33;;;;;;29302:12;;29292:6;:22;;29284:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;29391:13;;;;;;;;;;;29383:21;;:4;:21;;;:55;;;;;29422:15;;;;;;;;;;;29408:30;;:2;:30;;;;29383:55;:83;;;;;29444:18;:22;29463:2;29444:22;;;;;;;;;;;;;;;;;;;;;;;;;29442:24;29383:83;:102;;;;;29470:15;;;;;;;;;;;29383:102;29379:275;;;29558:15;29543:8;:12;29552:2;29543:12;;;;;;;;;;;;;;;;:30;29535:39;;;;;;29627:10;29608:15;:30;;;;:::i;:::-;29593:8;:12;29602:2;29593:12;;;;;;;;;;;;;;;:45;;;;29379:275;29670:28;29701:24;29719:4;29701:9;:24::i;:::-;29670:55;;29744:21;;;;;;;;;;;29740:528;;;29813:7;29790:20;:30;29786:115;;;29845:36;29860:20;29845:14;:36::i;:::-;29786:115;29740:528;;;29949:1;29926:20;:24;:35;;;;;29955:6;;;;;;;;;;;29954:7;29926:35;:60;;;;;29973:13;;;;;;;;;;;29965:21;;:4;:21;;;;29926:60;:75;;;;;29990:11;;;;;;;;;;;29926:75;29922:346;;;30022:38;30039:20;30022:16;:38::i;:::-;30079:26;30108:21;30079:50;;30172:1;30151:18;:22;30148:105;;;30198:35;30211:21;30198:12;:35::i;:::-;30148:105;30003:265;29922:346;29740:528;29163:1116;29125:1154;30291:30;30306:4;30311:2;30314:6;30291:14;:30::i;:::-;28816:1513;;;:::o;12039:240::-;12159:7;12217:1;12212;:6;;12220:12;12204:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12259:1;12255;:5;12248:12;;12039:240;;;;;:::o;16218:132::-;16293:12;:10;:12::i;:::-;16282:23;;:7;:5;:7::i;:::-;:23;;;16274:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16218:132::o;9760:98::-;9818:7;9849:1;9845;:5;;;;:::i;:::-;9838:12;;9760:98;;;;:::o;36818:502::-;36921:7;36930;36939;36959:19;36981:10;:8;:10::i;:::-;36959:32;;37002:15;37020:24;37032:11;37020:7;:11;;:24;;;;:::i;:::-;37002:42;;37055:12;37070:21;37079:11;37070:4;:8;;:21;;;;:::i;:::-;37055:36;;37102:12;37117:21;37126:11;37117:4;:8;;:21;;;;:::i;:::-;37102:36;;37149:13;37165:22;37175:11;37165:5;:9;;:22;;;;:::i;:::-;37149:38;;37198:23;37224:38;37256:5;37224:27;37246:4;37224:17;37236:4;37224:7;:11;;:17;;;;:::i;:::-;:21;;:27;;;;:::i;:::-;:31;;:38;;;;:::i;:::-;37198:64;;37281:7;37290:15;37307:4;37273:39;;;;;;;;;;;;36818:502;;;;;;;;:::o;10141:98::-;10199:7;10230:1;10226;:5;;;;:::i;:::-;10219:12;;10141:98;;;;:::o;10498:::-;10556:7;10587:1;10583;:5;;;;:::i;:::-;10576:12;;10498:98;;;;:::o;10897:::-;10955:7;10986:1;10982;:5;;;;:::i;:::-;10975:12;;10897:98;;;;:::o;30828:102::-;30885:20;;;;;;;;;;;:29;;:37;30915:6;30885:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30828:102;:::o;28212:253::-;28279:7;28318;;28307;:18;;28299:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28383:19;28405:10;:8;:10::i;:::-;28383:32;;28433:24;28445:11;28433:7;:11;;:24;;;;:::i;:::-;28426:31;;;28212:253;;;:::o;17320:191::-;17394:16;17413:6;;;;;;;;;;;17394:25;;17439:8;17430:6;;:17;;;;;;;;;;;;;;;;;;17494:8;17463:40;;17484:8;17463:40;;;;;;;;;;;;17383:128;17320:191;:::o;30337:483::-;22516:4;22507:6;;:13;;;;;;;;;;;;;;;;;;30415:21:::1;30453:1;30439:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30415:40;;30484:4;30466;30471:1;30466:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30510:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30500:4;30505:1;30500:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;30543:62;30560:4;30575:15;;;;;;;;;;;30593:11;30543:8;:62::i;:::-;30616:15;;;;;;;;;;;:66;;;30697:11;30723:1;30739:4;30766;30786:15;30616:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30404:416;22552:5:::0;22543:6;;:14;;;;;;;;;;;;;;;;;;30337:483;:::o;30938:629::-;22516:4;22507:6;;:13;;;;;;;;;;;;;;;;;;31074:12:::1;31089:27;31114:1;31089:20;:24;;:27;;;;:::i;:::-;31074:42;;31127:17;31147:30;31172:4;31147:20;:24;;:30;;;;:::i;:::-;31127:50;;31226:22;31251:21;31226:46;;31329:22;31346:4;31329:16;:22::i;:::-;31412:18;31433:41;31459:14;31433:21;:25;;:41;;;;:::i;:::-;31412:62;;31524:35;31537:9;31548:10;31524:12;:35::i;:::-;31012:555;;;;22552:5:::0;22543:6;;:14;;;;;;;;;;;;;;;;;;30938:629;:::o;33372:146::-;33466:44;33484:6;33492:9;33503:6;33466:17;:44::i;:::-;33372:146;;;:::o;37328:163::-;37369:7;37390:15;37407;37426:19;:17;:19::i;:::-;37389:56;;;;37463:20;37475:7;37463;:11;;:20;;;;:::i;:::-;37456:27;;;;37328:163;:::o;31575:513::-;31723:62;31740:4;31755:15;;;;;;;;;;;31773:11;31723:8;:62::i;:::-;31828:15;;;;;;;;;;;:31;;;31867:9;31900:4;31920:11;31946:1;31989;32032:7;:5;:7::i;:::-;32054:15;31828:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31575:513;;:::o;33526:1154::-;33624:24;;:::i;:::-;33663:16;:24;33680:6;33663:24;;;;;;;;;;;;;;;:32;;;;;;;;;;;;33659:680;;;33722:183;33733:7;33742:16;:24;33759:6;33742:24;;;;;;;;;;;;;;;:31;;;33775:16;:24;33792:6;33775:24;;;;;;;;;;;;;;;:31;;;33808:16;:24;33825:6;33808:24;;;;;;;;;;;;;;;:32;;;33844:18;:26;33863:6;33844:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;33874:18;:29;33893:9;33874:29;;;;;;;;;;;;;;;;;;;;;;;;;33844:59;33842:62;33722:10;:183::i;:::-;33712:193;;33659:680;;;33927:14;:25;33942:9;33927:25;;;;;;;;;;;;;;;:33;;;;;;;;;;;;33923:416;;;33987:186;33998:7;34007:14;:25;34022:9;34007:25;;;;;;;;;;;;;;;:32;;;34041:14;:25;34056:9;34041:25;;;;;;;;;;;;;;;:32;;;34075:14;:25;34090:9;34075:25;;;;;;;;;;;;;;;:33;;;34112:18;:26;34131:6;34112:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;34142:18;:29;34161:9;34142:29;;;;;;;;;;;;;;;;;;;;;;;;;34112:59;34110:62;33987:10;:186::i;:::-;33977:196;;33923:416;;;34216:111;34227:7;34236;;34245;;34254:8;;34266:18;:26;34285:6;34266:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;34296:18;:29;34315:9;34296:29;;;;;;;;;;;;;;;;;;;;;;;;;34266:59;34264:62;34216:10;:111::i;:::-;34206:121;;33923:416;33659:680;34369:36;34389:7;:15;;;34369:7;:15;34377:6;34369:15;;;;;;;;;;;;;;;;:19;;:36;;;;:::i;:::-;34351:7;:15;34359:6;34351:15;;;;;;;;;;;;;;;:54;;;;34437:47;34460:7;:23;;;34437:7;:18;34445:9;34437:18;;;;;;;;;;;;;;;;:22;;:47;;;;:::i;:::-;34416:7;:18;34424:9;34416:18;;;;;;;;;;;;;;;:68;;;;34495:28;34510:7;:12;;;34495:14;:28::i;:::-;34534:20;34540:7;:13;;;34534:5;:20::i;:::-;34565:39;34577:7;:12;;;34591:7;:12;;;34565:11;:39::i;:::-;34637:9;34620:52;;34629:6;34620:52;;;34648:7;:23;;;34620:52;;;;;;:::i;:::-;;;;;;;;33613:1067;33526:1154;;;:::o;37499:256::-;37549:7;37558;37578:15;37596:7;;37578:25;;37614:15;20984:22;37614:25;;37664:20;20984:22;37664:7;;:11;;:20;;;;:::i;:::-;37654:7;:30;37650:61;;;37694:7;;20984:22;37686:25;;;;;;;;37650:61;37730:7;37739;37722:25;;;;;;37499:256;;;:::o;35726:588::-;35870:16;;:::i;:::-;35900:23;35925:12;35939;35953:13;35970:132;35982:7;35991:35;36009:8;:16;;36024:1;36009:16;;;36020:1;36009:16;35991:35;;:13;:17;;:35;;;;:::i;:::-;36028;36046:8;:16;;36061:1;36046:16;;;36057:1;36046:16;36028:35;;:13;:17;;:35;;;;:::i;:::-;36065:36;36084:8;:16;;36099:1;36084:16;;;36095:1;36084:16;36065:36;;:14;:18;;:36;;;;:::i;:::-;35970:11;:132::i;:::-;35899:203;;;;;;;;36114:15;36131:23;36156:12;36172:39;36184:7;36193:4;36199;36205:5;36172:11;:39::i;:::-;36113:98;;;;;;36229:77;;;;;;;;36239:7;36229:77;;;;36248:15;36229:77;;;;36265:4;36229:77;;;;36271:15;36229:77;;;;36288:4;36229:77;;;;36294:4;36229:77;;;;36300:5;36229:77;;;36222:84;;;;;;;;;35726:588;;;;;;;:::o;34898:213::-;34955:19;34978:10;:8;:10::i;:::-;34955:33;;34999:12;35014:21;35023:11;35014:4;:8;;:21;;;;:::i;:::-;34999:36;;35071:32;35098:4;35071:7;:22;35087:4;35071:22;;;;;;;;;;;;;;;;:26;;:32;;;;:::i;:::-;35046:7;:22;35062:4;35046:22;;;;;;;;;;;;;;;:57;;;;34944:167;;34898:213;:::o;34688:202::-;34737:19;34760:10;:8;:10::i;:::-;34737:33;;34781:13;34797:22;34807:11;34797:5;:9;;:22;;;;:::i;:::-;34781:38;;34852:30;34876:5;34852:7;:19;34868:1;34852:19;;;;;;;;;;;;;;;;:23;;:30;;;;:::i;:::-;34830:7;:19;34846:1;34830:19;;;;;;;;;;;;;;;:52;;;;34726:164;;34688:202;:::o;35119:147::-;35197:17;35209:4;35197:7;;:11;;:17;;;;:::i;:::-;35187:7;:27;;;;35238:20;35253:4;35238:10;;:14;;:20;;;;:::i;:::-;35225:10;:33;;;;35119:147;;:::o;36322:488::-;36437:7;36446;36455;36464;36484:12;36499:28;36523:3;36499:19;36511:6;36499:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;36484:43;;36538:12;36553:34;36583:3;36553:25;36565:12;36553:7;:11;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36538:49;;36598:13;36614:29;36639:3;36614:20;36626:7;36614;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;36598:45;;36654:12;36669:25;36688:5;36669:14;36678:4;36669;:8;;:14;;;;:::i;:::-;:18;;:25;;;;:::i;:::-;36654:40;;36705:23;36731:17;36743:4;36731:7;:11;;:17;;;;:::i;:::-;36705:43;;36767:15;36784:4;36790;36796:5;36759:43;;;;;;;;;;;;;36322:488;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:139::-;1543:5;1581:6;1568:20;1559:29;;1597:33;1624:5;1597:33;:::i;:::-;1497:139;;;;:::o;1642:143::-;1699:5;1730:6;1724:13;1715:22;;1746:33;1773:5;1746:33;:::i;:::-;1642:143;;;;:::o;1791:155::-;1845:5;1883:6;1870:20;1861:29;;1899:41;1934:5;1899:41;:::i;:::-;1791:155;;;;:::o;1969:370::-;2040:5;2089:3;2082:4;2074:6;2070:17;2066:27;2056:122;;2097:79;;:::i;:::-;2056:122;2214:6;2201:20;2239:94;2329:3;2321:6;2314:4;2306:6;2302:17;2239:94;:::i;:::-;2230:103;;2046:293;1969:370;;;;:::o;2362:::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:94;2722:3;2714:6;2707:4;2699:6;2695:17;2632:94;:::i;:::-;2623:103;;2439:293;2362:370;;;;:::o;2738:133::-;2781:5;2819:6;2806:20;2797:29;;2835:30;2859:5;2835:30;:::i;:::-;2738:133;;;;:::o;2877:137::-;2931:5;2962:6;2956:13;2947:22;;2978:30;3002:5;2978:30;:::i;:::-;2877:137;;;;:::o;3020:139::-;3066:5;3104:6;3091:20;3082:29;;3120:33;3147:5;3120:33;:::i;:::-;3020:139;;;;:::o;3165:143::-;3222:5;3253:6;3247:13;3238:22;;3269:33;3296:5;3269:33;:::i;:::-;3165:143;;;;:::o;3314:329::-;3373:6;3422:2;3410:9;3401:7;3397:23;3393:32;3390:119;;;3428:79;;:::i;:::-;3390:119;3548:1;3573:53;3618:7;3609:6;3598:9;3594:22;3573:53;:::i;:::-;3563:63;;3519:117;3314:329;;;;:::o;3649:351::-;3719:6;3768:2;3756:9;3747:7;3743:23;3739:32;3736:119;;;3774:79;;:::i;:::-;3736:119;3894:1;3919:64;3975:7;3966:6;3955:9;3951:22;3919:64;:::i;:::-;3909:74;;3865:128;3649:351;;;;:::o;4006:345::-;4073:6;4122:2;4110:9;4101:7;4097:23;4093:32;4090:119;;;4128:79;;:::i;:::-;4090:119;4248:1;4273:61;4326:7;4317:6;4306:9;4302:22;4273:61;:::i;:::-;4263:71;;4219:125;4006:345;;;;:::o;4357:474::-;4425:6;4433;4482:2;4470:9;4461:7;4457:23;4453:32;4450:119;;;4488:79;;:::i;:::-;4450:119;4608:1;4633:53;4678:7;4669:6;4658:9;4654:22;4633:53;:::i;:::-;4623:63;;4579:117;4735:2;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4706:118;4357:474;;;;;:::o;4837:619::-;4914:6;4922;4930;4979:2;4967:9;4958:7;4954:23;4950:32;4947:119;;;4985:79;;:::i;:::-;4947:119;5105:1;5130:53;5175:7;5166:6;5155:9;5151:22;5130:53;:::i;:::-;5120:63;;5076:117;5232:2;5258:53;5303:7;5294:6;5283:9;5279:22;5258:53;:::i;:::-;5248:63;;5203:118;5360:2;5386:53;5431:7;5422:6;5411:9;5407:22;5386:53;:::i;:::-;5376:63;;5331:118;4837:619;;;;;:::o;5462:474::-;5530:6;5538;5587:2;5575:9;5566:7;5562:23;5558:32;5555:119;;;5593:79;;:::i;:::-;5555:119;5713:1;5738:53;5783:7;5774:6;5763:9;5759:22;5738:53;:::i;:::-;5728:63;;5684:117;5840:2;5866:53;5911:7;5902:6;5891:9;5887:22;5866:53;:::i;:::-;5856:63;;5811:118;5462:474;;;;;:::o;5942:765::-;6028:6;6036;6044;6052;6101:3;6089:9;6080:7;6076:23;6072:33;6069:120;;;6108:79;;:::i;:::-;6069:120;6228:1;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6199:117;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;6483:2;6509:53;6554:7;6545:6;6534:9;6530:22;6509:53;:::i;:::-;6499:63;;6454:118;6611:2;6637:53;6682:7;6673:6;6662:9;6658:22;6637:53;:::i;:::-;6627:63;;6582:118;5942:765;;;;;;;:::o;6713:539::-;6797:6;6846:2;6834:9;6825:7;6821:23;6817:32;6814:119;;;6852:79;;:::i;:::-;6814:119;7000:1;6989:9;6985:17;6972:31;7030:18;7022:6;7019:30;7016:117;;;7052:79;;:::i;:::-;7016:117;7157:78;7227:7;7218:6;7207:9;7203:22;7157:78;:::i;:::-;7147:88;;6943:302;6713:539;;;;:::o;7258:1249::-;7410:6;7418;7426;7475:2;7463:9;7454:7;7450:23;7446:32;7443:119;;;7481:79;;:::i;:::-;7443:119;7629:1;7618:9;7614:17;7601:31;7659:18;7651:6;7648:30;7645:117;;;7681:79;;:::i;:::-;7645:117;7786:78;7856:7;7847:6;7836:9;7832:22;7786:78;:::i;:::-;7776:88;;7572:302;7941:2;7930:9;7926:18;7913:32;7972:18;7964:6;7961:30;7958:117;;;7994:79;;:::i;:::-;7958:117;8099:78;8169:7;8160:6;8149:9;8145:22;8099:78;:::i;:::-;8089:88;;7884:303;8254:2;8243:9;8239:18;8226:32;8285:18;8277:6;8274:30;8271:117;;;8307:79;;:::i;:::-;8271:117;8412:78;8482:7;8473:6;8462:9;8458:22;8412:78;:::i;:::-;8402:88;;8197:303;7258:1249;;;;;:::o;8513:323::-;8569:6;8618:2;8606:9;8597:7;8593:23;8589:32;8586:119;;;8624:79;;:::i;:::-;8586:119;8744:1;8769:50;8811:7;8802:6;8791:9;8787:22;8769:50;:::i;:::-;8759:60;;8715:114;8513:323;;;;:::o;8842:345::-;8909:6;8958:2;8946:9;8937:7;8933:23;8929:32;8926:119;;;8964:79;;:::i;:::-;8926:119;9084:1;9109:61;9162:7;9153:6;9142:9;9138:22;9109:61;:::i;:::-;9099:71;;9055:125;8842:345;;;;:::o;9193:329::-;9252:6;9301:2;9289:9;9280:7;9276:23;9272:32;9269:119;;;9307:79;;:::i;:::-;9269:119;9427:1;9452:53;9497:7;9488:6;9477:9;9473:22;9452:53;:::i;:::-;9442:63;;9398:117;9193:329;;;;:::o;9528:663::-;9616:6;9624;9632;9681:2;9669:9;9660:7;9656:23;9652:32;9649:119;;;9687:79;;:::i;:::-;9649:119;9807:1;9832:64;9888:7;9879:6;9868:9;9864:22;9832:64;:::i;:::-;9822:74;;9778:128;9945:2;9971:64;10027:7;10018:6;10007:9;10003:22;9971:64;:::i;:::-;9961:74;;9916:129;10084:2;10110:64;10166:7;10157:6;10146:9;10142:22;10110:64;:::i;:::-;10100:74;;10055:129;9528:663;;;;;:::o;10197:179::-;10266:10;10287:46;10329:3;10321:6;10287:46;:::i;:::-;10365:4;10360:3;10356:14;10342:28;;10197:179;;;;:::o;10382:108::-;10459:24;10477:5;10459:24;:::i;:::-;10454:3;10447:37;10382:108;;:::o;10496:118::-;10583:24;10601:5;10583:24;:::i;:::-;10578:3;10571:37;10496:118;;:::o;10650:732::-;10769:3;10798:54;10846:5;10798:54;:::i;:::-;10868:86;10947:6;10942:3;10868:86;:::i;:::-;10861:93;;10978:56;11028:5;10978:56;:::i;:::-;11057:7;11088:1;11073:284;11098:6;11095:1;11092:13;11073:284;;;11174:6;11168:13;11201:63;11260:3;11245:13;11201:63;:::i;:::-;11194:70;;11287:60;11340:6;11287:60;:::i;:::-;11277:70;;11133:224;11120:1;11117;11113:9;11108:14;;11073:284;;;11077:14;11373:3;11366:10;;10774:608;;;10650:732;;;;:::o;11388:109::-;11469:21;11484:5;11469:21;:::i;:::-;11464:3;11457:34;11388:109;;:::o;11503:147::-;11598:45;11637:5;11598:45;:::i;:::-;11593:3;11586:58;11503:147;;:::o;11656:364::-;11744:3;11772:39;11805:5;11772:39;:::i;:::-;11827:71;11891:6;11886:3;11827:71;:::i;:::-;11820:78;;11907:52;11952:6;11947:3;11940:4;11933:5;11929:16;11907:52;:::i;:::-;11984:29;12006:6;11984:29;:::i;:::-;11979:3;11975:39;11968:46;;11748:272;11656:364;;;;:::o;12026:366::-;12168:3;12189:67;12253:2;12248:3;12189:67;:::i;:::-;12182:74;;12265:93;12354:3;12265:93;:::i;:::-;12383:2;12378:3;12374:12;12367:19;;12026:366;;;:::o;12398:::-;12540:3;12561:67;12625:2;12620:3;12561:67;:::i;:::-;12554:74;;12637:93;12726:3;12637:93;:::i;:::-;12755:2;12750:3;12746:12;12739:19;;12398:366;;;:::o;12770:::-;12912:3;12933:67;12997:2;12992:3;12933:67;:::i;:::-;12926:74;;13009:93;13098:3;13009:93;:::i;:::-;13127:2;13122:3;13118:12;13111:19;;12770:366;;;:::o;13142:::-;13284:3;13305:67;13369:2;13364:3;13305:67;:::i;:::-;13298:74;;13381:93;13470:3;13381:93;:::i;:::-;13499:2;13494:3;13490:12;13483:19;;13142:366;;;:::o;13514:::-;13656:3;13677:67;13741:2;13736:3;13677:67;:::i;:::-;13670:74;;13753:93;13842:3;13753:93;:::i;:::-;13871:2;13866:3;13862:12;13855:19;;13514:366;;;:::o;13886:::-;14028:3;14049:67;14113:2;14108:3;14049:67;:::i;:::-;14042:74;;14125:93;14214:3;14125:93;:::i;:::-;14243:2;14238:3;14234:12;14227:19;;13886:366;;;:::o;14258:::-;14400:3;14421:67;14485:2;14480:3;14421:67;:::i;:::-;14414:74;;14497:93;14586:3;14497:93;:::i;:::-;14615:2;14610:3;14606:12;14599:19;;14258:366;;;:::o;14630:::-;14772:3;14793:67;14857:2;14852:3;14793:67;:::i;:::-;14786:74;;14869:93;14958:3;14869:93;:::i;:::-;14987:2;14982:3;14978:12;14971:19;;14630:366;;;:::o;15002:::-;15144:3;15165:67;15229:2;15224:3;15165:67;:::i;:::-;15158:74;;15241:93;15330:3;15241:93;:::i;:::-;15359:2;15354:3;15350:12;15343:19;;15002:366;;;:::o;15374:::-;15516:3;15537:67;15601:2;15596:3;15537:67;:::i;:::-;15530:74;;15613:93;15702:3;15613:93;:::i;:::-;15731:2;15726:3;15722:12;15715:19;;15374:366;;;:::o;15746:::-;15888:3;15909:67;15973:2;15968:3;15909:67;:::i;:::-;15902:74;;15985:93;16074:3;15985:93;:::i;:::-;16103:2;16098:3;16094:12;16087:19;;15746:366;;;:::o;16118:::-;16260:3;16281:67;16345:2;16340:3;16281:67;:::i;:::-;16274:74;;16357:93;16446:3;16357:93;:::i;:::-;16475:2;16470:3;16466:12;16459:19;;16118:366;;;:::o;16490:::-;16632:3;16653:67;16717:2;16712:3;16653:67;:::i;:::-;16646:74;;16729:93;16818:3;16729:93;:::i;:::-;16847:2;16842:3;16838:12;16831:19;;16490:366;;;:::o;16862:::-;17004:3;17025:67;17089:2;17084:3;17025:67;:::i;:::-;17018:74;;17101:93;17190:3;17101:93;:::i;:::-;17219:2;17214:3;17210:12;17203:19;;16862:366;;;:::o;17234:::-;17376:3;17397:67;17461:2;17456:3;17397:67;:::i;:::-;17390:74;;17473:93;17562:3;17473:93;:::i;:::-;17591:2;17586:3;17582:12;17575:19;;17234:366;;;:::o;17606:::-;17748:3;17769:67;17833:2;17828:3;17769:67;:::i;:::-;17762:74;;17845:93;17934:3;17845:93;:::i;:::-;17963:2;17958:3;17954:12;17947:19;;17606:366;;;:::o;17978:::-;18120:3;18141:67;18205:2;18200:3;18141:67;:::i;:::-;18134:74;;18217:93;18306:3;18217:93;:::i;:::-;18335:2;18330:3;18326:12;18319:19;;17978:366;;;:::o;18350:::-;18492:3;18513:67;18577:2;18572:3;18513:67;:::i;:::-;18506:74;;18589:93;18678:3;18589:93;:::i;:::-;18707:2;18702:3;18698:12;18691:19;;18350:366;;;:::o;18722:118::-;18809:24;18827:5;18809:24;:::i;:::-;18804:3;18797:37;18722:118;;:::o;18846:112::-;18929:22;18945:5;18929:22;:::i;:::-;18924:3;18917:35;18846:112;;:::o;18964:222::-;19057:4;19095:2;19084:9;19080:18;19072:26;;19108:71;19176:1;19165:9;19161:17;19152:6;19108:71;:::i;:::-;18964:222;;;;:::o;19192:332::-;19313:4;19351:2;19340:9;19336:18;19328:26;;19364:71;19432:1;19421:9;19417:17;19408:6;19364:71;:::i;:::-;19445:72;19513:2;19502:9;19498:18;19489:6;19445:72;:::i;:::-;19192:332;;;;;:::o;19530:::-;19651:4;19689:2;19678:9;19674:18;19666:26;;19702:71;19770:1;19759:9;19755:17;19746:6;19702:71;:::i;:::-;19783:72;19851:2;19840:9;19836:18;19827:6;19783:72;:::i;:::-;19530:332;;;;;:::o;19868:807::-;20117:4;20155:3;20144:9;20140:19;20132:27;;20169:71;20237:1;20226:9;20222:17;20213:6;20169:71;:::i;:::-;20250:72;20318:2;20307:9;20303:18;20294:6;20250:72;:::i;:::-;20332:80;20408:2;20397:9;20393:18;20384:6;20332:80;:::i;:::-;20422;20498:2;20487:9;20483:18;20474:6;20422:80;:::i;:::-;20512:73;20580:3;20569:9;20565:19;20556:6;20512:73;:::i;:::-;20595;20663:3;20652:9;20648:19;20639:6;20595:73;:::i;:::-;19868:807;;;;;;;;;:::o;20681:210::-;20768:4;20806:2;20795:9;20791:18;20783:26;;20819:65;20881:1;20870:9;20866:17;20857:6;20819:65;:::i;:::-;20681:210;;;;:::o;20897:313::-;21010:4;21048:2;21037:9;21033:18;21025:26;;21097:9;21091:4;21087:20;21083:1;21072:9;21068:17;21061:47;21125:78;21198:4;21189:6;21125:78;:::i;:::-;21117:86;;20897:313;;;;:::o;21216:419::-;21382:4;21420:2;21409:9;21405:18;21397:26;;21469:9;21463:4;21459:20;21455:1;21444:9;21440:17;21433:47;21497:131;21623:4;21497:131;:::i;:::-;21489:139;;21216:419;;;:::o;21641:::-;21807:4;21845:2;21834:9;21830:18;21822:26;;21894:9;21888:4;21884:20;21880:1;21869:9;21865:17;21858:47;21922:131;22048:4;21922:131;:::i;:::-;21914:139;;21641:419;;;:::o;22066:::-;22232:4;22270:2;22259:9;22255:18;22247:26;;22319:9;22313:4;22309:20;22305:1;22294:9;22290:17;22283:47;22347:131;22473:4;22347:131;:::i;:::-;22339:139;;22066:419;;;:::o;22491:::-;22657:4;22695:2;22684:9;22680:18;22672:26;;22744:9;22738:4;22734:20;22730:1;22719:9;22715:17;22708:47;22772:131;22898:4;22772:131;:::i;:::-;22764:139;;22491:419;;;:::o;22916:::-;23082:4;23120:2;23109:9;23105:18;23097:26;;23169:9;23163:4;23159:20;23155:1;23144:9;23140:17;23133:47;23197:131;23323:4;23197:131;:::i;:::-;23189:139;;22916:419;;;:::o;23341:::-;23507:4;23545:2;23534:9;23530:18;23522:26;;23594:9;23588:4;23584:20;23580:1;23569:9;23565:17;23558:47;23622:131;23748:4;23622:131;:::i;:::-;23614:139;;23341:419;;;:::o;23766:::-;23932:4;23970:2;23959:9;23955:18;23947:26;;24019:9;24013:4;24009:20;24005:1;23994:9;23990:17;23983:47;24047:131;24173:4;24047:131;:::i;:::-;24039:139;;23766:419;;;:::o;24191:::-;24357:4;24395:2;24384:9;24380:18;24372:26;;24444:9;24438:4;24434:20;24430:1;24419:9;24415:17;24408:47;24472:131;24598:4;24472:131;:::i;:::-;24464:139;;24191:419;;;:::o;24616:::-;24782:4;24820:2;24809:9;24805:18;24797:26;;24869:9;24863:4;24859:20;24855:1;24844:9;24840:17;24833:47;24897:131;25023:4;24897:131;:::i;:::-;24889:139;;24616:419;;;:::o;25041:::-;25207:4;25245:2;25234:9;25230:18;25222:26;;25294:9;25288:4;25284:20;25280:1;25269:9;25265:17;25258:47;25322:131;25448:4;25322:131;:::i;:::-;25314:139;;25041:419;;;:::o;25466:::-;25632:4;25670:2;25659:9;25655:18;25647:26;;25719:9;25713:4;25709:20;25705:1;25694:9;25690:17;25683:47;25747:131;25873:4;25747:131;:::i;:::-;25739:139;;25466:419;;;:::o;25891:::-;26057:4;26095:2;26084:9;26080:18;26072:26;;26144:9;26138:4;26134:20;26130:1;26119:9;26115:17;26108:47;26172:131;26298:4;26172:131;:::i;:::-;26164:139;;25891:419;;;:::o;26316:::-;26482:4;26520:2;26509:9;26505:18;26497:26;;26569:9;26563:4;26559:20;26555:1;26544:9;26540:17;26533:47;26597:131;26723:4;26597:131;:::i;:::-;26589:139;;26316:419;;;:::o;26741:::-;26907:4;26945:2;26934:9;26930:18;26922:26;;26994:9;26988:4;26984:20;26980:1;26969:9;26965:17;26958:47;27022:131;27148:4;27022:131;:::i;:::-;27014:139;;26741:419;;;:::o;27166:::-;27332:4;27370:2;27359:9;27355:18;27347:26;;27419:9;27413:4;27409:20;27405:1;27394:9;27390:17;27383:47;27447:131;27573:4;27447:131;:::i;:::-;27439:139;;27166:419;;;:::o;27591:::-;27757:4;27795:2;27784:9;27780:18;27772:26;;27844:9;27838:4;27834:20;27830:1;27819:9;27815:17;27808:47;27872:131;27998:4;27872:131;:::i;:::-;27864:139;;27591:419;;;:::o;28016:::-;28182:4;28220:2;28209:9;28205:18;28197:26;;28269:9;28263:4;28259:20;28255:1;28244:9;28240:17;28233:47;28297:131;28423:4;28297:131;:::i;:::-;28289:139;;28016:419;;;:::o;28441:::-;28607:4;28645:2;28634:9;28630:18;28622:26;;28694:9;28688:4;28684:20;28680:1;28669:9;28665:17;28658:47;28722:131;28848:4;28722:131;:::i;:::-;28714:139;;28441:419;;;:::o;28866:222::-;28959:4;28997:2;28986:9;28982:18;28974:26;;29010:71;29078:1;29067:9;29063:17;29054:6;29010:71;:::i;:::-;28866:222;;;;:::o;29094:831::-;29357:4;29395:3;29384:9;29380:19;29372:27;;29409:71;29477:1;29466:9;29462:17;29453:6;29409:71;:::i;:::-;29490:80;29566:2;29555:9;29551:18;29542:6;29490:80;:::i;:::-;29617:9;29611:4;29607:20;29602:2;29591:9;29587:18;29580:48;29645:108;29748:4;29739:6;29645:108;:::i;:::-;29637:116;;29763:72;29831:2;29820:9;29816:18;29807:6;29763:72;:::i;:::-;29845:73;29913:3;29902:9;29898:19;29889:6;29845:73;:::i;:::-;29094:831;;;;;;;;:::o;29931:214::-;30020:4;30058:2;30047:9;30043:18;30035:26;;30071:67;30135:1;30124:9;30120:17;30111:6;30071:67;:::i;:::-;29931:214;;;;:::o;30151:129::-;30185:6;30212:20;;:::i;:::-;30202:30;;30241:33;30269:4;30261:6;30241:33;:::i;:::-;30151:129;;;:::o;30286:75::-;30319:6;30352:2;30346:9;30336:19;;30286:75;:::o;30367:311::-;30444:4;30534:18;30526:6;30523:30;30520:56;;;30556:18;;:::i;:::-;30520:56;30606:4;30598:6;30594:17;30586:25;;30666:4;30660;30656:15;30648:23;;30367:311;;;:::o;30684:::-;30761:4;30851:18;30843:6;30840:30;30837:56;;;30873:18;;:::i;:::-;30837:56;30923:4;30915:6;30911:17;30903:25;;30983:4;30977;30973:15;30965:23;;30684:311;;;:::o;31001:132::-;31068:4;31091:3;31083:11;;31121:4;31116:3;31112:14;31104:22;;31001:132;;;:::o;31139:114::-;31206:6;31240:5;31234:12;31224:22;;31139:114;;;:::o;31259:99::-;31311:6;31345:5;31339:12;31329:22;;31259:99;;;:::o;31364:113::-;31434:4;31466;31461:3;31457:14;31449:22;;31364:113;;;:::o;31483:184::-;31582:11;31616:6;31611:3;31604:19;31656:4;31651:3;31647:14;31632:29;;31483:184;;;;:::o;31673:169::-;31757:11;31791:6;31786:3;31779:19;31831:4;31826:3;31822:14;31807:29;;31673:169;;;;:::o;31848:305::-;31888:3;31907:20;31925:1;31907:20;:::i;:::-;31902:25;;31941:20;31959:1;31941:20;:::i;:::-;31936:25;;32095:1;32027:66;32023:74;32020:1;32017:81;32014:107;;;32101:18;;:::i;:::-;32014:107;32145:1;32142;32138:9;32131:16;;31848:305;;;;:::o;32159:185::-;32199:1;32216:20;32234:1;32216:20;:::i;:::-;32211:25;;32250:20;32268:1;32250:20;:::i;:::-;32245:25;;32289:1;32279:35;;32294:18;;:::i;:::-;32279:35;32336:1;32333;32329:9;32324:14;;32159:185;;;;:::o;32350:348::-;32390:7;32413:20;32431:1;32413:20;:::i;:::-;32408:25;;32447:20;32465:1;32447:20;:::i;:::-;32442:25;;32635:1;32567:66;32563:74;32560:1;32557:81;32552:1;32545:9;32538:17;32534:105;32531:131;;;32642:18;;:::i;:::-;32531:131;32690:1;32687;32683:9;32672:20;;32350:348;;;;:::o;32704:191::-;32744:4;32764:20;32782:1;32764:20;:::i;:::-;32759:25;;32798:20;32816:1;32798:20;:::i;:::-;32793:25;;32837:1;32834;32831:8;32828:34;;;32842:18;;:::i;:::-;32828:34;32887:1;32884;32880:9;32872:17;;32704:191;;;;:::o;32901:96::-;32938:7;32967:24;32985:5;32967:24;:::i;:::-;32956:35;;32901:96;;;:::o;33003:104::-;33048:7;33077:24;33095:5;33077:24;:::i;:::-;33066:35;;33003:104;;;:::o;33113:90::-;33147:7;33190:5;33183:13;33176:21;33165:32;;33113:90;;;:::o;33209:126::-;33246:7;33286:42;33279:5;33275:54;33264:65;;33209:126;;;:::o;33341:77::-;33378:7;33407:5;33396:16;;33341:77;;;:::o;33424:86::-;33459:7;33499:4;33492:5;33488:16;33477:27;;33424:86;;;:::o;33516:121::-;33574:9;33607:24;33625:5;33607:24;:::i;:::-;33594:37;;33516:121;;;:::o;33643:307::-;33711:1;33721:113;33735:6;33732:1;33729:13;33721:113;;;33820:1;33815:3;33811:11;33805:18;33801:1;33796:3;33792:11;33785:39;33757:2;33754:1;33750:10;33745:15;;33721:113;;;33852:6;33849:1;33846:13;33843:101;;;33932:1;33923:6;33918:3;33914:16;33907:27;33843:101;33692:258;33643:307;;;:::o;33956:281::-;34039:27;34061:4;34039:27;:::i;:::-;34031:6;34027:40;34169:6;34157:10;34154:22;34133:18;34121:10;34118:34;34115:62;34112:88;;;34180:18;;:::i;:::-;34112:88;34220:10;34216:2;34209:22;33999:238;33956:281;;:::o;34243:233::-;34282:3;34305:24;34323:5;34305:24;:::i;:::-;34296:33;;34351:66;34344:5;34341:77;34338:103;;;34421:18;;:::i;:::-;34338:103;34468:1;34461:5;34457:13;34450:20;;34243:233;;;:::o;34482:180::-;34530:77;34527:1;34520:88;34627:4;34624:1;34617:15;34651:4;34648:1;34641:15;34668:180;34716:77;34713:1;34706:88;34813:4;34810:1;34803:15;34837:4;34834:1;34827:15;34854:180;34902:77;34899:1;34892:88;34999:4;34996:1;34989:15;35023:4;35020:1;35013:15;35040:180;35088:77;35085:1;35078:88;35185:4;35182:1;35175:15;35209:4;35206:1;35199:15;35226:117;35335:1;35332;35325:12;35349:117;35458:1;35455;35448:12;35472:117;35581:1;35578;35571:12;35595:117;35704:1;35701;35694:12;35718:102;35759:6;35810:2;35806:7;35801:2;35794:5;35790:14;35786:28;35776:38;;35718:102;;;:::o;35826:222::-;35966:34;35962:1;35954:6;35950:14;35943:58;36035:5;36030:2;36022:6;36018:15;36011:30;35826:222;:::o;36054:229::-;36194:34;36190:1;36182:6;36178:14;36171:58;36263:12;36258:2;36250:6;36246:15;36239:37;36054:229;:::o;36289:225::-;36429:34;36425:1;36417:6;36413:14;36406:58;36498:8;36493:2;36485:6;36481:15;36474:33;36289:225;:::o;36520:221::-;36660:34;36656:1;36648:6;36644:14;36637:58;36729:4;36724:2;36716:6;36712:15;36705:29;36520:221;:::o;36747:180::-;36887:32;36883:1;36875:6;36871:14;36864:56;36747:180;:::o;36933:179::-;37073:31;37069:1;37061:6;37057:14;37050:55;36933:179;:::o;37118:::-;37258:31;37254:1;37246:6;37242:14;37235:55;37118:179;:::o;37303:224::-;37443:34;37439:1;37431:6;37427:14;37420:58;37512:7;37507:2;37499:6;37495:15;37488:32;37303:224;:::o;37533:225::-;37673:34;37669:1;37661:6;37657:14;37650:58;37742:8;37737:2;37729:6;37725:15;37718:33;37533:225;:::o;37764:173::-;37904:25;37900:1;37892:6;37888:14;37881:49;37764:173;:::o;37943:182::-;38083:34;38079:1;38071:6;38067:14;38060:58;37943:182;:::o;38131:228::-;38271:34;38267:1;38259:6;38255:14;38248:58;38340:11;38335:2;38327:6;38323:15;38316:36;38131:228;:::o;38365:169::-;38505:21;38501:1;38493:6;38489:14;38482:45;38365:169;:::o;38540:223::-;38680:34;38676:1;38668:6;38664:14;38657:58;38749:6;38744:2;38736:6;38732:15;38725:31;38540:223;:::o;38769:224::-;38909:34;38905:1;38897:6;38893:14;38886:58;38978:7;38973:2;38965:6;38961:15;38954:32;38769:224;:::o;38999:223::-;39139:34;39135:1;39127:6;39123:14;39116:58;39208:6;39203:2;39195:6;39191:15;39184:31;38999:223;:::o;39228:173::-;39368:25;39364:1;39356:6;39352:14;39345:49;39228:173;:::o;39407:230::-;39547:34;39543:1;39535:6;39531:14;39524:58;39616:13;39611:2;39603:6;39599:15;39592:38;39407:230;:::o;39643:122::-;39716:24;39734:5;39716:24;:::i;:::-;39709:5;39706:35;39696:63;;39755:1;39752;39745:12;39696:63;39643:122;:::o;39771:138::-;39852:32;39878:5;39852:32;:::i;:::-;39845:5;39842:43;39832:71;;39899:1;39896;39889:12;39832:71;39771:138;:::o;39915:116::-;39985:21;40000:5;39985:21;:::i;:::-;39978:5;39975:32;39965:60;;40021:1;40018;40011:12;39965:60;39915:116;:::o;40037:122::-;40110:24;40128:5;40110:24;:::i;:::-;40103:5;40100:35;40090:63;;40149:1;40146;40139:12;40090:63;40037:122;:::o
Swarm Source
ipfs://a8aed0d2ea5eee906a8a585bb8b63d100d819db9dad2b336adb6574ea93d9aba
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.