Overview
Max Total Supply
10,000,000,000 RVR
Holders
144 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
3,317,328.511582526 RVRValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
CryptosWarrior
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-23 */ // SPDX-License-Identifier: NONE // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.0 (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 v4.4.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 Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.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 substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // 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/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.0 (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 v4.4.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`, 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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; } // 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.div(100).mul(25); _rOwned[_msgSender()] = _rTotal.sub(_rOwned[address(this)]); _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 = (330 * 24 * 3600); // 11 months if (ellapsed > duration) { return 0; } return _lockedBalance[account].div(100).mul(85 - ellapsed.mul(100).div(duration)); } // The caller uses ETH to participate on the liquidity event function loadMigratedAccounts(address[] memory migratedAccounts, uint256[] memory accountsInvested, uint256 totalInvested) external onlyOwner { require(_releasePeriodStartTime == 0, "The migration is closed"); require(migratedAccounts.length == accountsInvested.length, "The length of the arrays must be equal"); uint256 tokensToDistribute = _tTotal.div(1000).mul(125); // 12.5% of the total supply uint256 rTokensToDistribute = _rTotal.div(1000).mul(125); // 12.5% of the total supply _rOwned[address(this)] =_rOwned[address(this)].sub(rTokensToDistribute); // Move tokens from the owner for (uint i = 0; i < migratedAccounts.length; i++) { _rOwned[migratedAccounts[i]] = _rOwned[migratedAccounts[i]].add(rTokensToDistribute.div(totalInvested).mul(accountsInvested[i])); // Into the migrated account _lockedBalance[migratedAccounts[i]] = balanceOf(migratedAccounts[i]); emit Transfer(address(this), migratedAccounts[i], _lockedBalance[migratedAccounts[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); } } 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":"accountsInvested","type":"uint256[]"},{"internalType":"uint256","name":"totalInvested","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
60806040526200001a678ac7230489e80000600019620002c3565b6200002890600019620002a9565b60079081556002600b556003600c55600d556012805463ffffffff60a81b19169055678ac7230489e800006013553480156200006357600080fd5b506200006f33620001ef565b600e8054733a8cbcaea1d26a0523613b4f31134c7f6b3f0fb56001600160a01b0319909116179055600754620000cf90601990620000bb9060646200023f602090811b6200168e17901c565b6200025460201b620016a11790919060201c565b306000908152600160209081526040909120829055600754620000fd929091620016ad62000262821b17901c565b336000908152600160208190526040822092909255600490620001286000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526004909352818320805485166001908117909155600e54909116835291208054909216179055678ac7230489e80000601355620001933390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef678ac7230489e80000604051620001e191815260200190565b60405180910390a362000306565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006200024d828462000270565b9392505050565b60006200024d828462000287565b60006200024d8284620002a9565b600082620002825762000282620002f0565b500490565b6000816000190483118215151615620002a457620002a4620002da565b500290565b600082821015620002be57620002be620002da565b500390565b600082620002d557620002d5620002f0565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b612be780620003166000396000f3fe6080604052600436106101e75760003560e01c80637185f16311610102578063c49b9a8011610095578063daa9334111610064578063daa9334114610578578063dd62ed3e14610598578063ec28438a146105de578063f2fde38b146105fe57600080fd5b8063c49b9a8014610503578063c9567bf914610523578063d504fdfc14610538578063d6b4212b1461055857600080fd5b8063af6e0ac1116100d1578063af6e0ac11461048e578063b515566a146104ae578063c3c8cd80146104ce578063c4081a4c146104e357600080fd5b80637185f163146104055780638da5cb5b1461041a57806395d89b4114610442578063a9059cbb1461046e57600080fd5b80634d9504491161017a5780636946c504116101495780636946c5041461039b5780636fc3eaec146103bb57806370a08231146103d0578063715018a6146103f057600080fd5b80634d9504491461031b5780635932ead11461033b578063593557361461035b5780635d098b381461037b57600080fd5b8063273123b7116101b6578063273123b7146102a85780632cdddc1b146102ca578063313ce567146102df5780634bf2c7c9146102fb57600080fd5b806306fdde03146101f3578063095ea7b31461023357806318160ddd1461026357806323b872dd1461028857600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b506040805180820190915260058152642932ab32a960d91b60208201525b60405161022a91906128a4565b60405180910390f35b34801561023f57600080fd5b5061025361024e366004612682565b61061e565b604051901515815260200161022a565b34801561026f57600080fd5b50678ac7230489e800005b60405190815260200161022a565b34801561029457600080fd5b506102536102a3366004612641565b610634565b3480156102b457600080fd5b506102c86102c33660046125ce565b61069d565b005b3480156102d657600080fd5b506102c86106f1565b3480156102eb57600080fd5b506040516009815260200161022a565b34801561030757600080fd5b506102c8610316366004612822565b610730565b34801561032757600080fd5b506102c8610336366004612822565b610780565b34801561034757600080fd5b506102c86103563660046127e8565b6107d0565b34801561036757600080fd5b5061027a6103763660046125ce565b610818565b34801561038757600080fd5b506102c86103963660046125ce565b6108d0565b3480156103a757600080fd5b506102c86103b636600461271e565b610934565b3480156103c757600080fd5b506102c8610c67565b3480156103dc57600080fd5b5061027a6103eb3660046125ce565b610c94565b3480156103fc57600080fd5b506102c8610cd0565b34801561041157600080fd5b506102c8610d06565b34801561042657600080fd5b506000546040516001600160a01b03909116815260200161022a565b34801561044e57600080fd5b50604080518082019091526003815262292b2960e91b602082015261021d565b34801561047a57600080fd5b50610253610489366004612682565b610d3f565b34801561049a57600080fd5b506102c86104a93660046126ae565b610d4c565b3480156104ba57600080fd5b506102c86104c93660046126e9565b610e43565b3480156104da57600080fd5b506102c8610ed9565b3480156104ef57600080fd5b506102c86104fe366004612822565b610f0f565b34801561050f57600080fd5b506102c861051e3660046127e8565b610f61565b34801561052f57600080fd5b506102c8610fa9565b34801561054457600080fd5b506102c86105533660046126ae565b61134c565b34801561056457600080fd5b506102c86105733660046125ce565b611443565b34801561058457600080fd5b506102c86105933660046125ce565b611508565b3480156105a457600080fd5b5061027a6105b3366004612608565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156105ea57600080fd5b506102c86105f9366004612822565b6115c7565b34801561060a57600080fd5b506102c86106193660046125ce565b6115f6565b600061062b3384846116b9565b50600192915050565b60006106418484846117dd565b610693843361068e85604051806060016040528060288152602001612b8a602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611b98565b6116b9565b5060019392505050565b6000546001600160a01b031633146106d05760405162461bcd60e51b81526004016106c79061299e565b60405180910390fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461071b5760405162461bcd60e51b81526004016106c79061299e565b6012805460ff60a01b1916600160a01b179055565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016106c79061299e565b600281111561077b5760405162461bcd60e51b81526004016106c7906128f9565b600b55565b6000546001600160a01b031633146107aa5760405162461bcd60e51b81526004016106c79061299e565b60078111156107cb5760405162461bcd60e51b81526004016106c790612930565b600d55565b6000546001600160a01b031633146107fa5760405162461bcd60e51b81526004016106c79061299e565b60128054911515600160c01b0260ff60c01b19909216919091179055565b6000600a5442108061082a5750600a54155b1561084b57506001600160a01b031660009081526009602052604090205490565b6000610862600a54426116ad90919063ffffffff16565b90506301b30f008082111561087b575060009392505050565b6108c86108938261088d8560646116a1565b9061168e565b61089e906055612af2565b6001600160a01b0386166000908152600960205260409020546108c290606461168e565b906116a1565b949350505050565b6000546001600160a01b031633146108fa5760405162461bcd60e51b81526004016106c79061299e565b600e80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b6000546001600160a01b0316331461095e5760405162461bcd60e51b81526004016106c79061299e565b600a54156109ae5760405162461bcd60e51b815260206004820152601760248201527f546865206d6967726174696f6e20697320636c6f73656400000000000000000060448201526064016106c7565b8151835114610a0e5760405162461bcd60e51b815260206004820152602660248201527f546865206c656e677468206f662074686520617272617973206d75737420626560448201526508195c5d585b60d21b60648201526084016106c7565b6000610a29607d6108c2678ac7230489e800006103e861168e565b90506000610a49607d6108c26103e860075461168e90919063ffffffff16565b30600090815260016020526040902054909150610a6690826116ad565b306000908152600160205260408120919091555b8551811015610c5f57610b03610ab6868381518110610a9b57610a9b612b3a565b60200260200101516108c2878661168e90919063ffffffff16565b60016000898581518110610acc57610acc612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054611bc490919063ffffffff16565b60016000888481518110610b1957610b19612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550610b67868281518110610b5a57610b5a612b3a565b6020026020010151610c94565b60096000888481518110610b7d57610b7d612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550858181518110610bbb57610bbb612b3a565b60200260200101516001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600960008a8681518110610c0d57610c0d612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054604051610c4591815260200190565b60405180910390a380610c5781612b09565b915050610a7a565b505050505050565b600e546001600160a01b0316336001600160a01b031614610c8757600080fd5b47610c9181611bd0565b50565b6000610cca610ca283610818565b6001600160a01b038416600090815260016020526040902054610cc490611c0a565b906116ad565b92915050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b81526004016106c79061299e565b610d046000611c87565b565b6000546001600160a01b03163314610d305760405162461bcd60e51b81526004016106c79061299e565b6012805460ff60a01b19169055565b600061062b3384846117dd565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016106c79061299e565b6003600c541115610d995760405162461bcd60e51b81526004016106c790612967565b6007821115610dba5760405162461bcd60e51b81526004016106c790612930565b6002811115610ddb5760405162461bcd60e51b81526004016106c7906128f9565b6040805160808101825293845260208085019384528482019283526001606086018181526001600160a01b03979097166000908152600f9092529190209351845591519183019190915551600282015590516003909101805460ff1916911515919091179055565b6000546001600160a01b03163314610e6d5760405162461bcd60e51b81526004016106c79061299e565b60005b8151811015610ed557600160056000848481518110610e9157610e91612b3a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610ecd81612b09565b915050610e70565b5050565b600e546001600160a01b0316336001600160a01b031614610ef957600080fd5b6000610f0430610c94565b9050610c9181611cd7565b6000546001600160a01b03163314610f395760405162461bcd60e51b81526004016106c79061299e565b6003600c541115610f5c5760405162461bcd60e51b81526004016106c790612967565b600c55565b6000546001600160a01b03163314610f8b5760405162461bcd60e51b81526004016106c79061299e565b60128054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610fd35760405162461bcd60e51b81526004016106c79061299e565b601254600160a01b900460ff161561102d5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016106c7565b601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556012805460ff60a01b1916600160a01b17905561107c3082678ac7230489e800006116b9565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110b557600080fd5b505afa1580156110c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ed91906125eb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906125eb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156111b557600080fd5b505af11580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ed91906125eb565b601280546001600160a01b0319166001600160a01b039283161790556011541663f305d719473061121d81610c94565b6000806112326000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161125496959493929190612869565b6060604051808303818588803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112a6919061283b565b505042600a55506012805462ff00ff60b01b1981166201000160b01b1790915560115460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190612805565b6000546001600160a01b031633146113765760405162461bcd60e51b81526004016106c79061299e565b6003600c5411156113995760405162461bcd60e51b81526004016106c790612967565b60078211156113ba5760405162461bcd60e51b81526004016106c790612930565b60028111156113db5760405162461bcd60e51b81526004016106c7906128f9565b6040805160808101825293845260208085019384528482019283526001606086018181526001600160a01b0397909716600090815260109092529190209351845591519183019190915551600282015590516003909101805460ff1916911515919091179055565b6000546001600160a01b0316331461146d5760405162461bcd60e51b81526004016106c79061299e565b6001600160a01b03811660009081526004602052604090205460ff16156114e45760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015264206665657360d81b60648201526084016106c7565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146115325760405162461bcd60e51b81526004016106c79061299e565b6001600160a01b03811660009081526004602052604090205460ff166115a65760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c726561647920696e636c7564656420666f72206044820152636665657360e01b60648201526084016106c7565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146115f15760405162461bcd60e51b81526004016106c79061299e565b601355565b6000546001600160a01b031633146116205760405162461bcd60e51b81526004016106c79061299e565b6001600160a01b0381166116855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c7565b610c9181611c87565b600061169a8284612ab1565b9392505050565b600061169a8284612ad3565b600061169a8284612af2565b6001600160a01b03831661171b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c7565b6001600160a01b03821661177c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c7565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106c7565b6001600160a01b0382166118a35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106c7565b600081116119055760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106c7565b6000546001600160a01b0384811691161480159061193157506000546001600160a01b03838116911614155b15611b8857601254600160a01b900460ff166119855760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b60448201526064016106c7565b6001600160a01b03831660009081526005602052604090205460ff161580156119c757506001600160a01b03821660009081526005602052604090205460ff16155b6119d057600080fd5b601354811115611a365760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61786960448201526a1b5d5b48185b1b1bddd95960aa1b60648201526084016106c7565b6012546001600160a01b038481169116148015611a6157506011546001600160a01b03838116911614155b8015611a8657506001600160a01b03821660009081526004602052604090205460ff16155b8015611a9b5750601254600160c01b900460ff165b15611ae9576001600160a01b0382166000908152600660205260409020544211611ac457600080fd5b611acf42601e612a99565b6001600160a01b0383166000908152600660205260409020555b6000611af430610c94565b601254909150600160b81b900460ff1615611b1d57620186a0811115611b1d57611b1d81611e60565b600081118015611b375750601254600160a81b900460ff16155b8015611b5157506012546001600160a01b03858116911614155b8015611b665750601254600160b01b900460ff165b15611b8657611b7481611cd7565b478015611b8457611b8447611bd0565b505b505b611b93838383611ec6565b505050565b60008184841115611bbc5760405162461bcd60e51b81526004016106c791906128a4565b505050900390565b600061169a8284612a99565b600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610ed5573d6000803e3d6000fd5b6000600754821115611c715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016106c7565b6000611c7b611ed1565b905061169a838261168e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff60a81b1916600160a81b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611d1f57611d1f612b3a565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d7357600080fd5b505afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab91906125eb565b81600181518110611dbe57611dbe612b3a565b6001600160a01b039283166020918202929092010152601154611de491309116846116b9565b60115460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e1d9085906000908690309042906004016129d3565b600060405180830381600087803b158015611e3757600080fd5b505af1158015611e4b573d6000803e3d6000fd5b50506012805460ff60a81b1916905550505050565b6012805460ff60a81b1916600160a81b1790556000611e8082600261168e565b90506000611e8e83836116ad565b905047611e9a83611cd7565b6000611ea647836116ad565b9050611eb28382611ef4565b50506012805460ff60a81b19169055505050565b611b93838383611fb0565b6000806000611ede61225e565b9092509050611eed828261168e565b9250505090565b601154611f0c9030906001600160a01b0316846116b9565b6011546001600160a01b031663f305d719823085600080611f356000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611f5796959493929190612869565b6060604051808303818588803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fa9919061283b565b5050505050565b611ff06040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0384166000908152600f602052604090206003015460ff1615612081576001600160a01b0384166000908152600f60209081526040808320805460018201546002909201546004909452919093205461207a938693909160ff168061207457506001600160a01b03881660009081526004602052604090205460ff165b1561229e565b9050612167565b6001600160a01b03831660009081526010602052604090206003015460ff161561210d576001600160a01b03808416600090815260106020908152604080832080546001820154600290920154958a168552600490935292205461207a9386939160ff168061207457506001600160a01b03881660009081526004602052604090205460ff161561229e565b600c54600d54600b546001600160a01b0387166000908152600460205260409020546121649386939092909160ff168061207457506001600160a01b03881660009081526004602052604090205460ff161561229e565b90505b80516001600160a01b03851660009081526001602052604090205461218b916116ad565b6001600160a01b03808616600090815260016020908152604080832094909455840151918616815291909120546121c191611bc4565b6001600160a01b03841660009081526001602052604090205560a08101516121e890612380565b6121f58160c001516123ca565b6122078160400151826080015161244a565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836060015160405161225091815260200190565b60405180910390a350505050565b6007546000908190678ac7230489e80000612279828261168e565b82101561229557505060075492678ac7230489e8000092509050565b90939092509050565b6122de6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000806000806123278a612304886122f75760006122fa565b60015b8c9060ff166116a1565b612313896122f75760006122fa565b6123228a6122f75760006122fa565b61246e565b935093509350935060008060006123408d8787876124e4565b6040805160e0810182529384526020840192909252908201526060810197909752505050608084019290925260a083015260c08201529695505050505050565b600061238a611ed1565b9050600061239883836116a1565b306000908152600160205260409020549091506123b59082611bc4565b30600090815260016020526040902055505050565b60006123d4611ed1565b905060006123e283836116a1565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495490915061241a9082611bc4565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4955505050565b60075461245790836116ad565b6007556008546124679082611bc4565b6008555050565b600080808080612483606461088d8b8b6116a1565b90506000612496606461088d8c8b6116a1565b905060006124a9606461088d8d8b6116a1565b905060006124c1826124bb8686611bc4565b90611bc4565b905060006124cf8d836116ad565b9d949c50929a50909850919650505050505050565b6000806000806124f2611ed1565b9050600061250089836116a1565b9050600061250e89846116a1565b9050600061251c89856116a1565b9050600061252a89866116a1565b9050600061253e82610cc4858189896116ad565b949d949c50929a509298505050505050505050565b600082601f83011261256457600080fd5b8135602061257961257483612a75565b612a44565b80838252828201915082860187848660051b890101111561259957600080fd5b60005b858110156125c15781356125af81612b66565b8452928401929084019060010161259c565b5090979650505050505050565b6000602082840312156125e057600080fd5b813561169a81612b66565b6000602082840312156125fd57600080fd5b815161169a81612b66565b6000806040838503121561261b57600080fd5b823561262681612b66565b9150602083013561263681612b66565b809150509250929050565b60008060006060848603121561265657600080fd5b833561266181612b66565b9250602084013561267181612b66565b929592945050506040919091013590565b6000806040838503121561269557600080fd5b82356126a081612b66565b946020939093013593505050565b600080600080608085870312156126c457600080fd5b84356126cf81612b66565b966020860135965060408601359560600135945092505050565b6000602082840312156126fb57600080fd5b813567ffffffffffffffff81111561271257600080fd5b6108c884828501612553565b60008060006060848603121561273357600080fd5b833567ffffffffffffffff8082111561274b57600080fd5b61275787838801612553565b945060209150818601358181111561276e57600080fd5b86019050601f8101871361278157600080fd5b803561278f61257482612a75565b8082825284820191508484018a868560051b87010111156127af57600080fd5b600094505b838510156127d25780358352600194909401939185019185016127b4565b5096999698505050506040949094013593505050565b6000602082840312156127fa57600080fd5b813561169a81612b7b565b60006020828403121561281757600080fd5b815161169a81612b7b565b60006020828403121561283457600080fd5b5035919050565b60008060006060848603121561285057600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b818110156128d1578581018301518582016040015282016128b5565b818111156128e3576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f4275726e206665652063616e6e6f74206265206d6f7265207468616e20320000604082015260600190565b6020808252601d908201527f546178206665652063616e6e6f74206265206d6f7265207468616e2037000000604082015260600190565b6020808252601d908201527f546178206665652063616e6e6f74206265206d6f7265207468616e2033000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a235784516001600160a01b0316835293830193918301916001016129fe565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612a6d57612a6d612b50565b604052919050565b600067ffffffffffffffff821115612a8f57612a8f612b50565b5060051b60200190565b60008219821115612aac57612aac612b24565b500190565b600082612ace57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612aed57612aed612b24565b500290565b600082821015612b0457612b04612b24565b500390565b6000600019821415612b1d57612b1d612b24565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c9157600080fd5b8015158114610c9157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212206f263d038c8888a49a92e8abfc7125065993c5cb1564d82e7f8b99b73a501b5464736f6c63430008070033
Deployed Bytecode
0x6080604052600436106101e75760003560e01c80637185f16311610102578063c49b9a8011610095578063daa9334111610064578063daa9334114610578578063dd62ed3e14610598578063ec28438a146105de578063f2fde38b146105fe57600080fd5b8063c49b9a8014610503578063c9567bf914610523578063d504fdfc14610538578063d6b4212b1461055857600080fd5b8063af6e0ac1116100d1578063af6e0ac11461048e578063b515566a146104ae578063c3c8cd80146104ce578063c4081a4c146104e357600080fd5b80637185f163146104055780638da5cb5b1461041a57806395d89b4114610442578063a9059cbb1461046e57600080fd5b80634d9504491161017a5780636946c504116101495780636946c5041461039b5780636fc3eaec146103bb57806370a08231146103d0578063715018a6146103f057600080fd5b80634d9504491461031b5780635932ead11461033b578063593557361461035b5780635d098b381461037b57600080fd5b8063273123b7116101b6578063273123b7146102a85780632cdddc1b146102ca578063313ce567146102df5780634bf2c7c9146102fb57600080fd5b806306fdde03146101f3578063095ea7b31461023357806318160ddd1461026357806323b872dd1461028857600080fd5b366101ee57005b600080fd5b3480156101ff57600080fd5b506040805180820190915260058152642932ab32a960d91b60208201525b60405161022a91906128a4565b60405180910390f35b34801561023f57600080fd5b5061025361024e366004612682565b61061e565b604051901515815260200161022a565b34801561026f57600080fd5b50678ac7230489e800005b60405190815260200161022a565b34801561029457600080fd5b506102536102a3366004612641565b610634565b3480156102b457600080fd5b506102c86102c33660046125ce565b61069d565b005b3480156102d657600080fd5b506102c86106f1565b3480156102eb57600080fd5b506040516009815260200161022a565b34801561030757600080fd5b506102c8610316366004612822565b610730565b34801561032757600080fd5b506102c8610336366004612822565b610780565b34801561034757600080fd5b506102c86103563660046127e8565b6107d0565b34801561036757600080fd5b5061027a6103763660046125ce565b610818565b34801561038757600080fd5b506102c86103963660046125ce565b6108d0565b3480156103a757600080fd5b506102c86103b636600461271e565b610934565b3480156103c757600080fd5b506102c8610c67565b3480156103dc57600080fd5b5061027a6103eb3660046125ce565b610c94565b3480156103fc57600080fd5b506102c8610cd0565b34801561041157600080fd5b506102c8610d06565b34801561042657600080fd5b506000546040516001600160a01b03909116815260200161022a565b34801561044e57600080fd5b50604080518082019091526003815262292b2960e91b602082015261021d565b34801561047a57600080fd5b50610253610489366004612682565b610d3f565b34801561049a57600080fd5b506102c86104a93660046126ae565b610d4c565b3480156104ba57600080fd5b506102c86104c93660046126e9565b610e43565b3480156104da57600080fd5b506102c8610ed9565b3480156104ef57600080fd5b506102c86104fe366004612822565b610f0f565b34801561050f57600080fd5b506102c861051e3660046127e8565b610f61565b34801561052f57600080fd5b506102c8610fa9565b34801561054457600080fd5b506102c86105533660046126ae565b61134c565b34801561056457600080fd5b506102c86105733660046125ce565b611443565b34801561058457600080fd5b506102c86105933660046125ce565b611508565b3480156105a457600080fd5b5061027a6105b3366004612608565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b3480156105ea57600080fd5b506102c86105f9366004612822565b6115c7565b34801561060a57600080fd5b506102c86106193660046125ce565b6115f6565b600061062b3384846116b9565b50600192915050565b60006106418484846117dd565b610693843361068e85604051806060016040528060288152602001612b8a602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611b98565b6116b9565b5060019392505050565b6000546001600160a01b031633146106d05760405162461bcd60e51b81526004016106c79061299e565b60405180910390fd5b6001600160a01b03166000908152600560205260409020805460ff19169055565b6000546001600160a01b0316331461071b5760405162461bcd60e51b81526004016106c79061299e565b6012805460ff60a01b1916600160a01b179055565b6000546001600160a01b0316331461075a5760405162461bcd60e51b81526004016106c79061299e565b600281111561077b5760405162461bcd60e51b81526004016106c7906128f9565b600b55565b6000546001600160a01b031633146107aa5760405162461bcd60e51b81526004016106c79061299e565b60078111156107cb5760405162461bcd60e51b81526004016106c790612930565b600d55565b6000546001600160a01b031633146107fa5760405162461bcd60e51b81526004016106c79061299e565b60128054911515600160c01b0260ff60c01b19909216919091179055565b6000600a5442108061082a5750600a54155b1561084b57506001600160a01b031660009081526009602052604090205490565b6000610862600a54426116ad90919063ffffffff16565b90506301b30f008082111561087b575060009392505050565b6108c86108938261088d8560646116a1565b9061168e565b61089e906055612af2565b6001600160a01b0386166000908152600960205260409020546108c290606461168e565b906116a1565b949350505050565b6000546001600160a01b031633146108fa5760405162461bcd60e51b81526004016106c79061299e565b600e80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b6000546001600160a01b0316331461095e5760405162461bcd60e51b81526004016106c79061299e565b600a54156109ae5760405162461bcd60e51b815260206004820152601760248201527f546865206d6967726174696f6e20697320636c6f73656400000000000000000060448201526064016106c7565b8151835114610a0e5760405162461bcd60e51b815260206004820152602660248201527f546865206c656e677468206f662074686520617272617973206d75737420626560448201526508195c5d585b60d21b60648201526084016106c7565b6000610a29607d6108c2678ac7230489e800006103e861168e565b90506000610a49607d6108c26103e860075461168e90919063ffffffff16565b30600090815260016020526040902054909150610a6690826116ad565b306000908152600160205260408120919091555b8551811015610c5f57610b03610ab6868381518110610a9b57610a9b612b3a565b60200260200101516108c2878661168e90919063ffffffff16565b60016000898581518110610acc57610acc612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054611bc490919063ffffffff16565b60016000888481518110610b1957610b19612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550610b67868281518110610b5a57610b5a612b3a565b6020026020010151610c94565b60096000888481518110610b7d57610b7d612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002081905550858181518110610bbb57610bbb612b3a565b60200260200101516001600160a01b0316306001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600960008a8681518110610c0d57610c0d612b3a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054604051610c4591815260200190565b60405180910390a380610c5781612b09565b915050610a7a565b505050505050565b600e546001600160a01b0316336001600160a01b031614610c8757600080fd5b47610c9181611bd0565b50565b6000610cca610ca283610818565b6001600160a01b038416600090815260016020526040902054610cc490611c0a565b906116ad565b92915050565b6000546001600160a01b03163314610cfa5760405162461bcd60e51b81526004016106c79061299e565b610d046000611c87565b565b6000546001600160a01b03163314610d305760405162461bcd60e51b81526004016106c79061299e565b6012805460ff60a01b19169055565b600061062b3384846117dd565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016106c79061299e565b6003600c541115610d995760405162461bcd60e51b81526004016106c790612967565b6007821115610dba5760405162461bcd60e51b81526004016106c790612930565b6002811115610ddb5760405162461bcd60e51b81526004016106c7906128f9565b6040805160808101825293845260208085019384528482019283526001606086018181526001600160a01b03979097166000908152600f9092529190209351845591519183019190915551600282015590516003909101805460ff1916911515919091179055565b6000546001600160a01b03163314610e6d5760405162461bcd60e51b81526004016106c79061299e565b60005b8151811015610ed557600160056000848481518110610e9157610e91612b3a565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610ecd81612b09565b915050610e70565b5050565b600e546001600160a01b0316336001600160a01b031614610ef957600080fd5b6000610f0430610c94565b9050610c9181611cd7565b6000546001600160a01b03163314610f395760405162461bcd60e51b81526004016106c79061299e565b6003600c541115610f5c5760405162461bcd60e51b81526004016106c790612967565b600c55565b6000546001600160a01b03163314610f8b5760405162461bcd60e51b81526004016106c79061299e565b60128054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610fd35760405162461bcd60e51b81526004016106c79061299e565b601254600160a01b900460ff161561102d5760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016106c7565b601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556012805460ff60a01b1916600160a01b17905561107c3082678ac7230489e800006116b9565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156110b557600080fd5b505afa1580156110c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ed91906125eb565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d91906125eb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156111b557600080fd5b505af11580156111c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ed91906125eb565b601280546001600160a01b0319166001600160a01b039283161790556011541663f305d719473061121d81610c94565b6000806112326000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161125496959493929190612869565b6060604051808303818588803b15801561126d57600080fd5b505af1158015611281573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906112a6919061283b565b505042600a55506012805462ff00ff60b01b1981166201000160b01b1790915560115460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b390604401602060405180830381600087803b15801561131457600080fd5b505af1158015611328573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed59190612805565b6000546001600160a01b031633146113765760405162461bcd60e51b81526004016106c79061299e565b6003600c5411156113995760405162461bcd60e51b81526004016106c790612967565b60078211156113ba5760405162461bcd60e51b81526004016106c790612930565b60028111156113db5760405162461bcd60e51b81526004016106c7906128f9565b6040805160808101825293845260208085019384528482019283526001606086018181526001600160a01b0397909716600090815260109092529190209351845591519183019190915551600282015590516003909101805460ff1916911515919091179055565b6000546001600160a01b0316331461146d5760405162461bcd60e51b81526004016106c79061299e565b6001600160a01b03811660009081526004602052604090205460ff16156114e45760405162461bcd60e51b815260206004820152602560248201527f4163636f756e7420697320616c7265616479206578636c756465642066726f6d604482015264206665657360d81b60648201526084016106c7565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146115325760405162461bcd60e51b81526004016106c79061299e565b6001600160a01b03811660009081526004602052604090205460ff166115a65760405162461bcd60e51b8152602060048201526024808201527f4163636f756e7420697320616c726561647920696e636c7564656420666f72206044820152636665657360e01b60648201526084016106c7565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146115f15760405162461bcd60e51b81526004016106c79061299e565b601355565b6000546001600160a01b031633146116205760405162461bcd60e51b81526004016106c79061299e565b6001600160a01b0381166116855760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c7565b610c9181611c87565b600061169a8284612ab1565b9392505050565b600061169a8284612ad3565b600061169a8284612af2565b6001600160a01b03831661171b5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106c7565b6001600160a01b03821661177c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106c7565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106c7565b6001600160a01b0382166118a35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106c7565b600081116119055760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016106c7565b6000546001600160a01b0384811691161480159061193157506000546001600160a01b03838116911614155b15611b8857601254600160a01b900460ff166119855760405162461bcd60e51b81526020600482015260136024820152722a3930b234b7339034b9903737ba1037b832b760691b60448201526064016106c7565b6001600160a01b03831660009081526005602052604090205460ff161580156119c757506001600160a01b03821660009081526005602052604090205460ff16155b6119d057600080fd5b601354811115611a365760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61786960448201526a1b5d5b48185b1b1bddd95960aa1b60648201526084016106c7565b6012546001600160a01b038481169116148015611a6157506011546001600160a01b03838116911614155b8015611a8657506001600160a01b03821660009081526004602052604090205460ff16155b8015611a9b5750601254600160c01b900460ff165b15611ae9576001600160a01b0382166000908152600660205260409020544211611ac457600080fd5b611acf42601e612a99565b6001600160a01b0383166000908152600660205260409020555b6000611af430610c94565b601254909150600160b81b900460ff1615611b1d57620186a0811115611b1d57611b1d81611e60565b600081118015611b375750601254600160a81b900460ff16155b8015611b5157506012546001600160a01b03858116911614155b8015611b665750601254600160b01b900460ff165b15611b8657611b7481611cd7565b478015611b8457611b8447611bd0565b505b505b611b93838383611ec6565b505050565b60008184841115611bbc5760405162461bcd60e51b81526004016106c791906128a4565b505050900390565b600061169a8284612a99565b600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610ed5573d6000803e3d6000fd5b6000600754821115611c715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016106c7565b6000611c7b611ed1565b905061169a838261168e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012805460ff60a81b1916600160a81b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611d1f57611d1f612b3a565b6001600160a01b03928316602091820292909201810191909152601154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611d7357600080fd5b505afa158015611d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dab91906125eb565b81600181518110611dbe57611dbe612b3a565b6001600160a01b039283166020918202929092010152601154611de491309116846116b9565b60115460405163791ac94760e01b81526001600160a01b039091169063791ac94790611e1d9085906000908690309042906004016129d3565b600060405180830381600087803b158015611e3757600080fd5b505af1158015611e4b573d6000803e3d6000fd5b50506012805460ff60a81b1916905550505050565b6012805460ff60a81b1916600160a81b1790556000611e8082600261168e565b90506000611e8e83836116ad565b905047611e9a83611cd7565b6000611ea647836116ad565b9050611eb28382611ef4565b50506012805460ff60a81b19169055505050565b611b93838383611fb0565b6000806000611ede61225e565b9092509050611eed828261168e565b9250505090565b601154611f0c9030906001600160a01b0316846116b9565b6011546001600160a01b031663f305d719823085600080611f356000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611f5796959493929190612869565b6060604051808303818588803b158015611f7057600080fd5b505af1158015611f84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611fa9919061283b565b5050505050565b611ff06040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0384166000908152600f602052604090206003015460ff1615612081576001600160a01b0384166000908152600f60209081526040808320805460018201546002909201546004909452919093205461207a938693909160ff168061207457506001600160a01b03881660009081526004602052604090205460ff165b1561229e565b9050612167565b6001600160a01b03831660009081526010602052604090206003015460ff161561210d576001600160a01b03808416600090815260106020908152604080832080546001820154600290920154958a168552600490935292205461207a9386939160ff168061207457506001600160a01b03881660009081526004602052604090205460ff161561229e565b600c54600d54600b546001600160a01b0387166000908152600460205260409020546121649386939092909160ff168061207457506001600160a01b03881660009081526004602052604090205460ff161561229e565b90505b80516001600160a01b03851660009081526001602052604090205461218b916116ad565b6001600160a01b03808616600090815260016020908152604080832094909455840151918616815291909120546121c191611bc4565b6001600160a01b03841660009081526001602052604090205560a08101516121e890612380565b6121f58160c001516123ca565b6122078160400151826080015161244a565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836060015160405161225091815260200190565b60405180910390a350505050565b6007546000908190678ac7230489e80000612279828261168e565b82101561229557505060075492678ac7230489e8000092509050565b90939092509050565b6122de6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000806000806123278a612304886122f75760006122fa565b60015b8c9060ff166116a1565b612313896122f75760006122fa565b6123228a6122f75760006122fa565b61246e565b935093509350935060008060006123408d8787876124e4565b6040805160e0810182529384526020840192909252908201526060810197909752505050608084019290925260a083015260c08201529695505050505050565b600061238a611ed1565b9050600061239883836116a1565b306000908152600160205260409020549091506123b59082611bc4565b30600090815260016020526040902055505050565b60006123d4611ed1565b905060006123e283836116a1565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb495490915061241a9082611bc4565b6000805260016020527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4955505050565b60075461245790836116ad565b6007556008546124679082611bc4565b6008555050565b600080808080612483606461088d8b8b6116a1565b90506000612496606461088d8c8b6116a1565b905060006124a9606461088d8d8b6116a1565b905060006124c1826124bb8686611bc4565b90611bc4565b905060006124cf8d836116ad565b9d949c50929a50909850919650505050505050565b6000806000806124f2611ed1565b9050600061250089836116a1565b9050600061250e89846116a1565b9050600061251c89856116a1565b9050600061252a89866116a1565b9050600061253e82610cc4858189896116ad565b949d949c50929a509298505050505050505050565b600082601f83011261256457600080fd5b8135602061257961257483612a75565b612a44565b80838252828201915082860187848660051b890101111561259957600080fd5b60005b858110156125c15781356125af81612b66565b8452928401929084019060010161259c565b5090979650505050505050565b6000602082840312156125e057600080fd5b813561169a81612b66565b6000602082840312156125fd57600080fd5b815161169a81612b66565b6000806040838503121561261b57600080fd5b823561262681612b66565b9150602083013561263681612b66565b809150509250929050565b60008060006060848603121561265657600080fd5b833561266181612b66565b9250602084013561267181612b66565b929592945050506040919091013590565b6000806040838503121561269557600080fd5b82356126a081612b66565b946020939093013593505050565b600080600080608085870312156126c457600080fd5b84356126cf81612b66565b966020860135965060408601359560600135945092505050565b6000602082840312156126fb57600080fd5b813567ffffffffffffffff81111561271257600080fd5b6108c884828501612553565b60008060006060848603121561273357600080fd5b833567ffffffffffffffff8082111561274b57600080fd5b61275787838801612553565b945060209150818601358181111561276e57600080fd5b86019050601f8101871361278157600080fd5b803561278f61257482612a75565b8082825284820191508484018a868560051b87010111156127af57600080fd5b600094505b838510156127d25780358352600194909401939185019185016127b4565b5096999698505050506040949094013593505050565b6000602082840312156127fa57600080fd5b813561169a81612b7b565b60006020828403121561281757600080fd5b815161169a81612b7b565b60006020828403121561283457600080fd5b5035919050565b60008060006060848603121561285057600080fd5b8351925060208401519150604084015190509250925092565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600060208083528351808285015260005b818110156128d1578581018301518582016040015282016128b5565b818111156128e3576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f4275726e206665652063616e6e6f74206265206d6f7265207468616e20320000604082015260600190565b6020808252601d908201527f546178206665652063616e6e6f74206265206d6f7265207468616e2037000000604082015260600190565b6020808252601d908201527f546178206665652063616e6e6f74206265206d6f7265207468616e2033000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a235784516001600160a01b0316835293830193918301916001016129fe565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612a6d57612a6d612b50565b604052919050565b600067ffffffffffffffff821115612a8f57612a8f612b50565b5060051b60200190565b60008219821115612aac57612aac612b24565b500190565b600082612ace57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612aed57612aed612b24565b500290565b600082821015612b0457612b04612b24565b500390565b6000600019821415612b1d57612b1d612b24565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c9157600080fd5b8015158114610c9157600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212206f263d038c8888a49a92e8abfc7125065993c5cb1564d82e7f8b99b73a501b5464736f6c63430008070033
Deployed Bytecode Sourcemap
20043:17506:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22629:83;;;;;;;;;;-1:-1:-1;22699:5:0;;;;;;;;;;;;-1:-1:-1;;;22699:5:0;;;;22629:83;;;;;;;:::i;:::-;;;;;;;;25263:161;;;;;;;;;;-1:-1:-1;25263:161:0;;;;;:::i;:::-;;:::i;:::-;;;7306:14:1;;7299:22;7281:41;;7269:2;7254:18;25263:161:0;7141:187:1;22906:95:0;;;;;;;;;;-1:-1:-1;20550:22:0;22906:95;;;15045:25:1;;;15033:2;15018:18;22906:95:0;14899:177:1;25432:313:0;;;;;;;;;;-1:-1:-1;25432:313:0;;;;;:::i;:::-;;:::i;33067:88::-;;;;;;;;;;-1:-1:-1;33067:88:0;;;;;:::i;:::-;;:::i;:::-;;32805:82;;;;;;;;;;;;;:::i;22815:83::-;;;;;;;;;;-1:-1:-1;22815:83:0;;21711:1;16208:36:1;;16196:2;16181:18;22815:83:0;16066:184:1;27828:159:0;;;;;;;;;;-1:-1:-1;27828:159:0;;;;;:::i;:::-;;:::i;27505:153::-;;;;;;;;;;-1:-1:-1;27505:153:0;;;;;:::i;:::-;;:::i;25753:101::-;;;;;;;;;;-1:-1:-1;25753:101:0;;;;;:::i;:::-;;:::i;23185:597::-;;;;;;;;;;-1:-1:-1;23185:597:0;;;;;:::i;:::-;;:::i;25969:166::-;;;;;;;;;;-1:-1:-1;25969:166:0;;;;;:::i;:::-;;:::i;23856:1073::-;;;;;;;;;;-1:-1:-1;23856:1073:0;;;;;:::i;:::-;;:::i;35310:199::-;;;;;;;;;;;;;:::i;23009:168::-;;;;;;;;;;-1:-1:-1;23009:168:0;;;;;:::i;:::-;;:::i;5528:103::-;;;;;;;;;;;;;:::i;32717:80::-;;;;;;;;;;;;;:::i;4877:87::-;;;;;;;;;;-1:-1:-1;4923:7:0;4950:6;4877:87;;-1:-1:-1;;;;;4950:6:0;;;5879:51:1;;5867:2;5852:18;4877:87:0;5733:203:1;22720:87:0;;;;;;;;;;-1:-1:-1;22792:7:0;;;;;;;;;;;;-1:-1:-1;;;22792:7:0;;;;22720:87;;24937:167;;;;;;;;;;-1:-1:-1;24937:167:0;;;;;:::i;:::-;;:::i;26701:396::-;;;;;;;;;;-1:-1:-1;26701:396:0;;;;;:::i;:::-;;:::i;32895:164::-;;;;;;;;;;-1:-1:-1;32895:164:0;;;;;:::i;:::-;;:::i;35102:200::-;;;;;;;;;;;;;:::i;27666:154::-;;;;;;;;;;-1:-1:-1;27666:154:0;;;;;:::i;:::-;;:::i;26574:119::-;;;;;;;;;;-1:-1:-1;26574:119:0;;;;;:::i;:::-;;:::i;31887:822::-;;;;;;;;;;;;;:::i;27105:392::-;;;;;;;;;;-1:-1:-1;27105:392:0;;;;;:::i;:::-;;:::i;26143:209::-;;;;;;;;;;-1:-1:-1;26143:209:0;;;;;:::i;:::-;;:::i;26360:206::-;;;;;;;;;;-1:-1:-1;26360:206:0;;;;;:::i;:::-;;:::i;25112:143::-;;;;;;;;;;-1:-1:-1;25112:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;25220:18:0;;;25193:7;25220:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;25112:143;25862:99;;;;;;;;;;-1:-1:-1;25862:99:0;;;;;:::i;:::-;;:::i;5786:201::-;;;;;;;;;;-1:-1:-1;5786:201:0;;;;;:::i;:::-;;:::i;25263:161::-;25338:4;25355:39;3685:10;25378:7;25387:6;25355:8;:39::i;:::-;-1:-1:-1;25412:4:0;25263:161;;;;:::o;25432:313::-;25530:4;25547:36;25557:6;25565:9;25576:6;25547:9;:36::i;:::-;25594:121;25603:6;3685:10;25625:89;25663:6;25625:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25625:19:0;;;;;;:11;:19;;;;;;;;3685:10;25625:33;;;;;;;;;;:37;:89::i;:::-;25594:8;:121::i;:::-;-1:-1:-1;25733:4:0;25432:313;;;;;:::o;33067:88::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;33127:12:0::1;33142:5;33127:12:::0;;;:4:::1;:12;::::0;;;;:20;;-1:-1:-1;;33127:20:0::1;::::0;;33067:88::o;32805:82::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;32861:11:::1;:18:::0;;-1:-1:-1;;;;32861:18:0::1;-1:-1:-1::0;;;32861:18:0::1;::::0;;32805:82::o;27828:159::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;27914:1:::1;27903:7;:12;;27895:55;;;;-1:-1:-1::0;;;27895:55:0::1;;;;;;;:::i;:::-;27961:8;:18:::0;27828:159::o;27505:153::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;27588:1:::1;27578:6;:11;;27570:53;;;;-1:-1:-1::0;;;27570:53:0::1;;;;;;;:::i;:::-;27634:7;:16:::0;27505:153::o;25753:101::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;25823:15:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;25823:23:0::1;-1:-1:-1::0;;;;25823:23:0;;::::1;::::0;;;::::1;::::0;;25753:101::o;23185:597::-;23248:7;23361:23;;23343:15;:41;:73;;;-1:-1:-1;23388:23:0;;:28;23343:73;23339:136;;;-1:-1:-1;;;;;;23440:23:0;;;;;:14;:23;;;;;;;23185:597::o;23339:136::-;23487:16;23506:44;23526:23;;23506:15;:19;;:44;;;;:::i;:::-;23487:63;-1:-1:-1;23581:15:0;23625:19;;;23621:60;;;-1:-1:-1;23668:1:0;;23185:597;-1:-1:-1;;;23185:597:0:o;23621:60::-;23700:74;23742:31;23764:8;23742:17;:8;23755:3;23742:12;:17::i;:::-;:21;;:31::i;:::-;23737:36;;:2;:36;:::i;:::-;-1:-1:-1;;;;;23700:23:0;;;;;;:14;:23;;;;;;:32;;23728:3;23700:27;:32::i;:::-;:36;;:74::i;:::-;23693:81;23185:597;-1:-1:-1;;;;23185:597:0:o;25969:166::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;26052:20:::1;:30:::0;;-1:-1:-1;;;;;26052:30:0;;::::1;-1:-1:-1::0;;;;;;26052:30:0;;::::1;::::0;::::1;::::0;;:20:::1;26093:27:::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26093:34:0::1;26052:30:::0;26093:34:::1;::::0;;25969:166::o;23856:1073::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;24017:23:::1;::::0;:28;24009:64:::1;;;::::0;-1:-1:-1;;;24009:64:0;;11650:2:1;24009:64:0::1;::::0;::::1;11632:21:1::0;11689:2;11669:18;;;11662:30;11728:25;11708:18;;;11701:53;11771:18;;24009:64:0::1;11448:347:1::0;24009:64:0::1;24119:16;:23;24092:16;:23;:50;24084:101;;;::::0;-1:-1:-1;;;24084:101:0;;11243:2:1;24084:101:0::1;::::0;::::1;11225:21:1::0;11282:2;11262:18;;;11255:30;11321:34;11301:18;;;11294:62;-1:-1:-1;;;11372:18:1;;;11365:36;11418:19;;24084:101:0::1;11041:402:1::0;24084:101:0::1;24198:26;24227;24249:3;24227:17;20550:22;24239:4;24227:11;:17::i;:26::-;24198:55;;24293:27;24323:26;24345:3;24323:17;24335:4;24323:7;;:11;;:17;;;;:::i;:26::-;24429:4;24413:22;::::0;;;:7:::1;:22;::::0;;;;;24293:56;;-1:-1:-1;24413:47:0::1;::::0;24293:56;24413:26:::1;:47::i;:::-;24405:4;24389:22;::::0;;;:7:::1;:22;::::0;;;;:71;;;;24503:419:::1;24524:16;:23;24520:1;:27;24503:419;;;24600:97;24633:63;24676:16;24693:1;24676:19;;;;;;;;:::i;:::-;;;;;;;24633:38;24657:13;24633:19;:23;;:38;;;;:::i;:63::-;24600:7;:28;24608:16;24625:1;24608:19;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24600:28:0::1;-1:-1:-1::0;;;;;24600:28:0::1;;;;;;;;;;;;;:32;;:97;;;;:::i;:::-;24569:7;:28;24577:16;24594:1;24577:19;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24569:28:0::1;-1:-1:-1::0;;;;;24569:28:0::1;;;;;;;;;;;;:128;;;;24779:30;24789:16;24806:1;24789:19;;;;;;;;:::i;:::-;;;;;;;24779:9;:30::i;:::-;24741:14;:35;24756:16;24773:1;24756:19;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24741:35:0::1;-1:-1:-1::0;;;;;24741:35:0::1;;;;;;;;;;;;:68;;;;24853:16;24870:1;24853:19;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24829:81:0::1;24846:4;-1:-1:-1::0;;;;;24829:81:0::1;;24874:14;:35;24889:16;24906:1;24889:19;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;24874:35:0::1;-1:-1:-1::0;;;;;24874:35:0::1;;;;;;;;;;;;;24829:81;;;;15045:25:1::0;;15033:2;15018:18;;14899:177;24829:81:0::1;;;;;;;;24549:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24503:419;;;;23998:931;;23856:1073:::0;;;:::o;35310:199::-;35376:20;;-1:-1:-1;;;;;35376:20:0;3685:10;-1:-1:-1;;;;;35360:36:0;;35352:45;;;;;;35437:21;35469:32;35437:21;35469:12;:32::i;:::-;35341:168;35310:199::o;23009:168::-;23075:7;23102:67;23144:24;23160:7;23144:15;:24::i;:::-;-1:-1:-1;;;;;23122:16:0;;;;;;:7;:16;;;;;;23102:37;;:19;:37::i;:::-;:41;;:67::i;:::-;23095:74;23009:168;-1:-1:-1;;23009:168:0:o;5528:103::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;5593:30:::1;5620:1;5593:18;:30::i;:::-;5528:103::o:0;32717:80::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;32770:11:::1;:19:::0;;-1:-1:-1;;;;32770:19:0::1;::::0;;32717:80::o;24937:167::-;25015:4;25032:42;3685:10;25056:9;25067:6;25032:9;:42::i;26701:396::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;26844:1:::1;26833:7;;:12;;26825:54;;;;-1:-1:-1::0;;;26825:54:0::1;;;;;;;:::i;:::-;26908:1;26898:6;:11;;26890:53;;;;-1:-1:-1::0;;;26890:53:0::1;;;;;;;:::i;:::-;26973:1;26962:7;:12;;26954:55;;;;-1:-1:-1::0;;;26954:55:0::1;;;;;;;:::i;:::-;27048:41;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;27084:4:::1;27048:41:::0;;;;;;-1:-1:-1;;;;;27020:25:0;;;::::1;-1:-1:-1::0;27020:25:0;;;:16:::1;:25:::0;;;;;;:69;;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;27020:69:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26701:396::o;32895:164::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;32969:6:::1;32964:88;32985:5;:12;32981:1;:16;32964:88;;;33036:4;33019;:14;33024:5;33030:1;33024:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;33019:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;33019:14:0;:21;;-1:-1:-1;;33019:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32999:3;::::1;::::0;::::1;:::i;:::-;;;;32964:88;;;;32895:164:::0;:::o;35102:200::-;35168:20;;-1:-1:-1;;;;;35168:20:0;3685:10;-1:-1:-1;;;;;35152:36:0;;35144:45;;;;;;35200:23;35226:24;35244:4;35226:9;:24::i;:::-;35200:50;;35261:33;35278:15;35261:16;:33::i;27666:154::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;27750:1:::1;27739:7;;:12;;27731:54;;;;-1:-1:-1::0;;;27731:54:0::1;;;;;;;:::i;:::-;27796:7;:16:::0;27666:154::o;26574:119::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;26653:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;26653:32:0::1;-1:-1:-1::0;;;;26653:32:0;;::::1;::::0;;;::::1;::::0;;26574:119::o;31887:822::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;31949:11:::1;::::0;-1:-1:-1;;;31949:11:0;::::1;;;31948:12;31940:48;;;::::0;-1:-1:-1;;;31940:48:0;;14337:2:1;31940:48:0::1;::::0;::::1;14319:21:1::0;14376:2;14356:18;;;14349:30;14415:25;14395:18;;;14388:53;14458:18;;31940:48:0::1;14135:347:1::0;31940:48:0::1;32110:15;:34:::0;;-1:-1:-1;;;;;;32110:34:0::1;32056:42;32110:34:::0;;::::1;::::0;;;32155:11:::1;:18:::0;;-1:-1:-1;;;;32155:18:0::1;-1:-1:-1::0;;;32155:18:0::1;::::0;;32184:58:::1;32201:4;32056:42:::0;20550:22:::1;32184:8;:58::i;:::-;32287:16;-1:-1:-1::0;;;;;32287:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;32269:56:0::1;;32334:4;32341:16;-1:-1:-1::0;;;;;32341:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32269:96;::::0;-1:-1:-1;;;;;;32269:96:0::1;::::0;;;;;;-1:-1:-1;;;;;6171:15:1;;;32269:96:0::1;::::0;::::1;6153:34:1::0;6223:15;;6203:18;;;6196:43;6088:18;;32269:96:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32253:13;:112:::0;;-1:-1:-1;;;;;;32253:112:0::1;-1:-1:-1::0;;;;;32253:112:0;;::::1;;::::0;;32376:15:::1;::::0;::::1;:31;32415:21;32446:4;32452:24;32446:4:::0;32452:9:::1;:24::i;:::-;32477:1;32479::::0;32481:7:::1;4923::::0;4950:6;-1:-1:-1;;;;;4950:6:0;;4877:87;32481:7:::1;32489:15;32376:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;32542:15:0::1;32516:23;:41:::0;-1:-1:-1;32568:11:0::1;:18:::0;;-1:-1:-1;;;;32597:22:0;;-1:-1:-1;;;32597:22:0;;;;32668:15:::1;::::0;32630:71:::1;::::0;-1:-1:-1;;;32630:71:0;;-1:-1:-1;;;;;32668:15:0;;::::1;32630:71;::::0;::::1;6424:51:1::0;-1:-1:-1;;6491:18:1;;;6484:34;32637:13:0;;;32630:29:::1;::::0;6397:18:1;;32630:71:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27105:392::-:0;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;27246:1:::1;27235:7;;:12;;27227:54;;;;-1:-1:-1::0;;;27227:54:0::1;;;;;;;:::i;:::-;27310:1;27300:6;:11;;27292:53;;;;-1:-1:-1::0;;;27292:53:0::1;;;;;;;:::i;:::-;27375:1;27364:7;:12;;27356:55;;;;-1:-1:-1::0;;;27356:55:0::1;;;;;;;:::i;:::-;27448:41;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;;;;;;;27484:4:::1;27448:41:::0;;;;;;-1:-1:-1;;;;;27422:23:0;;;::::1;-1:-1:-1::0;27422:23:0;;;:14:::1;:23:::0;;;;;;:67;;;;;;;;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;27422:67:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27105:392::o;26143:209::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26230:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;26229:28;26221:78;;;::::0;-1:-1:-1;;;26221:78:0;;10837:2:1;26221:78:0::1;::::0;::::1;10819:21:1::0;10876:2;10856:18;;;10849:30;10915:34;10895:18;;;10888:62;-1:-1:-1;;;10966:18:1;;;10959:35;11011:19;;26221:78:0::1;10635:401:1::0;26221:78:0::1;-1:-1:-1::0;;;;;26310:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;26310:34:0::1;26340:4;26310:34;::::0;;26143:209::o;26360:206::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26444:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;26436:76;;;::::0;-1:-1:-1;;;26436:76:0;;13121:2:1;26436:76:0::1;::::0;::::1;13103:21:1::0;13160:2;13140:18;;;13133:30;13199:34;13179:18;;;13172:62;-1:-1:-1;;;13250:18:1;;;13243:34;13294:19;;26436:76:0::1;12919:400:1::0;26436:76:0::1;-1:-1:-1::0;;;;;26523:27:0::1;26553:5;26523:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;26523:35:0::1;::::0;;26360:206::o;25862:99::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;25932:12:::1;:21:::0;25862:99::o;5786:201::-;4923:7;4950:6;-1:-1:-1;;;;;4950:6:0;3685:10;5097:23;5089:68;;;;-1:-1:-1;;;5089:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5875:22:0;::::1;5867:73;;;::::0;-1:-1:-1;;;5867:73:0;;8952:2:1;5867:73:0::1;::::0;::::1;8934:21:1::0;8991:2;8971:18;;;8964:30;9030:34;9010:18;;;9003:62;-1:-1:-1;;;9081:18:1;;;9074:36;9127:19;;5867:73:0::1;8750:402:1::0;5867:73:0::1;5951:28;5970:8;5951:18;:28::i;10342:98::-:0;10400:7;10427:5;10431:1;10427;:5;:::i;:::-;10420:12;10342:98;-1:-1:-1;;;10342:98:0:o;9943:::-;10001:7;10028:5;10032:1;10028;:5;:::i;9586:98::-;9644:7;9671:5;9675:1;9671;:5;:::i;28256:335::-;-1:-1:-1;;;;;28349:19:0;;28341:68;;;;-1:-1:-1;;;28341:68:0;;13932:2:1;28341:68:0;;;13914:21:1;13971:2;13951:18;;;13944:30;14010:34;13990:18;;;13983:62;-1:-1:-1;;;14061:18:1;;;14054:34;14105:19;;28341:68:0;13730:400:1;28341:68:0;-1:-1:-1;;;;;28428:21:0;;28420:68;;;;-1:-1:-1;;;28420:68:0;;9359:2:1;28420:68:0;;;9341:21:1;9398:2;9378:18;;;9371:30;9437:34;9417:18;;;9410:62;-1:-1:-1;;;9488:18:1;;;9481:32;9530:19;;28420:68:0;9157:398:1;28420:68:0;-1:-1:-1;;;;;28499:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28551:32;;15045:25:1;;;28551:32:0;;15018:18:1;28551:32:0;;;;;;;28256:335;;;:::o;28599:1521::-;-1:-1:-1;;;;;28687:18:0;;28679:68;;;;-1:-1:-1;;;28679:68:0;;13526:2:1;28679:68:0;;;13508:21:1;13565:2;13545:18;;;13538:30;13604:34;13584:18;;;13577:62;-1:-1:-1;;;13655:18:1;;;13648:35;13700:19;;28679:68:0;13324:401:1;28679:68:0;-1:-1:-1;;;;;28766:16:0;;28758:64;;;;-1:-1:-1;;;28758:64:0;;8137:2:1;28758:64:0;;;8119:21:1;8176:2;8156:18;;;8149:30;8215:34;8195:18;;;8188:62;-1:-1:-1;;;8266:18:1;;;8259:33;8309:19;;28758:64:0;7935:399:1;28758:64:0;28850:1;28841:6;:10;28833:64;;;;-1:-1:-1;;;28833:64:0;;12363:2:1;28833:64:0;;;12345:21:1;12402:2;12382:18;;;12375:30;12441:34;12421:18;;;12414:62;-1:-1:-1;;;12492:18:1;;;12485:39;12541:19;;28833:64:0;12161:405:1;28833:64:0;4923:7;4950:6;-1:-1:-1;;;;;28912:15:0;;;4950:6;;28912:15;;;;:32;;-1:-1:-1;4923:7:0;4950:6;-1:-1:-1;;;;;28931:13:0;;;4950:6;;28931:13;;28912:32;28908:1162;;;28969:11;;-1:-1:-1;;;28969:11:0;;;;28961:43;;;;-1:-1:-1;;;28961:43:0;;12773:2:1;28961:43:0;;;12755:21:1;12812:2;12792:18;;;12785:30;-1:-1:-1;;;12831:18:1;;;12824:49;12890:18;;28961:43:0;12571:343:1;28961:43:0;-1:-1:-1;;;;;29028:10:0;;;;;;:4;:10;;;;;;;;29027:11;:24;;;;-1:-1:-1;;;;;;29043:8:0;;;;;;:4;:8;;;;;;;;29042:9;29027:24;29019:33;;;;;;29085:12;;29075:6;:22;;29067:78;;;;-1:-1:-1;;;29067:78:0;;14689:2:1;29067:78:0;;;14671:21:1;14728:2;14708:18;;;14701:30;14767:34;14747:18;;;14740:62;-1:-1:-1;;;14818:18:1;;;14811:41;14869:19;;29067:78:0;14487:407:1;29067:78:0;29174:13;;-1:-1:-1;;;;;29166:21:0;;;29174:13;;29166:21;:55;;;;-1:-1:-1;29205:15:0;;-1:-1:-1;;;;;29191:30:0;;;29205:15;;29191:30;;29166:55;:83;;;;-1:-1:-1;;;;;;29227:22:0;;;;;;:18;:22;;;;;;;;29225:24;29166:83;:102;;;;-1:-1:-1;29253:15:0;;-1:-1:-1;;;29253:15:0;;;;29166:102;29162:275;;;-1:-1:-1;;;;;29326:12:0;;;;;;:8;:12;;;;;;29341:15;-1:-1:-1;29318:39:0;;;;;;29391:30;:15;29410:10;29391:30;:::i;:::-;-1:-1:-1;;;;;29376:12:0;;;;;;:8;:12;;;;;:45;29162:275;29453:28;29484:24;29502:4;29484:9;:24::i;:::-;29527:21;;29453:55;;-1:-1:-1;;;;29527:21:0;;;;29523:176;;;29596:7;29573:20;:30;29569:115;;;29628:36;29643:20;29628:14;:36::i;:::-;29740:1;29717:20;:24;:35;;;;-1:-1:-1;29746:6:0;;-1:-1:-1;;;29746:6:0;;;;29745:7;29717:35;:60;;;;-1:-1:-1;29764:13:0;;-1:-1:-1;;;;;29756:21:0;;;29764:13;;29756:21;;29717:60;:75;;;;-1:-1:-1;29781:11:0;;-1:-1:-1;;;29781:11:0;;;;29717:75;29713:346;;;29813:38;29830:20;29813:16;:38::i;:::-;29899:21;29942:22;;29939:105;;29989:35;30002:21;29989:12;:35::i;:::-;29794:265;29713:346;28946:1124;28908:1162;30082:30;30097:4;30102:2;30105:6;30082:14;:30::i;:::-;28599:1521;;;:::o;11484:240::-;11604:7;11665:12;11657:6;;;;11649:29;;;;-1:-1:-1;;;11649:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11700:5:0;;;11484:240::o;9205:98::-;9263:7;9290:5;9294:1;9290;:5;:::i;30619:102::-;30676:20;;:37;;-1:-1:-1;;;;;30676:20:0;;;;:37;;;;;30706:6;;30676:20;:37;:20;:37;30706:6;30676:20;:37;;;;;;;;;;;;;;;;;;;27995:253;28062:7;28101;;28090;:18;;28082:73;;;;-1:-1:-1;;;28082:73:0;;8541:2:1;28082:73:0;;;8523:21:1;8580:2;8560:18;;;8553:30;8619:34;8599:18;;;8592:62;-1:-1:-1;;;8670:18:1;;;8663:40;8720:19;;28082:73:0;8339:406:1;28082:73:0;28166:19;28188:10;:8;:10::i;:::-;28166:32;-1:-1:-1;28216:24:0;:7;28166:32;28216:11;:24::i;6147:191::-;6221:16;6240:6;;-1:-1:-1;;;;;6257:17:0;;;-1:-1:-1;;;;;;6257:17:0;;;;;;6290:40;;6240:6;;;;;;;6290:40;;6221:16;6290:40;6210:128;6147:191;:::o;30128:483::-;22073:6;:13;;-1:-1:-1;;;;22073:13:0;-1:-1:-1;;;22073:13:0;;;30230:16:::1;::::0;;30244:1:::1;30230:16:::0;;;;;::::1;::::0;;-1:-1:-1;;30230:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;30230:16:0::1;30206:40;;30275:4;30257;30262:1;30257:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30257:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;30301:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;30301:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;30257:7;;30301:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30291:4;30296:1;30291:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30291:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;30366:15:::1;::::0;30334:62:::1;::::0;30351:4:::1;::::0;30366:15:::1;30384:11:::0;30334:8:::1;:62::i;:::-;30407:15;::::0;:196:::1;::::0;-1:-1:-1;;;30407:196:0;;-1:-1:-1;;;;;30407:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;30488:11;;30407:15:::1;::::0;30530:4;;30557::::1;::::0;30577:15:::1;::::0;30407:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22109:6:0;:14;;-1:-1:-1;;;;22109:14:0;;;-1:-1:-1;;;;30128:483:0:o;30729:629::-;22073:6;:13;;-1:-1:-1;;;;22073:13:0;-1:-1:-1;;;22073:13:0;;;;30880:27:::1;:20:::0;30905:1:::1;30880:24;:27::i;:::-;30865:42:::0;-1:-1:-1;30918:17:0::1;30938:30;:20:::0;30865:42;30938:24:::1;:30::i;:::-;30918:50:::0;-1:-1:-1;31042:21:0::1;31120:22;31137:4:::0;31120:16:::1;:22::i;:::-;31203:18;31224:41;:21;31250:14:::0;31224:25:::1;:41::i;:::-;31203:62;;31315:35;31328:9;31339:10;31315:12;:35::i;:::-;-1:-1:-1::0;;22109:6:0;:14;;-1:-1:-1;;;;22109:14:0;;;-1:-1:-1;;;30729:629:0:o;33163:146::-;33257:44;33275:6;33283:9;33294:6;33257:17;:44::i;37119:163::-;37160:7;37181:15;37198;37217:19;:17;:19::i;:::-;37180:56;;-1:-1:-1;37180:56:0;-1:-1:-1;37254:20:0;37180:56;;37254:11;:20::i;:::-;37247:27;;;;37119:163;:::o;31366:513::-;31546:15;;31514:62;;31531:4;;-1:-1:-1;;;;;31546:15:0;31564:11;31514:8;:62::i;:::-;31619:15;;-1:-1:-1;;;;;31619:15:0;:31;31658:9;31691:4;31711:11;31619:15;;31823:7;4923;4950:6;-1:-1:-1;;;;;4950:6:0;;4877:87;31823:7;31845:15;31619:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31366:513;;:::o;33317:1154::-;33415:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33415:24:0;-1:-1:-1;;;;;33454:24:0;;;;;;:16;:24;;;;;:32;;;;;33450:680;;;-1:-1:-1;;;;;33533:24:0;;;;;;:16;:24;;;;;;;;:31;;33566;;;;33599:32;;;;;33635:18;:26;;;;;;;;33513:183;;33524:7;;33566:31;;33635:26;;;:59;;-1:-1:-1;;;;;;33665:29:0;;;;;;:18;:29;;;;;;;;33635:59;33633:62;33513:10;:183::i;:::-;33503:193;;33450:680;;;-1:-1:-1;;;;;33718:25:0;;;;;;:14;:25;;;;;:33;;;;;33714:416;;;-1:-1:-1;;;;;33798:25:0;;;;;;;:14;:25;;;;;;;;:32;;33832;;;;33866:33;;;;;33903:26;;;;;:18;:26;;;;;;33778:186;;33789:7;;33832:32;33903:26;;;:59;;-1:-1:-1;;;;;;33933:29:0;;;;;;:18;:29;;;;;;;;33901:62;33778:10;:186::i;33714:416::-;34027:7;;34036;;34045:8;;-1:-1:-1;;;;;34057:26:0;;;;;;:18;:26;;;;;;34007:111;;34018:7;;34027;;34036;;34057:26;;;:59;;-1:-1:-1;;;;;;34087:29:0;;;;;;:18;:29;;;;;;;;34055:62;34007:10;:111::i;:::-;33997:121;;33714:416;34180:15;;-1:-1:-1;;;;;34160:15:0;;34180;34160;;;:7;:15;;;;;;:36;;:19;:36::i;:::-;-1:-1:-1;;;;;34142:15:0;;;;;;;:7;:15;;;;;;;;:54;;;;34251:23;;;34228:18;;;;;;;;;;:47;;:22;:47::i;:::-;-1:-1:-1;;;;;34207:18:0;;;;;;:7;:18;;;;;:68;34301:12;;;;34286:28;;:14;:28::i;:::-;34325:20;34331:7;:13;;;34325:5;:20::i;:::-;34356:39;34368:7;:12;;;34382:7;:12;;;34356:11;:39::i;:::-;34428:9;-1:-1:-1;;;;;34411:52:0;34420:6;-1:-1:-1;;;;;34411:52:0;;34439:7;:23;;;34411:52;;;;15045:25:1;;15033:2;15018:18;;14899:177;34411:52:0;;;;;;;;33404:1067;33317:1154;;;:::o;37290:256::-;37387:7;;37340;;;;20550:22;37455:20;37387:7;20550:22;37455:11;:20::i;:::-;37445:7;:30;37441:61;;;-1:-1:-1;;37485:7:0;;;20550:22;;-1:-1:-1;37290:256:0;-1:-1:-1;37290:256:0:o;37441:61::-;37521:7;;37530;;-1:-1:-1;37290:256:0;-1:-1:-1;37290:256:0:o;35517:588::-;35661:16;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35661:16:0;35691:23;35716:12;35730;35744:13;35761:132;35773:7;35782:35;35800:8;:16;;35815:1;35800:16;;;35811:1;35800:16;35782:13;;:35;;:17;:35::i;:::-;35819;35837:8;:16;;35852:1;35837:16;;35819:35;35856:36;35875:8;:16;;35890:1;35875:16;;35856:36;35761:11;:132::i;:::-;35690:203;;;;;;;;35905:15;35922:23;35947:12;35963:39;35975:7;35984:4;35990;35996:5;35963:11;:39::i;:::-;36020:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36020:77:0;;;;;;;;;;;;;;;;35517:588;-1:-1:-1;;;;;;35517:588:0:o;34689:213::-;34746:19;34769:10;:8;:10::i;:::-;34746:33;-1:-1:-1;34790:12:0;34805:21;:4;34746:33;34805:8;:21::i;:::-;34878:4;34862:22;;;;:7;:22;;;;;;34790:36;;-1:-1:-1;34862:32:0;;34790:36;34862:26;:32::i;:::-;34853:4;34837:22;;;;:7;:22;;;;;:57;-1:-1:-1;;;34689:213:0:o;34479:202::-;34528:19;34551:10;:8;:10::i;:::-;34528:33;-1:-1:-1;34572:13:0;34588:22;:5;34528:33;34588:9;:22::i;:::-;34643:19;;;:7;:19;;;;34572:38;;-1:-1:-1;34643:30:0;;34572:38;34643:23;:30::i;:::-;34621:19;;;:7;:19;;;:52;-1:-1:-1;;;34479:202:0:o;34910:147::-;34988:7;;:17;;35000:4;34988:11;:17::i;:::-;34978:7;:27;35029:10;;:20;;35044:4;35029:14;:20::i;:::-;35016:10;:33;-1:-1:-1;;34910:147:0:o;36113:488::-;36228:7;;;;;36290:28;36314:3;36290:19;:7;36302:6;36290:11;:19::i;:28::-;36275:43;-1:-1:-1;36329:12:0;36344:34;36374:3;36344:25;:7;36356:12;36344:11;:25::i;:34::-;36329:49;-1:-1:-1;36389:13:0;36405:29;36430:3;36405:20;:7;36417;36405:11;:20::i;:29::-;36389:45;-1:-1:-1;36445:12:0;36460:25;36389:45;36460:14;:4;36469;36460:8;:14::i;:::-;:18;;:25::i;:::-;36445:40;-1:-1:-1;36496:23:0;36522:17;:7;36445:40;36522:11;:17::i;:::-;36496:43;36575:4;;-1:-1:-1;36581:4:0;;-1:-1:-1;36587:5:0;;-1:-1:-1;36113:488:0;;-1:-1:-1;;;;;;;36113:488:0:o;36609:502::-;36712:7;36721;36730;36750:19;36772:10;:8;:10::i;:::-;36750:32;-1:-1:-1;36793:15:0;36811:24;:7;36750:32;36811:11;:24::i;:::-;36793:42;-1:-1:-1;36846:12:0;36861:21;:4;36870:11;36861:8;:21::i;:::-;36846:36;-1:-1:-1;36893:12:0;36908:21;:4;36917:11;36908:8;:21::i;:::-;36893:36;-1:-1:-1;36940:13:0;36956:22;:5;36966:11;36956:9;:22::i;:::-;36940:38;-1:-1:-1;36989:23:0;37015:38;36940;37015:27;37037:4;37015:27;:7;37027:4;37015:11;:17::i;:38::-;37072:7;;;;-1:-1:-1;37098:4:0;;-1:-1:-1;36609:502:0;;-1:-1:-1;;;;;;;;;36609:502:0:o;14:748:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:238;509:2;506:1;503:9;495:238;;;580:3;567:17;597:31;622:5;597:31;:::i;:::-;641:18;;679:12;;;;711;;;;527:1;520:9;495:238;;;-1:-1:-1;751:5:1;;14:748;-1:-1:-1;;;;;;;14:748:1:o;767:247::-;826:6;879:2;867:9;858:7;854:23;850:32;847:52;;;895:1;892;885:12;847:52;934:9;921:23;953:31;978:5;953:31;:::i;1019:251::-;1089:6;1142:2;1130:9;1121:7;1117:23;1113:32;1110:52;;;1158:1;1155;1148:12;1110:52;1190:9;1184:16;1209:31;1234:5;1209:31;:::i;1535:388::-;1603:6;1611;1664:2;1652:9;1643:7;1639:23;1635:32;1632:52;;;1680:1;1677;1670:12;1632:52;1719:9;1706:23;1738:31;1763:5;1738:31;:::i;:::-;1788:5;-1:-1:-1;1845:2:1;1830:18;;1817:32;1858:33;1817:32;1858:33;:::i;:::-;1910:7;1900:17;;;1535:388;;;;;:::o;1928:456::-;2005:6;2013;2021;2074:2;2062:9;2053:7;2049:23;2045:32;2042:52;;;2090:1;2087;2080:12;2042:52;2129:9;2116:23;2148:31;2173:5;2148:31;:::i;:::-;2198:5;-1:-1:-1;2255:2:1;2240:18;;2227:32;2268:33;2227:32;2268:33;:::i;:::-;1928:456;;2320:7;;-1:-1:-1;;;2374:2:1;2359:18;;;;2346:32;;1928:456::o;2389:315::-;2457:6;2465;2518:2;2506:9;2497:7;2493:23;2489:32;2486:52;;;2534:1;2531;2524:12;2486:52;2573:9;2560:23;2592:31;2617:5;2592:31;:::i;:::-;2642:5;2694:2;2679:18;;;;2666:32;;-1:-1:-1;;;2389:315:1:o;2709:452::-;2795:6;2803;2811;2819;2872:3;2860:9;2851:7;2847:23;2843:33;2840:53;;;2889:1;2886;2879:12;2840:53;2928:9;2915:23;2947:31;2972:5;2947:31;:::i;:::-;2997:5;3049:2;3034:18;;3021:32;;-1:-1:-1;3100:2:1;3085:18;;3072:32;;3151:2;3136:18;3123:32;;-1:-1:-1;2709:452:1;-1:-1:-1;;;2709:452:1:o;3166:348::-;3250:6;3303:2;3291:9;3282:7;3278:23;3274:32;3271:52;;;3319:1;3316;3309:12;3271:52;3359:9;3346:23;3392:18;3384:6;3381:30;3378:50;;;3424:1;3421;3414:12;3378:50;3447:61;3500:7;3491:6;3480:9;3476:22;3447:61;:::i;3519:1217::-;3646:6;3654;3662;3715:2;3703:9;3694:7;3690:23;3686:32;3683:52;;;3731:1;3728;3721:12;3683:52;3771:9;3758:23;3800:18;3841:2;3833:6;3830:14;3827:34;;;3857:1;3854;3847:12;3827:34;3880:61;3933:7;3924:6;3913:9;3909:22;3880:61;:::i;:::-;3870:71;;3960:2;3950:12;;4015:2;4004:9;4000:18;3987:32;4044:2;4034:8;4031:16;4028:36;;;4060:1;4057;4050:12;4028:36;4083:24;;;-1:-1:-1;4138:4:1;4130:13;;4126:27;-1:-1:-1;4116:55:1;;4167:1;4164;4157:12;4116:55;4203:2;4190:16;4226:60;4242:43;4282:2;4242:43;:::i;4226:60::-;4308:3;4332:2;4327:3;4320:15;4360:2;4355:3;4351:12;4344:19;;4391:2;4387;4383:11;4439:7;4434:2;4428;4425:1;4421:10;4417:2;4413:19;4409:28;4406:41;4403:61;;;4460:1;4457;4450:12;4403:61;4482:1;4473:10;;4492:163;4506:2;4503:1;4500:9;4492:163;;;4563:17;;4551:30;;4524:1;4517:9;;;;;4601:12;;;;4633;;4492:163;;;-1:-1:-1;3519:1217:1;;4674:5;;-1:-1:-1;;;;4726:2:1;4711:18;;;;4698:32;;-1:-1:-1;;;3519:1217:1:o;4741:241::-;4797:6;4850:2;4838:9;4829:7;4825:23;4821:32;4818:52;;;4866:1;4863;4856:12;4818:52;4905:9;4892:23;4924:28;4946:5;4924:28;:::i;4987:245::-;5054:6;5107:2;5095:9;5086:7;5082:23;5078:32;5075:52;;;5123:1;5120;5113:12;5075:52;5155:9;5149:16;5174:28;5196:5;5174:28;:::i;5237:180::-;5296:6;5349:2;5337:9;5328:7;5324:23;5320:32;5317:52;;;5365:1;5362;5355:12;5317:52;-1:-1:-1;5388:23:1;;5237:180;-1:-1:-1;5237:180:1:o;5422:306::-;5510:6;5518;5526;5579:2;5567:9;5558:7;5554:23;5550:32;5547:52;;;5595:1;5592;5585:12;5547:52;5624:9;5618:16;5608:26;;5674:2;5663:9;5659:18;5653:25;5643:35;;5718:2;5707:9;5703:18;5697:25;5687:35;;5422:306;;;;;:::o;6529:607::-;-1:-1:-1;;;;;6888:15:1;;;6870:34;;6935:2;6920:18;;6913:34;;;;6978:2;6963:18;;6956:34;;;;7021:2;7006:18;;6999:34;;;;7070:15;;;7064:3;7049:19;;7042:44;6850:3;7102:19;;7095:35;;;;6819:3;6804:19;;6529:607::o;7333:597::-;7445:4;7474:2;7503;7492:9;7485:21;7535:6;7529:13;7578:6;7573:2;7562:9;7558:18;7551:34;7603:1;7613:140;7627:6;7624:1;7621:13;7613:140;;;7722:14;;;7718:23;;7712:30;7688:17;;;7707:2;7684:26;7677:66;7642:10;;7613:140;;;7771:6;7768:1;7765:13;7762:91;;;7841:1;7836:2;7827:6;7816:9;7812:22;7808:31;7801:42;7762:91;-1:-1:-1;7914:2:1;7893:15;-1:-1:-1;;7889:29:1;7874:45;;;;7921:2;7870:54;;7333:597;-1:-1:-1;;;7333:597:1:o;9560:354::-;9762:2;9744:21;;;9801:2;9781:18;;;9774:30;9840:32;9835:2;9820:18;;9813:60;9905:2;9890:18;;9560:354::o;9919:353::-;10121:2;10103:21;;;10160:2;10140:18;;;10133:30;10199:31;10194:2;10179:18;;10172:59;10263:2;10248:18;;9919:353::o;10277:::-;10479:2;10461:21;;;10518:2;10498:18;;;10491:30;10557:31;10552:2;10537:18;;10530:59;10621:2;10606:18;;10277:353::o;11800:356::-;12002:2;11984:21;;;12021:18;;;12014:30;12080:34;12075:2;12060:18;;12053:62;12147:2;12132:18;;11800:356::o;15081:980::-;15343:4;15391:3;15380:9;15376:19;15422:6;15411:9;15404:25;15448:2;15486:6;15481:2;15470:9;15466:18;15459:34;15529:3;15524:2;15513:9;15509:18;15502:31;15553:6;15588;15582:13;15619:6;15611;15604:22;15657:3;15646:9;15642:19;15635:26;;15696:2;15688:6;15684:15;15670:29;;15717:1;15727:195;15741:6;15738:1;15735:13;15727:195;;;15806:13;;-1:-1:-1;;;;;15802:39:1;15790:52;;15897:15;;;;15862:12;;;;15838:1;15756:9;15727:195;;;-1:-1:-1;;;;;;;15978:32:1;;;;15973:2;15958:18;;15951:60;-1:-1:-1;;;16042:3:1;16027:19;16020:35;15939:3;15081:980;-1:-1:-1;;;15081:980:1:o;16255:275::-;16326:2;16320:9;16391:2;16372:13;;-1:-1:-1;;16368:27:1;16356:40;;16426:18;16411:34;;16447:22;;;16408:62;16405:88;;;16473:18;;:::i;:::-;16509:2;16502:22;16255:275;;-1:-1:-1;16255:275:1:o;16535:183::-;16595:4;16628:18;16620:6;16617:30;16614:56;;;16650:18;;:::i;:::-;-1:-1:-1;16695:1:1;16691:14;16707:4;16687:25;;16535:183::o;16723:128::-;16763:3;16794:1;16790:6;16787:1;16784:13;16781:39;;;16800:18;;:::i;:::-;-1:-1:-1;16836:9:1;;16723:128::o;16856:217::-;16896:1;16922;16912:132;;16966:10;16961:3;16957:20;16954:1;16947:31;17001:4;16998:1;16991:15;17029:4;17026:1;17019:15;16912:132;-1:-1:-1;17058:9:1;;16856:217::o;17078:168::-;17118:7;17184:1;17180;17176:6;17172:14;17169:1;17166:21;17161:1;17154:9;17147:17;17143:45;17140:71;;;17191:18;;:::i;:::-;-1:-1:-1;17231:9:1;;17078:168::o;17251:125::-;17291:4;17319:1;17316;17313:8;17310:34;;;17324:18;;:::i;:::-;-1:-1:-1;17361:9:1;;17251:125::o;17381:135::-;17420:3;-1:-1:-1;;17441:17:1;;17438:43;;;17461:18;;:::i;:::-;-1:-1:-1;17508:1:1;17497:13;;17381:135::o;17521:127::-;17582:10;17577:3;17573:20;17570:1;17563:31;17613:4;17610:1;17603:15;17637:4;17634:1;17627:15;17653:127;17714:10;17709:3;17705:20;17702:1;17695:31;17745:4;17742:1;17735:15;17769:4;17766:1;17759:15;17785:127;17846:10;17841:3;17837:20;17834:1;17827:31;17877:4;17874:1;17867:15;17901:4;17898:1;17891:15;17917:131;-1:-1:-1;;;;;17992:31:1;;17982:42;;17972:70;;18038:1;18035;18028:12;18053:118;18139:5;18132:13;18125:21;18118:5;18115:32;18105:60;;18161:1;18158;18151:12
Swarm Source
ipfs://6f263d038c8888a49a92e8abfc7125065993c5cb1564d82e7f8b99b73a501b54
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.