ERC-20
Overview
Max Total Supply
100,000,000 VRFI
Holders
847
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
329.872324100000014369 VRFIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
VRFI
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-07 */ /** .----------------. .----------------. .----------------. .----------------. | .--------------. || .--------------. || .--------------. || .--------------. | | | ____ ____ | || | _______ | || | _________ | || | _____ | | | ||_ _| |_ _| | || | |_ __ \ | || | |_ ___ | | || | |_ _| | | | | \ \ / / | || | | |__) | | || | | |_ \_| | || | | | | | | | \ \ / / | || | | __ / | || | | _| | || | | | | | | | \ ' / | || | _| | \ \_ | || | _| |_ | || | _| |_ | | | | \_/ | || | |____| |___| | || | |_____| | || | |_____| | | | | | || | | || | | || | | | | '--------------' || '--------------' || '--------------' || '--------------' | '----------------' '----------------' '----------------' '----------------' **/ //SPDX-License-Identifier: Unlicensed // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (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: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.5.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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); /** * @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/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, _allowances[owner][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = _allowances[owner][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; } _balances[to] += amount; emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Spend `amount` form the allowance of `owner` toward `spender`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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: VRFI.sol pragma solidity ^0.8.10; contract VRFI is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool private swapping; struct Fee { uint16 liquidityFee; uint16 marketingFee; uint16 devFee; uint16 salariesFee; uint16 insuranceFee; } Fee public buyFee; Fee public sellFee; Fee public transferFee; Fee public sevenDayFee; uint16 private totalBuyFee; uint16 private totalSellFee; uint16 private totalTransferFee; uint16 private totalSevenDayFee; uint256 public swapTokensAtAmount; uint256 public timeGap = 30 minutes; uint256 private lastSwapTime; uint256 public dailyLimit; bool public isTradingEnabled; mapping(address => uint256) private lastSoldTime; mapping(address => uint256) private soldTokenin24Hrs; uint256 public maxTxAmount; uint256 public maxWalletAmount; address payable public _marketingWallet = payable(address(0x9361EAE77A347691e306F11DB8d8F9c961aFf3cc)); address payable public _devWallet = payable(address(0x9361EAE77A347691e306F11DB8d8F9c961aFf3cc)); address payable public _salariesWallet = payable(address(0x9361EAE77A347691e306F11DB8d8F9c961aFf3cc)); address payable public _insuranceWallet = payable(address(0x6CF48b5edc8b4E72D2b67c5fA6a46B43358F8181)); address payable public _deployerWallet = payable(address(0xcA57fcFbc10e6E58EC793b644797D3570DbEFC56)); // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => uint256) public lastBuyTime; mapping(address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event LiquidityWalletUpdated( address indexed newLiquidityWallet, address indexed oldLiquidityWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); constructor() ERC20("VRFI", "VRFI") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); buyFee.liquidityFee = 15; // 1.5% buyFee.marketingFee = 35; // 3.5% buyFee.devFee = 20; // 2% buyFee.salariesFee = 20; //2% buyFee.insuranceFee = 10; // 1% totalBuyFee = 100; // 10% sellFee.liquidityFee = 15; // 1.5% sellFee.marketingFee = 35; // 2.5% sellFee.devFee = 20; // 2% sellFee.salariesFee = 20; // 2% sellFee.insuranceFee = 10; // 1% totalSellFee = 100; // 10% transferFee.liquidityFee = 15; // 1.5% transferFee.marketingFee = 35; // 3.5% transferFee.devFee = 0; transferFee.salariesFee = 0; transferFee.insuranceFee = 10; // 1% totalTransferFee = 60; // 5% sevenDayFee.liquidityFee = 215; // 21.5% sevenDayFee.marketingFee = 35; // 3.5% sevenDayFee.devFee = 20; // 2% sevenDayFee.salariesFee = 20; // 2% sevenDayFee.insuranceFee = 10; // 1% totalSevenDayFee = 300; //30% // Create a uniswap pair for this new token address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = _uniswapV2Pair; _setAutomatedMarketMakerPair(_uniswapV2Pair, true); // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(owner(), 100 * 10**6 * 10**18); // 100,000,000 tokens maxWalletAmount = totalSupply().mul(1).div(100); // 1% of the supply (1,000,000 tokens per wallet limit) maxTxAmount = totalSupply().mul(1).div(1000); // 0.1% of the supply (100000 tokens per transaction) swapTokensAtAmount = totalSupply().mul(5).div(10000); //0.05% of the supply (50000 tokens per swap) dailyLimit = 250 * 10**3 * 10**18; // 250000 tokens isTradingEnabled = false; } receive() external payable {} function updateUniswapV2Router(address newAddress) public onlyOwner { require( newAddress != address(uniswapV2Router), "Token: The router already has that address" ); emit UpdateUniswapV2Router(newAddress, address(uniswapV2Router)); uniswapV2Router = IUniswapV2Router02(newAddress); address _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()) .createPair(address(this), uniswapV2Router.WETH()); uniswapV2Pair = _uniswapV2Pair; } function enableTrading () external onlyOwner { isTradingEnabled = true; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function excludeMultipleAccountsFromFees( address[] calldata accounts, bool excluded ) public onlyOwner { for (uint256 i = 0; i < accounts.length; i++) { _isExcludedFromFees[accounts[i]] = excluded; } emit ExcludeMultipleAccountsFromFees(accounts, excluded); } function setSwapAtAmount(uint256 value, uint256 gap) external onlyOwner { swapTokensAtAmount = value * 10**18; timeGap = gap; } function setMaxWallet(uint256 value) external onlyOwner { maxWalletAmount = value * 10**18; } function setMaxTx(uint256 value) external onlyOwner { maxTxAmount = value * 10**18; } function setDailyLimit(uint256 value) external onlyOwner { require (value > 1000, "no rug pull"); dailyLimit = value * 10**18; } function setWallets( address marketing, address dev, address salaries, address insurance, address deployer ) external onlyOwner { _marketingWallet = payable(marketing); _devWallet = payable(dev); _salariesWallet = payable(salaries); _insuranceWallet = payable(insurance); _deployerWallet = payable(deployer); } function setSellFee( uint16 insurance, uint16 marketing, uint16 liquidity, uint16 dev, uint16 salaries ) external onlyOwner { sellFee.salariesFee = salaries; sellFee.marketingFee = marketing; sellFee.liquidityFee = liquidity; sellFee.devFee = dev; sellFee.insuranceFee = insurance; totalSellFee = salaries + marketing + liquidity + dev + insurance; } function setSevenDayFee( uint16 insurance, uint16 marketing, uint16 liquidity, uint16 dev, uint16 salaries ) external onlyOwner { sevenDayFee.salariesFee = salaries; sevenDayFee.marketingFee = marketing; sevenDayFee.liquidityFee = liquidity; sevenDayFee.devFee = dev; sevenDayFee.insuranceFee = insurance; totalSevenDayFee = salaries + marketing + liquidity + dev + insurance; } function setBuyFee( uint16 insurance, uint16 marketing, uint16 liquidity, uint16 dev, uint16 salaries ) external onlyOwner { buyFee.salariesFee = salaries; buyFee.marketingFee = marketing; buyFee.liquidityFee = liquidity; buyFee.devFee = dev; buyFee.insuranceFee = insurance; totalBuyFee = salaries + marketing + liquidity + dev + insurance; } function setTransferFee( uint16 insurance, uint16 marketing, uint16 liquidity, uint16 dev, uint16 salaries ) external onlyOwner { transferFee.salariesFee = salaries; transferFee.marketingFee = marketing; transferFee.liquidityFee = liquidity; transferFee.devFee = dev; transferFee.insuranceFee = insurance; totalTransferFee = salaries + marketing + liquidity + dev + insurance; } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require( pair != uniswapV2Pair, "Token: The PancakeSwap pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { require( automatedMarketMakerPairs[pair] != value, "Token: Automated market maker pair is already set to that value" ); automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function claimStuckTokens(address _token) external onlyOwner { require(_token != address(this), "No rugs"); if (_token == address(0x0)) { payable(owner()).transfer(address(this).balance); return; } IERC20 erc20token = IERC20(_token); uint256 balance = erc20token.balanceOf(address(this)); erc20token.transfer(owner(), balance); } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = (contractTokenBalance >= swapTokensAtAmount) && (lastSwapTime + timeGap <= block.timestamp); if ( canSwap && !swapping && !automatedMarketMakerPairs[from] && from != owner() && to != owner() ) { swapping = true; lastSwapTime = block.timestamp; contractTokenBalance = swapTokensAtAmount; uint256 totalFee = totalBuyFee + totalSellFee + totalSevenDayFee + totalTransferFee; uint256 swapTokens = contractTokenBalance .mul( buyFee.liquidityFee + sellFee.liquidityFee + transferFee.liquidityFee + sevenDayFee.liquidityFee ) .div(totalFee); swapAndLiquify(swapTokens); uint256 feeTokens = contractTokenBalance.sub(swapTokens); swapAndSendToFee(feeTokens); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } if (lastBuyTime[to] == 0 && !automatedMarketMakerPairs[to]) { lastBuyTime[to] = block.timestamp; } if (takeFee) { require(amount <= maxTxAmount, "Amount exceeds limit"); require(isTradingEnabled, "trading is not enabled yet"); if (!automatedMarketMakerPairs[to]) { require( balanceOf(to) + amount <= maxWalletAmount, "Balance exceeds limit" ); } uint256 fees; if (automatedMarketMakerPairs[to]) { if (block.timestamp - lastSoldTime[from] >= 1 days) { soldTokenin24Hrs[from] = 0; } require( soldTokenin24Hrs[from] + amount <= dailyLimit, "Token amount exceeds daily limit" ); soldTokenin24Hrs[from] = soldTokenin24Hrs[from].add(amount); lastSoldTime[from] = block.timestamp; if (lastBuyTime[from] + 7 days > block.timestamp) { fees = totalSevenDayFee; } else { fees = totalSellFee; } } else if (automatedMarketMakerPairs[from]) { fees = totalBuyFee; lastBuyTime[to] = block.timestamp; } if ( !automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] ) { fees = totalTransferFee; } uint256 feeAmount = amount.mul(fees).div(1000); amount = amount.sub(feeAmount); super._transfer(from, address(this), feeAmount); } super._transfer(from, to, amount); } function swapAndSendToFee(uint256 tokens) private { uint256 initialBalance = address(this).balance; swapTokensForEth(tokens); uint256 newBalance = address(this).balance.sub(initialBalance); uint256 totalMarketingFee = buyFee.marketingFee + sellFee.marketingFee + transferFee.marketingFee + sevenDayFee.marketingFee; uint256 totalDevFee = buyFee.devFee + sellFee.devFee + transferFee.devFee + sevenDayFee.devFee; uint256 totalInsuranceFee = buyFee.insuranceFee + sellFee.insuranceFee + transferFee.insuranceFee + sevenDayFee.insuranceFee; uint256 totalSalariesFee = buyFee.salariesFee + sellFee.salariesFee + transferFee.salariesFee + sevenDayFee.salariesFee; uint256 total = totalMarketingFee + totalDevFee + totalInsuranceFee + totalSalariesFee; uint256 marketingShare = newBalance.mul(totalMarketingFee).div(total); uint256 devShare = newBalance.mul(totalDevFee).div(total); uint256 salariesShare = newBalance.mul(totalSalariesFee).div(total); uint256 insuranceShare = newBalance.mul(totalInsuranceFee).div(total); // _marketingWallet.transfer(marketingShare); // _devWallet.transfer(devShare); // _salariesWallet.transfer(salariesShare); // _insuranceWallet.transfer(insuranceShare); (bool success, ) = _marketingWallet.call{value: marketingShare }(""); (bool success2, ) = _devWallet.call{value: devShare }(""); (bool success3, ) = _salariesWallet.call{value: salariesShare }(""); (bool success4, ) = _insuranceWallet.call{value: insuranceShare }(""); require(success, "transfer to marketing wallet failed"); require(success2, "Transfer to dev wallet failed"); require(success3, "Transfer to salaries wallet failed"); require(success4, "Transfer to insurance wallet failed"); } function swapAndLiquify(uint256 tokens) private { // split the contract balance into halves uint256 half = tokens.div(2); uint256 otherHalf = tokens.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } 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 _deployerWallet, block.timestamp ); } }
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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newLiquidityWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldLiquidityWallet","type":"address"}],"name":"LiquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[],"name":"_deployerWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_insuranceWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_salariesWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dailyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuyTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDailyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setSevenDayFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gap","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"insurance","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"salaries","type":"uint16"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"dev","type":"address"},{"internalType":"address","name":"salaries","type":"address"},{"internalType":"address","name":"insurance","type":"address"},{"internalType":"address","name":"deployer","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sevenDayFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeGap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"marketingFee","type":"uint16"},{"internalType":"uint16","name":"devFee","type":"uint16"},{"internalType":"uint16","name":"salariesFee","type":"uint16"},{"internalType":"uint16","name":"insuranceFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateUniswapV2Router","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052610708600e55601680546001600160a01b0319908116739361eae77a347691e306f11db8d8f9c961aff3cc90811790925560178054821683179055601880548216909217909155601980548216736cf48b5edc8b4e72d2b67c5fa6a46b43358f8181179055601a805490911673ca57fcfbc10e6e58ec793b644797d3570dbefc561790553480156200009557600080fd5b506040805180820182526004808252635652464960e01b6020808401829052845180860190955291845290830152906003620000d28382620007ad565b506004620000e18282620007ad565b505050620000fe620000f8620003fb60201b60201c565b620003ff565b600880546001600160501b0319908116680a001400140023000f908117909255600c8054600980548416909417909355600a80548316680a000000000023000f179055600b8054909216680a00140014002300d7179091556001600160401b031990911667012c003c006400641790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620001c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ea919062000879565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000238573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025e919062000879565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d2919062000879565b600680546001600160a01b038086166001600160a01b031992831617909255600780549284169290911691909117905590506200031181600162000451565b62000330620003286005546001600160a01b031690565b600162000541565b6200033d30600162000541565b62000366620003546005546001600160a01b031690565b6a52b7d2dcc80cd2e4000000620005fc565b620003a460646200039060016200037c60025490565b620006e160201b6200183f1790919060201c565b620006f660201b620018521790919060201c565b601555620003be6103e86200039060016200037c60025490565b601455620003d86127106200039060056200037c60025490565b600d5550506934f086f3b33b684000006010556011805460ff191690556200091a565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601d602052604090205481151560ff909116151503620004ed5760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c75650060648201526084015b60405180910390fd5b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200059d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004e4565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006545760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004e4565b8060026000828254620006689190620008ba565b90915550506001600160a01b0382166000908152602081905260408120805483929062000697908490620008ba565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000620006ef8284620008d5565b9392505050565b6000620006ef8284620008f7565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200073457607f821691505b6020821081036200075557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200070457600081815260208120601f850160051c81016020861015620007845750805b601f850160051c820191505b81811015620007a55782815560010162000790565b505050505050565b81516001600160401b03811115620007c957620007c962000709565b620007e181620007da84546200071f565b846200075b565b602080601f831160018114620008195760008415620008005750858301515b600019600386901b1c1916600185901b178555620007a5565b600085815260208120601f198616915b828110156200084a5788860151825594840194600190910190840162000829565b5085821015620008695787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200088c57600080fd5b81516001600160a01b0381168114620006ef57600080fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115620008d057620008d0620008a4565b500190565b6000816000190483118215151615620008f257620008f2620008a4565b500290565b6000826200091557634e487b7160e01b600052601260045260246000fd5b500490565b613072806200092a6000396000f3fe6080604052600436106102b25760003560e01c806367eeba0c11610175578063a9059cbb116100dc578063c024666811610095578063dd62ed3e1161006f578063dd62ed3e1461094a578063e2f4560514610990578063f2fde38b146109a6578063f9d0831a146109c657600080fd5b8063c0246668146108f4578063c492f04614610914578063dd5dd8f21461093457600080fd5b8063a9059cbb1461080a578063aa4bde281461082a578063acb2ad6f14610840578063b20d30a914610884578063b62496f5146108a4578063bc337182146108d457600080fd5b80638c0b5e221161012e5780638c0b5e22146107615780638da5cb5b1461077757806395d89b4114610795578063962dfc75146107aa5780639a7a23d6146107ca578063a457c2d7146107ea57600080fd5b806367eeba0c1461068757806370a082311461069d578063715018a6146106d357806382528791146106e85780638a8c523c146107085780638ba9d8e11461071d57600080fd5b8063313ce567116102195780634cfd4a92116101d25780634cfd4a92146105ae5780634fbee193146105ce57806351dfb5dc146106075780635d0044ca1461062757806365b8dbc01461064757806366ad738d1461066757600080fd5b8063313ce567146104c157806338c4f814146104dd57806339509351146104fd5780633fecc2e21461051d578063470624021461054a57806349bd5a5e1461058e57600080fd5b80631465d9291161026b5780631465d929146103a95780631694505e146103c957806318160ddd146103e95780631c92dc021461040857806323b872dd146104285780632b14ca561461044857600080fd5b8063064a59d0146102be57806306fdde03146102ed578063095ea7b31461030f5780630aaae7351461032f5780630e604eca1461036757806311a63e171461038957600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506011546102d89060ff1681565b60405190151581526020015b60405180910390f35b3480156102f957600080fd5b506103026109e6565b6040516102e49190612a08565b34801561031b57600080fd5b506102d861032a366004612a72565b610a78565b34801561033b57600080fd5b50601a5461034f906001600160a01b031681565b6040516001600160a01b0390911681526020016102e4565b34801561037357600080fd5b50610387610382366004612a9e565b610a90565b005b34801561039557600080fd5b5060175461034f906001600160a01b031681565b3480156103b557600080fd5b506103876103c4366004612ad7565b610ade565b3480156103d557600080fd5b5060065461034f906001600160a01b031681565b3480156103f557600080fd5b506002545b6040519081526020016102e4565b34801561041457600080fd5b50610387610423366004612ad7565b610baf565b34801561043457600080fd5b506102d8610443366004612b3c565b610c86565b34801561045457600080fd5b5060095461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102e4565b3480156104cd57600080fd5b50604051601281526020016102e4565b3480156104e957600080fd5b506103876104f8366004612ad7565b610caa565b34801561050957600080fd5b506102d8610518366004612a72565b610d81565b34801561052957600080fd5b506103fa610538366004612b7d565b601c6020526000908152604090205481565b34801561055657600080fd5b5060085461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561059a57600080fd5b5060075461034f906001600160a01b031681565b3480156105ba57600080fd5b506103876105c9366004612ad7565b610dc0565b3480156105da57600080fd5b506102d86105e9366004612b7d565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561061357600080fd5b5060185461034f906001600160a01b031681565b34801561063357600080fd5b50610387610642366004612b9a565b610e97565b34801561065357600080fd5b50610387610662366004612b7d565b610ed9565b34801561067357600080fd5b5060195461034f906001600160a01b031681565b34801561069357600080fd5b506103fa60105481565b3480156106a957600080fd5b506103fa6106b8366004612b7d565b6001600160a01b031660009081526020819052604090205490565b3480156106df57600080fd5b5061038761114a565b3480156106f457600080fd5b50610387610703366004612bb3565b611180565b34801561071457600080fd5b50610387611209565b34801561072957600080fd5b50600b5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561076d57600080fd5b506103fa60145481565b34801561078357600080fd5b506005546001600160a01b031661034f565b3480156107a157600080fd5b50610302611242565b3480156107b657600080fd5b5060165461034f906001600160a01b031681565b3480156107d657600080fd5b506103876107e5366004612c32565b611251565b3480156107f657600080fd5b506102d8610805366004612a72565b611322565b34801561081657600080fd5b506102d8610825366004612a72565b6113b4565b34801561083657600080fd5b506103fa60155481565b34801561084c57600080fd5b50600a5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561089057600080fd5b5061038761089f366004612b9a565b6113c2565b3480156108b057600080fd5b506102d86108bf366004612b7d565b601d6020526000908152604090205460ff1681565b3480156108e057600080fd5b506103876108ef366004612b9a565b611443565b34801561090057600080fd5b5061038761090f366004612c32565b611485565b34801561092057600080fd5b5061038761092f366004612c6b565b61150e565b34801561094057600080fd5b506103fa600e5481565b34801561095657600080fd5b506103fa610965366004612cf1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099c57600080fd5b506103fa600d5481565b3480156109b257600080fd5b506103876109c1366004612b7d565b6115ea565b3480156109d257600080fd5b506103876109e1366004612b7d565b611685565b6060600380546109f590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612d1f565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b600033610a8681858561185e565b5060019392505050565b6005546001600160a01b03163314610ac35760405162461bcd60e51b8152600401610aba90612d59565b60405180910390fd5b610ad582670de0b6b3a7640000612da4565b600d55600e5550565b6005546001600160a01b03163314610b085760405162461bcd60e51b8152600401610aba90612d59565b6008805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610b748785612dc3565b610b7e9190612dc3565b610b889190612dc3565b610b929190612dc3565b600c805461ffff191661ffff929092169190911790555050505050565b6005546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610aba90612d59565b600b805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610c458785612dc3565b610c4f9190612dc3565b610c599190612dc3565b610c639190612dc3565b600c60066101000a81548161ffff021916908361ffff1602179055505050505050565b600033610c94858285611982565b610c9f858585611a0e565b506001949350505050565b6005546001600160a01b03163314610cd45760405162461bcd60e51b8152600401610aba90612d59565b600a805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610d408785612dc3565b610d4a9190612dc3565b610d549190612dc3565b610d5e9190612dc3565b600c60046101000a81548161ffff021916908361ffff1602179055505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a869082908690610dbb908790612de9565b61185e565b6005546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610aba90612d59565b6009805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610e568785612dc3565b610e609190612dc3565b610e6a9190612dc3565b610e749190612dc3565b600c60026101000a81548161ffff021916908361ffff1602179055505050505050565b6005546001600160a01b03163314610ec15760405162461bcd60e51b8152600401610aba90612d59565b610ed381670de0b6b3a7640000612da4565b60155550565b6005546001600160a01b03163314610f035760405162461bcd60e51b8152600401610aba90612d59565b6006546001600160a01b0390811690821603610f745760405162461bcd60e51b815260206004820152602a60248201527f546f6b656e3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610aba565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190612e01565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190612e01565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190612e01565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610aba90612d59565b61117e6000612044565b565b6005546001600160a01b031633146111aa5760405162461bcd60e51b8152600401610aba90612d59565b601680546001600160a01b03199081166001600160a01b03978816179091556017805482169587169590951790945560188054851693861693909317909255601980548416918516919091179055601a80549092169216919091179055565b6005546001600160a01b031633146112335760405162461bcd60e51b8152600401610aba90612d59565b6011805460ff19166001179055565b6060600480546109f590612d1f565b6005546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610aba90612d59565b6007546001600160a01b03908116908316036113145760405162461bcd60e51b815260206004820152604c60248201527f546f6b656e3a205468652050616e63616b655377617020706169722063616e6e60448201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60648201526b65744d616b6572506169727360a01b608482015260a401610aba565b61131e8282612096565b5050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156113a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aba565b610c9f828686840361185e565b600033610a86818585611a0e565b6005546001600160a01b031633146113ec5760405162461bcd60e51b8152600401610aba90612d59565b6103e8811161142b5760405162461bcd60e51b815260206004820152600b60248201526a1b9bc81c9d59c81c1d5b1b60aa1b6044820152606401610aba565b61143d81670de0b6b3a7640000612da4565b60105550565b6005546001600160a01b0316331461146d5760405162461bcd60e51b8152600401610aba90612d59565b61147f81670de0b6b3a7640000612da4565b60145550565b6005546001600160a01b031633146114af5760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115385760405162461bcd60e51b8152600401610aba90612d59565b60005b828110156115a95781601b600086868581811061155a5761155a612e1e565b905060200201602081019061156f9190612b7d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115a181612e34565b91505061153b565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516115dd93929190612e4d565b60405180910390a1505050565b6005546001600160a01b031633146116145760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0381166116795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b61168281612044565b50565b6005546001600160a01b031633146116af5760405162461bcd60e51b8152600401610aba90612d59565b306001600160a01b038216036116f15760405162461bcd60e51b81526020600482015260076024820152664e6f207275677360c81b6044820152606401610aba565b6001600160a01b038116611738576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561131e573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a59190612ea6565b9050816001600160a01b031663a9059cbb6117c86005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190612ebf565b50505050565b600061184b8284612da4565b9392505050565b600061184b8284612edc565b6001600160a01b0383166118c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b6001600160a01b0382166119215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146118395781811015611a015760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610aba565b611839848484840361185e565b6001600160a01b038316611a345760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b038216611a5a5760405162461bcd60e51b8152600401610aba90612f43565b80600003611a7357611a6e83836000612180565b505050565b3060009081526020819052604081205490506000600d548210158015611aa8575042600e54600f54611aa59190612de9565b11155b9050808015611ac15750600754600160a01b900460ff16155b8015611ae657506001600160a01b0385166000908152601d602052604090205460ff16155b8015611b0057506005546001600160a01b03868116911614155b8015611b1a57506005546001600160a01b03858116911614155b15611c0e576007805460ff60a01b1916600160a01b17905542600f55600d54600c5490925060009061ffff600160201b8204811691600160301b8104821691611b6c9162010000810482169116612dc3565b611b769190612dc3565b611b809190612dc3565b600b54600a5460095460085461ffff9485169550600094611bdb948794611bd5949183169390831692611bb69281169116612dc3565b611bc09190612dc3565b611bca9190612dc3565b879061ffff1661183f565b90611852565b9050611be6816122d4565b6000611bf2858361235b565b9050611bfd81612367565b50506007805460ff60a01b19169055505b6007546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611c5c57506001600160a01b0385166000908152601b602052604090205460ff165b15611c65575060005b6001600160a01b0385166000908152601c6020526040902054158015611ca457506001600160a01b0385166000908152601d602052604090205460ff16155b15611cc5576001600160a01b0385166000908152601c602052604090204290555b801561203157601454841115611d145760405162461bcd60e51b8152602060048201526014602482015273105b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610aba565b60115460ff16611d665760405162461bcd60e51b815260206004820152601a60248201527f74726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610aba565b6001600160a01b0385166000908152601d602052604090205460ff16611df95760155484611da9876001600160a01b031660009081526020819052604090205490565b611db39190612de9565b1115611df95760405162461bcd60e51b815260206004820152601560248201527410985b185b98d948195e18d959591cc81b1a5b5a5d605a1b6044820152606401610aba565b6001600160a01b0385166000908152601d602052604081205460ff1615611f67576001600160a01b0387166000908152601260205260409020546201518090611e429042612f86565b10611e61576001600160a01b0387166000908152601360205260408120555b6010546001600160a01b038816600090815260136020526040902054611e88908790612de9565b1115611ed65760405162461bcd60e51b815260206004820181905260248201527f546f6b656e20616d6f756e742065786365656473206461696c79206c696d69746044820152606401610aba565b6001600160a01b038716600090815260136020526040902054611ef990866127f6565b6001600160a01b038816600090815260136020908152604080832093909355601281528282204290819055601c90915291902054611f3a9062093a80612de9565b1115611f545750600c54600160301b900461ffff16611fac565b50600c5462010000900461ffff16611fac565b6001600160a01b0387166000908152601d602052604090205460ff1615611fac5750600c546001600160a01b0386166000908152601c6020526040902042905561ffff165b6001600160a01b0387166000908152601d602052604090205460ff16158015611fee57506001600160a01b0386166000908152601d602052604090205460ff16155b156120035750600c54600160201b900461ffff165b60006120156103e8611bd5888561183f565b9050612021868261235b565b955061202e883083612180565b50505b61203c868686612180565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601d602052604090205481151560ff90911615150361212c5760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610aba565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166121a65760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b0382166121cc5760405162461bcd60e51b8152600401610aba90612f43565b6001600160a01b038316600090815260208190526040902054818110156122445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aba565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061227b908490612de9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122c791815260200190565b60405180910390a3611839565b60006122e1826002611852565b905060006122ef838361235b565b9050476122fb83612802565b6000612307478361235b565b90506123138382612954565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b600061184b8284612f86565b4761237182612802565b600061237d478361235b565b600b54600a5460095460085493945060009361ffff6201000094859004811694938490048116936123b5938190048216920416612dc3565b6123bf9190612dc3565b6123c99190612dc3565b600b54600a5460095460085461ffff9485169550600094600160201b9485900481169493849004811693612404938190048216920416612dc3565b61240e9190612dc3565b6124189190612dc3565b600b54600a5460095460085461ffff9485169550600094600160401b9485900481169493849004811693612453938190048216920416612dc3565b61245d9190612dc3565b6124679190612dc3565b600b54600a5460095460085461ffff9485169550600094600160301b94859004811694938490048116936124a2938190048216920416612dc3565b6124ac9190612dc3565b6124b69190612dc3565b61ffff169050600081836124ca8688612de9565b6124d49190612de9565b6124de9190612de9565b905060006124f082611bd5898961183f565b9050600061250283611bd58a8961183f565b9050600061251484611bd58b8861183f565b9050600061252685611bd58c8a61183f565b6016546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612578576040519150601f19603f3d011682016040523d82523d6000602084013e61257d565b606091505b50506017546040519192506000916001600160a01b039091169086908381818185875af1925050503d80600081146125d1576040519150601f19603f3d011682016040523d82523d6000602084013e6125d6565b606091505b50506018546040519192506000916001600160a01b039091169086908381818185875af1925050503d806000811461262a576040519150601f19603f3d011682016040523d82523d6000602084013e61262f565b606091505b50506019546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612683576040519150601f19603f3d011682016040523d82523d6000602084013e612688565b606091505b50509050836126e55760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657220746f206d61726b6574696e672077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b826127325760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f20206465762077616c6c6574206661696c656400006044820152606401610aba565b8161278b5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657220746f202073616c61726965732077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b806127e45760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220746f2020696e737572616e63652077616c6c65742066616044820152631a5b195960e21b6064820152608401610aba565b50505050505050505050505050505050565b600061184b8284612de9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061283757612837612e1e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b49190612e01565b816001815181106128c7576128c7612e1e565b6001600160a01b0392831660209182029290920101526006546128ed913091168461185e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612926908590600090869030904290600401612f9d565b600060405180830381600087803b15801561294057600080fd5b505af115801561203c573d6000803e3d6000fd5b60065461296c9030906001600160a01b03168461185e565b600654601a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156129dc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a01919061300e565b5050505050565b600060208083528351808285015260005b81811015612a3557858101830151858201604001528201612a19565b81811115612a47576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461168257600080fd5b60008060408385031215612a8557600080fd5b8235612a9081612a5d565b946020939093013593505050565b60008060408385031215612ab157600080fd5b50508035926020909101359150565b803561ffff81168114612ad257600080fd5b919050565b600080600080600060a08688031215612aef57600080fd5b612af886612ac0565b9450612b0660208701612ac0565b9350612b1460408701612ac0565b9250612b2260608701612ac0565b9150612b3060808701612ac0565b90509295509295909350565b600080600060608486031215612b5157600080fd5b8335612b5c81612a5d565b92506020840135612b6c81612a5d565b929592945050506040919091013590565b600060208284031215612b8f57600080fd5b813561184b81612a5d565b600060208284031215612bac57600080fd5b5035919050565b600080600080600060a08688031215612bcb57600080fd5b8535612bd681612a5d565b94506020860135612be681612a5d565b93506040860135612bf681612a5d565b92506060860135612c0681612a5d565b91506080860135612c1681612a5d565b809150509295509295909350565b801515811461168257600080fd5b60008060408385031215612c4557600080fd5b8235612c5081612a5d565b91506020830135612c6081612c24565b809150509250929050565b600080600060408486031215612c8057600080fd5b833567ffffffffffffffff80821115612c9857600080fd5b818601915086601f830112612cac57600080fd5b813581811115612cbb57600080fd5b8760208260051b8501011115612cd057600080fd5b60209283019550935050840135612ce681612c24565b809150509250925092565b60008060408385031215612d0457600080fd5b8235612d0f81612a5d565b91506020830135612c6081612a5d565b600181811c90821680612d3357607f821691505b602082108103612d5357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612dbe57612dbe612d8e565b500290565b600061ffff808316818516808303821115612de057612de0612d8e565b01949350505050565b60008219821115612dfc57612dfc612d8e565b500190565b600060208284031215612e1357600080fd5b815161184b81612a5d565b634e487b7160e01b600052603260045260246000fd5b600060018201612e4657612e46612d8e565b5060010190565b6040808252810183905260008460608301825b86811015612e90578235612e7381612a5d565b6001600160a01b0316825260209283019290910190600101612e60565b5080925050508215156020830152949350505050565b600060208284031215612eb857600080fd5b5051919050565b600060208284031215612ed157600080fd5b815161184b81612c24565b600082612ef957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612f9857612f98612d8e565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fed5784516001600160a01b031683529383019391830191600101612fc8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561302357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202b729ff8f092437327a76dd69151b10625daedc495f663a8b8ddee761855f08064736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106102b25760003560e01c806367eeba0c11610175578063a9059cbb116100dc578063c024666811610095578063dd62ed3e1161006f578063dd62ed3e1461094a578063e2f4560514610990578063f2fde38b146109a6578063f9d0831a146109c657600080fd5b8063c0246668146108f4578063c492f04614610914578063dd5dd8f21461093457600080fd5b8063a9059cbb1461080a578063aa4bde281461082a578063acb2ad6f14610840578063b20d30a914610884578063b62496f5146108a4578063bc337182146108d457600080fd5b80638c0b5e221161012e5780638c0b5e22146107615780638da5cb5b1461077757806395d89b4114610795578063962dfc75146107aa5780639a7a23d6146107ca578063a457c2d7146107ea57600080fd5b806367eeba0c1461068757806370a082311461069d578063715018a6146106d357806382528791146106e85780638a8c523c146107085780638ba9d8e11461071d57600080fd5b8063313ce567116102195780634cfd4a92116101d25780634cfd4a92146105ae5780634fbee193146105ce57806351dfb5dc146106075780635d0044ca1461062757806365b8dbc01461064757806366ad738d1461066757600080fd5b8063313ce567146104c157806338c4f814146104dd57806339509351146104fd5780633fecc2e21461051d578063470624021461054a57806349bd5a5e1461058e57600080fd5b80631465d9291161026b5780631465d929146103a95780631694505e146103c957806318160ddd146103e95780631c92dc021461040857806323b872dd146104285780632b14ca561461044857600080fd5b8063064a59d0146102be57806306fdde03146102ed578063095ea7b31461030f5780630aaae7351461032f5780630e604eca1461036757806311a63e171461038957600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506011546102d89060ff1681565b60405190151581526020015b60405180910390f35b3480156102f957600080fd5b506103026109e6565b6040516102e49190612a08565b34801561031b57600080fd5b506102d861032a366004612a72565b610a78565b34801561033b57600080fd5b50601a5461034f906001600160a01b031681565b6040516001600160a01b0390911681526020016102e4565b34801561037357600080fd5b50610387610382366004612a9e565b610a90565b005b34801561039557600080fd5b5060175461034f906001600160a01b031681565b3480156103b557600080fd5b506103876103c4366004612ad7565b610ade565b3480156103d557600080fd5b5060065461034f906001600160a01b031681565b3480156103f557600080fd5b506002545b6040519081526020016102e4565b34801561041457600080fd5b50610387610423366004612ad7565b610baf565b34801561043457600080fd5b506102d8610443366004612b3c565b610c86565b34801561045457600080fd5b5060095461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b6040805161ffff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102e4565b3480156104cd57600080fd5b50604051601281526020016102e4565b3480156104e957600080fd5b506103876104f8366004612ad7565b610caa565b34801561050957600080fd5b506102d8610518366004612a72565b610d81565b34801561052957600080fd5b506103fa610538366004612b7d565b601c6020526000908152604090205481565b34801561055657600080fd5b5060085461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561059a57600080fd5b5060075461034f906001600160a01b031681565b3480156105ba57600080fd5b506103876105c9366004612ad7565b610dc0565b3480156105da57600080fd5b506102d86105e9366004612b7d565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561061357600080fd5b5060185461034f906001600160a01b031681565b34801561063357600080fd5b50610387610642366004612b9a565b610e97565b34801561065357600080fd5b50610387610662366004612b7d565b610ed9565b34801561067357600080fd5b5060195461034f906001600160a01b031681565b34801561069357600080fd5b506103fa60105481565b3480156106a957600080fd5b506103fa6106b8366004612b7d565b6001600160a01b031660009081526020819052604090205490565b3480156106df57600080fd5b5061038761114a565b3480156106f457600080fd5b50610387610703366004612bb3565b611180565b34801561071457600080fd5b50610387611209565b34801561072957600080fd5b50600b5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561076d57600080fd5b506103fa60145481565b34801561078357600080fd5b506005546001600160a01b031661034f565b3480156107a157600080fd5b50610302611242565b3480156107b657600080fd5b5060165461034f906001600160a01b031681565b3480156107d657600080fd5b506103876107e5366004612c32565b611251565b3480156107f657600080fd5b506102d8610805366004612a72565b611322565b34801561081657600080fd5b506102d8610825366004612a72565b6113b4565b34801561083657600080fd5b506103fa60155481565b34801561084c57600080fd5b50600a5461048c9061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b9091041685565b34801561089057600080fd5b5061038761089f366004612b9a565b6113c2565b3480156108b057600080fd5b506102d86108bf366004612b7d565b601d6020526000908152604090205460ff1681565b3480156108e057600080fd5b506103876108ef366004612b9a565b611443565b34801561090057600080fd5b5061038761090f366004612c32565b611485565b34801561092057600080fd5b5061038761092f366004612c6b565b61150e565b34801561094057600080fd5b506103fa600e5481565b34801561095657600080fd5b506103fa610965366004612cf1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561099c57600080fd5b506103fa600d5481565b3480156109b257600080fd5b506103876109c1366004612b7d565b6115ea565b3480156109d257600080fd5b506103876109e1366004612b7d565b611685565b6060600380546109f590612d1f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612d1f565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b600033610a8681858561185e565b5060019392505050565b6005546001600160a01b03163314610ac35760405162461bcd60e51b8152600401610aba90612d59565b60405180910390fd5b610ad582670de0b6b3a7640000612da4565b600d55600e5550565b6005546001600160a01b03163314610b085760405162461bcd60e51b8152600401610aba90612d59565b6008805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610b748785612dc3565b610b7e9190612dc3565b610b889190612dc3565b610b929190612dc3565b600c805461ffff191661ffff929092169190911790555050505050565b6005546001600160a01b03163314610bd95760405162461bcd60e51b8152600401610aba90612d59565b600b805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610c458785612dc3565b610c4f9190612dc3565b610c599190612dc3565b610c639190612dc3565b600c60066101000a81548161ffff021916908361ffff1602179055505050505050565b600033610c94858285611982565b610c9f858585611a0e565b506001949350505050565b6005546001600160a01b03163314610cd45760405162461bcd60e51b8152600401610aba90612d59565b600a805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610d408785612dc3565b610d4a9190612dc3565b610d549190612dc3565b610d5e9190612dc3565b600c60046101000a81548161ffff021916908361ffff1602179055505050505050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190610a869082908690610dbb908790612de9565b61185e565b6005546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610aba90612d59565b6009805461ffff85811667ffff0000ffff000019909216600160301b8583160263ffff000019161762010000888316021765ffff0000ffff191691909117600160201b858316021761ffff60401b1916600160401b91881691909102179055848284610e568785612dc3565b610e609190612dc3565b610e6a9190612dc3565b610e749190612dc3565b600c60026101000a81548161ffff021916908361ffff1602179055505050505050565b6005546001600160a01b03163314610ec15760405162461bcd60e51b8152600401610aba90612d59565b610ed381670de0b6b3a7640000612da4565b60155550565b6005546001600160a01b03163314610f035760405162461bcd60e51b8152600401610aba90612d59565b6006546001600160a01b0390811690821603610f745760405162461bcd60e51b815260206004820152602a60248201527f546f6b656e3a2054686520726f7574657220616c7265616479206861732074686044820152696174206164647265737360b01b6064820152608401610aba565b6006546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e90600090a3600680546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a01559160048083019260209291908290030181865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190612e01565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611091573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b59190612e01565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190612e01565b600780546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b031633146111745760405162461bcd60e51b8152600401610aba90612d59565b61117e6000612044565b565b6005546001600160a01b031633146111aa5760405162461bcd60e51b8152600401610aba90612d59565b601680546001600160a01b03199081166001600160a01b03978816179091556017805482169587169590951790945560188054851693861693909317909255601980548416918516919091179055601a80549092169216919091179055565b6005546001600160a01b031633146112335760405162461bcd60e51b8152600401610aba90612d59565b6011805460ff19166001179055565b6060600480546109f590612d1f565b6005546001600160a01b0316331461127b5760405162461bcd60e51b8152600401610aba90612d59565b6007546001600160a01b03908116908316036113145760405162461bcd60e51b815260206004820152604c60248201527f546f6b656e3a205468652050616e63616b655377617020706169722063616e6e60448201527f6f742062652072656d6f7665642066726f6d206175746f6d617465644d61726b60648201526b65744d616b6572506169727360a01b608482015260a401610aba565b61131e8282612096565b5050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909190838110156113a75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610aba565b610c9f828686840361185e565b600033610a86818585611a0e565b6005546001600160a01b031633146113ec5760405162461bcd60e51b8152600401610aba90612d59565b6103e8811161142b5760405162461bcd60e51b815260206004820152600b60248201526a1b9bc81c9d59c81c1d5b1b60aa1b6044820152606401610aba565b61143d81670de0b6b3a7640000612da4565b60105550565b6005546001600160a01b0316331461146d5760405162461bcd60e51b8152600401610aba90612d59565b61147f81670de0b6b3a7640000612da4565b60145550565b6005546001600160a01b031633146114af5760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146115385760405162461bcd60e51b8152600401610aba90612d59565b60005b828110156115a95781601b600086868581811061155a5761155a612e1e565b905060200201602081019061156f9190612b7d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806115a181612e34565b91505061153b565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516115dd93929190612e4d565b60405180910390a1505050565b6005546001600160a01b031633146116145760405162461bcd60e51b8152600401610aba90612d59565b6001600160a01b0381166116795760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610aba565b61168281612044565b50565b6005546001600160a01b031633146116af5760405162461bcd60e51b8152600401610aba90612d59565b306001600160a01b038216036116f15760405162461bcd60e51b81526020600482015260076024820152664e6f207275677360c81b6044820152606401610aba565b6001600160a01b038116611738576005546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561131e573d6000803e3d6000fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611781573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a59190612ea6565b9050816001600160a01b031663a9059cbb6117c86005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af1158015611815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118399190612ebf565b50505050565b600061184b8284612da4565b9392505050565b600061184b8284612edc565b6001600160a01b0383166118c05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610aba565b6001600160a01b0382166119215760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610aba565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205460001981146118395781811015611a015760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610aba565b611839848484840361185e565b6001600160a01b038316611a345760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b038216611a5a5760405162461bcd60e51b8152600401610aba90612f43565b80600003611a7357611a6e83836000612180565b505050565b3060009081526020819052604081205490506000600d548210158015611aa8575042600e54600f54611aa59190612de9565b11155b9050808015611ac15750600754600160a01b900460ff16155b8015611ae657506001600160a01b0385166000908152601d602052604090205460ff16155b8015611b0057506005546001600160a01b03868116911614155b8015611b1a57506005546001600160a01b03858116911614155b15611c0e576007805460ff60a01b1916600160a01b17905542600f55600d54600c5490925060009061ffff600160201b8204811691600160301b8104821691611b6c9162010000810482169116612dc3565b611b769190612dc3565b611b809190612dc3565b600b54600a5460095460085461ffff9485169550600094611bdb948794611bd5949183169390831692611bb69281169116612dc3565b611bc09190612dc3565b611bca9190612dc3565b879061ffff1661183f565b90611852565b9050611be6816122d4565b6000611bf2858361235b565b9050611bfd81612367565b50506007805460ff60a01b19169055505b6007546001600160a01b0386166000908152601b602052604090205460ff600160a01b909204821615911680611c5c57506001600160a01b0385166000908152601b602052604090205460ff165b15611c65575060005b6001600160a01b0385166000908152601c6020526040902054158015611ca457506001600160a01b0385166000908152601d602052604090205460ff16155b15611cc5576001600160a01b0385166000908152601c602052604090204290555b801561203157601454841115611d145760405162461bcd60e51b8152602060048201526014602482015273105b5bdd5b9d08195e18d959591cc81b1a5b5a5d60621b6044820152606401610aba565b60115460ff16611d665760405162461bcd60e51b815260206004820152601a60248201527f74726164696e67206973206e6f7420656e61626c6564207965740000000000006044820152606401610aba565b6001600160a01b0385166000908152601d602052604090205460ff16611df95760155484611da9876001600160a01b031660009081526020819052604090205490565b611db39190612de9565b1115611df95760405162461bcd60e51b815260206004820152601560248201527410985b185b98d948195e18d959591cc81b1a5b5a5d605a1b6044820152606401610aba565b6001600160a01b0385166000908152601d602052604081205460ff1615611f67576001600160a01b0387166000908152601260205260409020546201518090611e429042612f86565b10611e61576001600160a01b0387166000908152601360205260408120555b6010546001600160a01b038816600090815260136020526040902054611e88908790612de9565b1115611ed65760405162461bcd60e51b815260206004820181905260248201527f546f6b656e20616d6f756e742065786365656473206461696c79206c696d69746044820152606401610aba565b6001600160a01b038716600090815260136020526040902054611ef990866127f6565b6001600160a01b038816600090815260136020908152604080832093909355601281528282204290819055601c90915291902054611f3a9062093a80612de9565b1115611f545750600c54600160301b900461ffff16611fac565b50600c5462010000900461ffff16611fac565b6001600160a01b0387166000908152601d602052604090205460ff1615611fac5750600c546001600160a01b0386166000908152601c6020526040902042905561ffff165b6001600160a01b0387166000908152601d602052604090205460ff16158015611fee57506001600160a01b0386166000908152601d602052604090205460ff16155b156120035750600c54600160201b900461ffff165b60006120156103e8611bd5888561183f565b9050612021868261235b565b955061202e883083612180565b50505b61203c868686612180565b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152601d602052604090205481151560ff90911615150361212c5760405162461bcd60e51b815260206004820152603f60248201527f546f6b656e3a204175746f6d61746564206d61726b6574206d616b657220706160448201527f697220697320616c72656164792073657420746f20746861742076616c7565006064820152608401610aba565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166121a65760405162461bcd60e51b8152600401610aba90612efe565b6001600160a01b0382166121cc5760405162461bcd60e51b8152600401610aba90612f43565b6001600160a01b038316600090815260208190526040902054818110156122445760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610aba565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061227b908490612de9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122c791815260200190565b60405180910390a3611839565b60006122e1826002611852565b905060006122ef838361235b565b9050476122fb83612802565b6000612307478361235b565b90506123138382612954565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b600061184b8284612f86565b4761237182612802565b600061237d478361235b565b600b54600a5460095460085493945060009361ffff6201000094859004811694938490048116936123b5938190048216920416612dc3565b6123bf9190612dc3565b6123c99190612dc3565b600b54600a5460095460085461ffff9485169550600094600160201b9485900481169493849004811693612404938190048216920416612dc3565b61240e9190612dc3565b6124189190612dc3565b600b54600a5460095460085461ffff9485169550600094600160401b9485900481169493849004811693612453938190048216920416612dc3565b61245d9190612dc3565b6124679190612dc3565b600b54600a5460095460085461ffff9485169550600094600160301b94859004811694938490048116936124a2938190048216920416612dc3565b6124ac9190612dc3565b6124b69190612dc3565b61ffff169050600081836124ca8688612de9565b6124d49190612de9565b6124de9190612de9565b905060006124f082611bd5898961183f565b9050600061250283611bd58a8961183f565b9050600061251484611bd58b8861183f565b9050600061252685611bd58c8a61183f565b6016546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612578576040519150601f19603f3d011682016040523d82523d6000602084013e61257d565b606091505b50506017546040519192506000916001600160a01b039091169086908381818185875af1925050503d80600081146125d1576040519150601f19603f3d011682016040523d82523d6000602084013e6125d6565b606091505b50506018546040519192506000916001600160a01b039091169086908381818185875af1925050503d806000811461262a576040519150601f19603f3d011682016040523d82523d6000602084013e61262f565b606091505b50506019546040519192506000916001600160a01b039091169086908381818185875af1925050503d8060008114612683576040519150601f19603f3d011682016040523d82523d6000602084013e612688565b606091505b50509050836126e55760405162461bcd60e51b815260206004820152602360248201527f7472616e7366657220746f206d61726b6574696e672077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b826127325760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f20206465762077616c6c6574206661696c656400006044820152606401610aba565b8161278b5760405162461bcd60e51b815260206004820152602360248201527f5472616e7366657220746f202073616c61726965732077616c6c6574206661696044820152621b195960ea1b6064820152608401610aba565b806127e45760405162461bcd60e51b8152602060048201526024808201527f5472616e7366657220746f2020696e737572616e63652077616c6c65742066616044820152631a5b195960e21b6064820152608401610aba565b50505050505050505050505050505050565b600061184b8284612de9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061283757612837612e1e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b49190612e01565b816001815181106128c7576128c7612e1e565b6001600160a01b0392831660209182029290920101526006546128ed913091168461185e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790612926908590600090869030904290600401612f9d565b600060405180830381600087803b15801561294057600080fd5b505af115801561203c573d6000803e3d6000fd5b60065461296c9030906001600160a01b03168461185e565b600654601a5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af11580156129dc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a01919061300e565b5050505050565b600060208083528351808285015260005b81811015612a3557858101830151858201604001528201612a19565b81811115612a47576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461168257600080fd5b60008060408385031215612a8557600080fd5b8235612a9081612a5d565b946020939093013593505050565b60008060408385031215612ab157600080fd5b50508035926020909101359150565b803561ffff81168114612ad257600080fd5b919050565b600080600080600060a08688031215612aef57600080fd5b612af886612ac0565b9450612b0660208701612ac0565b9350612b1460408701612ac0565b9250612b2260608701612ac0565b9150612b3060808701612ac0565b90509295509295909350565b600080600060608486031215612b5157600080fd5b8335612b5c81612a5d565b92506020840135612b6c81612a5d565b929592945050506040919091013590565b600060208284031215612b8f57600080fd5b813561184b81612a5d565b600060208284031215612bac57600080fd5b5035919050565b600080600080600060a08688031215612bcb57600080fd5b8535612bd681612a5d565b94506020860135612be681612a5d565b93506040860135612bf681612a5d565b92506060860135612c0681612a5d565b91506080860135612c1681612a5d565b809150509295509295909350565b801515811461168257600080fd5b60008060408385031215612c4557600080fd5b8235612c5081612a5d565b91506020830135612c6081612c24565b809150509250929050565b600080600060408486031215612c8057600080fd5b833567ffffffffffffffff80821115612c9857600080fd5b818601915086601f830112612cac57600080fd5b813581811115612cbb57600080fd5b8760208260051b8501011115612cd057600080fd5b60209283019550935050840135612ce681612c24565b809150509250925092565b60008060408385031215612d0457600080fd5b8235612d0f81612a5d565b91506020830135612c6081612a5d565b600181811c90821680612d3357607f821691505b602082108103612d5357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615612dbe57612dbe612d8e565b500290565b600061ffff808316818516808303821115612de057612de0612d8e565b01949350505050565b60008219821115612dfc57612dfc612d8e565b500190565b600060208284031215612e1357600080fd5b815161184b81612a5d565b634e487b7160e01b600052603260045260246000fd5b600060018201612e4657612e46612d8e565b5060010190565b6040808252810183905260008460608301825b86811015612e90578235612e7381612a5d565b6001600160a01b0316825260209283019290910190600101612e60565b5080925050508215156020830152949350505050565b600060208284031215612eb857600080fd5b5051919050565b600060208284031215612ed157600080fd5b815161184b81612c24565b600082612ef957634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b600082821015612f9857612f98612d8e565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612fed5784516001600160a01b031683529383019391830191600101612fc8565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561302357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202b729ff8f092437327a76dd69151b10625daedc495f663a8b8ddee761855f08064736f6c634300080f0033
Deployed Bytecode Sourcemap
36395:17951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37159:28;;;;;;;;;;-1:-1:-1;37159:28:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;37159:28:0;;;;;;;;23005:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;25356:201::-;;;;;;;;;;-1:-1:-1;25356:201:0;;;;;:::i;:::-;;:::i;37847:110::-;;;;;;;;;;-1:-1:-1;37847:110:0;;;;-1:-1:-1;;;;;37847:110:0;;;;;;-1:-1:-1;;;;;1444:32:1;;;1426:51;;1414:2;1399:18;37847:110:0;1264:219:1;42384:150:0;;;;;;;;;;-1:-1:-1;42384:150:0;;;;;:::i;:::-;;:::i;:::-;;37500:105;;;;;;;;;;-1:-1:-1;37500:105:0;;;;-1:-1:-1;;;;;37500:105:0;;;44303:452;;;;;;;;;;-1:-1:-1;44303:452:0;;;;;:::i;:::-;;:::i;36469:41::-;;;;;;;;;;-1:-1:-1;36469:41:0;;;;-1:-1:-1;;;;;36469:41:0;;;24125:108;;;;;;;;;;-1:-1:-1;24213:12:0;;24125:108;;;2764:25:1;;;2752:2;2737:18;24125:108:0;2618:177:1;43808:487:0;;;;;;;;;;-1:-1:-1;43808:487:0;;;;;:::i;:::-;;:::i;26137:295::-;;;;;;;;;;-1:-1:-1;26137:295:0;;;;;:::i;:::-;;:::i;36778:18::-;;;;;;;;;;-1:-1:-1;36778:18:0;;;;;;;;;;;;;;;-1:-1:-1;;;36778:18:0;;;;;-1:-1:-1;;;36778:18:0;;;;;-1:-1:-1;;;36778:18:0;;;;;;;;;;3520:6:1;3553:15;;;3535:34;;3605:15;;;3600:2;3585:18;;3578:43;3657:15;;;3637:18;;;3630:43;;;;3709:15;;3704:2;3689:18;;3682:43;3762:15;;;3756:3;3741:19;;3734:44;3497:3;3482:19;36778:18:0;3261:523:1;23967:93:0;;;;;;;;;;-1:-1:-1;23967:93:0;;24050:2;3931:36:1;;3919:2;3904:18;23967:93:0;3789:184:1;44763:487:0;;;;;;;;;;-1:-1:-1;44763:487:0;;;;;:::i;:::-;;:::i;26841:240::-;;;;;;;;;;-1:-1:-1;26841:240:0;;;;;:::i;:::-;;:::i;38078:46::-;;;;;;;;;;-1:-1:-1;38078:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;36754:17;;;;;;;;;;-1:-1:-1;36754:17:0;;;;;;;;;;;;;;;-1:-1:-1;;;36754:17:0;;;;;-1:-1:-1;;;36754:17:0;;;;;-1:-1:-1;;;36754:17:0;;;;;;36517:28;;;;;;;;;;-1:-1:-1;36517:28:0;;;;-1:-1:-1;;;;;36517:28:0;;;43341:459;;;;;;;;;;-1:-1:-1;43341:459:0;;;;;:::i;:::-;;:::i;46371:126::-;;;;;;;;;;-1:-1:-1;46371:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;46461:28:0;46437:4;46461:28;;;:19;:28;;;;;;;;;46371:126;37612:110;;;;;;;;;;-1:-1:-1;37612:110:0;;;;-1:-1:-1;;;;;37612:110:0;;;42542:107;;;;;;;;;;-1:-1:-1;42542:107:0;;;;;:::i;:::-;;:::i;41215:536::-;;;;;;;;;;-1:-1:-1;41215:536:0;;;;;:::i;:::-;;:::i;37729:111::-;;;;;;;;;;-1:-1:-1;37729:111:0;;;;-1:-1:-1;;;;;37729:111:0;;;37127:25;;;;;;;;;;;;;;;;24296:127;;;;;;;;;;-1:-1:-1;24296:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;24397:18:0;24370:7;24397:18;;;;;;;;;;;;24296:127;35513:103;;;;;;;;;;;;;:::i;42923:410::-;;;;;;;;;;-1:-1:-1;42923:410:0;;;;;:::i;:::-;;:::i;41759:87::-;;;;;;;;;;;;;:::i;36832:22::-;;;;;;;;;;-1:-1:-1;36832:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;36832:22:0;;;;;-1:-1:-1;;;36832:22:0;;;;;-1:-1:-1;;;36832:22:0;;;;;;37310:26;;;;;;;;;;;;;;;;34862:87;;;;;;;;;;-1:-1:-1;34935:6:0;;-1:-1:-1;;;;;34935:6:0;34862:87;;23224:104;;;;;;;;;;;;;:::i;37382:111::-;;;;;;;;;;-1:-1:-1;37382:111:0;;;;-1:-1:-1;;;;;37382:111:0;;;45258:323;;;;;;;;;;-1:-1:-1;45258:323:0;;;;;:::i;:::-;;:::i;27584:438::-;;;;;;;;;;-1:-1:-1;27584:438:0;;;;;:::i;:::-;;:::i;24629:193::-;;;;;;;;;;-1:-1:-1;24629:193:0;;;;;:::i;:::-;;:::i;37343:30::-;;;;;;;;;;;;;;;;36803:22;;;;;;;;;;-1:-1:-1;36803:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;36803:22:0;;;;;-1:-1:-1;;;36803:22:0;;;;;-1:-1:-1;;;36803:22:0;;;;;;42764:151;;;;;;;;;;-1:-1:-1;42764:151:0;;;;;:::i;:::-;;:::i;38131:57::-;;;;;;;;;;-1:-1:-1;38131:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42657:99;;;;;;;;;;-1:-1:-1;42657:99:0;;;;;:::i;:::-;;:::i;41854:184::-;;;;;;;;;;-1:-1:-1;41854:184:0;;;;;:::i;:::-;;:::i;42046:330::-;;;;;;;;;;-1:-1:-1;42046:330:0;;;;;:::i;:::-;;:::i;37048:35::-;;;;;;;;;;;;;;;;24885:151;;;;;;;;;;-1:-1:-1;24885:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;25001:18:0;;;24974:7;25001:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24885:151;37008:33;;;;;;;;;;;;;;;;35771:201;;;;;;;;;;-1:-1:-1;35771:201:0;;;;;:::i;:::-;;:::i;45949:414::-;;;;;;;;;;-1:-1:-1;45949:414:0;;;;;:::i;:::-;;:::i;23005:100::-;23059:13;23092:5;23085:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23005:100;:::o;25356:201::-;25439:4;20725:10;25495:32;20725:10;25511:7;25520:6;25495:8;:32::i;:::-;-1:-1:-1;25545:4:0;;25356:201;-1:-1:-1;;;25356:201:0:o;42384:150::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;;;;;;;;;42488:14:::1;:5:::0;42496:6:::1;42488:14;:::i;:::-;42467:18;:35:::0;42513:7:::1;:13:::0;-1:-1:-1;42384:150:0:o;44303:452::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;44487:6:::1;:29:::0;;::::1;44569:31:::0;;::::1;-1:-1:-1::0;;44527:31:0;;;-1:-1:-1;;;44487:29:0;;::::1;;-1:-1:-1::0;;44527:31:0;;;;;::::1;;;-1:-1:-1::0;;44611:19:0;;;;;-1:-1:-1;;;44611:19:0;;::::1;;;-1:-1:-1::0;;;;44641:31:0::1;-1:-1:-1::0;;;44641:31:0;;::::1;::::0;;;::::1;;::::0;;;44611:19;44569:31;44697:20:::1;44527:31:::0;44487:29;44697:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;44683:11;:64:::0;;-1:-1:-1;;44683:64:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;44303:452:0:o;43808:487::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;43997:11:::1;:34:::0;;::::1;44089:36:::0;;::::1;-1:-1:-1::0;;44042:36:0;;;-1:-1:-1;;;43997:34:0;;::::1;;-1:-1:-1::0;;44042:36:0;;;;;::::1;;;-1:-1:-1::0;;44136:24:0;;;;;-1:-1:-1;;;44136:24:0;;::::1;;;-1:-1:-1::0;;;;44171:36:0::1;-1:-1:-1::0;;;44171:36:0;;::::1;::::0;;;::::1;;::::0;;;44136:24;44089:36;44237:20:::1;44042:36:::0;43997:34;44237:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;44218:16;;:69;;;;;;;;;;;;;;;;;;43808:487:::0;;;;;:::o;26137:295::-;26268:4;20725:10;26326:38;26342:4;20725:10;26357:6;26326:15;:38::i;:::-;26375:27;26385:4;26391:2;26395:6;26375:9;:27::i;:::-;-1:-1:-1;26420:4:0;;26137:295;-1:-1:-1;;;;26137:295:0:o;44763:487::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;44952:11:::1;:34:::0;;::::1;45044:36:::0;;::::1;-1:-1:-1::0;;44997:36:0;;;-1:-1:-1;;;44952:34:0;;::::1;;-1:-1:-1::0;;44997:36:0;;;;;::::1;;;-1:-1:-1::0;;45091:24:0;;;;;-1:-1:-1;;;45091:24:0;;::::1;;;-1:-1:-1::0;;;;45126:36:0::1;-1:-1:-1::0;;;45126:36:0;;::::1;::::0;;;::::1;;::::0;;;45091:24;45044:36;45192:20:::1;44997:36:::0;44952:34;45192:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;45173:16;;:69;;;;;;;;;;;;;;;;;;44763:487:::0;;;;;:::o;26841:240::-;20725:10;26929:4;27010:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;27010:27:0;;;;;;;;;;26929:4;;20725:10;26985:66;;20725:10;;27010:27;;:40;;27040:10;;27010:40;:::i;:::-;26985:8;:66::i;43341:459::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;43526:7:::1;:30:::0;;::::1;43610:32:::0;;::::1;-1:-1:-1::0;;43567:32:0;;;-1:-1:-1;;;43526:30:0;;::::1;;-1:-1:-1::0;;43567:32:0;;;;;::::1;;;-1:-1:-1::0;;43653:20:0;;;;;-1:-1:-1;;;43653:20:0;;::::1;;;-1:-1:-1::0;;;;43684:32:0::1;-1:-1:-1::0;;;43684:32:0;;::::1;::::0;;;::::1;;::::0;;;43653:20;43610:32;43742:20:::1;43567:32:::0;43526:30;43742:20:::1;:::i;:::-;:32;;;;:::i;:::-;:38;;;;:::i;:::-;:50;;;;:::i;:::-;43727:12;;:65;;;;;;;;;;;;;;;;;;43341:459:::0;;;;;:::o;42542:107::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42627:14:::1;:5:::0;42635:6:::1;42627:14;:::i;:::-;42609:15;:32:::0;-1:-1:-1;42542:107:0:o;41215:536::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;41338:15:::1;::::0;-1:-1:-1;;;;;41338:15:0;;::::1;41316:38:::0;;::::1;::::0;41294:130:::1;;;::::0;-1:-1:-1;;;41294:130:0;;8714:2:1;41294:130:0::1;::::0;::::1;8696:21:1::0;8753:2;8733:18;;;8726:30;8792:34;8772:18;;;8765:62;-1:-1:-1;;;8843:18:1;;;8836:40;8893:19;;41294:130:0::1;8512:406:1::0;41294:130:0::1;41482:15;::::0;41440:59:::1;::::0;-1:-1:-1;;;;;41482:15:0;;::::1;::::0;41440:59;::::1;::::0;::::1;::::0;41482:15:::1;::::0;41440:59:::1;41510:15;:48:::0;;-1:-1:-1;;;;;;41510:48:0::1;-1:-1:-1::0;;;;;41510:48:0;::::1;::::0;;::::1;::::0;;;41612:25:::1;::::0;;-1:-1:-1;;;41612:25:0;;;;-1:-1:-1;;41510:48:0;41612:23:::1;::::0;:25:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;41510:48;41612:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41594:69:0::1;;41672:4;41679:15;;;;;;;;;-1:-1:-1::0;;;;;41679:15:0::1;-1:-1:-1::0;;;;;41679:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41594:108;::::0;-1:-1:-1;;;;;;41594:108:0::1;::::0;;;;;;-1:-1:-1;;;;;9409:15:1;;;41594:108:0::1;::::0;::::1;9391:34:1::0;9461:15;;9441:18;;;9434:43;9326:18;;41594:108:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41713:13;:30:::0;;-1:-1:-1;;;;;;41713:30:0::1;-1:-1:-1::0;;;;;41713:30:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;41215:536:0:o;35513:103::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;35578:30:::1;35605:1;35578:18;:30::i;:::-;35513:103::o:0;42923:410::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;43112:16:::1;:37:::0;;-1:-1:-1;;;;;;43112:37:0;;::::1;-1:-1:-1::0;;;;;43112:37:0;;::::1;;::::0;;;43160:10:::1;:25:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;43196:15:::1;:35:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;43242:16:::1;:37:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;43290:15:::1;:35:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;42923:410::o;41759:87::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;41815:16:::1;:23:::0;;-1:-1:-1;;41815:23:0::1;41834:4;41815:23;::::0;;41759:87::o;23224:104::-;23280:13;23313:7;23306:14;;;;;:::i;45258:323::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;45402:13:::1;::::0;-1:-1:-1;;;;;45402:13:0;;::::1;45394:21:::0;;::::1;::::0;45372:147:::1;;;::::0;-1:-1:-1;;;45372:147:0;;9690:2:1;45372:147:0::1;::::0;::::1;9672:21:1::0;9729:2;9709:18;;;9702:30;9768:34;9748:18;;;9741:62;9839:34;9819:18;;;9812:62;-1:-1:-1;;;9890:19:1;;;9883:43;9943:19;;45372:147:0::1;9488:480:1::0;45372:147:0::1;45532:41;45561:4;45567:5;45532:28;:41::i;:::-;45258:323:::0;;:::o;27584:438::-;20725:10;27677:4;27760:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;27760:27:0;;;;;;;;;;27677:4;;20725:10;27806:35;;;;27798:85;;;;-1:-1:-1;;;27798:85:0;;10175:2:1;27798:85:0;;;10157:21:1;10214:2;10194:18;;;10187:30;10253:34;10233:18;;;10226:62;-1:-1:-1;;;10304:18:1;;;10297:35;10349:19;;27798:85:0;9973:401:1;27798:85:0;27919:60;27928:5;27935:7;27963:15;27944:16;:34;27919:8;:60::i;24629:193::-;24708:4;20725:10;24764:28;20725:10;24781:2;24785:6;24764:9;:28::i;42764:151::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42849:4:::1;42841:5;:12;42832:37;;;::::0;-1:-1:-1;;;42832:37:0;;10581:2:1;42832:37:0::1;::::0;::::1;10563:21:1::0;10620:2;10600:18;;;10593:30;-1:-1:-1;;;10639:18:1;;;10632:41;10690:18;;42832:37:0::1;10379:335:1::0;42832:37:0::1;42893:14;:5:::0;42901:6:::1;42893:14;:::i;:::-;42880:10;:27:::0;-1:-1:-1;42764:151:0:o;42657:99::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42734:14:::1;:5:::0;42742:6:::1;42734:14;:::i;:::-;42720:11;:28:::0;-1:-1:-1;42657:99:0:o;41854:184::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41939:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;41939:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;41996:34;;154:41:1;;;41996:34:0::1;::::0;127:18:1;41996:34:0::1;;;;;;;41854:184:::0;;:::o;42046:330::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;42189:9:::1;42184:116;42204:19:::0;;::::1;42184:116;;;42280:8;42245:19;:32;42265:8;;42274:1;42265:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42245:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;42245:32:0;:43;;-1:-1:-1;;42245:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42225:3;::::1;::::0;::::1;:::i;:::-;;;;42184:116;;;;42317:51;42349:8;;42359;42317:51;;;;;;;;:::i;:::-;;;;;;;;42046:330:::0;;;:::o;35771:201::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35860:22:0;::::1;35852:73;;;::::0;-1:-1:-1;;;35852:73:0;;11992:2:1;35852:73:0::1;::::0;::::1;11974:21:1::0;12031:2;12011:18;;;12004:30;12070:34;12050:18;;;12043:62;-1:-1:-1;;;12121:18:1;;;12114:36;12167:19;;35852:73:0::1;11790:402:1::0;35852:73:0::1;35936:28;35955:8;35936:18;:28::i;:::-;35771:201:::0;:::o;45949:414::-;34935:6;;-1:-1:-1;;;;;34935:6:0;20725:10;35082:23;35074:68;;;;-1:-1:-1;;;35074:68:0;;;;;;;:::i;:::-;46047:4:::1;-1:-1:-1::0;;;;;46029:23:0;::::1;::::0;46021:43:::1;;;::::0;-1:-1:-1;;;46021:43:0;;12399:2:1;46021:43:0::1;::::0;::::1;12381:21:1::0;12438:1;12418:18;;;12411:29;-1:-1:-1;;;12456:18:1;;;12449:37;12503:18;;46021:43:0::1;12197:330:1::0;46021:43:0::1;-1:-1:-1::0;;;;;46079:22:0;::::1;46075:124;;34935:6:::0;;46118:48:::1;::::0;-1:-1:-1;;;;;34935:6:0;;;;46144:21:::1;46118:48:::0;::::1;;;::::0;::::1;::::0;;;46144:21;34935:6;46118:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;46075:124;46272:35;::::0;-1:-1:-1;;;46272:35:0;;46301:4:::1;46272:35;::::0;::::1;1426:51:1::0;46236:6:0;;46209:17:::1;::::0;-1:-1:-1;;;;;46272:20:0;::::1;::::0;::::1;::::0;1399:18:1;;46272:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46254:53;;46318:10;-1:-1:-1::0;;;;;46318:19:0::1;;46338:7;34935:6:::0;;-1:-1:-1;;;;;34935:6:0;;34862:87;46338:7:::1;46318:37;::::0;-1:-1:-1;;;;;;46318:37:0::1;::::0;;;;;;-1:-1:-1;;;;;12913:32:1;;;46318:37:0::1;::::0;::::1;12895:51:1::0;12962:18;;;12955:34;;;12868:18;;46318:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46010:353;;45949:414:::0;:::o;4551:98::-;4609:7;4636:5;4640:1;4636;:5;:::i;:::-;4629:12;4551:98;-1:-1:-1;;;4551:98:0:o;4950:::-;5008:7;5035:5;5039:1;5035;:5;:::i;31220:380::-;-1:-1:-1;;;;;31356:19:0;;31348:68;;;;-1:-1:-1;;;31348:68:0;;13674:2:1;31348:68:0;;;13656:21:1;13713:2;13693:18;;;13686:30;13752:34;13732:18;;;13725:62;-1:-1:-1;;;13803:18:1;;;13796:34;13847:19;;31348:68:0;13472:400:1;31348:68:0;-1:-1:-1;;;;;31435:21:0;;31427:68;;;;-1:-1:-1;;;31427:68:0;;14079:2:1;31427:68:0;;;14061:21:1;14118:2;14098:18;;;14091:30;14157:34;14137:18;;;14130:62;-1:-1:-1;;;14208:18:1;;;14201:32;14250:19;;31427:68:0;13877:398:1;31427:68:0;-1:-1:-1;;;;;31508:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31560:32;;2764:25:1;;;31560:32:0;;2737:18:1;31560:32:0;;;;;;;31220:380;;;:::o;31887:453::-;-1:-1:-1;;;;;25001:18:0;;;32022:24;25001:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;32089:37:0;;32085:248;;32171:6;32151:16;:26;;32143:68;;;;-1:-1:-1;;;32143:68:0;;14482:2:1;32143:68:0;;;14464:21:1;14521:2;14501:18;;;14494:30;14560:31;14540:18;;;14533:59;14609:18;;32143:68:0;14280:353:1;32143:68:0;32255:51;32264:5;32271:7;32299:6;32280:16;:25;32255:8;:51::i;46505:3650::-;-1:-1:-1;;;;;46637:18:0;;46629:68;;;;-1:-1:-1;;;46629:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46716:16:0;;46708:64;;;;-1:-1:-1;;;46708:64:0;;;;;;;:::i;:::-;46789:6;46799:1;46789:11;46785:93;;46817:28;46833:4;46839:2;46843:1;46817:15;:28::i;:::-;46505:3650;;;:::o;46785:93::-;46939:4;46890:28;24397:18;;;;;;;;;;;46890:55;;46958:12;46998:18;;46974:20;:42;;46973:104;;;;;47061:15;47050:7;;47035:12;;:22;;;;:::i;:::-;:41;;46973:104;46958:119;;47108:7;:33;;;;-1:-1:-1;47133:8:0;;-1:-1:-1;;;47133:8:0;;;;47132:9;47108:33;:82;;;;-1:-1:-1;;;;;;47159:31:0;;;;;;:25;:31;;;;;;;;47158:32;47108:82;:114;;;;-1:-1:-1;34935:6:0;;-1:-1:-1;;;;;47207:15:0;;;34935:6;;47207:15;;47108:114;:144;;;;-1:-1:-1;34935:6:0;;-1:-1:-1;;;;;47239:13:0;;;34935:6;;47239:13;;47108:144;47090:984;;;47279:8;:15;;-1:-1:-1;;;;47279:15:0;-1:-1:-1;;;47279:15:0;;;47324;47309:12;:30;47379:18;;47532:16;;47379:18;;-1:-1:-1;47279:15:0;;47532:16;-1:-1:-1;;;47532:16:0;;;;;-1:-1:-1;;;47496:16:0;;;;;47433:43;;47464:12;;;;;;47433:11;:43;:::i;:::-;:79;;;;:::i;:::-;:115;;;;:::i;:::-;47798:11;:24;47746:11;:24;47698:7;:20;47651:6;:19;47414:134;;;;;-1:-1:-1;47565:18:0;;47586:287;;47414:134;;47586:255;;47798:24;;;;47746;;;;47651:67;;47698:20;;;47651:19;:67;:::i;:::-;:119;;;;:::i;:::-;:171;;;;:::i;:::-;47586:20;;:255;;:42;:255::i;:::-;:277;;:287::i;:::-;47565:308;;47888:26;47903:10;47888:14;:26::i;:::-;47931:17;47951:36;:20;47976:10;47951:24;:36::i;:::-;47931:56;;48002:27;48019:9;48002:16;:27::i;:::-;-1:-1:-1;;48046:8:0;:16;;-1:-1:-1;;;;48046:16:0;;;-1:-1:-1;47090:984:0;48102:8;;-1:-1:-1;;;;;48212:25:0;;48086:12;48212:25;;;:19;:25;;;;;;48102:8;-1:-1:-1;;;48102:8:0;;;;;48101:9;;48212:25;;:52;;-1:-1:-1;;;;;;48241:23:0;;;;;;:19;:23;;;;;;;;48212:52;48208:100;;;-1:-1:-1;48291:5:0;48208:100;-1:-1:-1;;;;;48324:15:0;;;;;;:11;:15;;;;;;:20;:54;;;;-1:-1:-1;;;;;;48349:29:0;;;;;;:25;:29;;;;;;;;48348:30;48324:54;48320:120;;;-1:-1:-1;;;;;48395:15:0;;;;;;:11;:15;;;;;48413;48395:33;;48320:120;48456:7;48452:1650;;;48498:11;;48488:6;:21;;48480:54;;;;-1:-1:-1;;;48480:54:0;;15650:2:1;48480:54:0;;;15632:21:1;15689:2;15669:18;;;15662:30;-1:-1:-1;;;15708:18:1;;;15701:50;15768:18;;48480:54:0;15448:344:1;48480:54:0;48557:16;;;;48549:55;;;;-1:-1:-1;;;48549:55:0;;15999:2:1;48549:55:0;;;15981:21:1;16038:2;16018:18;;;16011:30;16077:28;16057:18;;;16050:56;16123:18;;48549:55:0;15797:350:1;48549:55:0;-1:-1:-1;;;;;48626:29:0;;;;;;:25;:29;;;;;;;;48621:207;;48732:15;;48722:6;48706:13;48716:2;-1:-1:-1;;;;;24397:18:0;24370:7;24397:18;;;;;;;;;;;;24296:127;48706:13;:22;;;;:::i;:::-;:41;;48676:136;;;;-1:-1:-1;;;48676:136:0;;16354:2:1;48676:136:0;;;16336:21:1;16393:2;16373:18;;;16366:30;-1:-1:-1;;;16412:18:1;;;16405:51;16473:18;;48676:136:0;16152:345:1;48676:136:0;-1:-1:-1;;;;;48877:29:0;;48844:12;48877:29;;;:25;:29;;;;;;;;48873:849;;;-1:-1:-1;;;;;48949:18:0;;;;;;:12;:18;;;;;;48971:6;;48931:36;;:15;:36;:::i;:::-;:46;48927:121;;-1:-1:-1;;;;;49002:22:0;;49027:1;49002:22;;;:16;:22;;;;;:26;48927:121;49133:10;;-1:-1:-1;;;;;49098:22:0;;;;;;:16;:22;;;;;;:31;;49123:6;;49098:31;:::i;:::-;:45;;49068:151;;;;-1:-1:-1;;;49068:151:0;;16834:2:1;49068:151:0;;;16816:21:1;;;16853:18;;;16846:30;16912:34;16892:18;;;16885:62;16964:18;;49068:151:0;16632:356:1;49068:151:0;-1:-1:-1;;;;;49265:22:0;;;;;;:16;:22;;;;;;:34;;49292:6;49265:26;:34::i;:::-;-1:-1:-1;;;;;49240:22:0;;;;;;:16;:22;;;;;;;;:59;;;;49318:12;:18;;;;;49339:15;49318:36;;;;49379:11;:17;;;;;;;:26;;49399:6;49379:26;:::i;:::-;:44;49375:184;;;-1:-1:-1;49455:16:0;;-1:-1:-1;;;49455:16:0;;;;48873:849;;49375:184;-1:-1:-1;49527:12:0;;;;;;;48873:849;;;-1:-1:-1;;;;;49584:31:0;;;;;;:25;:31;;;;;;;;49580:142;;;-1:-1:-1;49643:11:0;;-1:-1:-1;;;;;49673:15:0;;49643:11;49673:15;;;:11;:15;;;;;49691;49673:33;;49643:11;;49580:142;-1:-1:-1;;;;;49761:31:0;;;;;;:25;:31;;;;;;;;49760:32;:83;;;;-1:-1:-1;;;;;;49814:29:0;;;;;;:25;:29;;;;;;;;49813:30;49760:83;49738:179;;;-1:-1:-1;49885:16:0;;-1:-1:-1;;;49885:16:0;;;;49738:179;49933:17;49953:26;49974:4;49953:16;:6;49964:4;49953:10;:16::i;:26::-;49933:46;-1:-1:-1;50005:21:0;:6;49933:46;50005:10;:21::i;:::-;49996:30;;50043:47;50059:4;50073;50080:9;50043:15;:47::i;:::-;48465:1637;;48452:1650;50114:33;50130:4;50136:2;50140:6;50114:15;:33::i;:::-;46618:3537;;;46505:3650;;;:::o;36132:191::-;36225:6;;;-1:-1:-1;;;;;36242:17:0;;;-1:-1:-1;;;;;;36242:17:0;;;;;;;36275:40;;36225:6;;;36242:17;36225:6;;36275:40;;36206:16;;36275:40;36195:128;36132:191;:::o;45589:352::-;-1:-1:-1;;;;;45694:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;45672:153;;;;-1:-1:-1;;;45672:153:0;;17195:2:1;45672:153:0;;;17177:21:1;17234:2;17214:18;;;17207:30;17273:34;17253:18;;;17246:62;17344:33;17324:18;;;17317:61;17395:19;;45672:153:0;16993:427:1;45672:153:0;-1:-1:-1;;;;;45836:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;45836:39:0;;;;;;;;;;45893:40;;45836:39;;:31;45893:40;;;45589:352;;:::o;28501:671::-;-1:-1:-1;;;;;28632:18:0;;28624:68;;;;-1:-1:-1;;;28624:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28711:16:0;;28703:64;;;;-1:-1:-1;;;28703:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28853:15:0;;28831:19;28853:15;;;;;;;;;;;28887:21;;;;28879:72;;;;-1:-1:-1;;;28879:72:0;;17627:2:1;28879:72:0;;;17609:21:1;17666:2;17646:18;;;17639:30;17705:34;17685:18;;;17678:62;-1:-1:-1;;;17756:18:1;;;17749:36;17802:19;;28879:72:0;17425:402:1;28879:72:0;-1:-1:-1;;;;;28987:15:0;;;:9;:15;;;;;;;;;;;29005:20;;;28987:38;;29047:13;;;;;;;;:23;;29019:6;;28987:9;29047:23;;29019:6;;29047:23;:::i;:::-;;;;;;;;29103:2;-1:-1:-1;;;;;29088:26:0;29097:4;-1:-1:-1;;;;;29088:26:0;;29107:6;29088:26;;;;2764:25:1;;2752:2;2737:18;;2618:177;29088:26:0;;;;;;;;29127:37;46505:3650;52294:923;52404:12;52419:13;:6;52430:1;52419:10;:13::i;:::-;52404:28;-1:-1:-1;52443:17:0;52463:16;:6;52404:28;52463:10;:16::i;:::-;52443:36;-1:-1:-1;52782:21:0;52848:22;52865:4;52848:16;:22::i;:::-;53001:18;53022:41;:21;53048:14;53022:25;:41::i;:::-;53001:62;;53113:35;53126:9;53137:10;53113:12;:35::i;:::-;53166:43;;;18034:25:1;;;18090:2;18075:18;;18068:34;;;18118:18;;;18111:34;;;53166:43:0;;18022:2:1;18007:18;53166:43:0;;;;;;;52342:875;;;;52294:923;:::o;4194:98::-;4252:7;4279:5;4283:1;4279;:5;:::i;50163:2123::-;50249:21;50281:24;50298:6;50281:16;:24::i;:::-;50316:18;50337:41;:21;50363:14;50337:25;:41::i;:::-;50530:11;:24;50490:11;:24;50454:7;:20;50419:6;:19;50316:62;;-1:-1:-1;50391:25:0;;50530:24;;;;;;;;;50490;;;;;;;50419:55;;50454:20;;;;;;50419:19;;:55;:::i;:::-;:95;;;;:::i;:::-;:135;;;;:::i;:::-;50680:11;:18;50646:11;:18;50616:7;:14;50587:6;:13;50391:163;;;;;-1:-1:-1;50565:19:0;;-1:-1:-1;;;50680:18:0;;;;;;;50646;;;;;;;50587:43;;50616:14;;;;;;50587:13;;:43;:::i;:::-;:77;;;;:::i;:::-;:111;;;;:::i;:::-;50848:11;:24;50808:11;:24;50772:7;:20;50848:24;50737:19;50565:133;;;;;-1:-1:-1;50709:25:0;;-1:-1:-1;;;50848:24:0;;;;;;;50808;;;;;;;50737:55;;50772:20;;;;;;50737:19;;:55;:::i;:::-;:95;;;;:::i;:::-;:135;;;;:::i;:::-;51018:11;:23;50979:11;:23;50944:7;:19;50910:6;:18;50709:163;;;;;-1:-1:-1;50883:24:0;;-1:-1:-1;;;51018:23:0;;;;;;;50979;;;;;;;50910:53;;50944:19;;;;;;50910:18;;:53;:::i;:::-;:92;;;;:::i;:::-;:131;;;;:::i;:::-;50883:158;;;-1:-1:-1;51054:13:0;50883:158;51130:17;51070:44;51103:11;51070:17;:44;:::i;:::-;:77;;;;:::i;:::-;:109;;;;:::i;:::-;51054:125;-1:-1:-1;51192:22:0;51217:44;51054:125;51217:33;:10;51232:17;51217:14;:33::i;:44::-;51192:69;-1:-1:-1;51272:16:0;51291:38;51323:5;51291:27;:10;51306:11;51291:14;:27::i;:38::-;51272:57;-1:-1:-1;51340:21:0;51364:43;51401:5;51364:32;:10;51379:16;51364:14;:32::i;:43::-;51340:67;-1:-1:-1;51418:22:0;51443:44;51481:5;51443:33;:10;51458:17;51443:14;:33::i;:44::-;51723:16;;:49;;51418:69;;-1:-1:-1;51705:12:0;;-1:-1:-1;;;;;51723:16:0;;;;51752:14;;51705:12;51723:49;51705:12;51723:49;51752:14;51723:16;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51804:10:0;;:37;;51704:68;;-1:-1:-1;51785:13:0;;-1:-1:-1;;;;;51804:10:0;;;;51827:8;;51785:13;51804:37;51785:13;51804:37;51827:8;51804:10;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51873:15:0;;:47;;51784:57;;-1:-1:-1;51854:13:0;;-1:-1:-1;;;;;51873:15:0;;;;51901:13;;51854;51873:47;51854:13;51873:47;51901:13;51873:15;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51953:16:0;;:49;;51853:67;;-1:-1:-1;51934:13:0;;-1:-1:-1;;;;;51953:16:0;;;;51982:14;;51934:13;51953:49;51934:13;51953:49;51982:14;51953:16;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51933:69;;;52025:7;52017:55;;;;-1:-1:-1;;;52017:55:0;;18568:2:1;52017:55:0;;;18550:21:1;18607:2;18587:18;;;18580:30;18646:34;18626:18;;;18619:62;-1:-1:-1;;;18697:18:1;;;18690:33;18740:19;;52017:55:0;18366:399:1;52017:55:0;52091:8;52083:51;;;;-1:-1:-1;;;52083:51:0;;18972:2:1;52083:51:0;;;18954:21:1;19011:2;18991:18;;;18984:30;19050:32;19030:18;;;19023:60;19100:18;;52083:51:0;18770:354:1;52083:51:0;52154:8;52146:56;;;;-1:-1:-1;;;52146:56:0;;19331:2:1;52146:56:0;;;19313:21:1;19370:2;19350:18;;;19343:30;19409:34;19389:18;;;19382:62;-1:-1:-1;;;19460:18:1;;;19453:33;19503:19;;52146:56:0;19129:399:1;52146:56:0;52223:8;52215:57;;;;-1:-1:-1;;;52215:57:0;;19735:2:1;52215:57:0;;;19717:21:1;19774:2;19754:18;;;19747:30;19813:34;19793:18;;;19786:62;-1:-1:-1;;;19864:18:1;;;19857:34;19908:19;;52215:57:0;19533:400:1;52215:57:0;50213:2073;;;;;;;;;;;;;;;50163:2123;:::o;3813:98::-;3871:7;3898:5;3902:1;3898;:5;:::i;53225:589::-;53375:16;;;53389:1;53375:16;;;;;;;;53351:21;;53375:16;;;;;;;;;;-1:-1:-1;53375:16:0;53351:40;;53420:4;53402;53407:1;53402:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53402:23:0;;;:7;;;;;;;;;;:23;;;;53446:15;;:22;;;-1:-1:-1;;;53446:22:0;;;;:15;;;;;:20;;:22;;;;;53402:7;;53446:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53436:4;53441:1;53436:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53436:32:0;;;:7;;;;;;;;;:32;53513:15;;53481:62;;53498:4;;53513:15;53531:11;53481:8;:62::i;:::-;53582:15;;:224;;-1:-1:-1;;;53582:224:0;;-1:-1:-1;;;;;53582:15:0;;;;:66;;:224;;53663:11;;53582:15;;53733:4;;53760;;53780:15;;53582:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53822:521;54002:15;;53970:62;;53987:4;;-1:-1:-1;;;;;54002:15:0;54020:11;53970:8;:62::i;:::-;54075:15;;54279;;54075:260;;-1:-1:-1;;;54075:260:0;;54147:4;54075:260;;;21404:34:1;21454:18;;;21447:34;;;54075:15:0;21497:18:1;;;21490:34;;;21540:18;;;21533:34;-1:-1:-1;;;;;54279:15:0;;;21583:19:1;;;21576:44;54309:15:0;21636:19:1;;;21629:35;54075:15:0;;;:31;;54114:9;;21338:19:1;;54075:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;53822:521;;:::o;206:597:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;644:6;641:1;638:13;635:91;;;714:1;709:2;700:6;689:9;685:22;681:31;674:42;635:91;-1:-1:-1;787:2:1;766:15;-1:-1:-1;;762:29:1;747:45;;;;794:2;743:54;;206:597;-1:-1:-1;;;206:597:1:o;808:131::-;-1:-1:-1;;;;;883:31:1;;873:42;;863:70;;929:1;926;919:12;944:315;1012:6;1020;1073:2;1061:9;1052:7;1048:23;1044:32;1041:52;;;1089:1;1086;1079:12;1041:52;1128:9;1115:23;1147:31;1172:5;1147:31;:::i;:::-;1197:5;1249:2;1234:18;;;;1221:32;;-1:-1:-1;;;944:315:1:o;1488:248::-;1556:6;1564;1617:2;1605:9;1596:7;1592:23;1588:32;1585:52;;;1633:1;1630;1623:12;1585:52;-1:-1:-1;;1656:23:1;;;1726:2;1711:18;;;1698:32;;-1:-1:-1;1488:248:1:o;1741:159::-;1808:20;;1868:6;1857:18;;1847:29;;1837:57;;1890:1;1887;1880:12;1837:57;1741:159;;;:::o;1905:474::-;1995:6;2003;2011;2019;2027;2080:3;2068:9;2059:7;2055:23;2051:33;2048:53;;;2097:1;2094;2087:12;2048:53;2120:28;2138:9;2120:28;:::i;:::-;2110:38;;2167:37;2200:2;2189:9;2185:18;2167:37;:::i;:::-;2157:47;;2223:37;2256:2;2245:9;2241:18;2223:37;:::i;:::-;2213:47;;2279:37;2312:2;2301:9;2297:18;2279:37;:::i;:::-;2269:47;;2335:38;2368:3;2357:9;2353:19;2335:38;:::i;:::-;2325:48;;1905:474;;;;;;;;:::o;2800:456::-;2877:6;2885;2893;2946:2;2934:9;2925:7;2921:23;2917:32;2914:52;;;2962:1;2959;2952:12;2914:52;3001:9;2988:23;3020:31;3045:5;3020:31;:::i;:::-;3070:5;-1:-1:-1;3127:2:1;3112:18;;3099:32;3140:33;3099:32;3140:33;:::i;:::-;2800:456;;3192:7;;-1:-1:-1;;;3246:2:1;3231:18;;;;3218:32;;2800:456::o;3978:247::-;4037:6;4090:2;4078:9;4069:7;4065:23;4061:32;4058:52;;;4106:1;4103;4096:12;4058:52;4145:9;4132:23;4164:31;4189:5;4164:31;:::i;4438:180::-;4497:6;4550:2;4538:9;4529:7;4525:23;4521:32;4518:52;;;4566:1;4563;4556:12;4518:52;-1:-1:-1;4589:23:1;;4438:180;-1:-1:-1;4438:180:1:o;4623:813::-;4718:6;4726;4734;4742;4750;4803:3;4791:9;4782:7;4778:23;4774:33;4771:53;;;4820:1;4817;4810:12;4771:53;4859:9;4846:23;4878:31;4903:5;4878:31;:::i;:::-;4928:5;-1:-1:-1;4985:2:1;4970:18;;4957:32;4998:33;4957:32;4998:33;:::i;:::-;5050:7;-1:-1:-1;5109:2:1;5094:18;;5081:32;5122:33;5081:32;5122:33;:::i;:::-;5174:7;-1:-1:-1;5233:2:1;5218:18;;5205:32;5246:33;5205:32;5246:33;:::i;:::-;5298:7;-1:-1:-1;5357:3:1;5342:19;;5329:33;5371;5329;5371;:::i;:::-;5423:7;5413:17;;;4623:813;;;;;;;;:::o;5441:118::-;5527:5;5520:13;5513:21;5506:5;5503:32;5493:60;;5549:1;5546;5539:12;5564:382;5629:6;5637;5690:2;5678:9;5669:7;5665:23;5661:32;5658:52;;;5706:1;5703;5696:12;5658:52;5745:9;5732:23;5764:31;5789:5;5764:31;:::i;:::-;5814:5;-1:-1:-1;5871:2:1;5856:18;;5843:32;5884:30;5843:32;5884:30;:::i;:::-;5933:7;5923:17;;;5564:382;;;;;:::o;5951:750::-;6043:6;6051;6059;6112:2;6100:9;6091:7;6087:23;6083:32;6080:52;;;6128:1;6125;6118:12;6080:52;6168:9;6155:23;6197:18;6238:2;6230:6;6227:14;6224:34;;;6254:1;6251;6244:12;6224:34;6292:6;6281:9;6277:22;6267:32;;6337:7;6330:4;6326:2;6322:13;6318:27;6308:55;;6359:1;6356;6349:12;6308:55;6399:2;6386:16;6425:2;6417:6;6414:14;6411:34;;;6441:1;6438;6431:12;6411:34;6496:7;6489:4;6479:6;6476:1;6472:14;6468:2;6464:23;6460:34;6457:47;6454:67;;;6517:1;6514;6507:12;6454:67;6548:4;6540:13;;;;-1:-1:-1;6572:6:1;-1:-1:-1;;6613:20:1;;6600:34;6643:28;6600:34;6643:28;:::i;:::-;6690:5;6680:15;;;5951:750;;;;;:::o;6706:388::-;6774:6;6782;6835:2;6823:9;6814:7;6810:23;6806:32;6803:52;;;6851:1;6848;6841:12;6803:52;6890:9;6877:23;6909:31;6934:5;6909:31;:::i;:::-;6959:5;-1:-1:-1;7016:2:1;7001:18;;6988:32;7029:33;6988:32;7029:33;:::i;7099:380::-;7178:1;7174:12;;;;7221;;;7242:61;;7296:4;7288:6;7284:17;7274:27;;7242:61;7349:2;7341:6;7338:14;7318:18;7315:38;7312:161;;7395:10;7390:3;7386:20;7383:1;7376:31;7430:4;7427:1;7420:15;7458:4;7455:1;7448:15;7312:161;;7099:380;;;:::o;7484:356::-;7686:2;7668:21;;;7705:18;;;7698:30;7764:34;7759:2;7744:18;;7737:62;7831:2;7816:18;;7484:356::o;7845:127::-;7906:10;7901:3;7897:20;7894:1;7887:31;7937:4;7934:1;7927:15;7961:4;7958:1;7951:15;7977:168;8017:7;8083:1;8079;8075:6;8071:14;8068:1;8065:21;8060:1;8053:9;8046:17;8042:45;8039:71;;;8090:18;;:::i;:::-;-1:-1:-1;8130:9:1;;7977:168::o;8150:224::-;8189:3;8217:6;8250:2;8247:1;8243:10;8280:2;8277:1;8273:10;8311:3;8307:2;8303:12;8298:3;8295:21;8292:47;;;8319:18;;:::i;:::-;8355:13;;8150:224;-1:-1:-1;;;;8150:224:1:o;8379:128::-;8419:3;8450:1;8446:6;8443:1;8440:13;8437:39;;;8456:18;;:::i;:::-;-1:-1:-1;8492:9:1;;8379:128::o;8923:251::-;8993:6;9046:2;9034:9;9025:7;9021:23;9017:32;9014:52;;;9062:1;9059;9052:12;9014:52;9094:9;9088:16;9113:31;9138:5;9113:31;:::i;10719:127::-;10780:10;10775:3;10771:20;10768:1;10761:31;10811:4;10808:1;10801:15;10835:4;10832:1;10825:15;10851:135;10890:3;10911:17;;;10908:43;;10931:18;;:::i;:::-;-1:-1:-1;10978:1:1;10967:13;;10851:135::o;10991:794::-;11213:2;11225:21;;;11198:18;;11281:22;;;11165:4;11360:6;11334:2;11319:18;;11165:4;11394:304;11408:6;11405:1;11402:13;11394:304;;;11483:6;11470:20;11503:31;11528:5;11503:31;:::i;:::-;-1:-1:-1;;;;;11559:31:1;11547:44;;11614:4;11673:15;;;;11638:12;;;;11587:1;11423:9;11394:304;;;11398:3;11715;11707:11;;;;11770:6;11763:14;11756:22;11749:4;11738:9;11734:20;11727:52;10991:794;;;;;;:::o;12532:184::-;12602:6;12655:2;12643:9;12634:7;12630:23;12626:32;12623:52;;;12671:1;12668;12661:12;12623:52;-1:-1:-1;12694:16:1;;12532:184;-1:-1:-1;12532:184:1:o;13000:245::-;13067:6;13120:2;13108:9;13099:7;13095:23;13091:32;13088:52;;;13136:1;13133;13126:12;13088:52;13168:9;13162:16;13187:28;13209:5;13187:28;:::i;13250:217::-;13290:1;13316;13306:132;;13360:10;13355:3;13351:20;13348:1;13341:31;13395:4;13392:1;13385:15;13423:4;13420:1;13413:15;13306:132;-1:-1:-1;13452:9:1;;13250:217::o;14638:401::-;14840:2;14822:21;;;14879:2;14859:18;;;14852:30;14918:34;14913:2;14898:18;;14891:62;-1:-1:-1;;;14984:2:1;14969:18;;14962:35;15029:3;15014:19;;14638:401::o;15044:399::-;15246:2;15228:21;;;15285:2;15265:18;;;15258:30;15324:34;15319:2;15304:18;;15297:62;-1:-1:-1;;;15390:2:1;15375:18;;15368:33;15433:3;15418:19;;15044:399::o;16502:125::-;16542:4;16570:1;16567;16564:8;16561:34;;;16575:18;;:::i;:::-;-1:-1:-1;16612:9:1;;16502:125::o;20070:980::-;20332:4;20380:3;20369:9;20365:19;20411:6;20400:9;20393:25;20437:2;20475:6;20470:2;20459:9;20455:18;20448:34;20518:3;20513:2;20502:9;20498:18;20491:31;20542:6;20577;20571:13;20608:6;20600;20593:22;20646:3;20635:9;20631:19;20624:26;;20685:2;20677:6;20673:15;20659:29;;20706:1;20716:195;20730:6;20727:1;20724:13;20716:195;;;20795:13;;-1:-1:-1;;;;;20791:39:1;20779:52;;20886:15;;;;20851:12;;;;20827:1;20745:9;20716:195;;;-1:-1:-1;;;;;;;20967:32:1;;;;20962:2;20947:18;;20940:60;-1:-1:-1;;;21031:3:1;21016:19;21009:35;20928:3;20070:980;-1:-1:-1;;;20070:980:1:o;21675:306::-;21763:6;21771;21779;21832:2;21820:9;21811:7;21807:23;21803:32;21800:52;;;21848:1;21845;21838:12;21800:52;21877:9;21871:16;21861:26;;21927:2;21916:9;21912:18;21906:25;21896:35;;21971:2;21960:9;21956:18;21950:25;21940:35;;21675:306;;;;;:::o
Swarm Source
ipfs://2b729ff8f092437327a76dd69151b10625daedc495f663a8b8ddee761855f080
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.