Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 MORPH
Holders
200
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
60,368.692824556066132513 MORPHValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MORPH
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-21 */ /* https://www.metamorphtoken.com/ https://twitter.com/Metamorpherc https://metamorph-token.gitbook.io/metamorph-token/ https://t.me/MetaMorphPortal */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.19; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } 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); } 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; } 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; } 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; } contract MORPH is IERC20, Ownable { using SafeMath for uint256; address private constant DEAD = address(0xdead); address private constant ZERO = address(0); address private devAddress = address(0xC9f1b74806DD822dfaeb8E827028E09BD71C39EA); address private treasuryAddress = address(0xC9f1b74806DD822dfaeb8E827028E09BD71C39EA); address private marketingAddress = address(0xC9f1b74806DD822dfaeb8E827028E09BD71C39EA); address private liquidityAddress = address(0xfAC5aE59E3cd7E591DddE912Fe236D3a2Ed97160); /** * Token Assets * name, symbol, _decimals totalSupply * This will be defined when we deploy the contract. */ string private _name = "METAMORPH"; string private _symbol = "MORPH"; uint8 private _decimals = 18; uint256 private _totalSupply = 1_000_000_000 * (10 ** _decimals); // 1 billion mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; bool public enableTrading = true; bool public enableSwap = false; uint256 public maxBalance = _totalSupply * 2 / 100; // 2% uint256 public maxTx = _totalSupply * 2 / 100; // 2% uint256 public swapThreshold = (_totalSupply * 4) / 10000; // 0.04% uint256 _buyMarketingFee = 15; uint256 _buyLiquidityFee = 0; uint256 _buyReflectionFee = 0; uint256 _buyTreasuryFee = 0; uint256 _sellMarketingFee = 15; uint256 _sellLiquidityFee = 0; uint256 _sellReflectionFee = 0; uint256 _sellTreasuryFee = 0; uint256 public marketingDebt = 0; uint256 public liquidityDebt = 0; uint256 public treasuryDebt = 0; /** * Mode & Fee * mode0 = prefee system * mode1(BuyTax: treasury=2%, reflection=3%, SellTax: treasury=2%, reflection=3%) * mode2(BuyTax: reflection=2%, SellTax: treasury=2%, reflection=2%, treasury=2% lucky holder reward=2%) * mode3(BuyTax: auto burn supply=1%, reflections to all top 50 holders=3%, * SellTax: treasury=3%, reflection=3%) * mode4(BuyTax: 0, SellTax: treasury=3%) * mode5(BuyTax: reflection=5%, SellTax: treasury=2%, reflection=4%) * mode6(Buytax: 0, SellTax: reflection=5% to buyers of this mutation) */ uint8 public mode = 0; // current mode bool public isAutoMode = false; uint256 public modeStartTime = 0; uint256 public modePeriod = 2 hours; struct Fee { uint8 treasury; uint8 reflection; uint8 lucky; uint8 burn; uint8 total; } // mode == 0: pre fees // Mode 1 Fee public mode1BuyTax = Fee({treasury: 2, reflection: 3, lucky: 0, burn: 0, total: 5}); Fee public mode1SellTax = Fee({treasury: 2, reflection: 3, lucky: 0, burn: 0, total: 5}); // Mode 2 Fee public mode2BuyTax = Fee({treasury: 0, reflection: 2, lucky: 0, burn: 0, total: 2}); Fee public mode2SellTax = Fee({treasury: 2, reflection: 2, lucky: 2, burn: 0, total: 6}); // Mode 3 Fee public mode3BuyTax = Fee({treasury: 0, reflection: 3, lucky: 0, burn: 1, total: 4}); Fee public mode3SellTax = Fee({treasury: 3, reflection: 3, lucky: 0, burn: 0, total: 6}); // Mode 4 Fee public mode4BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0}); Fee public mode4SellTax = Fee({treasury: 3, reflection: 0, lucky: 0, burn: 0, total: 3}); // Mode 5 Fee public mode5BuyTax = Fee({treasury: 0, reflection: 5, lucky: 0, burn: 0, total: 5}); Fee public mode5SellTax = Fee({treasury: 2, reflection: 4, lucky: 0, burn: 0, total: 6}); // Mode 6 Fee public mode6BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0}); Fee public mode6SellTax = Fee({treasury: 0, reflection: 5, lucky: 0, burn: 0, total: 5}); uint256 public mode6ReflectionAmount = 0; uint256 public session = 0; // session => (buyer => true/false) mapping(uint256 => mapping(address => bool)) public isMode6Buyer; address[] public mode6Buyers; Fee public buyTax; Fee public sellTax; IUniswapV2Router02 public UNISWAP_V2_ROUTER; address public UNISWAP_V2_PAIR; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isReflectionExempt; mapping(address => bool) public isBalanceExempt; mapping(address => bool) public isHolder; address[] public holders; uint256 public totalReflectionAmount; uint256 public topHolderReflectionAmount; // events event UpdateMode(uint8 mode); event Reflection(uint256 amountAdded, uint256 totalAmountAccumulated); event TopHolderReflection(uint256 amountAdded, uint256 totalAmountAccumulated); event BuyerReflection(uint256 amountAdded, uint256 totalAmountAccumulated); event BuyerReflectionTransfer(address[] buyers, uint256 amount); event LuckyReward(address holder, uint256 amount); event ChangeTradingStatus(bool status); bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor () { require(devAddress != msg.sender, "Please set a different wallet for devAddress"); UNISWAP_V2_ROUTER = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // mainnet = goerli UNISWAP_V2_PAIR = IUniswapV2Factory(UNISWAP_V2_ROUTER.factory()).createPair(address(this), UNISWAP_V2_ROUTER.WETH()); _allowances[address(this)][address(UNISWAP_V2_ROUTER)] = _totalSupply; _allowances[address(this)][address(UNISWAP_V2_PAIR)] = _totalSupply; _allowances[address(this)][msg.sender] = _totalSupply; isFeeExempt[msg.sender] = true; isFeeExempt[devAddress] = true; isFeeExempt[treasuryAddress] = true; isFeeExempt[marketingAddress] = true; isFeeExempt[liquidityAddress] = true; isFeeExempt[ZERO] = true; isFeeExempt[DEAD] = true; isFeeExempt[address(this)] = true; isFeeExempt[address(UNISWAP_V2_ROUTER)] = true; isFeeExempt[UNISWAP_V2_PAIR] = true; isReflectionExempt[address(this)] = true; isReflectionExempt[address(UNISWAP_V2_ROUTER)] = true; isReflectionExempt[UNISWAP_V2_PAIR] = true; isReflectionExempt[msg.sender] = true; isReflectionExempt[ZERO] = true; isReflectionExempt[DEAD] = true; isBalanceExempt[ZERO] = true; isBalanceExempt[DEAD] = true; isBalanceExempt[address(UNISWAP_V2_ROUTER)] = true; isBalanceExempt[address(UNISWAP_V2_PAIR)] = true; isBalanceExempt[devAddress] = true; isBalanceExempt[msg.sender] = true; isBalanceExempt[address(this)] = true; buyTax = mode1BuyTax; sellTax = mode1SellTax; uint256 devAmount = _totalSupply * 5 / 100; _balances[devAddress] = devAmount; emit Transfer(ZERO, devAddress, devAmount); isHolder[devAddress] = true; holders.push(devAddress); uint256 circulationAmount = _totalSupply - devAmount; _balances[msg.sender] = circulationAmount; emit Transfer(ZERO, msg.sender, circulationAmount); isHolder[msg.sender] = true; holders.push(msg.sender); } receive() external payable {} /** * ERC20 Standard methods with override */ function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external view returns (uint8) { return _decimals; } function symbol() external view returns (string memory) { return _symbol; } function name() external view returns (string memory) { return _name; } function balanceOf(address account) public view override returns (uint256) { uint256 totalBalance = _balances[account]; if (!isReflectionExempt[account] && totalReflectionAmount > 0 && holders.length > 2) { totalBalance += totalBalance / holders.length; } return totalBalance; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, _totalSupply); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if (_allowances[sender][msg.sender] != type(uint256).max) { require(_allowances[sender][msg.sender] >= amount, "ERC20: insufficient allowance"); _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount; } return _transferFrom(sender, recipient, amount); } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { _checkBuySell(sender, recipient); _checkLimitations(recipient, amount); if (inSwap) { return _basicTransfer(sender, recipient, amount); } if (_shouldSwapBack()) { _swapBack(); } if (!isReflectionExempt[sender]){ _claim(sender); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _updateHolders(sender); uint256 amountReceived = _shouldTakeFee(sender, recipient) ? _takeFees(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); _updateHolders(recipient); emit Transfer(sender, recipient, amount); if (isAutoMode) { autoUpdateMode(); } return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _updateHolders(sender); _balances[recipient] = _balances[recipient].add(amount); _updateHolders(recipient); emit Transfer(sender, recipient, amount); return true; } function getRandomHolderIndex(uint256 _numToFetch, uint256 _i) internal view returns (uint256) { uint256 randomNum = uint256( keccak256( abi.encode( msg.sender, tx.gasprice, block.number, block.timestamp, blockhash(block.number - 1), _numToFetch, _i ) ) ); uint256 randomIndex = (randomNum % holders.length); return randomIndex; } function _takePreFees(address sender, uint256 amount) internal returns (uint256) { uint256 _marketingFee = _sellMarketingFee; uint256 _liquidityFee = _sellLiquidityFee; uint256 _reflectionFee = _sellReflectionFee; uint256 _treasuryFee = _sellTreasuryFee; if (sender == UNISWAP_V2_PAIR) { _marketingFee = _buyMarketingFee; _liquidityFee = _buyLiquidityFee; _reflectionFee = _buyReflectionFee; _treasuryFee = _buyTreasuryFee; } uint256 _marketingAmount = amount * _marketingFee / 100; uint256 _liquidityAmount = amount * _liquidityFee / 100; uint256 _treasuryAmount = amount * _treasuryFee / 100; uint256 _reflectionFeeAmount = amount * _reflectionFee / 100; if (_reflectionFee > 0) { totalReflectionAmount += _reflectionFeeAmount; emit Reflection(_reflectionFeeAmount, totalReflectionAmount); } marketingDebt += _marketingAmount; liquidityDebt += _liquidityAmount; treasuryDebt += _treasuryAmount; _balances[address(this)] += _marketingAmount + _liquidityAmount + _treasuryAmount; uint256 _totalFeeAmount = _marketingAmount + _liquidityAmount + _treasuryAmount + _reflectionFeeAmount; return amount.sub(_totalFeeAmount); } function _takeModeFees(address sender, address recipient, uint256 amount) internal returns (uint256) { Fee memory _feeTax = sellTax; bool _isBuy = false; if (sender == UNISWAP_V2_PAIR) { _feeTax = buyTax; _isBuy = true; } uint256 feeAmount = amount * _feeTax.total / 100; if (_feeTax.treasury > 0) { uint256 _treasuryFeeAmount = feeAmount * _feeTax.treasury / _feeTax.total; treasuryDebt += _treasuryFeeAmount; _balances[address(this)] += _treasuryFeeAmount; } if (_feeTax.reflection > 0) { uint256 _reflectionFeeAmount = feeAmount * _feeTax.reflection / _feeTax.total; if (mode == 3) { topHolderReflectionAmount += _reflectionFeeAmount; emit TopHolderReflection(_reflectionFeeAmount, topHolderReflectionAmount); } else if (mode == 6) { mode6ReflectionAmount += _reflectionFeeAmount; if (!_isBuy) { emit BuyerReflection(_reflectionFeeAmount, mode6ReflectionAmount); } else if (_isBuy && !isMode6Buyer[session][recipient]) { isMode6Buyer[session][recipient] = true; mode6Buyers.push(recipient); } } else { totalReflectionAmount += _reflectionFeeAmount; emit Reflection(_reflectionFeeAmount, totalReflectionAmount); } } if (_feeTax.lucky > 0) { uint256 _luckyFeeAmount = feeAmount * _feeTax.lucky / _feeTax.total; _luckyReward(_luckyFeeAmount); } if (_feeTax.burn > 0) { uint256 _burnFeeAmount = feeAmount * _feeTax.burn / _feeTax.total; _balances[DEAD] += _burnFeeAmount; emit Transfer(address(this), DEAD, _burnFeeAmount); } return amount.sub(feeAmount); } function _takeFees(address sender, address recipient, uint256 amount) internal returns (uint256) { if (mode > 0) { return _takeModeFees(sender, recipient, amount); } else { return _takePreFees(sender, amount); } } function _shouldTakeFee(address sender, address recipient) internal view returns (bool) { return (recipient == UNISWAP_V2_PAIR && !isFeeExempt[sender]) || (sender == UNISWAP_V2_PAIR && !isFeeExempt[recipient]); } function _checkBuySell(address sender, address recipient) internal view { if (!enableTrading) { require(sender != UNISWAP_V2_PAIR && recipient != UNISWAP_V2_PAIR, "Trading is disabled!"); } } function _checkLimitations(address recipient, uint256 amount) internal view { if (!isBalanceExempt[recipient]) { require(amount <= maxTx, "Max transaction amount is limited!"); uint256 suggestBalance = balanceOf(recipient) + amount; require(suggestBalance <= maxBalance, "Max balance is limited!"); } } function _luckyReward(uint256 amount) internal { uint256 randomIndex = getRandomHolderIndex(1, 1); address luckyHolder = holders[randomIndex]; if ( luckyHolder != ZERO && luckyHolder != DEAD && luckyHolder != address(UNISWAP_V2_ROUTER) && luckyHolder != UNISWAP_V2_PAIR ) { _balances[luckyHolder] += amount; emit LuckyReward(luckyHolder, amount); emit Transfer(address(this), luckyHolder, amount); } } function _updateHolders(address holder) internal { uint256 balance = balanceOf(holder); if (balance > 0) { if (!isHolder[holder]) { isHolder[holder] = true; holders.push(holder); } } else { if (isHolder[holder]) { isHolder[holder] = false; for(uint256 i = 0; i < holders.length - 1; i++) { if (holders[i] == holder) { holders[i] = holders[holders.length - 1]; } } holders.pop(); } } } function _claim(address holder) internal { if (totalReflectionAmount > 0) { uint256 oneReflection = totalReflectionAmount / holders.length; totalReflectionAmount -= oneReflection; _balances[holder] += oneReflection; } } function _shouldSwapBack() internal view returns (bool) { return msg.sender != UNISWAP_V2_PAIR && enableSwap && !inSwap && balanceOf(address(this)) >= swapThreshold; } function _swapBack() internal swapping { uint256 amountToSwap = balanceOf(address(this)); approve(address(UNISWAP_V2_ROUTER), amountToSwap); // swap address[] memory path = new address[](2); path[0] = address(this); path[1] = UNISWAP_V2_ROUTER.WETH(); UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountETH = address(this).balance; _sendFeeETH(amountETH, amountToSwap); } function _sendFeeETH(uint256 amount, uint256 swapAmount) internal { uint256 totalDebt = marketingDebt + liquidityDebt + treasuryDebt; uint256 marketingProfit = amount * marketingDebt / totalDebt; uint256 marketingSwapAmount = swapAmount * marketingDebt / totalDebt; uint256 liquidityProfit = amount * liquidityDebt / totalDebt; uint256 liquiditySwapAmount = swapAmount * liquidityDebt / totalDebt; uint256 treasuryProfit = amount - marketingProfit - liquidityProfit; uint256 treasurySwapAmount = swapAmount - marketingSwapAmount - liquiditySwapAmount; if (marketingProfit > 0) { payable(marketingAddress).transfer(marketingProfit); marketingDebt -= marketingSwapAmount; } if (liquidityProfit > 0) { payable(liquidityAddress).transfer(liquidityProfit); liquidityDebt -= liquiditySwapAmount; } if (treasuryProfit > 0) { payable(treasuryAddress).transfer(treasuryProfit); treasuryDebt -= treasurySwapAmount; } } function _mode6Distribution() internal { session += 1; uint256 _buyersLen = mode6Buyers.length; if (mode6ReflectionAmount == 0 || _buyersLen == 0) return; uint256 _buyerReflection = mode6ReflectionAmount / _buyersLen; for (uint256 i = 0; i < _buyersLen; i++) { address _buyer = mode6Buyers[i]; _balances[_buyer] += _buyerReflection; } mode6ReflectionAmount = 0; delete mode6Buyers; emit BuyerReflectionTransfer(mode6Buyers, _buyerReflection); } function _changeMode(uint8 mode_) internal { if (mode == 6 && mode_ != 6) { _mode6Distribution(); } if (mode_ == 2) { buyTax = mode2BuyTax; sellTax = mode2SellTax; } else if (mode_ == 3) { buyTax = mode3BuyTax; sellTax = mode3SellTax; } else if (mode_ == 4) { buyTax = mode4BuyTax; sellTax = mode4SellTax; } else if (mode_ == 5) { buyTax = mode5BuyTax; sellTax = mode5SellTax; } else if (mode_ == 6) { buyTax = mode6BuyTax; sellTax = mode6SellTax; } else { buyTax = mode1BuyTax; sellTax = mode1SellTax; } mode = mode_; modeStartTime = block.timestamp; emit UpdateMode(mode_); } function autoUpdateMode() internal { uint8 _currentMode = mode; if (_currentMode == 0) { return; } uint256 deltaTime = block.timestamp - modeStartTime; if (deltaTime < modePeriod) { return; } _currentMode += 1; if (_currentMode > 6) { _currentMode = 1; } _changeMode(_currentMode); } function manualUpdateMode(uint8 mode_) external onlyOwner { _changeMode(mode_); } function setAutoMode(bool isAuto_) external onlyOwner { isAutoMode = isAuto_; } function rewardTopHolders(address[] calldata _topHolders) public onlyOwner { require(topHolderReflectionAmount > 0, "Reward should be available"); uint256 oneReward = topHolderReflectionAmount / _topHolders.length; topHolderReflectionAmount = 0; for (uint8 i = 0; i < _topHolders.length; i++) { _balances[_topHolders[i]] += oneReward; emit Transfer(address(this), _topHolders[i], oneReward); } } function setFeeReceivers(address treasury_) external onlyOwner { treasuryAddress = treasury_; } function setIsFeeExempt(address holder, bool exempt) external onlyOwner { isFeeExempt[holder] = exempt; } function setIsReflectionExempt(address holder, bool exempt) external onlyOwner { isReflectionExempt[holder] = exempt; } function setIsBalanceExempt(address holder, bool exempt) external onlyOwner { isBalanceExempt[holder] = exempt; } function changeTradingStatus(bool _status) external onlyOwner { enableTrading = _status; emit ChangeTradingStatus(_status); } function updatePreFees( uint256 buyMarketingFee_, uint256 buyLiquidityFee_, uint256 buyReflectionFee_, uint256 buyTreasuryFee_, uint256 sellMarketingFee_, uint256 sellLiquidityFee_, uint256 sellReflectionFee_, uint256 sellTreasuryFee_ ) external onlyOwner { _buyMarketingFee = buyMarketingFee_; _buyLiquidityFee = buyLiquidityFee_; _buyReflectionFee = buyReflectionFee_; _buyTreasuryFee = buyTreasuryFee_; _sellMarketingFee = sellMarketingFee_; _sellLiquidityFee = sellLiquidityFee_; _sellReflectionFee = sellReflectionFee_; _sellTreasuryFee = sellTreasuryFee_; } function updateSwapThreshold(uint256 _swapThreshold) external onlyOwner { swapThreshold = _swapThreshold; } function manualSwapBack() external onlyOwner { if (_shouldSwapBack()) { _swapBack(); } } function changeSwapStatus(bool _enableSwap) external onlyOwner { enableSwap = _enableSwap; } }
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":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"BuyerReflection","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"buyers","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BuyerReflectionTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ChangeTradingStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LuckyReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"Reflection","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"TopHolderReflection","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":false,"internalType":"uint8","name":"mode","type":"uint8"}],"name":"UpdateMode","type":"event"},{"inputs":[],"name":"UNISWAP_V2_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enableSwap","type":"bool"}],"name":"changeSwapStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"changeTradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isAutoMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBalanceExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"isMode6Buyer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReflectionExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"mode_","type":"uint8"}],"name":"manualUpdateMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode1BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode1SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode2BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode2SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode3BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode3SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode4BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode4SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode5BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode5SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode6BuyTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"mode6Buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode6ReflectionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mode6SellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modeStartTime","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":[{"internalType":"address[]","name":"_topHolders","type":"address[]"}],"name":"rewardTopHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint8","name":"treasury","type":"uint8"},{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"lucky","type":"uint8"},{"internalType":"uint8","name":"burn","type":"uint8"},{"internalType":"uint8","name":"total","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"session","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isAuto_","type":"bool"}],"name":"setAutoMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"treasury_","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsBalanceExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsReflectionExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","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":"topHolderReflectionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionAmount","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingFee_","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee_","type":"uint256"},{"internalType":"uint256","name":"buyReflectionFee_","type":"uint256"},{"internalType":"uint256","name":"buyTreasuryFee_","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee_","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee_","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee_","type":"uint256"},{"internalType":"uint256","name":"sellTreasuryFee_","type":"uint256"}],"name":"updatePreFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
600180546001600160a01b031990811673c9f1b74806dd822dfaeb8e827028e09bd71c39ea908117909255600280548216831790556003805482169092179091556004805490911673fac5ae59e3cd7e591ddde912fe236d3a2ed9716017905560c0604052600960809081526809a8aa8829a9ea4a0960bb1b60a0526005906200008a908262000bab565b5060408051808201909152600581526409a9ea4a0960db1b6020820152600690620000b6908262000bab565b506007805460ff19166012908117909155620000d490600a62000d8c565b620000e490633b9aca0062000da4565b6008819055600b805461ffff191660011790556064906200010790600262000da4565b62000113919062000dbe565b600c556064600854600262000129919062000da4565b62000135919062000dbe565b600d5561271060085460046200014c919062000da4565b62000158919062000dbe565b600e55600f8080556000601081905560118190556012819055601391909155601481905560158190556016819055601781905560188190556019819055601a805461ffff19169055601b819055611c20601c556040805160a08082018352600280835260036020808501829052848601879052606080860188905260056080968701819052601d805464ffffffffff1990811664050000030290811790925589518089018b52878152808601879052808b018c90528085018c90528901839052601e8054821690921790915588518088018a528a8152808501879052808a018b90528084018b90528801869052601f8054821664020000020017905588518088018a52868152808501879052808a018790528084018b905260069089018190528454821664060002020217855589518089018b528b8152808601879052808b018c90526001818601526004908a018190526021805484166404010003001790558a51808a018c52878152808701889052808c018d90528086018d90528a018290526022805484166406000003031790558a51808a018c528c81528087018d9052808c018d90528086018d90528a018c905260238054841690558a51808a018c528781528087018d9052808c018d90528086018d90528a019690965260248054831664030000000317905589518089018b528b8152808601849052808b018c90528085018c905289018390526025805483166405000005009081179091558a51808a018c5297885287860196909652868a018b90528684018b905295880195909552602680548616640600000402179055875180870189528981528084018a90528089018a90528083018a9052870189905260278054861690558751958601885288865291850182905295840187905294830186905291909201929092526028805490911690911790556029819055602a553480156200041657600080fd5b50620004223362000ab6565b600154336001600160a01b0390911603620004985760405162461bcd60e51b815260206004820152602c60248201527f506c6561736520736574206120646966666572656e742077616c6c657420666f60448201526b72206465764164647265737360a01b606482015260840160405180910390fd5b602f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620004fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000523919062000de1565b6001600160a01b031663c9c6539630602f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000586573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005ac919062000de1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620005fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000620919062000de1565b603080546001600160a01b0319166001600160a01b0392831617815560088054306000818152600a60209081526040808320602f80548a168552908352818420869055875489168452818420869055338085528285209690965560318352818420805460ff19908116600190811790925581548b16865283862080548216831790556002548b16865283862080548216831790556003548b16865283862080548216831790556004548b16865283862080548216831790557f346dc135129bcc5b8e8f6ff902940f16dc0729d02b27118b912aa326da88b83180548216831790557f4f9a2c652ebaf9d1db072cb8ef9511c8cb6c79d042e75e83f7fe35042ec170a68054821683179055868652838620805482168317905582548b168652838620805482168317905589548b168652838620805482168317905586865260328552838620805482168317905582548b168652838620805482168317905589548b168652838620805482168317905587865283862080548216831790557ebcd6ff29ae71d399fb597d99792fa72d0863bd723b9ab11f79d0b8d8ac5bc880548216831790557f7a942cd7bef21c69783e4473b4d8887a82a2f0704301de55f33fbf133b169156805482168317905560339094527f44496df070da3f045064f6d6f394484a8de10d5710290d619b67d975ec89320f80548516821790557f797464dbf411727de94027e1fdf88bb523a37123d715877a38fefe312b70e15a80548516821790559054891684528184208054841682179055965488168352808320805483168817905586549097168252868220805482168717905592815285812080548416861790559081529384208054909116909217909155601d54602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911760ff60201b199081166401000000009a8b900488168b0217909855601e54602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055546064906200095890600562000da4565b62000964919062000dbe565b600180546001600160a01b0390811660009081526009602052604080822085905592549251939450911691600080516020620041d483398151915290620009ae9085815260200190565b60405180910390a3600180546001600160a01b039081166000908152603460205260408120805460ff19168417905582546035805494850181558252600080516020620041b483398151915290930180546001600160a01b0319169390921692909217905560085462000a2390839062000e0c565b33600081815260096020526040808220849055519293509091600080516020620041d48339815191529062000a5b9085815260200190565b60405180910390a35050336000818152603460205260408120805460ff19166001908117909155603580549182018155909152600080516020620041b48339815191520180546001600160a01b031916909117905562000e22565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000b3157607f821691505b60208210810362000b5257634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000ba657600081815260208120601f850160051c8101602086101562000b815750805b601f850160051c820191505b8181101562000ba25782815560010162000b8d565b5050505b505050565b81516001600160401b0381111562000bc75762000bc762000b06565b62000bdf8162000bd8845462000b1c565b8462000b58565b602080601f83116001811462000c17576000841562000bfe5750858301515b600019600386901b1c1916600185901b17855562000ba2565b600085815260208120601f198616915b8281101562000c485788860151825594840194600190910190840162000c27565b508582101562000c675787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000cce57816000190482111562000cb25762000cb262000c77565b8085161562000cc057918102915b93841c939080029062000c92565b509250929050565b60008262000ce75750600162000d86565b8162000cf65750600062000d86565b816001811462000d0f576002811462000d1a5762000d3a565b600191505062000d86565b60ff84111562000d2e5762000d2e62000c77565b50506001821b62000d86565b5060208310610133831016604e8410600b841016171562000d5f575081810a62000d86565b62000d6b838362000c8d565b806000190482111562000d825762000d8262000c77565b0290505b92915050565b600062000d9d60ff84168362000cd6565b9392505050565b808202811582820484141762000d865762000d8662000c77565b60008262000ddc57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562000df457600080fd5b81516001600160a01b038116811462000d9d57600080fd5b8181038181111562000d865762000d8662000c77565b6133828062000e326000396000f3fe6080604052600436106103c65760003560e01c806370a08231116101f2578063b1bd37741161010d578063e01bb688116100a0578063f40acc3d1161006f578063f40acc3d14610d28578063f5db574214610d48578063f9c683c014610d89578063ff131b4e14610da957600080fd5b8063e01bb68814610c6c578063e192d48514610c8c578063e839363b14610cc7578063f2fde38b14610d0857600080fd5b8063cc274b29116100dc578063cc274b2914610bc0578063d4d7b19a14610be0578063d6db1d8214610c10578063dd62ed3e14610c2657600080fd5b8063b1bd377414610acd578063b876e5e214610afd578063c15d854f14610b3e578063cc1776d314610b7f57600080fd5b806393e6b04a11610185578063a2d2be8411610154578063a2d2be8414610a0b578063a4d9ba2514610a4c578063a82ed9ec14610a8d578063a9059cbb14610aad57600080fd5b806393e6b04a1461096657806394da5dbf1461098557806395d89b41146109b55780639dee70dd146109ca57600080fd5b806376e88ddb116101c157806376e88ddb146108ee578063834a33cf1461090e5780638a8c523c1461092e5780638da5cb5b1461094857600080fd5b806370a082311461088d578063715018a6146108ad57806373ad468a146108c25780637437681e146108d857600080fd5b80632c957aa0116102e2578063571ac8b01161027557806364c653c11161024457806364c653c11461082c578063658d4b7f1461084257806366eb3785146108625780636cf3fdb91461087757600080fd5b8063571ac8b0146107ca578063573d8cf9146107ea5780635e3568b814610800578063615494be1461081657600080fd5b80634f7041a5116102b15780634f7041a51461073357806351fdefc9146107745780635220179f1461078a578063526b13fd146107aa57600080fd5b80632c957aa0146106ab578063313ce567146106cb5780633307d372146106e35780633f4218e01461070357600080fd5b8063166319eb1161035a578063295a521211610329578063295a5212146105ff578063296914481461062b5780632a11ced01461064a5780632c7c31491461066a57600080fd5b8063166319eb1461056757806318160ddd14610589578063204a68361461059e57806323b872dd146105df57600080fd5b8063095ea7b311610396578063095ea7b3146104a85780631029ce90146104d8578063122eff2b14610510578063142a27111461055157600080fd5b8062adef68146103d25780630445b6671461044c578063057a2c0e1461047057806306fdde031461048657600080fd5b366103cd57005b600080fd5b3480156103de57600080fd5b50601d546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0015b60405180910390f35b34801561045857600080fd5b50610462600e5481565b604051908152602001610443565b34801561047c57600080fd5b50610462601b5481565b34801561049257600080fd5b5061049b610dea565b6040516104439190612e47565b3480156104b457600080fd5b506104c86104c3366004612eaa565b610e7c565b6040519015158152602001610443565b3480156104e457600080fd5b506104f86104f3366004612ed6565b610ee9565b6040516001600160a01b039091168152602001610443565b34801561051c57600080fd5b506023546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561055d57600080fd5b5061046260375481565b34801561057357600080fd5b50610587610582366004612eef565b610f13565b005b34801561059557600080fd5b50600854610462565b3480156105aa57600080fd5b50601f546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156105eb57600080fd5b506104c86105fa366004612f44565b610f41565b34801561060b57600080fd5b50601a546106199060ff1681565b60405160ff9091168152602001610443565b34801561063757600080fd5b50600b546104c890610100900460ff1681565b34801561065657600080fd5b506104f8610665366004612ed6565b61104e565b34801561067657600080fd5b506026546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156106b757600080fd5b506105876106c6366004612f9a565b61105e565b3480156106d757600080fd5b5060075460ff16610619565b3480156106ef57600080fd5b506105876106fe366004612f9a565b611091565b34801561070f57600080fd5b506104c861071e366004612fcf565b60316020526000908152604090205460ff1681565b34801561073f57600080fd5b50602d546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561078057600080fd5b5061046260175481565b34801561079657600080fd5b506105876107a5366004612fec565b6110c4565b3480156107b657600080fd5b506105876107c536600461300f565b6110d8565b3480156107d657600080fd5b506104c86107e5366004612fcf565b611128565b3480156107f657600080fd5b50610462601c5481565b34801561080c57600080fd5b50610462602a5481565b34801561082257600080fd5b5061046260365481565b34801561083857600080fd5b5061046260185481565b34801561084e57600080fd5b5061058761085d366004612f9a565b611136565b34801561086e57600080fd5b50610587611169565b34801561088357600080fd5b5061046260195481565b34801561089957600080fd5b506104626108a8366004612fcf565b611188565b3480156108b957600080fd5b506105876111e8565b3480156108ce57600080fd5b50610462600c5481565b3480156108e457600080fd5b50610462600d5481565b3480156108fa57600080fd5b5061058761090936600461300f565b6111fa565b34801561091a57600080fd5b5061058761092936600461300f565b61121c565b34801561093a57600080fd5b50600b546104c89060ff1681565b34801561095457600080fd5b506000546001600160a01b03166104f8565b34801561097257600080fd5b50601a546104c890610100900460ff1681565b34801561099157600080fd5b506104c86109a0366004612fcf565b60336020526000908152604090205460ff1681565b3480156109c157600080fd5b5061049b61123e565b3480156109d657600080fd5b50601e546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a1757600080fd5b506027546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a5857600080fd5b506025546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a9957600080fd5b50602f546104f8906001600160a01b031681565b348015610ab957600080fd5b506104c8610ac8366004612eaa565b61124d565b348015610ad957600080fd5b506104c8610ae8366004612fcf565b60326020526000908152604090205460ff1681565b348015610b0957600080fd5b506024546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610b4a57600080fd5b506020546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610b8b57600080fd5b50602e546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610bcc57600080fd5b50610587610bdb366004612ed6565b61125a565b348015610bec57600080fd5b506104c8610bfb366004612fcf565b60346020526000908152604090205460ff1681565b348015610c1c57600080fd5b5061046260295481565b348015610c3257600080fd5b50610462610c4136600461302a565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610c7857600080fd5b50610587610c87366004612fcf565b611267565b348015610c9857600080fd5b506104c8610ca7366004613063565b602b60209081526000928352604080842090915290825290205460ff1681565b348015610cd357600080fd5b506022546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610d1457600080fd5b50610587610d23366004612fcf565b611291565b348015610d3457600080fd5b506030546104f8906001600160a01b031681565b348015610d5457600080fd5b506028546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610d9557600080fd5b50610587610da4366004613088565b611307565b348015610db557600080fd5b506021546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b606060058054610df9906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e25906130fd565b8015610e725780601f10610e4757610100808354040283529160200191610e72565b820191906000526020600020905b815481529060010190602001808311610e5557829003601f168201915b5050505050905090565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ed79086815260200190565b60405180910390a35060015b92915050565b602c8181548110610ef957600080fd5b6000918252602090912001546001600160a01b0316905081565b610f1b611468565b600f97909755601095909555601193909355601291909155601355601455601555601655565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914611039576001600160a01b0384166000908152600a60209081526040808320338452909152902054821115610fe55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152600a6020908152604080832033845290915290205461101490839061314d565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b6110448484846114c2565b90505b9392505050565b60358181548110610ef957600080fd5b611066611468565b6001600160a01b03919091166000908152603360205260409020805460ff1916911515919091179055565b611099611468565b6001600160a01b03919091166000908152603260205260409020805460ff1916911515919091179055565b6110cc611468565b6110d58161166e565b50565b6110e0611468565b600b805460ff19168215159081179091556040519081527fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223906020015b60405180910390a150565b6000610ee382600854610e7c565b61113e611468565b6001600160a01b03919091166000908152603160205260409020805460ff1916911515919091179055565b611171611468565b611179611b4b565b1561118657611186611b9a565b565b6001600160a01b038116600090815260096020908152604080832054603290925282205460ff161580156111be57506000603654115b80156111cc57506035546002105b15610ee3576035546111de9082613176565b611047908261318a565b6111f0611468565b6111866000611d27565b611202611468565b600b80549115156101000261ff0019909216919091179055565b611224611468565b601a80549115156101000261ff0019909216919091179055565b606060068054610df9906130fd565b60006110473384846114c2565b611262611468565b600e55565b61126f611468565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611299611468565b6001600160a01b0381166112fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fdc565b6110d581611d27565b61130f611468565b6000603754116113615760405162461bcd60e51b815260206004820152601a60248201527f5265776172642073686f756c6420626520617661696c61626c650000000000006044820152606401610fdc565b603754600090611372908390613176565b600060378190559091505b60ff811683111561146257816009600086868560ff168181106113a2576113a261319d565b90506020020160208101906113b79190612fcf565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546113e6919061318a565b909155508490508360ff83168181106114015761140161319d565b90506020020160208101906114169190612fcf565b6001600160a01b0316306001600160a01b031660008051602061332d8339815191528460405161144891815260200190565b60405180910390a38061145a816131b3565b91505061137d565b50505050565b6000546001600160a01b031633146111865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fdc565b60006114ce8484611d77565b6114d88383611df4565b60385460ff16156114f5576114ee848484611ee0565b9050611047565b6114fd611b4b565b1561150a5761150a611b9a565b6001600160a01b03841660009081526032602052604090205460ff166115335761153384611fdd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260099091529190912054611585918490612041565b6001600160a01b0385166000908152600960205260409020556115a78461206d565b60006115b3858561225b565b6115bd57826115c8565b6115c88585856122d4565b6001600160a01b0385166000908152600960205260409020549091506115ee90826122f7565b6001600160a01b0385166000908152600960205260409020556116108461206d565b836001600160a01b0316856001600160a01b031660008051602061332d8339815191528560405161164391815260200190565b60405180910390a3601a54610100900460ff161561166357611663612303565b506001949350505050565b601a5460ff16600614801561168757508060ff16600614155b156116945761169461235c565b8060ff1660020361175457601f54602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602054602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff1660030361181457602154602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602254602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff166004036118d457602354602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602454602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff1660050361199457602554602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602654602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff16600603611a5457602754602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602854602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b601d54602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855601e54602e805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790555b601a805460ff191660ff831690811790915542601b556040519081527f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e869060200161111d565b6030546000906001600160a01b03163314801590611b705750600b54610100900460ff165b8015611b7f575060385460ff16155b8015611b955750600e54611b9230611188565b10155b905090565b6038805460ff191660011790556000611bb230611188565b602f54909150611bcb906001600160a01b031682610e7c565b506040805160028082526060820183526000926020830190803683370190505090503081600081518110611c0157611c0161319d565b6001600160a01b03928316602091820292909201810191909152602f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e91906131d2565b81600181518110611c9157611c9161319d565b6001600160a01b039283166020918202929092010152602f5460405163791ac94760e01b815291169063791ac94790611cd79085906000908690309042906004016131ef565b600060405180830381600087803b158015611cf157600080fd5b505af1158015611d05573d6000803e3d6000fd5b505050506000479050611d188184612461565b50506038805460ff1916905550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b5460ff16611df0576030546001600160a01b03838116911614801590611dad57506030546001600160a01b03828116911614155b611df05760405162461bcd60e51b815260206004820152601460248201527354726164696e672069732064697361626c65642160601b6044820152606401610fdc565b5050565b6001600160a01b03821660009081526033602052604090205460ff16611df057600d54811115611e715760405162461bcd60e51b815260206004820152602260248201527f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d697465604482015261642160f01b6064820152608401610fdc565b600081611e7d84611188565b611e87919061318a565b9050600c54811115611edb5760405162461bcd60e51b815260206004820152601760248201527f4d61782062616c616e6365206973206c696d69746564210000000000000000006044820152606401610fdc565b505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600990915291822054611f31918490612041565b6001600160a01b038516600090815260096020526040902055611f538461206d565b6001600160a01b038316600090815260096020526040902054611f7690836122f7565b6001600160a01b038416600090815260096020526040902055611f988361206d565b826001600160a01b0316846001600160a01b031660008051602061332d83398151915284604051611fcb91815260200190565b60405180910390a35060019392505050565b603654156110d557603554603654600091611ff791613176565b9050806036600082825461200b919061314d565b90915550506001600160a01b0382166000908152600960205260408120805483929061203890849061318a565b90915550505050565b600081848411156120655760405162461bcd60e51b8152600401610fdc9190612e47565b505050900390565b600061207882611188565b90508015612107576001600160a01b03821660009081526034602052604090205460ff16611df057506001600160a01b03166000818152603460205260408120805460ff191660019081179091556035805491820181559091527fcfa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d0180546001600160a01b0319169091179055565b6001600160a01b03821660009081526034602052604090205460ff1615611df0576001600160a01b0382166000908152603460205260408120805460ff191690555b6035546121589060019061314d565b81101561222357826001600160a01b03166035828154811061217c5761217c61319d565b6000918252602090912001546001600160a01b03160361221157603580546121a69060019061314d565b815481106121b6576121b661319d565b600091825260209091200154603580546001600160a01b0390921691839081106121e2576121e261319d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061221b81613260565b915050612149565b50603580548061223557612235613279565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6030546000906001600160a01b03838116911614801561229457506001600160a01b03831660009081526031602052604090205460ff16155b8061104757506030546001600160a01b0384811691161480156110475750506001600160a01b031660009081526031602052604090205460ff1615919050565b601a5460009060ff16156122ed576114ee84848461263e565b6114ee8483612a91565b6000611047828461318a565b601a5460ff1660008190036123155750565b6000601b5442612325919061314d565b9050601c54811015612335575050565b61234060018361328f565b915060068260ff16111561235357600191505b611df08261166e565b6001602a600082825461236f919061318a565b9091555050602c546029541580612384575080155b1561238c5750565b60008160295461239c9190613176565b905060005b8281101561240f576000602c82815481106123be576123be61319d565b60009182526020808320909101546001600160a01b03168083526009909152604082208054919350859290916123f590849061318a565b90915550829150612407905081613260565b9150506123a1565b506000602981905561242390602c90612e15565b7fde01858d260cb2aab5a7bfe1b02ccad5a0b083cdb1b4a8c642c7d4d7d85f2085602c826040516124559291906132a8565b60405180910390a15050565b6000601954601854601754612476919061318a565b612480919061318a565b9050600081601754856124939190613301565b61249d9190613176565b9050600082601754856124b09190613301565b6124ba9190613176565b9050600083601854876124cd9190613301565b6124d79190613176565b9050600084601854876124ea9190613301565b6124f49190613176565b9050600082612503868a61314d565b61250d919061314d565b905060008261251c868a61314d565b612526919061314d565b90508515612581576003546040516001600160a01b039091169087156108fc029088906000818181858888f19350505050158015612568573d6000803e3d6000fd5b50846017600082825461257b919061314d565b90915550505b83156125da576004546040516001600160a01b039091169085156108fc029086906000818181858888f193505050501580156125c1573d6000803e3d6000fd5b5082601860008282546125d4919061314d565b90915550505b8115612633576002546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561261a573d6000803e3d6000fd5b50806019600082825461262d919061314d565b90915550505b505050505050505050565b6040805160a081018252602e5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900490911660808201526030546000919082906001600160a01b03908116908716036126f75750506040805160a081018252602d5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b9004909116608082015260015b60006064836080015160ff168661270e9190613301565b6127189190613176565b835190915060ff161561278b576000836080015160ff16846000015160ff16836127429190613301565b61274c9190613176565b90508060196000828254612760919061318a565b9091555050306000908152600960205260408120805483929061278490849061318a565b9091555050505b602083015160ff1615612996576000836080015160ff16846020015160ff16836127b59190613301565b6127bf9190613176565b601a5490915060ff166003036128295780603760008282546127e1919061318a565b90915550506037546040805183815260208101929092527fe67cffa4bbbf9dd312cee0b0eecb1a9ad54f728b39320b7a745389859bf59cae91015b60405180910390a1612994565b601a5460ff1660060361293f578060296000828254612848919061318a565b9091555083905061288d576029546040805183815260208101929092527fbc105e9024dec52ec78803e23877e0b53040838469fd53247dae9c4a7828a268910161281c565b8280156128c05750602a546000908152602b602090815260408083206001600160a01b038b16845290915290205460ff16155b1561293a57602a546000908152602b602090815260408083206001600160a01b038b1680855292528220805460ff19166001908117909155602c805491820181559092527f7416c943b4a09859521022fd2e90eac0dd9026dad28fa317782a135f28a8609190910180546001600160a01b03191690911790555b612994565b8060366000828254612951919061318a565b90915550506036546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b505b604083015160ff16156129d7576000836080015160ff16846040015160ff16836129c09190613301565b6129ca9190613176565b90506129d581612c54565b505b606083015160ff1615612a7c576000836080015160ff16846060015160ff1683612a019190613301565b612a0b9190613176565b61dead600090815260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580549293508392909190612a4e90849061318a565b909155505060405181815261dead90309060008051602061332d8339815191529060200160405180910390a3505b612a868582612d84565b979650505050505050565b601354601454601554601654603054600094939291906001600160a01b0390811690881603612acf57600f5493506010549250601154915060125490505b60006064612add8689613301565b612ae79190613176565b905060006064612af7868a613301565b612b019190613176565b905060006064612b11858b613301565b612b1b9190613176565b905060006064612b2b878c613301565b612b359190613176565b90508515612b92578060366000828254612b4f919061318a565b90915550506036546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b8360176000828254612ba4919061318a565b925050819055508260186000828254612bbd919061318a565b925050819055508160196000828254612bd6919061318a565b90915550829050612be7848661318a565b612bf1919061318a565b3060009081526009602052604081208054909190612c1090849061318a565b90915550600090508183612c24868861318a565b612c2e919061318a565b612c38919061318a565b9050612c448b82612d84565b9c9b505050505050505050505050565b6000612c61600180612d90565b9050600060358281548110612c7857612c7861319d565b6000918252602090912001546001600160a01b031690508015801590612ca957506001600160a01b03811661dead14155b8015612cc35750602f546001600160a01b03828116911614155b8015612cdd57506030546001600160a01b03828116911614155b15611edb576001600160a01b03811660009081526009602052604081208054859290612d0a90849061318a565b9091555050604080516001600160a01b0383168152602081018590527fe4cbe3422132330d6356a5b83b4e8887027dcfada3b80fec7e557cf26431470d910160405180910390a16040518381526001600160a01b03821690309060008051602061332d8339815191529060200160405180910390a3505050565b6000611047828461314d565b600080333a4342612da260018361314d565b604080516001600160a01b039096166020870152850193909352606084019190915260808301524060a082015260c0810185905260e081018490526101000160408051601f198184030181529190528051602090910120603554909150600090612e0c9083613318565b95945050505050565b50805460008255906000526020600020908101906110d591905b80821115612e435760008155600101612e2f565b5090565b600060208083528351808285015260005b81811015612e7457858101830151858201604001528201612e58565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110d557600080fd5b60008060408385031215612ebd57600080fd5b8235612ec881612e95565b946020939093013593505050565b600060208284031215612ee857600080fd5b5035919050565b600080600080600080600080610100898b031215612f0c57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080600060608486031215612f5957600080fd5b8335612f6481612e95565b92506020840135612f7481612e95565b929592945050506040919091013590565b80358015158114612f9557600080fd5b919050565b60008060408385031215612fad57600080fd5b8235612fb881612e95565b9150612fc660208401612f85565b90509250929050565b600060208284031215612fe157600080fd5b813561104781612e95565b600060208284031215612ffe57600080fd5b813560ff8116811461104757600080fd5b60006020828403121561302157600080fd5b61104782612f85565b6000806040838503121561303d57600080fd5b823561304881612e95565b9150602083013561305881612e95565b809150509250929050565b6000806040838503121561307657600080fd5b82359150602083013561305881612e95565b6000806020838503121561309b57600080fd5b823567ffffffffffffffff808211156130b357600080fd5b818501915085601f8301126130c757600080fd5b8135818111156130d657600080fd5b8660208260051b85010111156130eb57600080fd5b60209290920196919550909350505050565b600181811c9082168061311157607f821691505b60208210810361313157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ee357610ee3613137565b634e487b7160e01b600052601260045260246000fd5b60008261318557613185613160565b500490565b80820180821115610ee357610ee3613137565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036131c9576131c9613137565b60010192915050565b6000602082840312156131e457600080fd5b815161104781612e95565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561323f5784516001600160a01b03168352938301939183019160010161321a565b50506001600160a01b03969096166060850152505050608001529392505050565b60006001820161327257613272613137565b5060010190565b634e487b7160e01b600052603160045260246000fd5b60ff8181168382160190811115610ee357610ee3613137565b6000604082016040835280855480835260608501915086600052602092508260002060005b828110156132f25781546001600160a01b0316845292840192600191820191016132cd565b50505092019290925292915050565b8082028115828204841417610ee357610ee3613137565b60008261332757613327613160565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205766e92d41d77fa1e234cec206662695fa65d28e984bdc06251373d41fae09d664736f6c63430008130033cfa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34dddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x6080604052600436106103c65760003560e01c806370a08231116101f2578063b1bd37741161010d578063e01bb688116100a0578063f40acc3d1161006f578063f40acc3d14610d28578063f5db574214610d48578063f9c683c014610d89578063ff131b4e14610da957600080fd5b8063e01bb68814610c6c578063e192d48514610c8c578063e839363b14610cc7578063f2fde38b14610d0857600080fd5b8063cc274b29116100dc578063cc274b2914610bc0578063d4d7b19a14610be0578063d6db1d8214610c10578063dd62ed3e14610c2657600080fd5b8063b1bd377414610acd578063b876e5e214610afd578063c15d854f14610b3e578063cc1776d314610b7f57600080fd5b806393e6b04a11610185578063a2d2be8411610154578063a2d2be8414610a0b578063a4d9ba2514610a4c578063a82ed9ec14610a8d578063a9059cbb14610aad57600080fd5b806393e6b04a1461096657806394da5dbf1461098557806395d89b41146109b55780639dee70dd146109ca57600080fd5b806376e88ddb116101c157806376e88ddb146108ee578063834a33cf1461090e5780638a8c523c1461092e5780638da5cb5b1461094857600080fd5b806370a082311461088d578063715018a6146108ad57806373ad468a146108c25780637437681e146108d857600080fd5b80632c957aa0116102e2578063571ac8b01161027557806364c653c11161024457806364c653c11461082c578063658d4b7f1461084257806366eb3785146108625780636cf3fdb91461087757600080fd5b8063571ac8b0146107ca578063573d8cf9146107ea5780635e3568b814610800578063615494be1461081657600080fd5b80634f7041a5116102b15780634f7041a51461073357806351fdefc9146107745780635220179f1461078a578063526b13fd146107aa57600080fd5b80632c957aa0146106ab578063313ce567146106cb5780633307d372146106e35780633f4218e01461070357600080fd5b8063166319eb1161035a578063295a521211610329578063295a5212146105ff578063296914481461062b5780632a11ced01461064a5780632c7c31491461066a57600080fd5b8063166319eb1461056757806318160ddd14610589578063204a68361461059e57806323b872dd146105df57600080fd5b8063095ea7b311610396578063095ea7b3146104a85780631029ce90146104d8578063122eff2b14610510578063142a27111461055157600080fd5b8062adef68146103d25780630445b6671461044c578063057a2c0e1461047057806306fdde031461048657600080fd5b366103cd57005b600080fd5b3480156103de57600080fd5b50601d546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0015b60405180910390f35b34801561045857600080fd5b50610462600e5481565b604051908152602001610443565b34801561047c57600080fd5b50610462601b5481565b34801561049257600080fd5b5061049b610dea565b6040516104439190612e47565b3480156104b457600080fd5b506104c86104c3366004612eaa565b610e7c565b6040519015158152602001610443565b3480156104e457600080fd5b506104f86104f3366004612ed6565b610ee9565b6040516001600160a01b039091168152602001610443565b34801561051c57600080fd5b506023546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561055d57600080fd5b5061046260375481565b34801561057357600080fd5b50610587610582366004612eef565b610f13565b005b34801561059557600080fd5b50600854610462565b3480156105aa57600080fd5b50601f546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156105eb57600080fd5b506104c86105fa366004612f44565b610f41565b34801561060b57600080fd5b50601a546106199060ff1681565b60405160ff9091168152602001610443565b34801561063757600080fd5b50600b546104c890610100900460ff1681565b34801561065657600080fd5b506104f8610665366004612ed6565b61104e565b34801561067657600080fd5b506026546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156106b757600080fd5b506105876106c6366004612f9a565b61105e565b3480156106d757600080fd5b5060075460ff16610619565b3480156106ef57600080fd5b506105876106fe366004612f9a565b611091565b34801561070f57600080fd5b506104c861071e366004612fcf565b60316020526000908152604090205460ff1681565b34801561073f57600080fd5b50602d546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561078057600080fd5b5061046260175481565b34801561079657600080fd5b506105876107a5366004612fec565b6110c4565b3480156107b657600080fd5b506105876107c536600461300f565b6110d8565b3480156107d657600080fd5b506104c86107e5366004612fcf565b611128565b3480156107f657600080fd5b50610462601c5481565b34801561080c57600080fd5b50610462602a5481565b34801561082257600080fd5b5061046260365481565b34801561083857600080fd5b5061046260185481565b34801561084e57600080fd5b5061058761085d366004612f9a565b611136565b34801561086e57600080fd5b50610587611169565b34801561088357600080fd5b5061046260195481565b34801561089957600080fd5b506104626108a8366004612fcf565b611188565b3480156108b957600080fd5b506105876111e8565b3480156108ce57600080fd5b50610462600c5481565b3480156108e457600080fd5b50610462600d5481565b3480156108fa57600080fd5b5061058761090936600461300f565b6111fa565b34801561091a57600080fd5b5061058761092936600461300f565b61121c565b34801561093a57600080fd5b50600b546104c89060ff1681565b34801561095457600080fd5b506000546001600160a01b03166104f8565b34801561097257600080fd5b50601a546104c890610100900460ff1681565b34801561099157600080fd5b506104c86109a0366004612fcf565b60336020526000908152604090205460ff1681565b3480156109c157600080fd5b5061049b61123e565b3480156109d657600080fd5b50601e546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a1757600080fd5b506027546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a5857600080fd5b506025546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a9957600080fd5b50602f546104f8906001600160a01b031681565b348015610ab957600080fd5b506104c8610ac8366004612eaa565b61124d565b348015610ad957600080fd5b506104c8610ae8366004612fcf565b60326020526000908152604090205460ff1681565b348015610b0957600080fd5b506024546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610b4a57600080fd5b506020546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610b8b57600080fd5b50602e546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610bcc57600080fd5b50610587610bdb366004612ed6565b61125a565b348015610bec57600080fd5b506104c8610bfb366004612fcf565b60346020526000908152604090205460ff1681565b348015610c1c57600080fd5b5061046260295481565b348015610c3257600080fd5b50610462610c4136600461302a565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b348015610c7857600080fd5b50610587610c87366004612fcf565b611267565b348015610c9857600080fd5b506104c8610ca7366004613063565b602b60209081526000928352604080842090915290825290205460ff1681565b348015610cd357600080fd5b506022546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610d1457600080fd5b50610587610d23366004612fcf565b611291565b348015610d3457600080fd5b506030546104f8906001600160a01b031681565b348015610d5457600080fd5b506028546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610d9557600080fd5b50610587610da4366004613088565b611307565b348015610db557600080fd5b506021546104139060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b606060058054610df9906130fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e25906130fd565b8015610e725780601f10610e4757610100808354040283529160200191610e72565b820191906000526020600020905b815481529060010190602001808311610e5557829003601f168201915b5050505050905090565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610ed79086815260200190565b60405180910390a35060015b92915050565b602c8181548110610ef957600080fd5b6000918252602090912001546001600160a01b0316905081565b610f1b611468565b600f97909755601095909555601193909355601291909155601355601455601555601655565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914611039576001600160a01b0384166000908152600a60209081526040808320338452909152902054821115610fe55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152600a6020908152604080832033845290915290205461101490839061314d565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b6110448484846114c2565b90505b9392505050565b60358181548110610ef957600080fd5b611066611468565b6001600160a01b03919091166000908152603360205260409020805460ff1916911515919091179055565b611099611468565b6001600160a01b03919091166000908152603260205260409020805460ff1916911515919091179055565b6110cc611468565b6110d58161166e565b50565b6110e0611468565b600b805460ff19168215159081179091556040519081527fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223906020015b60405180910390a150565b6000610ee382600854610e7c565b61113e611468565b6001600160a01b03919091166000908152603160205260409020805460ff1916911515919091179055565b611171611468565b611179611b4b565b1561118657611186611b9a565b565b6001600160a01b038116600090815260096020908152604080832054603290925282205460ff161580156111be57506000603654115b80156111cc57506035546002105b15610ee3576035546111de9082613176565b611047908261318a565b6111f0611468565b6111866000611d27565b611202611468565b600b80549115156101000261ff0019909216919091179055565b611224611468565b601a80549115156101000261ff0019909216919091179055565b606060068054610df9906130fd565b60006110473384846114c2565b611262611468565b600e55565b61126f611468565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b611299611468565b6001600160a01b0381166112fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fdc565b6110d581611d27565b61130f611468565b6000603754116113615760405162461bcd60e51b815260206004820152601a60248201527f5265776172642073686f756c6420626520617661696c61626c650000000000006044820152606401610fdc565b603754600090611372908390613176565b600060378190559091505b60ff811683111561146257816009600086868560ff168181106113a2576113a261319d565b90506020020160208101906113b79190612fcf565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546113e6919061318a565b909155508490508360ff83168181106114015761140161319d565b90506020020160208101906114169190612fcf565b6001600160a01b0316306001600160a01b031660008051602061332d8339815191528460405161144891815260200190565b60405180910390a38061145a816131b3565b91505061137d565b50505050565b6000546001600160a01b031633146111865760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fdc565b60006114ce8484611d77565b6114d88383611df4565b60385460ff16156114f5576114ee848484611ee0565b9050611047565b6114fd611b4b565b1561150a5761150a611b9a565b6001600160a01b03841660009081526032602052604090205460ff166115335761153384611fdd565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260099091529190912054611585918490612041565b6001600160a01b0385166000908152600960205260409020556115a78461206d565b60006115b3858561225b565b6115bd57826115c8565b6115c88585856122d4565b6001600160a01b0385166000908152600960205260409020549091506115ee90826122f7565b6001600160a01b0385166000908152600960205260409020556116108461206d565b836001600160a01b0316856001600160a01b031660008051602061332d8339815191528560405161164391815260200190565b60405180910390a3601a54610100900460ff161561166357611663612303565b506001949350505050565b601a5460ff16600614801561168757508060ff16600614155b156116945761169461235c565b8060ff1660020361175457601f54602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602054602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff1660030361181457602154602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602254602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff166004036118d457602354602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602454602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff1660050361199457602554602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602654602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b8060ff16600603611a5457602754602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855602854602e80548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055611b05565b601d54602d805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855601e54602e805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790555b601a805460ff191660ff831690811790915542601b556040519081527f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e869060200161111d565b6030546000906001600160a01b03163314801590611b705750600b54610100900460ff165b8015611b7f575060385460ff16155b8015611b955750600e54611b9230611188565b10155b905090565b6038805460ff191660011790556000611bb230611188565b602f54909150611bcb906001600160a01b031682610e7c565b506040805160028082526060820183526000926020830190803683370190505090503081600081518110611c0157611c0161319d565b6001600160a01b03928316602091820292909201810191909152602f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e91906131d2565b81600181518110611c9157611c9161319d565b6001600160a01b039283166020918202929092010152602f5460405163791ac94760e01b815291169063791ac94790611cd79085906000908690309042906004016131ef565b600060405180830381600087803b158015611cf157600080fd5b505af1158015611d05573d6000803e3d6000fd5b505050506000479050611d188184612461565b50506038805460ff1916905550565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b5460ff16611df0576030546001600160a01b03838116911614801590611dad57506030546001600160a01b03828116911614155b611df05760405162461bcd60e51b815260206004820152601460248201527354726164696e672069732064697361626c65642160601b6044820152606401610fdc565b5050565b6001600160a01b03821660009081526033602052604090205460ff16611df057600d54811115611e715760405162461bcd60e51b815260206004820152602260248201527f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d697465604482015261642160f01b6064820152608401610fdc565b600081611e7d84611188565b611e87919061318a565b9050600c54811115611edb5760405162461bcd60e51b815260206004820152601760248201527f4d61782062616c616e6365206973206c696d69746564210000000000000000006044820152606401610fdc565b505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600990915291822054611f31918490612041565b6001600160a01b038516600090815260096020526040902055611f538461206d565b6001600160a01b038316600090815260096020526040902054611f7690836122f7565b6001600160a01b038416600090815260096020526040902055611f988361206d565b826001600160a01b0316846001600160a01b031660008051602061332d83398151915284604051611fcb91815260200190565b60405180910390a35060019392505050565b603654156110d557603554603654600091611ff791613176565b9050806036600082825461200b919061314d565b90915550506001600160a01b0382166000908152600960205260408120805483929061203890849061318a565b90915550505050565b600081848411156120655760405162461bcd60e51b8152600401610fdc9190612e47565b505050900390565b600061207882611188565b90508015612107576001600160a01b03821660009081526034602052604090205460ff16611df057506001600160a01b03166000818152603460205260408120805460ff191660019081179091556035805491820181559091527fcfa4bec1d3298408bb5afcfcd9c430549c5b31f8aa5c5848151c0a55f473c34d0180546001600160a01b0319169091179055565b6001600160a01b03821660009081526034602052604090205460ff1615611df0576001600160a01b0382166000908152603460205260408120805460ff191690555b6035546121589060019061314d565b81101561222357826001600160a01b03166035828154811061217c5761217c61319d565b6000918252602090912001546001600160a01b03160361221157603580546121a69060019061314d565b815481106121b6576121b661319d565b600091825260209091200154603580546001600160a01b0390921691839081106121e2576121e261319d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061221b81613260565b915050612149565b50603580548061223557612235613279565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6030546000906001600160a01b03838116911614801561229457506001600160a01b03831660009081526031602052604090205460ff16155b8061104757506030546001600160a01b0384811691161480156110475750506001600160a01b031660009081526031602052604090205460ff1615919050565b601a5460009060ff16156122ed576114ee84848461263e565b6114ee8483612a91565b6000611047828461318a565b601a5460ff1660008190036123155750565b6000601b5442612325919061314d565b9050601c54811015612335575050565b61234060018361328f565b915060068260ff16111561235357600191505b611df08261166e565b6001602a600082825461236f919061318a565b9091555050602c546029541580612384575080155b1561238c5750565b60008160295461239c9190613176565b905060005b8281101561240f576000602c82815481106123be576123be61319d565b60009182526020808320909101546001600160a01b03168083526009909152604082208054919350859290916123f590849061318a565b90915550829150612407905081613260565b9150506123a1565b506000602981905561242390602c90612e15565b7fde01858d260cb2aab5a7bfe1b02ccad5a0b083cdb1b4a8c642c7d4d7d85f2085602c826040516124559291906132a8565b60405180910390a15050565b6000601954601854601754612476919061318a565b612480919061318a565b9050600081601754856124939190613301565b61249d9190613176565b9050600082601754856124b09190613301565b6124ba9190613176565b9050600083601854876124cd9190613301565b6124d79190613176565b9050600084601854876124ea9190613301565b6124f49190613176565b9050600082612503868a61314d565b61250d919061314d565b905060008261251c868a61314d565b612526919061314d565b90508515612581576003546040516001600160a01b039091169087156108fc029088906000818181858888f19350505050158015612568573d6000803e3d6000fd5b50846017600082825461257b919061314d565b90915550505b83156125da576004546040516001600160a01b039091169085156108fc029086906000818181858888f193505050501580156125c1573d6000803e3d6000fd5b5082601860008282546125d4919061314d565b90915550505b8115612633576002546040516001600160a01b039091169083156108fc029084906000818181858888f1935050505015801561261a573d6000803e3d6000fd5b50806019600082825461262d919061314d565b90915550505b505050505050505050565b6040805160a081018252602e5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900490911660808201526030546000919082906001600160a01b03908116908716036126f75750506040805160a081018252602d5460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b9004909116608082015260015b60006064836080015160ff168661270e9190613301565b6127189190613176565b835190915060ff161561278b576000836080015160ff16846000015160ff16836127429190613301565b61274c9190613176565b90508060196000828254612760919061318a565b9091555050306000908152600960205260408120805483929061278490849061318a565b9091555050505b602083015160ff1615612996576000836080015160ff16846020015160ff16836127b59190613301565b6127bf9190613176565b601a5490915060ff166003036128295780603760008282546127e1919061318a565b90915550506037546040805183815260208101929092527fe67cffa4bbbf9dd312cee0b0eecb1a9ad54f728b39320b7a745389859bf59cae91015b60405180910390a1612994565b601a5460ff1660060361293f578060296000828254612848919061318a565b9091555083905061288d576029546040805183815260208101929092527fbc105e9024dec52ec78803e23877e0b53040838469fd53247dae9c4a7828a268910161281c565b8280156128c05750602a546000908152602b602090815260408083206001600160a01b038b16845290915290205460ff16155b1561293a57602a546000908152602b602090815260408083206001600160a01b038b1680855292528220805460ff19166001908117909155602c805491820181559092527f7416c943b4a09859521022fd2e90eac0dd9026dad28fa317782a135f28a8609190910180546001600160a01b03191690911790555b612994565b8060366000828254612951919061318a565b90915550506036546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b505b604083015160ff16156129d7576000836080015160ff16846040015160ff16836129c09190613301565b6129ca9190613176565b90506129d581612c54565b505b606083015160ff1615612a7c576000836080015160ff16846060015160ff1683612a019190613301565b612a0b9190613176565b61dead600090815260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb19307500378580549293508392909190612a4e90849061318a565b909155505060405181815261dead90309060008051602061332d8339815191529060200160405180910390a3505b612a868582612d84565b979650505050505050565b601354601454601554601654603054600094939291906001600160a01b0390811690881603612acf57600f5493506010549250601154915060125490505b60006064612add8689613301565b612ae79190613176565b905060006064612af7868a613301565b612b019190613176565b905060006064612b11858b613301565b612b1b9190613176565b905060006064612b2b878c613301565b612b359190613176565b90508515612b92578060366000828254612b4f919061318a565b90915550506036546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b8360176000828254612ba4919061318a565b925050819055508260186000828254612bbd919061318a565b925050819055508160196000828254612bd6919061318a565b90915550829050612be7848661318a565b612bf1919061318a565b3060009081526009602052604081208054909190612c1090849061318a565b90915550600090508183612c24868861318a565b612c2e919061318a565b612c38919061318a565b9050612c448b82612d84565b9c9b505050505050505050505050565b6000612c61600180612d90565b9050600060358281548110612c7857612c7861319d565b6000918252602090912001546001600160a01b031690508015801590612ca957506001600160a01b03811661dead14155b8015612cc35750602f546001600160a01b03828116911614155b8015612cdd57506030546001600160a01b03828116911614155b15611edb576001600160a01b03811660009081526009602052604081208054859290612d0a90849061318a565b9091555050604080516001600160a01b0383168152602081018590527fe4cbe3422132330d6356a5b83b4e8887027dcfada3b80fec7e557cf26431470d910160405180910390a16040518381526001600160a01b03821690309060008051602061332d8339815191529060200160405180910390a3505050565b6000611047828461314d565b600080333a4342612da260018361314d565b604080516001600160a01b039096166020870152850193909352606084019190915260808301524060a082015260c0810185905260e081018490526101000160408051601f198184030181529190528051602090910120603554909150600090612e0c9083613318565b95945050505050565b50805460008255906000526020600020908101906110d591905b80821115612e435760008155600101612e2f565b5090565b600060208083528351808285015260005b81811015612e7457858101830151858201604001528201612e58565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146110d557600080fd5b60008060408385031215612ebd57600080fd5b8235612ec881612e95565b946020939093013593505050565b600060208284031215612ee857600080fd5b5035919050565b600080600080600080600080610100898b031215612f0c57600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b600080600060608486031215612f5957600080fd5b8335612f6481612e95565b92506020840135612f7481612e95565b929592945050506040919091013590565b80358015158114612f9557600080fd5b919050565b60008060408385031215612fad57600080fd5b8235612fb881612e95565b9150612fc660208401612f85565b90509250929050565b600060208284031215612fe157600080fd5b813561104781612e95565b600060208284031215612ffe57600080fd5b813560ff8116811461104757600080fd5b60006020828403121561302157600080fd5b61104782612f85565b6000806040838503121561303d57600080fd5b823561304881612e95565b9150602083013561305881612e95565b809150509250929050565b6000806040838503121561307657600080fd5b82359150602083013561305881612e95565b6000806020838503121561309b57600080fd5b823567ffffffffffffffff808211156130b357600080fd5b818501915085601f8301126130c757600080fd5b8135818111156130d657600080fd5b8660208260051b85010111156130eb57600080fd5b60209290920196919550909350505050565b600181811c9082168061311157607f821691505b60208210810361313157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ee357610ee3613137565b634e487b7160e01b600052601260045260246000fd5b60008261318557613185613160565b500490565b80820180821115610ee357610ee3613137565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff81036131c9576131c9613137565b60010192915050565b6000602082840312156131e457600080fd5b815161104781612e95565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561323f5784516001600160a01b03168352938301939183019160010161321a565b50506001600160a01b03969096166060850152505050608001529392505050565b60006001820161327257613272613137565b5060010190565b634e487b7160e01b600052603160045260246000fd5b60ff8181168382160190811115610ee357610ee3613137565b6000604082016040835280855480835260608501915086600052602092508260002060005b828110156132f25781546001600160a01b0316845292840192600191820191016132cd565b50505092019290925292915050565b8082028115828204841417610ee357610ee3613137565b60008261332757613327613160565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205766e92d41d77fa1e234cec206662695fa65d28e984bdc06251373d41fae09d664736f6c63430008130033
Deployed Bytecode Sourcemap
20913:23444:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23550:87;;;;;;;;;;-1:-1:-1;23550:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23550:87:0;;;;;;;;;;283:4:1;271:17;;;253:36;;325:17;;;320:2;305:18;;298:45;379:17;;;359:18;;;352:45;;;;433:17;;428:2;413:18;;406:45;488:17;;;482:3;467:19;;460:46;240:3;225:19;23550:87:0;;;;;;;;22126:57;;;;;;;;;;;;;;;;;;;663:25:1;;;651:2;636:18;22126:57:0;517:177:1;23284:32:0;;;;;;;;;;;;;;;;28648:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;29236:216::-;;;;;;;;;;-1:-1:-1;29236:216:0;;;;;:::i;:::-;;:::i;:::-;;;1873:14:1;;1866:22;1848:41;;1836:2;1821:18;29236:216:0;1708:187:1;24951:28:0;;;;;;;;;;-1:-1:-1;24951:28:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2249:32:1;;;2231:51;;2219:2;2204:18;24951:28:0;2085:203:1;24162:87:0;;;;;;;;;;-1:-1:-1;24162:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24162:87:0;;;;;;25412:40;;;;;;;;;;;;;;;;43260:719;;;;;;;;;;-1:-1:-1;43260:719:0;;;;;:::i;:::-;;:::i;:::-;;28348:102;;;;;;;;;;-1:-1:-1;28430:12:0;;28348:102;;23754:87;;;;;;;;;;-1:-1:-1;23754:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23754:87:0;;;;;;29749:441;;;;;;;;;;-1:-1:-1;29749:441:0;;;;;:::i;:::-;;:::i;23202:21::-;;;;;;;;;;-1:-1:-1;23202:21:0;;;;;;;;;;;3592:4:1;3580:17;;;3562:36;;3550:2;3535:18;23202:21:0;3420:184:1;21967:30:0;;;;;;;;;;-1:-1:-1;21967:30:0;;;;;;;;;;;25338:24;;;;;;;;;;-1:-1:-1;25338:24:0;;;;;:::i;:::-;;:::i;24460:88::-;;;;;;;;;;-1:-1:-1;24460:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24460:88:0;;;;;;42969:127;;;;;;;;;;-1:-1:-1;42969:127:0;;;;;:::i;:::-;;:::i;28458:85::-;;;;;;;;;;-1:-1:-1;28526:9:0;;;;28458:85;;42828:133;;;;;;;;;;-1:-1:-1;42828:133:0;;;;;:::i;:::-;;:::i;25128:43::-;;;;;;;;;;-1:-1:-1;25128:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24988:17;;;;;;;;;;-1:-1:-1;24988:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24988:17:0;;;;;;22492:32;;;;;;;;;;;;;;;;41901:95;;;;;;;;;;-1:-1:-1;41901:95:0;;;;;:::i;:::-;;:::i;43104:148::-;;;;;;;;;;-1:-1:-1;43104:148:0;;;;;:::i;:::-;;:::i;29460:117::-;;;;;;;;;;-1:-1:-1;29460:117:0;;;;;:::i;:::-;;:::i;23323:35::-;;;;;;;;;;;;;;;;24806:26;;;;;;;;;;;;;;;;25369:36;;;;;;;;;;;;;;;;22531:32;;;;;;;;;;;;;;;;42701:119;;;;;;;;;;-1:-1:-1;42701:119:0;;;;;:::i;:::-;;:::i;44116:124::-;;;;;;;;;;;;;:::i;22570:31::-;;;;;;;;;;;;;;;;28741:332;;;;;;;;;;-1:-1:-1;28741:332:0;;;;;:::i;:::-;;:::i;12133:103::-;;;;;;;;;;;;;:::i;22004:50::-;;;;;;;;;;;;;;;;22067:45;;;;;;;;;;;;;;;;44248:106;;;;;;;;;;-1:-1:-1;44248:106:0;;;;;:::i;:::-;;:::i;42004:93::-;;;;;;;;;;-1:-1:-1;42004:93:0;;;;;:::i;:::-;;:::i;21928:32::-;;;;;;;;;;-1:-1:-1;21928:32:0;;;;;;;;11485:87;;;;;;;;;;-1:-1:-1;11531:7:0;11558:6;-1:-1:-1;;;;;11558:6:0;11485:87;;23247:30;;;;;;;;;;-1:-1:-1;23247:30:0;;;;;;;;;;;25235:47;;;;;;;;;;-1:-1:-1;25235:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28551:89;;;;;;;;;;;;;:::i;23644:88::-;;;;;;;;;;-1:-1:-1;23644:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23644:88:0;;;;;;24570:87;;;;;;;;;;-1:-1:-1;24570:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24570:87:0;;;;;;24366;;;;;;;;;;-1:-1:-1;24366:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24366:87:0;;;;;;25039:43;;;;;;;;;;-1:-1:-1;25039:43:0;;;;-1:-1:-1;;;;;25039:43:0;;;29585:156;;;;;;;;;;-1:-1:-1;29585:156:0;;;;;:::i;:::-;;:::i;25178:50::-;;;;;;;;;;-1:-1:-1;25178:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24256:88;;;;;;;;;;-1:-1:-1;24256:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24256:88:0;;;;;;23848;;;;;;;;;;-1:-1:-1;23848:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23848:88:0;;;;;;25012:18;;;;;;;;;;-1:-1:-1;25012:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25012:18:0;;;;;;43987:121;;;;;;;;;;-1:-1:-1;43987:121:0;;;;;:::i;:::-;;:::i;25291:40::-;;;;;;;;;;-1:-1:-1;25291:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24759;;;;;;;;;;;;;;;;29081:147;;;;;;;;;;-1:-1:-1;29081:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;29192:19:0;;;29165:7;29192:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;29081:147;42584:109;;;;;;;;;;-1:-1:-1;42584:109:0;;;;;:::i;:::-;;:::i;24880:64::-;;;;;;;;;;-1:-1:-1;24880:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;24052:88;;;;;;;;;;-1:-1:-1;24052:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24052:88:0;;;;;;12391:201;;;;;;;;;;-1:-1:-1;12391:201:0;;;;;:::i;:::-;;:::i;25089:30::-;;;;;;;;;;-1:-1:-1;25089:30:0;;;;-1:-1:-1;;;;;25089:30:0;;;24664:88;;;;;;;;;;-1:-1:-1;24664:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;24664:88:0;;;;;;42105:471;;;;;;;;;;-1:-1:-1;42105:471:0;;;;;:::i;:::-;;:::i;23958:87::-;;;;;;;;;;-1:-1:-1;23958:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23958:87:0;;;;;;28648:85;28687:13;28720:5;28713:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28648:85;:::o;29236:216::-;29340:10;29311:4;29328:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;29328:32:0;;;;;;;;;;:41;;;29385:37;29311:4;;29328:32;;29385:37;;;;29363:6;663:25:1;;651:2;636:18;;517:177;29385:37:0;;;;;;;;-1:-1:-1;29440:4:0;29236:216;;;;;:::o;24951:28::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24951:28:0;;-1:-1:-1;24951:28:0;:::o;43260:719::-;11371:13;:11;:13::i;:::-;43604:16:::1;:35:::0;;;;43650:16:::1;:35:::0;;;;43696:17:::1;:37:::0;;;;43744:15:::1;:33:::0;;;;43790:17:::1;:37:::0;43838:17:::1;:37:::0;43886:18:::1;:39:::0;43936:16:::1;:35:::0;43260:719::o;29749:441::-;-1:-1:-1;;;;;29870:19:0;;29849:4;29870:19;;;:11;:19;;;;;;;;29890:10;29870:31;;;;;;;;-1:-1:-1;;29870:52:0;29866:257;;-1:-1:-1;;;;;29947:19:0;;;;;;:11;:19;;;;;;;;29967:10;29947:31;;;;;;;;:41;-1:-1:-1;29947:41:0;29939:83;;;;-1:-1:-1;;;29939:83:0;;6959:2:1;29939:83:0;;;6941:21:1;6998:2;6978:18;;;6971:30;7037:31;7017:18;;;7010:59;7086:18;;29939:83:0;;;;;;;;;-1:-1:-1;;;;;30071:19:0;;;;;;:11;:19;;;;;;;;30091:10;30071:31;;;;;;;;:40;;30105:6;;30071:40;:::i;:::-;-1:-1:-1;;;;;30037:19:0;;;;;;:11;:19;;;;;;;;30057:10;30037:31;;;;;;;:74;29866:257;30142:40;30156:6;30164:9;30175:6;30142:13;:40::i;:::-;30135:47;;29749:441;;;;;;:::o;25338:24::-;;;;;;;;;;;;42969:127;11371:13;:11;:13::i;:::-;-1:-1:-1;;;;;43056:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;43056:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42969:127::o;42828:133::-;11371:13;:11;:13::i;:::-;-1:-1:-1;;;;;42918:26:0;;;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35;;-1:-1:-1;;42918:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42828:133::o;41901:95::-;11371:13;:11;:13::i;:::-;41970:18:::1;41982:5;41970:11;:18::i;:::-;41901:95:::0;:::o;43104:148::-;11371:13;:11;:13::i;:::-;43177::::1;:23:::0;;-1:-1:-1;;43177:23:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43216:28:::1;::::0;1848:41:1;;;43216:28:0::1;::::0;1836:2:1;1821:18;43216:28:0::1;;;;;;;;43104:148:::0;:::o;29460:117::-;29515:4;29539:30;29547:7;29556:12;;29539:7;:30::i;42701:119::-;11371:13;:11;:13::i;:::-;-1:-1:-1;;;;;42784:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;42784:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42701:119::o;44116:124::-;11371:13;:11;:13::i;:::-;44176:17:::1;:15;:17::i;:::-;44172:61;;;44210:11;:9;:11::i;:::-;44116:124::o:0;28741:332::-;-1:-1:-1;;;;;28850:18:0;;28807:7;28850:18;;;:9;:18;;;;;;;;;28884;:27;;;;;;;;28883:28;:57;;;;;28939:1;28915:21;;:25;28883:57;:79;;;;-1:-1:-1;28944:7:0;:14;28961:1;-1:-1:-1;28883:79:0;28879:157;;;29010:7;:14;28995:29;;:12;:29;:::i;:::-;28979:45;;;;:::i;12133:103::-;11371:13;:11;:13::i;:::-;12198:30:::1;12225:1;12198:18;:30::i;44248:106::-:0;11371:13;:11;:13::i;:::-;44322:10:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;44322:24:0;;::::1;::::0;;;::::1;::::0;;44248:106::o;42004:93::-;11371:13;:11;:13::i;:::-;42069:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;42069:20:0;;::::1;::::0;;;::::1;::::0;;42004:93::o;28551:89::-;28592:13;28625:7;28618:14;;;;;:::i;29585:156::-;29665:4;29689:44;29703:10;29715:9;29726:6;29689:13;:44::i;43987:121::-;11371:13;:11;:13::i;:::-;44070::::1;:30:::0;43987:121::o;42584:109::-;11371:13;:11;:13::i;:::-;42658:15:::1;:27:::0;;-1:-1:-1;;;;;;42658:27:0::1;-1:-1:-1::0;;;;;42658:27:0;;;::::1;::::0;;;::::1;::::0;;42584:109::o;12391:201::-;11371:13;:11;:13::i;:::-;-1:-1:-1;;;;;12480:22:0;::::1;12472:73;;;::::0;-1:-1:-1;;;12472:73:0;;7969:2:1;12472:73:0::1;::::0;::::1;7951:21:1::0;8008:2;7988:18;;;7981:30;8047:34;8027:18;;;8020:62;-1:-1:-1;;;8098:18:1;;;8091:36;8144:19;;12472:73:0::1;7767:402:1::0;12472:73:0::1;12556:28;12575:8;12556:18;:28::i;42105:471::-:0;11371:13;:11;:13::i;:::-;42227:1:::1;42199:25;;:29;42191:68;;;::::0;-1:-1:-1;;;42191:68:0;;8376:2:1;42191:68:0::1;::::0;::::1;8358:21:1::0;8415:2;8395:18;;;8388:30;8454:28;8434:18;;;8427:56;8500:18;;42191:68:0::1;8174:350:1::0;42191:68:0::1;42290:25;::::0;42270:17:::1;::::0;42290:46:::1;::::0;42318:11;;42290:46:::1;:::i;:::-;42375:1;42347:25;:29:::0;;;42270:66;;-1:-1:-1;42387:182:0::1;42405:22;::::0;::::1;::::0;-1:-1:-1;42387:182:0::1;;;42478:9;42449;:25;42459:11;;42471:1;42459:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42449:25:0::1;-1:-1:-1::0;;;;;42449:25:0::1;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;42531:11:0;;-1:-1:-1;42531:11:0;:14:::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42507:50:0::1;42524:4;-1:-1:-1::0;;;;;42507:50:0::1;-1:-1:-1::0;;;;;;;;;;;42547:9:0::1;42507:50;;;;663:25:1::0;;651:2;636:18;;517:177;42507:50:0::1;;;;;;;;42429:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42387:182;;;;42180:396;42105:471:::0;;:::o;11650:132::-;11531:7;11558:6;-1:-1:-1;;;;;11558:6:0;10274:10;11714:23;11706:68;;;;-1:-1:-1;;;11706:68:0;;9043:2:1;11706:68:0;;;9025:21:1;;;9062:18;;;9055:30;9121:34;9101:18;;;9094:62;9173:18;;11706:68:0;8841:356:1;30198:937:0;30290:4;30307:32;30321:6;30329:9;30307:13;:32::i;:::-;30350:36;30368:9;30379:6;30350:17;:36::i;:::-;30401:6;;;;30397:87;;;30431:41;30446:6;30454:9;30465:6;30431:14;:41::i;:::-;30424:48;;;;30397:87;30498:17;:15;:17::i;:::-;30494:61;;;30532:11;:9;:11::i;:::-;-1:-1:-1;;;;;30570:26:0;;;;;;:18;:26;;;;;;;;30565:73;;30612:14;30619:6;30612;:14::i;:::-;30668:53;;;;;;;;;;;-1:-1:-1;;;30668:53:0;;;;;;;;-1:-1:-1;;;;;30668:17:0;;-1:-1:-1;30668:17:0;;;:9;:17;;;;;;;;:53;;30690:6;;30668:21;:53::i;:::-;-1:-1:-1;;;;;30648:17:0;;;;;;:9;:17;;;;;:73;30732:22;30658:6;30732:14;:22::i;:::-;30765;30790:33;30805:6;30813:9;30790:14;:33::i;:::-;:81;;30865:6;30790:81;;;30826:36;30836:6;30844:9;30855:6;30826:9;:36::i;:::-;-1:-1:-1;;;;;30905:20:0;;;;;;:9;:20;;;;;;30765:106;;-1:-1:-1;30905:40:0;;30765:106;30905:24;:40::i;:::-;-1:-1:-1;;;;;30882:20:0;;;;;;:9;:20;;;;;:63;30956:25;30892:9;30956:14;:25::i;:::-;31014:9;-1:-1:-1;;;;;30997:35:0;31006:6;-1:-1:-1;;;;;30997:35:0;-1:-1:-1;;;;;;;;;;;31025:6:0;30997:35;;;;663:25:1;;651:2;636:18;;517:177;30997:35:0;;;;;;;;31049:10;;;;;;;31045:59;;;31076:16;:14;:16::i;:::-;-1:-1:-1;31123:4:0;;30198:937;-1:-1:-1;;;;30198:937:0:o;40609:859::-;40667:4;;;;40675:1;40667:9;:23;;;;;40680:5;:10;;40689:1;40680:10;;40667:23;40663:76;;;40707:20;:18;:20::i;:::-;40753:5;:10;;40762:1;40753:10;40749:614;;40789:11;40780:20;:6;:20;;;;;;-1:-1:-1;;40780:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;40780:20:0;;;;;;;;;;;-1:-1:-1;;40780:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40780:20:0;;;-1:-1:-1;;;40780:20:0;;;;;;;;;;;;40825:12;40815:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40749:614;;;40859:5;:10;;40868:1;40859:10;40855:508;;40895:11;40886:20;:6;:20;;;;;;-1:-1:-1;;40886:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;40886:20:0;;;;;;;;;;;-1:-1:-1;;40886:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40886:20:0;;;-1:-1:-1;;;40886:20:0;;;;;;;;;;;;40931:12;40921:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40855:508;;;40965:5;:10;;40974:1;40965:10;40961:402;;41001:11;40992:20;:6;:20;;;;;;-1:-1:-1;;40992:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;40992:20:0;;;;;;;;;;;-1:-1:-1;;40992:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;40992:20:0;;;-1:-1:-1;;;40992:20:0;;;;;;;;;;;;41037:12;41027:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40961:402;;;41071:5;:10;;41080:1;41071:10;41067:296;;41107:11;41098:20;:6;:20;;;;;;-1:-1:-1;;41098:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;41098:20:0;;;;;;;;;;;-1:-1:-1;;41098:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41098:20:0;;;-1:-1:-1;;;41098:20:0;;;;;;;;;;;;41143:12;41133:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41067:296;;;41177:5;:10;;41186:1;41177:10;41173:190;;41213:11;41204:20;:6;:20;;;;;;-1:-1:-1;;41204:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;41204:20:0;;;;;;;;;;;-1:-1:-1;;41204:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41204:20:0;;;-1:-1:-1;;;41204:20:0;;;;;;;;;;;;41249:12;41239:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41173:190;;;41303:11;41294:20;:6;:20;;;;;;-1:-1:-1;;41294:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;41294:20:0;;;;;;;;;;;-1:-1:-1;;41294:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;41294:20:0;;;-1:-1:-1;;;41294:20:0;;;;;;;;;;;;41339:12;41329:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41173:190;41373:4;:12;;-1:-1:-1;;41373:12:0;;;;;;;;;;41412:15;41396:13;:31;41443:17;;3562:36:1;;;41443:17:0;;3550:2:1;3535:18;41443:17:0;3420:184:1;38121:223:0;38209:15;;38171:4;;-1:-1:-1;;;;;38209:15:0;38195:10;:29;;;;:57;;-1:-1:-1;38242:10:0;;;;;;;38195:57;:82;;;;-1:-1:-1;38271:6:0;;;;38270:7;38195:82;:141;;;;;38323:13;;38295:24;38313:4;38295:9;:24::i;:::-;:41;;38195:141;38188:148;;38121:223;:::o;38352:569::-;25975:6;:13;;-1:-1:-1;;25975:13:0;25984:4;25975:13;;;:6;38425:24:::1;38443:4;38425:9;:24::i;:::-;38476:17;::::0;38402:47;;-1:-1:-1;38460:49:0::1;::::0;-1:-1:-1;;;;;38476:17:0::1;38402:47:::0;38460:7:::1;:49::i;:::-;-1:-1:-1::0;38561:16:0::1;::::0;;38575:1:::1;38561:16:::0;;;;;::::1;::::0;;38537:21:::1;::::0;38561:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;38561:16:0::1;38537:40;;38606:4;38588;38593:1;38588:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38588:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;38632:17:::1;::::0;:24:::1;::::0;;-1:-1:-1;;;38632:24:0;;;;:17;;;::::1;::::0;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;38588:7;;38632:24;;;;;:17;:24:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38622:4;38627:1;38622:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;38622:34:0;;::::1;:7;::::0;;::::1;::::0;;;;;:34;38667:17:::1;::::0;:147:::1;::::0;-1:-1:-1;;;38667:147:0;;:17;::::1;::::0;:68:::1;::::0;:147:::1;::::0;38750:12;;38667:17:::1;::::0;38767:4;;38781::::1;::::0;38788:15:::1;::::0;38667:147:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38825:17;38845:21;38825:41;;38877:36;38889:9;38900:12;38877:11;:36::i;:::-;-1:-1:-1::0;;26011:6:0;:14;;-1:-1:-1;;26011:14:0;;;-1:-1:-1;38352:569:0:o;12752:191::-;12826:16;12845:6;;-1:-1:-1;;;;;12862:17:0;;;-1:-1:-1;;;;;;12862:17:0;;;;;;12895:40;;12845:6;;;;;;;12895:40;;12826:16;12895:40;12815:128;12752:191;:::o;36014:227::-;36102:13;;;;36097:137;;36150:15;;-1:-1:-1;;;;;36140:25:0;;;36150:15;;36140:25;;;;:57;;-1:-1:-1;36182:15:0;;-1:-1:-1;;;;;36169:28:0;;;36182:15;;36169:28;;36140:57;36132:90;;;;-1:-1:-1;;;36132:90:0;;10777:2:1;36132:90:0;;;10759:21:1;10816:2;10796:18;;;10789:30;-1:-1:-1;;;10835:18:1;;;10828:50;10895:18;;36132:90:0;10575:344:1;36132:90:0;36014:227;;:::o;36249:364::-;-1:-1:-1;;;;;36341:26:0;;;;;;:15;:26;;;;;;;;36336:270;;36402:5;;36392:6;:15;;36384:62;;;;-1:-1:-1;;;36384:62:0;;11126:2:1;36384:62:0;;;11108:21:1;11165:2;11145:18;;;11138:30;11204:34;11184:18;;;11177:62;-1:-1:-1;;;11255:18:1;;;11248:32;11297:19;;36384:62:0;10924:398:1;36384:62:0;36461:22;36509:6;36486:20;36496:9;36486;:20::i;:::-;:29;;;;:::i;:::-;36461:54;;36556:10;;36538:14;:28;;36530:64;;;;-1:-1:-1;;;36530:64:0;;11529:2:1;36530:64:0;;;11511:21:1;11568:2;11548:18;;;11541:30;11607:25;11587:18;;;11580:53;11650:18;;36530:64:0;11327:347:1;36530:64:0;36369:237;36249:364;;:::o;31143:399::-;31273:53;;;;;;;;;;;-1:-1:-1;;;31273:53:0;;;;;;;;-1:-1:-1;;;;;31273:17:0;;31236:4;31273:17;;;:9;:17;;;;;;;:53;;31295:6;;31273:21;:53::i;:::-;-1:-1:-1;;;;;31253:17:0;;;;;;:9;:17;;;;;:73;31337:22;31263:6;31337:14;:22::i;:::-;-1:-1:-1;;;;;31393:20:0;;;;;;:9;:20;;;;;;:32;;31418:6;31393:24;:32::i;:::-;-1:-1:-1;;;;;31370:20:0;;;;;;:9;:20;;;;;:55;31436:25;31380:9;31436:14;:25::i;:::-;31494:9;-1:-1:-1;;;;;31477:35:0;31486:6;-1:-1:-1;;;;;31477:35:0;-1:-1:-1;;;;;;;;;;;31505:6:0;31477:35;;;;663:25:1;;651:2;636:18;;517:177;31477:35:0;;;;;;;;-1:-1:-1;31530:4:0;31143:399;;;;;:::o;37832:281::-;37888:21;;:25;37884:222;;37978:7;:14;37954:21;;37930;;37954:38;;;:::i;:::-;37930:62;;38032:13;38007:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;38060:17:0;;;;;;:9;:17;;;;;:34;;38081:13;;38060:17;:34;;38081:13;;38060:34;:::i;:::-;;;;-1:-1:-1;;;37832:281:0;:::o;7768:240::-;7888:7;7949:12;7941:6;;;;7933:29;;;;-1:-1:-1;;;7933:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7984:5:0;;;7768:240::o;37178:646::-;37238:15;37256:17;37266:6;37256:9;:17::i;:::-;37238:35;-1:-1:-1;37288:11:0;;37284:533;;-1:-1:-1;;;;;37321:16:0;;;;;;:8;:16;;;;;;;;37316:120;;-1:-1:-1;;;;;;37358:16:0;;;;;:8;:16;;;;;:23;;-1:-1:-1;;37358:23:0;37377:4;37358:23;;;;;;37400:7;:20;;;;;;;;;;;;;;-1:-1:-1;;;;;;37400:20:0;;;;;;36014:227::o;37284:533::-;-1:-1:-1;;;;;37472:16:0;;;;;;:8;:16;;;;;;;;37468:338;;;-1:-1:-1;;;;;37509:16:0;;37528:5;37509:16;;;:8;:16;;;;;:24;;-1:-1:-1;;37509:24:0;;;37552:207;37575:7;:14;:18;;37592:1;;37575:18;:::i;:::-;37571:1;:22;37552:207;;;37641:6;-1:-1:-1;;;;;37627:20:0;:7;37635:1;37627:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;37627:10:0;:20;37623:117;;37689:7;37697:14;;:18;;37714:1;;37697:18;:::i;:::-;37689:27;;;;;;;;:::i;:::-;;;;;;;;;;;37676:7;:10;;-1:-1:-1;;;;;37689:27:0;;;;37684:1;;37676:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;37676:40:0;;;;;-1:-1:-1;;;;;37676:40:0;;;;;;37623:117;37595:3;;;;:::i;:::-;;;;37552:207;;;;37777:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;37777:13:0;;;;;-1:-1:-1;;;;;;37777:13:0;;;;;;37227:597;37178:646;:::o;35780:226::-;35900:15;;35862:4;;-1:-1:-1;;;;;35887:28:0;;;35900:15;;35887:28;:52;;;;-1:-1:-1;;;;;;35920:19:0;;;;;;:11;:19;;;;;;;;35919:20;35887:52;35886:112;;;-1:-1:-1;35955:15:0;;-1:-1:-1;;;;;35945:25:0;;;35955:15;;35945:25;:52;;;;-1:-1:-1;;;;;;;35975:22:0;;;;;:11;:22;;;;;;;;35974:23;;35780:226;-1:-1:-1;35780:226:0:o;35501:271::-;35613:4;;35589:7;;35613:4;;:8;35609:156;;35645:40;35659:6;35667:9;35678:6;35645:13;:40::i;35609:156::-;35725:28;35738:6;35746;35725:12;:28::i;5489:98::-;5547:7;5574:5;5578:1;5574;:5;:::i;41476:417::-;41543:4;;;;41522:18;41562:17;;;41558:56;;41596:7;41476:417::o;41558:56::-;41624:17;41662:13;;41644:15;:31;;;;:::i;:::-;41624:51;;41702:10;;41690:9;:22;41686:61;;;41729:7;;41476:417::o;41686:61::-;41757:17;41773:1;41757:17;;:::i;:::-;;;41804:1;41789:12;:16;;;41785:65;;;41837:1;41822:16;;41785:65;41860:25;41872:12;41860:11;:25::i;40045:556::-;40106:1;40095:7;;:12;;;;;;;:::i;:::-;;;;-1:-1:-1;;40139:11:0;:18;40172:21;;:26;;:45;;-1:-1:-1;40202:15:0;;40172:45;40168:58;;;40219:7;40045:556::o;40168:58::-;40236:24;40287:10;40263:21;;:34;;;;:::i;:::-;40236:61;;40313:9;40308:151;40332:10;40328:1;:14;40308:151;;;40364:14;40381:11;40393:1;40381:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;40381:14:0;40410:17;;;:9;:17;;;;;;:37;;40381:14;;-1:-1:-1;40431:16:0;;40410:17;;:37;;40431:16;;40410:37;:::i;:::-;;;;-1:-1:-1;40344:3:0;;-1:-1:-1;40344:3:0;;-1:-1:-1;40344:3:0;;:::i;:::-;;;;40308:151;;;-1:-1:-1;40493:1:0;40469:21;:25;;;40505:18;;40512:11;;40505:18;:::i;:::-;40539:54;40563:11;40576:16;40539:54;;;;;;;:::i;:::-;;;;;;;;40084:517;;40045:556::o;38929:1108::-;39006:17;39058:12;;39042:13;;39026;;:29;;;;:::i;:::-;:44;;;;:::i;:::-;39006:64;;39081:23;39132:9;39116:13;;39107:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;39081:60;;39152:27;39211:9;39195:13;;39182:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;39152:68;;39231:23;39282:9;39266:13;;39257:6;:22;;;;:::i;:::-;:34;;;;:::i;:::-;39231:60;;39302:27;39361:9;39345:13;;39332:10;:26;;;;:::i;:::-;:38;;;;:::i;:::-;39302:68;-1:-1:-1;39381:22:0;39433:15;39406:24;39415:15;39406:6;:24;:::i;:::-;:42;;;;:::i;:::-;39381:67;-1:-1:-1;39459:26:0;39523:19;39488:32;39501:19;39488:10;:32;:::i;:::-;:54;;;;:::i;:::-;39459:83;-1:-1:-1;39557:19:0;;39553:154;;39601:16;;39593:51;;-1:-1:-1;;;;;39601:16:0;;;;39593:51;;;;;39628:15;;39601:16;39593:51;39601:16;39593:51;39628:15;39601:16;39593:51;;;;;;;;;;;;;;;;;;;;;39676:19;39659:13;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;39553:154:0;39721:19;;39717:154;;39765:16;;39757:51;;-1:-1:-1;;;;;39765:16:0;;;;39757:51;;;;;39792:15;;39765:16;39757:51;39765:16;39757:51;39792:15;39765:16;39757:51;;;;;;;;;;;;;;;;;;;;;39840:19;39823:13;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;39717:154:0;39885:18;;39881:149;;39928:15;;39920:49;;-1:-1:-1;;;;;39928:15:0;;;;39920:49;;;;;39954:14;;39928:15;39920:49;39928:15;39920:49;39954:14;39928:15;39920:49;;;;;;;;;;;;;;;;;;;;;40000:18;39984:12;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;39881:149:0;38995:1042;;;;;;;38929:1108;;:::o;33510:1983::-;33622:28;;;;;;;;33643:7;33622:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33622:28:0;;;;;;;;;33705:15;;33602:7;;33622:28;33602:7;;-1:-1:-1;;;;;33705:15:0;;;33695:25;;;;33691:102;;-1:-1:-1;;33737:16:0;;;;;;;;33747:6;33737:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33737:16:0;;;;;;;;;;33691:102;33803:17;33848:3;33832:7;:13;;;33823:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;33866:16;;33803:48;;-1:-1:-1;33866:20:0;;;33862:236;;33903:26;33963:7;:13;;;33932:44;;33944:7;:16;;;33932:28;;:9;:28;;;;:::i;:::-;:44;;;;:::i;:::-;33903:73;;34007:18;33991:12;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;34058:4:0;34040:24;;;;:9;:24;;;;;:46;;34068:18;;34040:24;:46;;34068:18;;34040:46;:::i;:::-;;;;-1:-1:-1;;;33862:236:0;34112:18;;;;:22;;;34108:929;;34151:28;34215:7;:13;;;34182:46;;34194:7;:18;;;34182:30;;:9;:30;;;;:::i;:::-;:46;;;;:::i;:::-;34247:4;;34151:77;;-1:-1:-1;34247:4:0;;34255:1;34247:9;34243:783;;34306:20;34277:25;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;34392:25:0;;34350:68;;;13210:25:1;;;13266:2;13251:18;;13244:34;;;;34350:68:0;;13183:18:1;34350:68:0;;;;;;;;34243:783;;;34444:4;;;;34452:1;34444:9;34440:586;;34499:20;34474:21;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;34543:6:0;;-1:-1:-1;34538:308:0;;34617:21;;34579:60;;;13210:25:1;;;13266:2;13251:18;;13244:34;;;;34579:60:0;;13183:18:1;34579:60:0;13036:248:1;34538:308:0;34669:6;:43;;;;-1:-1:-1;34693:7:0;;34680:21;;;;:12;:21;;;;;;;;-1:-1:-1;;;;;34680:32:0;;;;;;;;;;;;34679:33;34669:43;34665:181;;;34750:7;;34737:21;;;;:12;:21;;;;;;;;-1:-1:-1;;;;;34737:32:0;;;;;;;;;:39;;-1:-1:-1;;34737:39:0;34772:4;34737:39;;;;;;34799:11;:27;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;34799:27:0;;;;;;34665:181;34440:586;;;34911:20;34886:21;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;34988:21:0;;34955:55;;;13210:25:1;;;13266:2;13251:18;;13244:34;;;;34955:55:0;;13183:18:1;34955:55:0;;;;;;;34440:586;34136:901;34108:929;35051:13;;;;:17;;;35047:161;;35085:23;35139:7;:13;;;35111:41;;35123:7;:13;;;35111:25;;:9;:25;;;;:::i;:::-;:41;;;;:::i;:::-;35085:67;;35167:29;35180:15;35167:12;:29::i;:::-;35070:138;35047:161;35222:12;;;;:16;;;35218:227;;35255:22;35307:7;:13;;;35280:40;;35292:7;:12;;;35280:24;;:9;:24;;;;:::i;:::-;:40;;;;:::i;:::-;21029:6;35335:15;;;;:9;:15;;;:33;;35255:65;;-1:-1:-1;35255:65:0;;35335:15;;;:33;;35255:65;;35335:33;:::i;:::-;;;;-1:-1:-1;;35388:45:0;;663:25:1;;;21029:6:0;;35405:4;;-1:-1:-1;;;;;;;;;;;35388:45:0;651:2:1;636:18;35388:45:0;;;;;;;35240:205;35218:227;35464:21;:6;35475:9;35464:10;:21::i;:::-;35457:28;33510:1983;-1:-1:-1;;;;;;;33510:1983:0:o;32136:1366::-;32252:17;;32304;;32357:18;;32409:16;;32450:15;;32208:7;;32252:17;32304;32357:18;32409:16;-1:-1:-1;;;;;32450:15:0;;;32440:25;;;;32436:231;;32498:16;;32482:32;;32545:16;;32529:32;;32593:17;;32576:34;;32640:15;;32625:30;;32436:231;32677:24;32729:3;32704:22;32713:13;32704:6;:22;:::i;:::-;:28;;;;:::i;:::-;32677:55;-1:-1:-1;32743:24:0;32795:3;32770:22;32779:13;32770:6;:22;:::i;:::-;:28;;;;:::i;:::-;32743:55;-1:-1:-1;32809:23:0;32859:3;32835:21;32844:12;32835:6;:21;:::i;:::-;:27;;;;:::i;:::-;32809:53;-1:-1:-1;32873:28:0;32930:3;32904:23;32913:14;32904:6;:23;:::i;:::-;:29;;;;:::i;:::-;32873:60;-1:-1:-1;32948:18:0;;32944:171;;33008:20;32983:21;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;33081:21:0;;33048:55;;;13210:25:1;;;13266:2;13251:18;;13244:34;;;;33048:55:0;;13183:18:1;33048:55:0;;;;;;;32944:171;33142:16;33125:13;;:33;;;;;;;:::i;:::-;;;;;;;;33186:16;33169:13;;:33;;;;;;;:::i;:::-;;;;;;;;33229:15;33213:12;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;33321:15:0;;-1:-1:-1;33283:35:0;33302:16;33283;:35;:::i;:::-;:53;;;;:::i;:::-;33273:4;33255:24;;;;:9;:24;;;;;:81;;:24;;;:81;;;;;:::i;:::-;;;;-1:-1:-1;33347:23:0;;-1:-1:-1;33429:20:0;33411:15;33373:35;33392:16;33373;:35;:::i;:::-;:53;;;;:::i;:::-;:76;;;;:::i;:::-;33347:102;-1:-1:-1;33467:27:0;:6;33347:102;33467:10;:27::i;:::-;33460:34;32136:1366;-1:-1:-1;;;;;;;;;;;;32136:1366:0:o;36621:545::-;36679:19;36701:26;36722:1;36725;36701:20;:26::i;:::-;36679:48;;36738:19;36760:7;36768:11;36760:20;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36760:20:0;;-1:-1:-1;36809:19:0;;;;;:56;;-1:-1:-1;;;;;;36846:19:0;;21029:6;36846:19;;36809:56;:115;;;;-1:-1:-1;36906:17:0;;-1:-1:-1;;;;;36883:41:0;;;36906:17;;36883:41;;36809:115;:163;;;;-1:-1:-1;36957:15:0;;-1:-1:-1;;;;;36942:30:0;;;36957:15;;36942:30;;36809:163;36791:368;;;-1:-1:-1;;;;;36999:22:0;;;;;;:9;:22;;;;;:32;;37025:6;;36999:22;:32;;37025:6;;36999:32;:::i;:::-;;;;-1:-1:-1;;37051:32:0;;;-1:-1:-1;;;;;13481:32:1;;13463:51;;13545:2;13530:18;;13523:34;;;37051:32:0;;13436:18:1;37051:32:0;;;;;;;37103:44;;663:25:1;;;-1:-1:-1;;;;;37103:44:0;;;37120:4;;-1:-1:-1;;;;;;;;;;;37103:44:0;651:2:1;636:18;37103:44:0;;;;;;;36668:498;;36621:545;:::o;5870:98::-;5928:7;5955:5;5959:1;5955;:5;:::i;31550:578::-;31636:7;;31759:10;31792:11;31826:12;31861:15;31909:16;31924:1;31826:12;31909:16;:::i;:::-;31726:278;;;-1:-1:-1;;;;;13901:32:1;;;31726:278:0;;;13883:51:1;13950:18;;13943:34;;;;13993:18;;;13986:34;;;;14036:18;;;14029:34;31899:27:0;14079:19:1;;;14072:35;14123:19;;;14116:35;;;14167:19;;;14160:35;;;13855:19;;31726:278:0;;;-1:-1:-1;;31726:278:0;;;;;;;;;31698:321;;31726:278;31698:321;;;;32076:7;:14;31698:321;;-1:-1:-1;31676:354:0;;32064:26;;31698:321;32064:26;:::i;:::-;32041:50;31550:578;-1:-1:-1;;;;;31550:578:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;699:548:1:-;811:4;840:2;869;858:9;851:21;901:6;895:13;944:6;939:2;928:9;924:18;917:34;969:1;979:140;993:6;990:1;987:13;979:140;;;1088:14;;;1084:23;;1078:30;1054:17;;;1073:2;1050:26;1043:66;1008:10;;979:140;;;983:3;1168:1;1163:2;1154:6;1143:9;1139:22;1135:31;1128:42;1238:2;1231;1227:7;1222:2;1214:6;1210:15;1206:29;1195:9;1191:45;1187:54;1179:62;;;;699:548;;;;:::o;1252:131::-;-1:-1:-1;;;;;1327:31:1;;1317:42;;1307:70;;1373:1;1370;1363:12;1388:315;1456:6;1464;1517:2;1505:9;1496:7;1492:23;1488:32;1485:52;;;1533:1;1530;1523:12;1485:52;1572:9;1559:23;1591:31;1616:5;1591:31;:::i;:::-;1641:5;1693:2;1678:18;;;;1665:32;;-1:-1:-1;;;1388:315:1:o;1900:180::-;1959:6;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;-1:-1:-1;2051:23:1;;1900:180;-1:-1:-1;1900:180:1:o;2293:661::-;2415:6;2423;2431;2439;2447;2455;2463;2471;2524:3;2512:9;2503:7;2499:23;2495:33;2492:53;;;2541:1;2538;2531:12;2492:53;-1:-1:-1;;2564:23:1;;;2634:2;2619:18;;2606:32;;-1:-1:-1;2685:2:1;2670:18;;2657:32;;2736:2;2721:18;;2708:32;;-1:-1:-1;2787:3:1;2772:19;;2759:33;;-1:-1:-1;2839:3:1;2824:19;;2811:33;;-1:-1:-1;2891:3:1;2876:19;;2863:33;;-1:-1:-1;2943:3:1;2928:19;2915:33;;-1:-1:-1;2293:661:1;-1:-1:-1;2293:661:1:o;2959:456::-;3036:6;3044;3052;3105:2;3093:9;3084:7;3080:23;3076:32;3073:52;;;3121:1;3118;3111:12;3073:52;3160:9;3147:23;3179:31;3204:5;3179:31;:::i;:::-;3229:5;-1:-1:-1;3286:2:1;3271:18;;3258:32;3299:33;3258:32;3299:33;:::i;:::-;2959:456;;3351:7;;-1:-1:-1;;;3405:2:1;3390:18;;;;3377:32;;2959:456::o;3609:160::-;3674:20;;3730:13;;3723:21;3713:32;;3703:60;;3759:1;3756;3749:12;3703:60;3609:160;;;:::o;3774:315::-;3839:6;3847;3900:2;3888:9;3879:7;3875:23;3871:32;3868:52;;;3916:1;3913;3906:12;3868:52;3955:9;3942:23;3974:31;3999:5;3974:31;:::i;:::-;4024:5;-1:-1:-1;4048:35:1;4079:2;4064:18;;4048:35;:::i;:::-;4038:45;;3774:315;;;;;:::o;4094:247::-;4153:6;4206:2;4194:9;4185:7;4181:23;4177:32;4174:52;;;4222:1;4219;4212:12;4174:52;4261:9;4248:23;4280:31;4305:5;4280:31;:::i;4346:269::-;4403:6;4456:2;4444:9;4435:7;4431:23;4427:32;4424:52;;;4472:1;4469;4462:12;4424:52;4511:9;4498:23;4561:4;4554:5;4550:16;4543:5;4540:27;4530:55;;4581:1;4578;4571:12;4620:180;4676:6;4729:2;4717:9;4708:7;4704:23;4700:32;4697:52;;;4745:1;4742;4735:12;4697:52;4768:26;4784:9;4768:26;:::i;5039:388::-;5107:6;5115;5168:2;5156:9;5147:7;5143:23;5139:32;5136:52;;;5184:1;5181;5174:12;5136:52;5223:9;5210:23;5242:31;5267:5;5242:31;:::i;:::-;5292:5;-1:-1:-1;5349:2:1;5334:18;;5321:32;5362:33;5321:32;5362:33;:::i;:::-;5414:7;5404:17;;;5039:388;;;;;:::o;5432:315::-;5500:6;5508;5561:2;5549:9;5540:7;5536:23;5532:32;5529:52;;;5577:1;5574;5567:12;5529:52;5613:9;5600:23;5590:33;;5673:2;5662:9;5658:18;5645:32;5686:31;5711:5;5686:31;:::i;5752:615::-;5838:6;5846;5899:2;5887:9;5878:7;5874:23;5870:32;5867:52;;;5915:1;5912;5905:12;5867:52;5955:9;5942:23;5984:18;6025:2;6017:6;6014:14;6011:34;;;6041:1;6038;6031:12;6011:34;6079:6;6068:9;6064:22;6054:32;;6124:7;6117:4;6113:2;6109:13;6105:27;6095:55;;6146:1;6143;6136:12;6095:55;6186:2;6173:16;6212:2;6204:6;6201:14;6198:34;;;6228:1;6225;6218:12;6198:34;6281:7;6276:2;6266:6;6263:1;6259:14;6255:2;6251:23;6247:32;6244:45;6241:65;;;6302:1;6299;6292:12;6241:65;6333:2;6325:11;;;;;6355:6;;-1:-1:-1;5752:615:1;;-1:-1:-1;;;;5752:615:1:o;6372:380::-;6451:1;6447:12;;;;6494;;;6515:61;;6569:4;6561:6;6557:17;6547:27;;6515:61;6622:2;6614:6;6611:14;6591:18;6588:38;6585:161;;6668:10;6663:3;6659:20;6656:1;6649:31;6703:4;6700:1;6693:15;6731:4;6728:1;6721:15;6585:161;;6372:380;;;:::o;7115:127::-;7176:10;7171:3;7167:20;7164:1;7157:31;7207:4;7204:1;7197:15;7231:4;7228:1;7221:15;7247:128;7314:9;;;7335:11;;;7332:37;;;7349:18;;:::i;7380:127::-;7441:10;7436:3;7432:20;7429:1;7422:31;7472:4;7469:1;7462:15;7496:4;7493:1;7486:15;7512:120;7552:1;7578;7568:35;;7583:18;;:::i;:::-;-1:-1:-1;7617:9:1;;7512:120::o;7637:125::-;7702:9;;;7723:10;;;7720:36;;;7736:18;;:::i;8529:127::-;8590:10;8585:3;8581:20;8578:1;8571:31;8621:4;8618:1;8611:15;8645:4;8642:1;8635:15;8661:175;8698:3;8742:4;8735:5;8731:16;8771:4;8762:7;8759:17;8756:43;;8779:18;;:::i;:::-;8828:1;8815:15;;8661:175;-1:-1:-1;;8661:175:1:o;9334:251::-;9404:6;9457:2;9445:9;9436:7;9432:23;9428:32;9425:52;;;9473:1;9470;9463:12;9425:52;9505:9;9499:16;9524:31;9549:5;9524:31;:::i;9590:980::-;9852:4;9900:3;9889:9;9885:19;9931:6;9920:9;9913:25;9957:2;9995:6;9990:2;9979:9;9975:18;9968:34;10038:3;10033:2;10022:9;10018:18;10011:31;10062:6;10097;10091:13;10128:6;10120;10113:22;10166:3;10155:9;10151:19;10144:26;;10205:2;10197:6;10193:15;10179:29;;10226:1;10236:195;10250:6;10247:1;10244:13;10236:195;;;10315:13;;-1:-1:-1;;;;;10311:39:1;10299:52;;10406:15;;;;10371:12;;;;10347:1;10265:9;10236:195;;;-1:-1:-1;;;;;;;10487:32:1;;;;10482:2;10467:18;;10460:60;-1:-1:-1;;;10551:3:1;10536:19;10529:35;10448:3;9590:980;-1:-1:-1;;;9590:980:1:o;11679:135::-;11718:3;11739:17;;;11736:43;;11759:18;;:::i;:::-;-1:-1:-1;11806:1:1;11795:13;;11679:135::o;11819:127::-;11880:10;11875:3;11871:20;11868:1;11861:31;11911:4;11908:1;11901:15;11935:4;11932:1;11925:15;11951:148;12039:4;12018:12;;;12032;;;12014:31;;12057:13;;12054:39;;;12073:18;;:::i;12104:754::-;12271:4;12319:2;12308:9;12304:18;12349:2;12338:9;12331:21;12372:6;12407;12401:13;12438:6;12430;12423:22;12476:2;12465:9;12461:18;12454:25;;12498:6;12495:1;12488:17;12524:4;12514:14;;12564:2;12561:1;12551:16;12585:1;12595:194;12609:6;12606:1;12603:13;12595:194;;;12674:13;;-1:-1:-1;;;;;12670:39:1;12658:52;;12730:12;;;;12706:1;12765:14;;;;12624:9;12595:194;;;-1:-1:-1;;;12825:18:1;;12818:34;;;;12806:3;12104:754;-1:-1:-1;;12104:754:1:o;12863:168::-;12936:9;;;12967;;12984:15;;;12978:22;;12964:37;12954:71;;13005:18;;:::i;14206:112::-;14238:1;14264;14254:35;;14269:18;;:::i;:::-;-1:-1:-1;14303:9:1;;14206:112::o
Swarm Source
ipfs://5766e92d41d77fa1e234cec206662695fa65d28e984bdc06251373d41fae09d6
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.