Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 19 from a total of 19 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 18037626 | 428 days ago | IN | 0 ETH | 0.00063928 | ||||
Manual Update Mo... | 18037617 | 428 days ago | IN | 0 ETH | 0.00067335 | ||||
Manual Update Mo... | 18037603 | 428 days ago | IN | 0 ETH | 0.00121791 | ||||
Manual Update Mo... | 18037592 | 428 days ago | IN | 0 ETH | 0.00063668 | ||||
Approve | 18037580 | 428 days ago | IN | 0 ETH | 0.00100672 | ||||
Manual Update Mo... | 18037568 | 428 days ago | IN | 0 ETH | 0.00065413 | ||||
Set Auto Mode | 18037560 | 428 days ago | IN | 0 ETH | 0.0007495 | ||||
Approve | 18037546 | 428 days ago | IN | 0 ETH | 0.00088211 | ||||
Approve | 18037517 | 428 days ago | IN | 0 ETH | 0.00084694 | ||||
Approve | 18037498 | 428 days ago | IN | 0 ETH | 0.00090627 | ||||
Approve | 18037483 | 428 days ago | IN | 0 ETH | 0.00103746 | ||||
Approve | 18037460 | 428 days ago | IN | 0 ETH | 0.00097646 | ||||
Approve | 18037458 | 428 days ago | IN | 0 ETH | 0.00104103 | ||||
Change Trading S... | 18037438 | 428 days ago | IN | 0 ETH | 0.00063854 | ||||
Update Pre Fees | 18037430 | 428 days ago | IN | 0 ETH | 0.00206008 | ||||
Approve | 18037424 | 428 days ago | IN | 0 ETH | 0.00126416 | ||||
Update Pre Fees | 18037423 | 428 days ago | IN | 0 ETH | 0.00107455 | ||||
Update Pre Fees | 18037421 | 428 days ago | IN | 0 ETH | 0.0024343 | ||||
0x60018054 | 18037387 | 428 days ago | IN | 0 ETH | 0.16239675 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
TEST
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-01 */ // 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 TEST is IERC20, Ownable { using SafeMath for uint256; address private constant DEAD = address(0xdead); address private constant ZERO = address(0); address private devAddress = address(0x5123a63095b7eabF9e6f9E676C61bDBc8f5D9193); address private treasuryAddress = address(0x5123a63095b7eabF9e6f9E676C61bDBc8f5D9193); address private marketingAddress = address(0x5123a63095b7eabF9e6f9E676C61bDBc8f5D9193); address private liquidityAddress = address(0x578039abDf4Ec211c2baa99c5b409D30ca975Fd6); /** * Token Assets * name, symbol, _decimals totalSupply * This will be defined when we deploy the contract. */ string private _name = "Test"; string private _symbol = "TEST"; 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 = 0; uint256 _buyLiquidityFee = 0; uint256 _buyReflectionFee = 0; uint256 _buyTreasuryFee = 0; uint256 _sellMarketingFee = 0; uint256 _sellLiquidityFee = 0; uint256 _sellReflectionFee = 0; uint256 _sellTreasuryFee = 0; uint256 _marketingDebt = 0; uint256 _liquidityDebt = 0; uint256 _treasuryDebt = 0; /** * Mode & Fee * mode1(BuyTax: treasury=2%, reflection=3%, SellTax: treasury=2%, reflection=3%) * mode2(BuyTax: 0, SellTax: treasury=2%, reflection=2%, luck holder reward=2%) * mode3(BuyTax: auto burn supply=1%, reflections to all top 150 holders=3%, * SellTax: treasury=2%, reflection=3%) * mode4(BuyTax: 0, SellTax: 0) */ uint8 public mode = 0; // current mode bool public isAutoMode = false; uint256 public modeStartTime = 0; uint256 public modePeriod = 3 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: 0, lucky: 0, burn: 0, total: 0}); 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: 2, reflection: 3, lucky: 0, burn: 0, total: 5}); // Mode 4 Fee public mode4BuyTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0}); Fee public mode4SellTax = Fee({treasury: 0, reflection: 0, lucky: 0, burn: 0, total: 0}); 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 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 UNISWAP_V2_ROUTER = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // 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; 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; isReflectionExempt[marketingAddress] = true; isReflectionExempt[liquidityAddress] = 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, 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; _treasuryAmount += _treasuryAmount; _balances[address(this)] += _marketingAmount + _liquidityAmount + _treasuryAmount; uint256 _totalFeeAmount = _marketingAmount + _liquidityAmount + _treasuryAmount + _reflectionFeeAmount; return amount.sub(_totalFeeAmount); } function _takeModeFees(address sender, uint256 amount) internal returns (uint256) { Fee memory _feeTax = sellTax; bool _topReflection = false; if (sender == UNISWAP_V2_PAIR) { _feeTax = buyTax; if (mode == 3) { _topReflection = 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 (_topReflection) { _topHolderReflection(_reflectionFeeAmount); } 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, uint256 amount) internal returns (uint256) { if (mode > 0) { return _takeModeFees(sender, amount); } else { return _takePreFees(sender, amount); } } function _shouldTakeFee(address sender, address recipient) internal view returns (bool) { return !isFeeExempt[sender] || !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 Transfer(address(this), luckyHolder, amount); } } function _topHolderReflection(uint256 amount) internal { topHolderReflectionAmount += 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; // (bool tmpSuccess,) = payable(liquidityAddress).call{value: amountETH}(""); // payable(liquidityAddress).transfer(amountETH); _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); _balances[marketingAddress] -= marketingSwapAmount; } if (liquidityProfit > 0) { payable(liquidityAddress).transfer(liquidityProfit); _balances[liquidityAddress] -= liquiditySwapAmount; } if (treasuryProfit > 0) { payable(treasuryAddress).transfer(treasuryProfit); _balances[treasuryAddress] -= treasurySwapAmount; } } function _changeMode(uint8 mode_) internal { if (mode_ == 2) { buyTax = mode2BuyTax; sellTax = mode2SellTax; } else if (mode_ == 3) { buyTax = mode3BuyTax; sellTax = mode3SellTax; } else if (mode_ == 4) { buyTax = mode4BuyTax; sellTax = mode4SellTax; } else { buyTax = mode1BuyTax; sellTax = mode1SellTax; } mode = mode_; emit UpdateMode(mode_); } function autoUpdateMode() internal { uint8 _currentMode = mode; if (_currentMode == 0) { return; } uint256 deltaTime = block.timestamp - modeStartTime; if (deltaTime < modePeriod) { return; } _currentMode = (_currentMode + 1) % 4; if (_currentMode == 0) { _currentMode = 1; } modeStartTime = block.timestamp; _changeMode(_currentMode); } function manualUpdateMode(uint8 mode_) external onlyOwner { require(mode_ < 5, "Undefined Mode"); _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":"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":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":"address","name":"","type":"address"}],"name":"isReflectionExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"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":[{"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":[{"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
600180546001600160a01b0319908116735123a63095b7eabf9e6f9e676c61bdbc8f5d9193908117909255600280548216831790556003805482169092179091556004805490911673578039abdf4ec211c2baa99c5b409d30ca975fd617815560c060405260809081526315195cdd60e21b60a05260059062000083908262000aa8565b50604080518082019091526004815263151154d560e21b6020820152600690620000ae908262000aa8565b506007805460ff19166012908117909155620000cc90600a62000c7f565b620000dc90633b9aca0062000c96565b6008819055600b805461ffff19166001179055606490620000ff90600262000c96565b6200010b919062000cb0565b600c556064600854600262000121919062000c96565b6200012d919062000cb0565b600d55612710600854600462000144919062000c96565b62000150919062000cb0565b600e555f600f8190556010819055601181905560128190556013819055601481905560158190556016819055601781905560188190556019819055601a805461ffff19169055601b819055612a30601c556040805160a08082018352600280835260036020808501829052848601879052606080860188905260056080968701819052601d805464ffffffffff1990811664050000030290811790925589518089018b52878152808601879052808b018c90528085018c90528901839052601e805482168317905589518089018b528b81528086018c9052808b018c90528085018c905289018b9052601f80548216905589518089018b52878152808601889052808b018890528085018c90526006908a01528454811664060002020217855589518089018b528b8152808601879052808b018c90526001818601526004908a015260218054821664040100030017905589518089018b52968752868501959095528589018a90528583018a9052948701526022805484169094179093558551808501875287815280820188905280870188905280840188905285018790526023805483169055855193840186528684528301869052938201859052810184905201919091526024805490911690553480156200032b575f80fd5b506200033733620009b9565b600154336001600160a01b0390911603620003ad5760405162461bcd60e51b815260206004820152602c60248201527f506c6561736520736574206120646966666572656e742077616c6c657420666f60448201526b72206465764164647265737360a01b606482015260840160405180910390fd5b602780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000410573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000436919062000cd0565b6001600160a01b031663c9c653963060275f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000496573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004bc919062000cd0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000507573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200052d919062000cd0565b602880546001600160a01b0319166001600160a01b0392831617815560088054305f818152600a60209081526040808320602780548a168552908352818420869055875489168452818420869055338085528285209690965560298352818420805460ff19908116600190811790925581548b16865283862080548216831790556002548b1686528386208054821683179055600380548c1687528487208054831684179055600480548d16885285882080548416851790557fbc72c27881d499e9ea29f42d0975d4e269d866b929e1b555435cbfe829a9d20080548416851790557f16f9c3ed1581301300a6478f511a4cd0de0c2efd40004ab5590b096193ba597480548416851790558888528588208054841685179055602a8752858820805484168517905584548d16885285882080548416851790558b548d168852858820805484168517905589885285882080548416851790557f25a1a901705ed15d5376e82511cff743d9474883c82d145cebcc7811e0424a9c80548416851790557f4cd689f77827cc1daa8af882f386f3bb4a1440969e00e514a7b412fe9507a7a9805484168517905590548c1687528487208054831684179055548b1686528386208054821683179055602b9094527fe18c65fb8491ea105d3652ed62258476aaccd771ae89682addbba12f33acc62a80548516821790557fcb067d08c3b0752a639a17b312edc0e4384bd60a697642bbd8bdd8260a31a34780548516821790559054891684528184208054841682179055965488168352808320805483168817905586549097168252868220805482168717905592815285812080548416861790559081529384208054909116909217909155601d546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911760ff60201b199081166401000000009a8b900488168b0217909855601e54602680548289169916989098178682048816909602959095179093168185048616909102909116178183048416909102179093169284900416909202179055546064906200086390600562000c96565b6200086f919062000cb0565b600180546001600160a01b039081165f90815260096020526040808220859055925492519394509116915f80516020620038d483398151915290620008b79085815260200190565b60405180910390a3600180546001600160a01b039081165f908152602c60205260408120805460ff1916841790558254602d8054948501815582525f80516020620038b483398151915290930180546001600160a01b031916939092169290921790556008546200092a90839062000cf8565b335f818152600960205260408082208490555192935090915f80516020620038d483398151915290620009609085815260200190565b60405180910390a35050335f818152602c60205260408120805460ff19166001908117909155602d805491820181559091525f80516020620038b48339815191520180546001600160a01b031916909117905562000d0e565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168062000a3157607f821691505b60208210810362000a5057634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000aa3575f81815260208120601f850160051c8101602086101562000a7e5750805b601f850160051c820191505b8181101562000a9f5782815560010162000a8a565b5050505b505050565b81516001600160401b0381111562000ac45762000ac462000a08565b62000adc8162000ad5845462000a1c565b8462000a56565b602080601f83116001811462000b12575f841562000afa5750858301515b5f19600386901b1c1916600185901b17855562000a9f565b5f85815260208120601f198616915b8281101562000b425788860151825594840194600190910190840162000b21565b508582101562000b6057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000bc457815f190482111562000ba85762000ba862000b70565b8085161562000bb657918102915b93841c939080029062000b89565b509250929050565b5f8262000bdc5750600162000c79565b8162000bea57505f62000c79565b816001811462000c03576002811462000c0e5762000c2e565b600191505062000c79565b60ff84111562000c225762000c2262000b70565b50506001821b62000c79565b5060208310610133831016604e8410600b841016171562000c53575081810a62000c79565b62000c5f838362000b84565b805f190482111562000c755762000c7562000b70565b0290505b92915050565b5f62000c8f60ff84168362000bcc565b9392505050565b808202811582820484141762000c795762000c7962000b70565b5f8262000ccb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121562000ce1575f80fd5b81516001600160a01b038116811462000c8f575f80fd5b8181038181111562000c795762000c7962000b70565b612b988062000d1c5f395ff3fe60806040526004361061030f575f3560e01c806370a08231116101a3578063a9059cbb116100f2578063dd62ed3e11610092578063f2fde38b1161006d578063f2fde38b14610a8d578063f40acc3d14610aac578063f9c683c014610acb578063ff131b4e14610aea575f80fd5b8063dd62ed3e146109ea578063e01bb68814610a2e578063e839363b14610a4d575f80fd5b8063c15d854f116100cd578063c15d854f1461091d578063cc1776d31461095d578063cc274b291461099d578063d4d7b19a146109bc575f80fd5b8063a9059cbb14610890578063b1bd3774146108af578063b876e5e2146108dd575f80fd5b80638a8c523c1161015d57806394da5dbf1161013857806394da5dbf146107ef57806395d89b411461081d5780639dee70dd14610831578063a82ed9ec14610871575f80fd5b80638a8c523c1461079c5780638da5cb5b146107b557806393e6b04a146107d1575f80fd5b806370a0823114610701578063715018a61461072057806373ad468a146107345780637437681e1461074957806376e88ddb1461075e578063834a33cf1461077d575f80fd5b80632a11ced01161025f5780635220179f11610219578063573d8cf9116101f4578063573d8cf9146106a4578063615494be146106b9578063658d4b7f146106ce57806366eb3785146106ed575f80fd5b80635220179f14610647578063526b13fd14610666578063571ac8b014610685575f80fd5b80632a11ced01461054d5780632c957aa014610584578063313ce567146105a35780633307d372146105ba5780633f4218e0146105d95780634f7041a514610607575f80fd5b8063142a2711116102ca578063204a6836116102a5578063204a6836146104a557806323b872dd146104e5578063295a521214610504578063296914481461052f575f80fd5b8063142a27111461045b578063166319eb1461047057806318160ddd14610491575f80fd5b8062adef681461031a5780630445b66714610393578063057a2c0e146103b657806306fdde03146103cb578063095ea7b3146103ec578063122eff2b1461041b575f80fd5b3661031657005b5f80fd5b348015610325575f80fd5b50601d5461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0015b60405180910390f35b34801561039e575f80fd5b506103a8600e5481565b60405190815260200161038a565b3480156103c1575f80fd5b506103a8601b5481565b3480156103d6575f80fd5b506103df610b2a565b60405161038a91906126ee565b3480156103f7575f80fd5b5061040b61040636600461274d565b610bba565b604051901515815260200161038a565b348015610426575f80fd5b5060235461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610466575f80fd5b506103a8602f5481565b34801561047b575f80fd5b5061048f61048a366004612777565b610c26565b005b34801561049c575f80fd5b506008546103a8565b3480156104b0575f80fd5b50601f5461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156104f0575f80fd5b5061040b6104ff3660046127c7565b610c54565b34801561050f575f80fd5b50601a5461051d9060ff1681565b60405160ff909116815260200161038a565b34801561053a575f80fd5b50600b5461040b90610100900460ff1681565b348015610558575f80fd5b5061056c610567366004612805565b610d5c565b6040516001600160a01b03909116815260200161038a565b34801561058f575f80fd5b5061048f61059e366004612830565b610d84565b3480156105ae575f80fd5b5060075460ff1661051d565b3480156105c5575f80fd5b5061048f6105d4366004612830565b610db6565b3480156105e4575f80fd5b5061040b6105f3366004612863565b60296020525f908152604090205460ff1681565b348015610612575f80fd5b5060255461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610652575f80fd5b5061048f61066136600461287e565b610de8565b348015610671575f80fd5b5061048f61068036600461289e565b610e40565b348015610690575f80fd5b5061040b61069f366004612863565b610e90565b3480156106af575f80fd5b506103a8601c5481565b3480156106c4575f80fd5b506103a8602e5481565b3480156106d9575f80fd5b5061048f6106e8366004612830565b610e9d565b3480156106f8575f80fd5b5061048f610ecf565b34801561070c575f80fd5b506103a861071b366004612863565b610eee565b34801561072b575f80fd5b5061048f610f4c565b34801561073f575f80fd5b506103a8600c5481565b348015610754575f80fd5b506103a8600d5481565b348015610769575f80fd5b5061048f61077836600461289e565b610f5d565b348015610788575f80fd5b5061048f61079736600461289e565b610f7f565b3480156107a7575f80fd5b50600b5461040b9060ff1681565b3480156107c0575f80fd5b505f546001600160a01b031661056c565b3480156107dc575f80fd5b50601a5461040b90610100900460ff1681565b3480156107fa575f80fd5b5061040b610809366004612863565b602b6020525f908152604090205460ff1681565b348015610828575f80fd5b506103df610fa1565b34801561083c575f80fd5b50601e5461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561087c575f80fd5b5060275461056c906001600160a01b031681565b34801561089b575f80fd5b5061040b6108aa36600461274d565b610fb0565b3480156108ba575f80fd5b5061040b6108c9366004612863565b602a6020525f908152604090205460ff1681565b3480156108e8575f80fd5b5060245461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610928575f80fd5b5060205461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610968575f80fd5b5060265461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156109a8575f80fd5b5061048f6109b7366004612805565b610fbc565b3480156109c7575f80fd5b5061040b6109d6366004612863565b602c6020525f908152604090205460ff1681565b3480156109f5575f80fd5b506103a8610a043660046128b7565b6001600160a01b039182165f908152600a6020908152604080832093909416825291909152205490565b348015610a39575f80fd5b5061048f610a48366004612863565b610fc9565b348015610a58575f80fd5b5060225461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a98575f80fd5b5061048f610aa7366004612863565b610ff3565b348015610ab7575f80fd5b5060285461056c906001600160a01b031681565b348015610ad6575f80fd5b5061048f610ae53660046128ee565b611069565b348015610af5575f80fd5b5060215461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b606060058054610b399061295d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b659061295d565b8015610bb05780601f10610b8757610100808354040283529160200191610bb0565b820191905f5260205f20905b815481529060010190602001808311610b9357829003601f168201915b5050505050905090565b335f818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c149086815260200190565b60405180910390a35060015b92915050565b610c2e6111c3565b600f97909755601095909555601193909355601291909155601355601455601555601655565b6001600160a01b0383165f908152600a602090815260408083203384529091528120545f1914610d47576001600160a01b0384165f908152600a60209081526040808320338452909152902054821115610cf55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384165f908152600a60209081526040808320338452909152902054610d239083906129a9565b6001600160a01b0385165f908152600a602090815260408083203384529091529020555b610d5284848461121c565b90505b9392505050565b602d8181548110610d6b575f80fd5b5f918252602090912001546001600160a01b0316905081565b610d8c6111c3565b6001600160a01b03919091165f908152602b60205260409020805460ff1916911515919091179055565b610dbe6111c3565b6001600160a01b03919091165f908152602a60205260409020805460ff1916911515919091179055565b610df06111c3565b60058160ff1610610e345760405162461bcd60e51b815260206004820152600e60248201526d556e646566696e6564204d6f646560901b6044820152606401610cec565b610e3d816113bf565b50565b610e486111c3565b600b805460ff19168215159081179091556040519081527fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223906020015b60405180910390a150565b5f610c2082600854610bba565b610ea56111c3565b6001600160a01b03919091165f908152602960205260409020805460ff1916911515919091179055565b610ed76111c3565b610edf6116f2565b15610eec57610eec611740565b565b6001600160a01b0381165f90815260096020908152604080832054602a90925282205460ff16158015610f2257505f602e54115b8015610f305750602d546002105b15610c2057602d54610f4290826129d0565b610d5590826129e3565b610f546111c3565b610eec5f6118c1565b610f656111c3565b600b80549115156101000261ff0019909216919091179055565b610f876111c3565b601a80549115156101000261ff0019909216919091179055565b606060068054610b399061295d565b5f610d5533848461121c565b610fc46111c3565b600e55565b610fd16111c3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610ffb6111c3565b6001600160a01b0381166110605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cec565b610e3d816118c1565b6110716111c3565b5f602f54116110c25760405162461bcd60e51b815260206004820152601a60248201527f5265776172642073686f756c6420626520617661696c61626c650000000000006044820152606401610cec565b602f545f906110d29083906129d0565b5f602f8190559091505b60ff81168311156111bd578160095f86868560ff16818110611100576111006129f6565b90506020020160208101906111159190612863565b6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461114291906129e3565b909155508490508360ff831681811061115d5761115d6129f6565b90506020020160208101906111729190612863565b6001600160a01b0316306001600160a01b03165f80516020612b43833981519152846040516111a391815260200190565b60405180910390a3806111b581612a0a565b9150506110dc565b50505050565b5f546001600160a01b03163314610eec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cec565b5f6112278484611910565b611231838361198d565b60305460ff161561124e57611247848484611a77565b9050610d55565b6112566116f2565b1561126357611263611740565b6001600160a01b0384165f908152602a602052604090205460ff1661128b5761128b84611b6f565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f908152600990915291909120546112dc918490611bd0565b6001600160a01b0385165f908152600960205260409020556112fd84611bfb565b5f6113088585611ddd565b611312578261131c565b61131c8584611e20565b6001600160a01b0385165f908152600960205260409020549091506113419082611e48565b6001600160a01b0385165f9081526009602052604090205561136284611bfb565b836001600160a01b0316856001600160a01b03165f80516020612b438339815191528560405161139491815260200190565b60405180910390a3601a54610100900460ff16156113b4576113b4611e53565b506001949350505050565b8060ff1660020361147f57601f546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b02179098556020546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790556116b0565b8060ff1660030361153f576021546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b02179098556022546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790556116b0565b8060ff166004036115ff576023546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b02179098556024546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790556116b0565b601d546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855601e546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790555b601a805460ff191660ff83169081179091556040519081527f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e8690602001610e85565b6028545f906001600160a01b031633148015906117165750600b54610100900460ff165b8015611725575060305460ff16155b801561173b5750600e5461173830610eee565b10155b905090565b6030805460ff191660011790555f61175730610eee565b602754909150611770906001600160a01b031682610bba565b506040805160028082526060820183525f9260208301908036833701905050905030815f815181106117a4576117a46129f6565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156117fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181f9190612a28565b81600181518110611832576118326129f6565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac947906118779085905f90869030904290600401612a43565b5f604051808303815f87803b15801561188e575f80fd5b505af11580156118a0573d5f803e3d5ffd5b505050505f4790506118b28184611eb8565b50506030805460ff1916905550565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b5460ff16611989576028546001600160a01b0383811691161480159061194657506028546001600160a01b03828116911614155b6119895760405162461bcd60e51b815260206004820152601460248201527354726164696e672069732064697361626c65642160601b6044820152606401610cec565b5050565b6001600160a01b0382165f908152602b602052604090205460ff1661198957600d54811115611a095760405162461bcd60e51b815260206004820152602260248201527f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d697465604482015261642160f01b6064820152608401610cec565b5f81611a1484610eee565b611a1e91906129e3565b9050600c54811115611a725760405162461bcd60e51b815260206004820152601760248201527f4d61782062616c616e6365206973206c696d69746564210000000000000000006044820152606401610cec565b505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600990915291822054611ac7918490611bd0565b6001600160a01b0385165f90815260096020526040902055611ae884611bfb565b6001600160a01b0383165f90815260096020526040902054611b0a9083611e48565b6001600160a01b0384165f90815260096020526040902055611b2b83611bfb565b826001600160a01b0316846001600160a01b03165f80516020612b4383398151915284604051611b5d91815260200190565b60405180910390a35060019392505050565b602e5415610e3d57602d54602e545f91611b88916129d0565b905080602e5f828254611b9b91906129a9565b90915550506001600160a01b0382165f9081526009602052604081208054839290611bc79084906129e3565b90915550505050565b5f8184841115611bf35760405162461bcd60e51b8152600401610cec91906126ee565b505050900390565b5f611c0582610eee565b90508015611c92576001600160a01b0382165f908152602c602052604090205460ff1661198957506001600160a01b03165f818152602c60205260408120805460ff19166001908117909155602d805491820181559091527f4a2cc91ee622da3bc833a54c37ffcb6f3ec23b7793efc5eaf5e71b7b406c5c060180546001600160a01b0319169091179055565b6001600160a01b0382165f908152602c602052604090205460ff1615611989576001600160a01b0382165f908152602c60205260408120805460ff191690555b602d54611ce1906001906129a9565b811015611da757826001600160a01b0316602d8281548110611d0557611d056129f6565b5f918252602090912001546001600160a01b031603611d9557602d8054611d2e906001906129a9565b81548110611d3e57611d3e6129f6565b5f91825260209091200154602d80546001600160a01b039092169183908110611d6957611d696129f6565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611d9f81612ab2565b915050611cd2565b50602d805480611db957611db9612aca565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001600160a01b0382165f9081526029602052604081205460ff161580610d555750506001600160a01b03165f9081526029602052604090205460ff1615919050565b601a545f9060ff1615611e3e57611e3783836120ca565b9050610c20565b611e3783836123b2565b5f610d5582846129e3565b601a5460ff165f819003611e645750565b5f601b5442611e7391906129a9565b9050601c54811015611e83575050565b6004611e90836001612ade565b611e9a9190612af7565b91508160ff165f03611eab57600191505b42601b55611989826113bf565b5f601954601854601754611ecc91906129e3565b611ed691906129e3565b90505f8160175485611ee89190612b18565b611ef291906129d0565b90505f8260175485611f049190612b18565b611f0e91906129d0565b90505f8360185487611f209190612b18565b611f2a91906129d0565b90505f8460185487611f3c9190612b18565b611f4691906129d0565b90505f82611f54868a6129a9565b611f5e91906129a9565b90505f82611f6c868a6129a9565b611f7691906129a9565b90508515611fe5576003546040516001600160a01b039091169087156108fc029088905f818181858888f19350505050158015611fb5573d5f803e3d5ffd5b506003546001600160a01b03165f9081526009602052604081208054879290611fdf9084906129a9565b90915550505b8315612052576004546040516001600160a01b039091169085156108fc029086905f818181858888f19350505050158015612022573d5f803e3d5ffd5b506004546001600160a01b03165f908152600960205260408120805485929061204c9084906129a9565b90915550505b81156120bf576002546040516001600160a01b039091169083156108fc029084905f818181858888f1935050505015801561208f573d5f803e3d5ffd5b506002546001600160a01b03165f90815260096020526040812080548392906120b99084906129a9565b90915550505b505050505050505050565b6040805160a08101825260265460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900490911660808201526028545f919082906001600160a01b039081169086160361218e576040805160a08101825260255460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900482166080820152601a549093501660030361218e575060015b5f6064836080015160ff16866121a49190612b18565b6121ae91906129d0565b835190915060ff161561221d575f836080015160ff16845f015160ff16836121d69190612b18565b6121e091906129d0565b90508060195f8282546121f391906129e3565b9091555050305f90815260096020526040812080548392906122169084906129e3565b9091555050505b602083015160ff16156122bc575f836080015160ff16846020015160ff16836122469190612b18565b61225091906129d0565b90508215612266576122618161255e565b6122ba565b80602e5f82825461227791906129e3565b9091555050602e546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b505b604083015160ff16156122fc575f836080015160ff16846040015160ff16836122e59190612b18565b6122ef91906129d0565b90506122fa81612577565b505b606083015160ff161561239e575f836080015160ff16846060015160ff16836123259190612b18565b61232f91906129d0565b61dead5f90815260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb193075003785805492935083929091906123719084906129e3565b909155505060405181815261dead9030905f80516020612b438339815191529060200160405180910390a3505b6123a88582612660565b9695505050505050565b6013546014546015546016546028545f94939291906001600160a01b03908116908816036123ef57600f5493506010549250601154915060125490505b5f60646123fc8689612b18565b61240691906129d0565b90505f6064612415868a612b18565b61241f91906129d0565b90505f606461242e858b612b18565b61243891906129d0565b90505f6064612447878c612b18565b61245191906129d0565b905085156124ad5780602e5f82825461246a91906129e3565b9091555050602e546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b8360175f8282546124be91906129e3565b925050819055508260185f8282546124d691906129e3565b909155506124e6905082806129e3565b9150816124f384866129e3565b6124fd91906129e3565b305f908152600960205260408120805490919061251b9084906129e3565b909155505f9050818361252e86886129e3565b61253891906129e3565b61254291906129e3565b905061254e8b82612660565b9c9b505050505050505050505050565b80602f5f82825461256f91906129e3565b909155505050565b5f61258360018061266b565b90505f602d8281548110612599576125996129f6565b5f918252602090912001546001600160a01b0316905080158015906125c957506001600160a01b03811661dead14155b80156125e357506027546001600160a01b03828116911614155b80156125fd57506028546001600160a01b03828116911614155b15611a72576001600160a01b0381165f90815260096020526040812080548592906126299084906129e3565b90915550506040518381526001600160a01b0382169030905f80516020612b438339815191529060200160405180910390a3505050565b5f610d5582846129a9565b5f80333a434261267c6001836129a9565b604080516001600160a01b039096166020870152850193909352606084019190915260808301524060a082015260c0810185905260e081018490526101000160408051601f198184030181529190528051602090910120602d549091505f906126e59083612b2f565b95945050505050565b5f6020808352835180828501525f5b81811015612719578581018301518582016040015282016126fd565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e3d575f80fd5b5f806040838503121561275e575f80fd5b823561276981612739565b946020939093013593505050565b5f805f805f805f80610100898b03121561278f575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f805f606084860312156127d9575f80fd5b83356127e481612739565b925060208401356127f481612739565b929592945050506040919091013590565b5f60208284031215612815575f80fd5b5035919050565b8035801515811461282b575f80fd5b919050565b5f8060408385031215612841575f80fd5b823561284c81612739565b915061285a6020840161281c565b90509250929050565b5f60208284031215612873575f80fd5b8135610d5581612739565b5f6020828403121561288e575f80fd5b813560ff81168114610d55575f80fd5b5f602082840312156128ae575f80fd5b610d558261281c565b5f80604083850312156128c8575f80fd5b82356128d381612739565b915060208301356128e381612739565b809150509250929050565b5f80602083850312156128ff575f80fd5b823567ffffffffffffffff80821115612916575f80fd5b818501915085601f830112612929575f80fd5b813581811115612937575f80fd5b8660208260051b850101111561294b575f80fd5b60209290920196919550909350505050565b600181811c9082168061297157607f821691505b60208210810361298f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2057610c20612995565b634e487b7160e01b5f52601260045260245ffd5b5f826129de576129de6129bc565b500490565b80820180821115610c2057610c20612995565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff8103612a1f57612a1f612995565b60010192915050565b5f60208284031215612a38575f80fd5b8151610d5581612739565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612a915784516001600160a01b031683529383019391830191600101612a6c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f60018201612ac357612ac3612995565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b60ff8181168382160190811115610c2057610c20612995565b5f60ff831680612b0957612b096129bc565b8060ff84160691505092915050565b8082028115828204841417610c2057610c20612995565b5f82612b3d57612b3d6129bc565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e1279ebefda73a806884f03373bfbe29bc8200aef1a9b4332baa6bb0571856f664736f6c634300081500334a2cc91ee622da3bc833a54c37ffcb6f3ec23b7793efc5eaf5e71b7b406c5c06ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
Deployed Bytecode
0x60806040526004361061030f575f3560e01c806370a08231116101a3578063a9059cbb116100f2578063dd62ed3e11610092578063f2fde38b1161006d578063f2fde38b14610a8d578063f40acc3d14610aac578063f9c683c014610acb578063ff131b4e14610aea575f80fd5b8063dd62ed3e146109ea578063e01bb68814610a2e578063e839363b14610a4d575f80fd5b8063c15d854f116100cd578063c15d854f1461091d578063cc1776d31461095d578063cc274b291461099d578063d4d7b19a146109bc575f80fd5b8063a9059cbb14610890578063b1bd3774146108af578063b876e5e2146108dd575f80fd5b80638a8c523c1161015d57806394da5dbf1161013857806394da5dbf146107ef57806395d89b411461081d5780639dee70dd14610831578063a82ed9ec14610871575f80fd5b80638a8c523c1461079c5780638da5cb5b146107b557806393e6b04a146107d1575f80fd5b806370a0823114610701578063715018a61461072057806373ad468a146107345780637437681e1461074957806376e88ddb1461075e578063834a33cf1461077d575f80fd5b80632a11ced01161025f5780635220179f11610219578063573d8cf9116101f4578063573d8cf9146106a4578063615494be146106b9578063658d4b7f146106ce57806366eb3785146106ed575f80fd5b80635220179f14610647578063526b13fd14610666578063571ac8b014610685575f80fd5b80632a11ced01461054d5780632c957aa014610584578063313ce567146105a35780633307d372146105ba5780633f4218e0146105d95780634f7041a514610607575f80fd5b8063142a2711116102ca578063204a6836116102a5578063204a6836146104a557806323b872dd146104e5578063295a521214610504578063296914481461052f575f80fd5b8063142a27111461045b578063166319eb1461047057806318160ddd14610491575f80fd5b8062adef681461031a5780630445b66714610393578063057a2c0e146103b657806306fdde03146103cb578063095ea7b3146103ec578063122eff2b1461041b575f80fd5b3661031657005b5f80fd5b348015610325575f80fd5b50601d5461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0015b60405180910390f35b34801561039e575f80fd5b506103a8600e5481565b60405190815260200161038a565b3480156103c1575f80fd5b506103a8601b5481565b3480156103d6575f80fd5b506103df610b2a565b60405161038a91906126ee565b3480156103f7575f80fd5b5061040b61040636600461274d565b610bba565b604051901515815260200161038a565b348015610426575f80fd5b5060235461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610466575f80fd5b506103a8602f5481565b34801561047b575f80fd5b5061048f61048a366004612777565b610c26565b005b34801561049c575f80fd5b506008546103a8565b3480156104b0575f80fd5b50601f5461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156104f0575f80fd5b5061040b6104ff3660046127c7565b610c54565b34801561050f575f80fd5b50601a5461051d9060ff1681565b60405160ff909116815260200161038a565b34801561053a575f80fd5b50600b5461040b90610100900460ff1681565b348015610558575f80fd5b5061056c610567366004612805565b610d5c565b6040516001600160a01b03909116815260200161038a565b34801561058f575f80fd5b5061048f61059e366004612830565b610d84565b3480156105ae575f80fd5b5060075460ff1661051d565b3480156105c5575f80fd5b5061048f6105d4366004612830565b610db6565b3480156105e4575f80fd5b5061040b6105f3366004612863565b60296020525f908152604090205460ff1681565b348015610612575f80fd5b5060255461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610652575f80fd5b5061048f61066136600461287e565b610de8565b348015610671575f80fd5b5061048f61068036600461289e565b610e40565b348015610690575f80fd5b5061040b61069f366004612863565b610e90565b3480156106af575f80fd5b506103a8601c5481565b3480156106c4575f80fd5b506103a8602e5481565b3480156106d9575f80fd5b5061048f6106e8366004612830565b610e9d565b3480156106f8575f80fd5b5061048f610ecf565b34801561070c575f80fd5b506103a861071b366004612863565b610eee565b34801561072b575f80fd5b5061048f610f4c565b34801561073f575f80fd5b506103a8600c5481565b348015610754575f80fd5b506103a8600d5481565b348015610769575f80fd5b5061048f61077836600461289e565b610f5d565b348015610788575f80fd5b5061048f61079736600461289e565b610f7f565b3480156107a7575f80fd5b50600b5461040b9060ff1681565b3480156107c0575f80fd5b505f546001600160a01b031661056c565b3480156107dc575f80fd5b50601a5461040b90610100900460ff1681565b3480156107fa575f80fd5b5061040b610809366004612863565b602b6020525f908152604090205460ff1681565b348015610828575f80fd5b506103df610fa1565b34801561083c575f80fd5b50601e5461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b34801561087c575f80fd5b5060275461056c906001600160a01b031681565b34801561089b575f80fd5b5061040b6108aa36600461274d565b610fb0565b3480156108ba575f80fd5b5061040b6108c9366004612863565b602a6020525f908152604090205460ff1681565b3480156108e8575f80fd5b5060245461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610928575f80fd5b5060205461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610968575f80fd5b5060265461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b3480156109a8575f80fd5b5061048f6109b7366004612805565b610fbc565b3480156109c7575f80fd5b5061040b6109d6366004612863565b602c6020525f908152604090205460ff1681565b3480156109f5575f80fd5b506103a8610a043660046128b7565b6001600160a01b039182165f908152600a6020908152604080832093909416825291909152205490565b348015610a39575f80fd5b5061048f610a48366004612863565b610fc9565b348015610a58575f80fd5b5060225461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b348015610a98575f80fd5b5061048f610aa7366004612863565b610ff3565b348015610ab7575f80fd5b5060285461056c906001600160a01b031681565b348015610ad6575f80fd5b5061048f610ae53660046128ee565b611069565b348015610af5575f80fd5b5060215461035a9060ff80821691610100810482169162010000820481169163010000008104821691600160201b9091041685565b606060058054610b399061295d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b659061295d565b8015610bb05780601f10610b8757610100808354040283529160200191610bb0565b820191905f5260205f20905b815481529060010190602001808311610b9357829003601f168201915b5050505050905090565b335f818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c149086815260200190565b60405180910390a35060015b92915050565b610c2e6111c3565b600f97909755601095909555601193909355601291909155601355601455601555601655565b6001600160a01b0383165f908152600a602090815260408083203384529091528120545f1914610d47576001600160a01b0384165f908152600a60209081526040808320338452909152902054821115610cf55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384165f908152600a60209081526040808320338452909152902054610d239083906129a9565b6001600160a01b0385165f908152600a602090815260408083203384529091529020555b610d5284848461121c565b90505b9392505050565b602d8181548110610d6b575f80fd5b5f918252602090912001546001600160a01b0316905081565b610d8c6111c3565b6001600160a01b03919091165f908152602b60205260409020805460ff1916911515919091179055565b610dbe6111c3565b6001600160a01b03919091165f908152602a60205260409020805460ff1916911515919091179055565b610df06111c3565b60058160ff1610610e345760405162461bcd60e51b815260206004820152600e60248201526d556e646566696e6564204d6f646560901b6044820152606401610cec565b610e3d816113bf565b50565b610e486111c3565b600b805460ff19168215159081179091556040519081527fa2974e0f27442edd60c8b32f67b3197c4da62252841bfed6068f393c853de223906020015b60405180910390a150565b5f610c2082600854610bba565b610ea56111c3565b6001600160a01b03919091165f908152602960205260409020805460ff1916911515919091179055565b610ed76111c3565b610edf6116f2565b15610eec57610eec611740565b565b6001600160a01b0381165f90815260096020908152604080832054602a90925282205460ff16158015610f2257505f602e54115b8015610f305750602d546002105b15610c2057602d54610f4290826129d0565b610d5590826129e3565b610f546111c3565b610eec5f6118c1565b610f656111c3565b600b80549115156101000261ff0019909216919091179055565b610f876111c3565b601a80549115156101000261ff0019909216919091179055565b606060068054610b399061295d565b5f610d5533848461121c565b610fc46111c3565b600e55565b610fd16111c3565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b610ffb6111c3565b6001600160a01b0381166110605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610cec565b610e3d816118c1565b6110716111c3565b5f602f54116110c25760405162461bcd60e51b815260206004820152601a60248201527f5265776172642073686f756c6420626520617661696c61626c650000000000006044820152606401610cec565b602f545f906110d29083906129d0565b5f602f8190559091505b60ff81168311156111bd578160095f86868560ff16818110611100576111006129f6565b90506020020160208101906111159190612863565b6001600160a01b03166001600160a01b031681526020019081526020015f205f82825461114291906129e3565b909155508490508360ff831681811061115d5761115d6129f6565b90506020020160208101906111729190612863565b6001600160a01b0316306001600160a01b03165f80516020612b43833981519152846040516111a391815260200190565b60405180910390a3806111b581612a0a565b9150506110dc565b50505050565b5f546001600160a01b03163314610eec5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610cec565b5f6112278484611910565b611231838361198d565b60305460ff161561124e57611247848484611a77565b9050610d55565b6112566116f2565b1561126357611263611740565b6001600160a01b0384165f908152602a602052604090205460ff1661128b5761128b84611b6f565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f908152600990915291909120546112dc918490611bd0565b6001600160a01b0385165f908152600960205260409020556112fd84611bfb565b5f6113088585611ddd565b611312578261131c565b61131c8584611e20565b6001600160a01b0385165f908152600960205260409020549091506113419082611e48565b6001600160a01b0385165f9081526009602052604090205561136284611bfb565b836001600160a01b0316856001600160a01b03165f80516020612b438339815191528560405161139491815260200190565b60405180910390a3601a54610100900460ff16156113b4576113b4611e53565b506001949350505050565b8060ff1660020361147f57601f546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b02179098556020546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790556116b0565b8060ff1660030361153f576021546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b02179098556022546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790556116b0565b8060ff166004036115ff576023546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b02179098556024546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790556116b0565b601d546025805460ff80841661ffff1992831617610100808604831681029190911763ffff000019908116620100008088048516810263ff00000019908116929092176301000000808a04871681029190911764ff0000000019908116600160201b9a8b900488168b0217909855601e546026805482891699169890981786820488169096029590951790931681850486169091029091161781830484169091021790931692849004169092021790555b601a805460ff191660ff83169081179091556040519081527f3767691dd0ddd9d4be17e4e8e94e164993de91ae51d4fad9ad16b3ff4b7b1e8690602001610e85565b6028545f906001600160a01b031633148015906117165750600b54610100900460ff165b8015611725575060305460ff16155b801561173b5750600e5461173830610eee565b10155b905090565b6030805460ff191660011790555f61175730610eee565b602754909150611770906001600160a01b031682610bba565b506040805160028082526060820183525f9260208301908036833701905050905030815f815181106117a4576117a46129f6565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156117fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061181f9190612a28565b81600181518110611832576118326129f6565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac947906118779085905f90869030904290600401612a43565b5f604051808303815f87803b15801561188e575f80fd5b505af11580156118a0573d5f803e3d5ffd5b505050505f4790506118b28184611eb8565b50506030805460ff1916905550565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600b5460ff16611989576028546001600160a01b0383811691161480159061194657506028546001600160a01b03828116911614155b6119895760405162461bcd60e51b815260206004820152601460248201527354726164696e672069732064697361626c65642160601b6044820152606401610cec565b5050565b6001600160a01b0382165f908152602b602052604090205460ff1661198957600d54811115611a095760405162461bcd60e51b815260206004820152602260248201527f4d6178207472616e73616374696f6e20616d6f756e74206973206c696d697465604482015261642160f01b6064820152608401610cec565b5f81611a1484610eee565b611a1e91906129e3565b9050600c54811115611a725760405162461bcd60e51b815260206004820152601760248201527f4d61782062616c616e6365206973206c696d69746564210000000000000000006044820152606401610cec565b505050565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600990915291822054611ac7918490611bd0565b6001600160a01b0385165f90815260096020526040902055611ae884611bfb565b6001600160a01b0383165f90815260096020526040902054611b0a9083611e48565b6001600160a01b0384165f90815260096020526040902055611b2b83611bfb565b826001600160a01b0316846001600160a01b03165f80516020612b4383398151915284604051611b5d91815260200190565b60405180910390a35060019392505050565b602e5415610e3d57602d54602e545f91611b88916129d0565b905080602e5f828254611b9b91906129a9565b90915550506001600160a01b0382165f9081526009602052604081208054839290611bc79084906129e3565b90915550505050565b5f8184841115611bf35760405162461bcd60e51b8152600401610cec91906126ee565b505050900390565b5f611c0582610eee565b90508015611c92576001600160a01b0382165f908152602c602052604090205460ff1661198957506001600160a01b03165f818152602c60205260408120805460ff19166001908117909155602d805491820181559091527f4a2cc91ee622da3bc833a54c37ffcb6f3ec23b7793efc5eaf5e71b7b406c5c060180546001600160a01b0319169091179055565b6001600160a01b0382165f908152602c602052604090205460ff1615611989576001600160a01b0382165f908152602c60205260408120805460ff191690555b602d54611ce1906001906129a9565b811015611da757826001600160a01b0316602d8281548110611d0557611d056129f6565b5f918252602090912001546001600160a01b031603611d9557602d8054611d2e906001906129a9565b81548110611d3e57611d3e6129f6565b5f91825260209091200154602d80546001600160a01b039092169183908110611d6957611d696129f6565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b80611d9f81612ab2565b915050611cd2565b50602d805480611db957611db9612aca565b5f8281526020902081015f1990810180546001600160a01b03191690550190555050565b6001600160a01b0382165f9081526029602052604081205460ff161580610d555750506001600160a01b03165f9081526029602052604090205460ff1615919050565b601a545f9060ff1615611e3e57611e3783836120ca565b9050610c20565b611e3783836123b2565b5f610d5582846129e3565b601a5460ff165f819003611e645750565b5f601b5442611e7391906129a9565b9050601c54811015611e83575050565b6004611e90836001612ade565b611e9a9190612af7565b91508160ff165f03611eab57600191505b42601b55611989826113bf565b5f601954601854601754611ecc91906129e3565b611ed691906129e3565b90505f8160175485611ee89190612b18565b611ef291906129d0565b90505f8260175485611f049190612b18565b611f0e91906129d0565b90505f8360185487611f209190612b18565b611f2a91906129d0565b90505f8460185487611f3c9190612b18565b611f4691906129d0565b90505f82611f54868a6129a9565b611f5e91906129a9565b90505f82611f6c868a6129a9565b611f7691906129a9565b90508515611fe5576003546040516001600160a01b039091169087156108fc029088905f818181858888f19350505050158015611fb5573d5f803e3d5ffd5b506003546001600160a01b03165f9081526009602052604081208054879290611fdf9084906129a9565b90915550505b8315612052576004546040516001600160a01b039091169085156108fc029086905f818181858888f19350505050158015612022573d5f803e3d5ffd5b506004546001600160a01b03165f908152600960205260408120805485929061204c9084906129a9565b90915550505b81156120bf576002546040516001600160a01b039091169083156108fc029084905f818181858888f1935050505015801561208f573d5f803e3d5ffd5b506002546001600160a01b03165f90815260096020526040812080548392906120b99084906129a9565b90915550505b505050505050505050565b6040805160a08101825260265460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900490911660808201526028545f919082906001600160a01b039081169086160361218e576040805160a08101825260255460ff80821683526101008204811660208401526201000082048116938301939093526301000000810483166060830152600160201b900482166080820152601a549093501660030361218e575060015b5f6064836080015160ff16866121a49190612b18565b6121ae91906129d0565b835190915060ff161561221d575f836080015160ff16845f015160ff16836121d69190612b18565b6121e091906129d0565b90508060195f8282546121f391906129e3565b9091555050305f90815260096020526040812080548392906122169084906129e3565b9091555050505b602083015160ff16156122bc575f836080015160ff16846020015160ff16836122469190612b18565b61225091906129d0565b90508215612266576122618161255e565b6122ba565b80602e5f82825461227791906129e3565b9091555050602e546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b505b604083015160ff16156122fc575f836080015160ff16846040015160ff16836122e59190612b18565b6122ef91906129d0565b90506122fa81612577565b505b606083015160ff161561239e575f836080015160ff16846060015160ff16836123259190612b18565b61232f91906129d0565b61dead5f90815260096020527f960b1051749987b45b5679007fff577a1c2f763ec21c15a6c5eb193075003785805492935083929091906123719084906129e3565b909155505060405181815261dead9030905f80516020612b438339815191529060200160405180910390a3505b6123a88582612660565b9695505050505050565b6013546014546015546016546028545f94939291906001600160a01b03908116908816036123ef57600f5493506010549250601154915060125490505b5f60646123fc8689612b18565b61240691906129d0565b90505f6064612415868a612b18565b61241f91906129d0565b90505f606461242e858b612b18565b61243891906129d0565b90505f6064612447878c612b18565b61245191906129d0565b905085156124ad5780602e5f82825461246a91906129e3565b9091555050602e546040805183815260208101929092527f0541e0aba34cd8c84288e3db56e060e69892cb7cedbcf6d9dee2b48d9c245364910160405180910390a15b8360175f8282546124be91906129e3565b925050819055508260185f8282546124d691906129e3565b909155506124e6905082806129e3565b9150816124f384866129e3565b6124fd91906129e3565b305f908152600960205260408120805490919061251b9084906129e3565b909155505f9050818361252e86886129e3565b61253891906129e3565b61254291906129e3565b905061254e8b82612660565b9c9b505050505050505050505050565b80602f5f82825461256f91906129e3565b909155505050565b5f61258360018061266b565b90505f602d8281548110612599576125996129f6565b5f918252602090912001546001600160a01b0316905080158015906125c957506001600160a01b03811661dead14155b80156125e357506027546001600160a01b03828116911614155b80156125fd57506028546001600160a01b03828116911614155b15611a72576001600160a01b0381165f90815260096020526040812080548592906126299084906129e3565b90915550506040518381526001600160a01b0382169030905f80516020612b438339815191529060200160405180910390a3505050565b5f610d5582846129a9565b5f80333a434261267c6001836129a9565b604080516001600160a01b039096166020870152850193909352606084019190915260808301524060a082015260c0810185905260e081018490526101000160408051601f198184030181529190528051602090910120602d549091505f906126e59083612b2f565b95945050505050565b5f6020808352835180828501525f5b81811015612719578581018301518582016040015282016126fd565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610e3d575f80fd5b5f806040838503121561275e575f80fd5b823561276981612739565b946020939093013593505050565b5f805f805f805f80610100898b03121561278f575f80fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b5f805f606084860312156127d9575f80fd5b83356127e481612739565b925060208401356127f481612739565b929592945050506040919091013590565b5f60208284031215612815575f80fd5b5035919050565b8035801515811461282b575f80fd5b919050565b5f8060408385031215612841575f80fd5b823561284c81612739565b915061285a6020840161281c565b90509250929050565b5f60208284031215612873575f80fd5b8135610d5581612739565b5f6020828403121561288e575f80fd5b813560ff81168114610d55575f80fd5b5f602082840312156128ae575f80fd5b610d558261281c565b5f80604083850312156128c8575f80fd5b82356128d381612739565b915060208301356128e381612739565b809150509250929050565b5f80602083850312156128ff575f80fd5b823567ffffffffffffffff80821115612916575f80fd5b818501915085601f830112612929575f80fd5b813581811115612937575f80fd5b8660208260051b850101111561294b575f80fd5b60209290920196919550909350505050565b600181811c9082168061297157607f821691505b60208210810361298f57634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2057610c20612995565b634e487b7160e01b5f52601260045260245ffd5b5f826129de576129de6129bc565b500490565b80820180821115610c2057610c20612995565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff8103612a1f57612a1f612995565b60010192915050565b5f60208284031215612a38575f80fd5b8151610d5581612739565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b81811015612a915784516001600160a01b031683529383019391830191600101612a6c565b50506001600160a01b03969096166060850152505050608001529392505050565b5f60018201612ac357612ac3612995565b5060010190565b634e487b7160e01b5f52603160045260245ffd5b60ff8181168382160190811115610c2057610c20612995565b5f60ff831680612b0957612b096129bc565b8060ff84160691505092915050565b8082028115828204841417610c2057610c20612995565b5f82612b3d57612b3d6129bc565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220e1279ebefda73a806884f03373bfbe29bc8200aef1a9b4332baa6bb0571856f664736f6c63430008150033
Deployed Bytecode Sourcemap
20755:21326:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23151:87;;;;;;;;;;-1:-1:-1;23151:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23151: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;23151:87:0;;;;;;;;21961:57;;;;;;;;;;;;;;;;;;;663:25:1;;;651:2;636:18;21961:57:0;517:177:1;22885:32:0;;;;;;;;;;;;;;;;27481:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28069:216::-;;;;;;;;;;-1:-1:-1;28069:216:0;;;;;:::i;:::-;;:::i;:::-;;;1873:14:1;;1866:22;1848:41;;1836:2;1821:18;28069:216:0;1708:187:1;23763:87:0;;;;;;;;;;-1:-1:-1;23763:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23763:87:0;;;;;;24378:40;;;;;;;;;;;;;;;;40984:719;;;;;;;;;;-1:-1:-1;40984:719:0;;;;;:::i;:::-;;:::i;:::-;;27181:102;;;;;;;;;;-1:-1:-1;27263:12:0;;27181:102;;23355:87;;;;;;;;;;-1:-1:-1;23355:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23355:87:0;;;;;;28582:441;;;;;;;;;;-1:-1:-1;28582:441:0;;;;;:::i;:::-;;:::i;22803:21::-;;;;;;;;;;-1:-1:-1;22803:21:0;;;;;;;;;;;3199:4:1;3187:17;;;3169:36;;3157:2;3142:18;22803:21:0;3027:184:1;21802:30:0;;;;;;;;;;-1:-1:-1;21802:30:0;;;;;;;;;;;24304:24;;;;;;;;;;-1:-1:-1;24304:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3565:32:1;;;3547:51;;3535:2;3520:18;24304:24:0;3401:203:1;40693:127:0;;;;;;;;;;-1:-1:-1;40693:127:0;;;;;:::i;:::-;;:::i;27291:85::-;;;;;;;;;;-1:-1:-1;27359:9:0;;;;27291:85;;40552:133;;;;;;;;;;-1:-1:-1;40552:133:0;;;;;:::i;:::-;;:::i;24094:43::-;;;;;;;;;;-1:-1:-1;24094:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23954:17;;;;;;;;;;-1:-1:-1;23954:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23954:17:0;;;;;;39578:142;;;;;;;;;;-1:-1:-1;39578:142:0;;;;;:::i;:::-;;:::i;40828:148::-;;;;;;;;;;-1:-1:-1;40828:148:0;;;;;:::i;:::-;;:::i;28293:117::-;;;;;;;;;;-1:-1:-1;28293:117:0;;;;;:::i;:::-;;:::i;22924:35::-;;;;;;;;;;;;;;;;24335:36;;;;;;;;;;;;;;;;40425:119;;;;;;;;;;-1:-1:-1;40425:119:0;;;;;:::i;:::-;;:::i;41840:124::-;;;;;;;;;;;;;:::i;27574:332::-;;;;;;;;;;-1:-1:-1;27574:332:0;;;;;:::i;:::-;;:::i;11975:103::-;;;;;;;;;;;;;:::i;21839:50::-;;;;;;;;;;;;;;;;21902:45;;;;;;;;;;;;;;;;41972:106;;;;;;;;;;-1:-1:-1;41972:106:0;;;;;:::i;:::-;;:::i;39728:93::-;;;;;;;;;;-1:-1:-1;39728:93:0;;;;;:::i;:::-;;:::i;21763:32::-;;;;;;;;;;-1:-1:-1;21763:32:0;;;;;;;;11327:87;;;;;;;;;;-1:-1:-1;11373:7:0;11400:6;-1:-1:-1;;;;;11400:6:0;11327:87;;22848:30;;;;;;;;;;-1:-1:-1;22848:30:0;;;;;;;;;;;24201:47;;;;;;;;;;-1:-1:-1;24201:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27384:89;;;;;;;;;;;;;:::i;23245:88::-;;;;;;;;;;-1:-1:-1;23245:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23245:88:0;;;;;;24005:43;;;;;;;;;;-1:-1:-1;24005:43:0;;;;-1:-1:-1;;;;;24005:43:0;;;28418:156;;;;;;;;;;-1:-1:-1;28418:156:0;;;;;:::i;:::-;;:::i;24144:50::-;;;;;;;;;;-1:-1:-1;24144:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23857:88;;;;;;;;;;-1:-1:-1;23857:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23857:88:0;;;;;;23449;;;;;;;;;;-1:-1:-1;23449:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23449:88:0;;;;;;23978:18;;;;;;;;;;-1:-1:-1;23978:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23978:18:0;;;;;;41711:121;;;;;;;;;;-1:-1:-1;41711:121:0;;;;;:::i;:::-;;:::i;24257:40::-;;;;;;;;;;-1:-1:-1;24257:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27914:147;;;;;;;;;;-1:-1:-1;27914:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;28025:19:0;;;27998:7;28025:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;27914:147;40308:109;;;;;;;;;;-1:-1:-1;40308:109:0;;;;;:::i;:::-;;:::i;23653:88::-;;;;;;;;;;-1:-1:-1;23653:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23653:88:0;;;;;;12233:201;;;;;;;;;;-1:-1:-1;12233:201:0;;;;;:::i;:::-;;:::i;24055:30::-;;;;;;;;;;-1:-1:-1;24055:30:0;;;;-1:-1:-1;;;;;24055:30:0;;;39829:471;;;;;;;;;;-1:-1:-1;39829:471:0;;;;;:::i;:::-;;:::i;23559:87::-;;;;;;;;;;-1:-1:-1;23559:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;23559:87:0;;;;;;27481:85;27520:13;27553:5;27546:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27481:85;:::o;28069:216::-;28173:10;28144:4;28161:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28161:32:0;;;;;;;;;;:41;;;28218:37;28144:4;;28161:32;;28218:37;;;;28196:6;663:25:1;;651:2;636:18;;517:177;28218:37:0;;;;;;;;-1:-1:-1;28273:4:0;28069:216;;;;;:::o;40984:719::-;11213:13;:11;:13::i;:::-;41328:16:::1;:35:::0;;;;41374:16:::1;:35:::0;;;;41420:17:::1;:37:::0;;;;41468:15:::1;:33:::0;;;;41514:17:::1;:37:::0;41562:17:::1;:37:::0;41610:18:::1;:39:::0;41660:16:::1;:35:::0;40984:719::o;28582:441::-;-1:-1:-1;;;;;28703:19:0;;28682:4;28703:19;;;:11;:19;;;;;;;;28723:10;28703:31;;;;;;;;-1:-1:-1;;28703:52:0;28699:257;;-1:-1:-1;;;;;28780:19:0;;;;;;:11;:19;;;;;;;;28800:10;28780:31;;;;;;;;:41;-1:-1:-1;28780:41:0;28772:83;;;;-1:-1:-1;;;28772:83:0;;6639:2:1;28772:83:0;;;6621:21:1;6678:2;6658:18;;;6651:30;6717:31;6697:18;;;6690:59;6766:18;;28772:83:0;;;;;;;;;-1:-1:-1;;;;;28904:19:0;;;;;;:11;:19;;;;;;;;28924:10;28904:31;;;;;;;;:40;;28938:6;;28904:40;:::i;:::-;-1:-1:-1;;;;;28870:19:0;;;;;;:11;:19;;;;;;;;28890:10;28870:31;;;;;;;:74;28699:257;28975:40;28989:6;28997:9;29008:6;28975:13;:40::i;:::-;28968:47;;28582:441;;;;;;:::o;24304:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24304:24:0;;-1:-1:-1;24304:24:0;:::o;40693:127::-;11213:13;:11;:13::i;:::-;-1:-1:-1;;;;;40780:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;40780:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40693:127::o;40552:133::-;11213:13;:11;:13::i;:::-;-1:-1:-1;;;;;40642:26:0;;;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35;;-1:-1:-1;;40642:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40552:133::o;39578:142::-;11213:13;:11;:13::i;:::-;39663:1:::1;39655:5;:9;;;39647:36;;;::::0;-1:-1:-1;;;39647:36:0;;7262:2:1;39647:36:0::1;::::0;::::1;7244:21:1::0;7301:2;7281:18;;;7274:30;-1:-1:-1;;;7320:18:1;;;7313:44;7374:18;;39647:36:0::1;7060:338:1::0;39647:36:0::1;39694:18;39706:5;39694:11;:18::i;:::-;39578:142:::0;:::o;40828:148::-;11213:13;:11;:13::i;:::-;40901::::1;:23:::0;;-1:-1:-1;;40901:23:0::1;::::0;::::1;;::::0;;::::1;::::0;;;40940:28:::1;::::0;1848:41:1;;;40940:28:0::1;::::0;1836:2:1;1821:18;40940:28:0::1;;;;;;;;40828:148:::0;:::o;28293:117::-;28348:4;28372:30;28380:7;28389:12;;28372:7;:30::i;40425:119::-;11213:13;:11;:13::i;:::-;-1:-1:-1;;;;;40508:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;40508:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40425:119::o;41840:124::-;11213:13;:11;:13::i;:::-;41900:17:::1;:15;:17::i;:::-;41896:61;;;41934:11;:9;:11::i;:::-;41840:124::o:0;27574:332::-;-1:-1:-1;;;;;27683:18:0;;27640:7;27683:18;;;:9;:18;;;;;;;;;27717;:27;;;;;;;;27716:28;:57;;;;;27772:1;27748:21;;:25;27716:57;:79;;;;-1:-1:-1;27777:7:0;:14;27794:1;-1:-1:-1;27716:79:0;27712:157;;;27843:7;:14;27828:29;;:12;:29;:::i;:::-;27812:45;;;;:::i;11975:103::-;11213:13;:11;:13::i;:::-;12040:30:::1;12067:1;12040:18;:30::i;41972:106::-:0;11213:13;:11;:13::i;:::-;42046:10:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;42046:24:0;;::::1;::::0;;;::::1;::::0;;41972:106::o;39728:93::-;11213:13;:11;:13::i;:::-;39793:10:::1;:20:::0;;;::::1;;;;-1:-1:-1::0;;39793:20:0;;::::1;::::0;;;::::1;::::0;;39728:93::o;27384:89::-;27425:13;27458:7;27451:14;;;;;:::i;28418:156::-;28498:4;28522:44;28536:10;28548:9;28559:6;28522:13;:44::i;41711:121::-;11213:13;:11;:13::i;:::-;41794::::1;:30:::0;41711:121::o;40308:109::-;11213:13;:11;:13::i;:::-;40382:15:::1;:27:::0;;-1:-1:-1;;;;;;40382:27:0::1;-1:-1:-1::0;;;;;40382:27:0;;;::::1;::::0;;;::::1;::::0;;40308:109::o;12233:201::-;11213:13;:11;:13::i;:::-;-1:-1:-1;;;;;12322:22:0;::::1;12314:73;;;::::0;-1:-1:-1;;;12314:73:0;;7992:2:1;12314:73:0::1;::::0;::::1;7974:21:1::0;8031:2;8011:18;;;8004:30;8070:34;8050:18;;;8043:62;-1:-1:-1;;;8121:18:1;;;8114:36;8167:19;;12314:73:0::1;7790:402:1::0;12314:73:0::1;12398:28;12417:8;12398:18;:28::i;39829:471::-:0;11213:13;:11;:13::i;:::-;39951:1:::1;39923:25;;:29;39915:68;;;::::0;-1:-1:-1;;;39915:68:0;;8399:2:1;39915:68:0::1;::::0;::::1;8381:21:1::0;8438:2;8418:18;;;8411:30;8477:28;8457:18;;;8450:56;8523:18;;39915:68:0::1;8197:350:1::0;39915:68:0::1;40014:25;::::0;39994:17:::1;::::0;40014:46:::1;::::0;40042:11;;40014:46:::1;:::i;:::-;40099:1;40071:25;:29:::0;;;39994:66;;-1:-1:-1;40111:182:0::1;40129:22;::::0;::::1;::::0;-1:-1:-1;40111:182:0::1;;;40202:9;40173;:25;40183:11;;40195:1;40183:14;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40173:25:0::1;-1:-1:-1::0;;;;;40173:25:0::1;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;40255:11:0;;-1:-1:-1;40255:11:0;:14:::1;::::0;::::1;::::0;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40231:50:0::1;40248:4;-1:-1:-1::0;;;;;40231:50:0::1;-1:-1:-1::0;;;;;;;;;;;40271:9:0::1;40231:50;;;;663:25:1::0;;651:2;636:18;;517:177;40231:50:0::1;;;;;;;;40153:3:::0;::::1;::::0;::::1;:::i;:::-;;;;40111:182;;;;39904:396;39829:471:::0;;:::o;11492:132::-;11373:7;11400:6;-1:-1:-1;;;;;11400:6:0;10116:10;11556:23;11548:68;;;;-1:-1:-1;;;11548:68:0;;9066:2:1;11548:68:0;;;9048:21:1;;;9085:18;;;9078:30;9144:34;9124:18;;;9117:62;9196:18;;11548:68:0;8864:356:1;29031:926:0;29123:4;29140:32;29154:6;29162:9;29140:13;:32::i;:::-;29183:36;29201:9;29212:6;29183:17;:36::i;:::-;29234:6;;;;29230:87;;;29264:41;29279:6;29287:9;29298:6;29264:14;:41::i;:::-;29257:48;;;;29230:87;29331:17;:15;:17::i;:::-;29327:61;;;29365:11;:9;:11::i;:::-;-1:-1:-1;;;;;29403:26:0;;;;;;:18;:26;;;;;;;;29398:73;;29445:14;29452:6;29445;:14::i;:::-;29501:53;;;;;;;;;;;-1:-1:-1;;;29501:53:0;;;;;;;;-1:-1:-1;;;;;29501:17:0;;-1:-1:-1;29501:17:0;;;:9;:17;;;;;;;;:53;;29523:6;;29501:21;:53::i;:::-;-1:-1:-1;;;;;29481:17:0;;;;;;:9;:17;;;;;:73;29565:22;29491:6;29565:14;:22::i;:::-;29598;29623:33;29638:6;29646:9;29623:14;:33::i;:::-;:70;;29687:6;29623:70;;;29659:25;29669:6;29677;29659:9;:25::i;:::-;-1:-1:-1;;;;;29727:20:0;;;;;;:9;:20;;;;;;29598:95;;-1:-1:-1;29727:40:0;;29598:95;29727:24;:40::i;:::-;-1:-1:-1;;;;;29704:20:0;;;;;;:9;:20;;;;;:63;29778:25;29714:9;29778:14;:25::i;:::-;29836:9;-1:-1:-1;;;;;29819:35:0;29828:6;-1:-1:-1;;;;;29819:35:0;-1:-1:-1;;;;;;;;;;;29847:6:0;29819:35;;;;663:25:1;;651:2;636:18;;517:177;29819:35:0;;;;;;;;29871:10;;;;;;;29867:59;;;29898:16;:14;:16::i;:::-;-1:-1:-1;29945:4:0;;29031:926;-1:-1:-1;;;;29031:926:0:o;38563:519::-;38621:5;:10;;38630:1;38621:10;38617:402;;38657:11;38648:20;:6;:20;;;;;;-1:-1:-1;;38648:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;38648:20:0;;;;;;;;;;;-1:-1:-1;;38648:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38648:20:0;;;-1:-1:-1;;;38648:20:0;;;;;;;;;;;;38693:12;38683:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38617:402;;;38727:5;:10;;38736:1;38727:10;38723:296;;38763:11;38754:20;:6;:20;;;;;;-1:-1:-1;;38754:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;38754:20:0;;;;;;;;;;;-1:-1:-1;;38754:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38754:20:0;;;-1:-1:-1;;;38754:20:0;;;;;;;;;;;;38799:12;38789:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38723:296;;;38833:5;:10;;38842:1;38833:10;38829:190;;38869:11;38860:20;:6;:20;;;;;;-1:-1:-1;;38860:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;38860:20:0;;;;;;;;;;;-1:-1:-1;;38860:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38860:20:0;;;-1:-1:-1;;;38860:20:0;;;;;;;;;;;;38905:12;38895:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38829:190;;;38959:11;38950:20;:6;:20;;;;;;-1:-1:-1;;38950:20:0;;;;;;;;;;;;;;;;-1:-1:-1;;38950:20:0;;;;;;;;;;;-1:-1:-1;;38950:20:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38950:20:0;;;-1:-1:-1;;;38950:20:0;;;;;;;;;;;;38995:12;38985:22;:7;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38829:190;39029:4;:12;;-1:-1:-1;;39029:12:0;;;;;;;;;;39057:17;;3169:36:1;;;39057:17:0;;3157:2:1;3142:18;39057:17:0;3027:184:1;36444:223:0;36532:15;;36494:4;;-1:-1:-1;;;;;36532:15:0;36518:10;:29;;;;:57;;-1:-1:-1;36565:10:0;;;;;;;36518:57;:82;;;;-1:-1:-1;36594:6:0;;;;36593:7;36518:82;:141;;;;;36646:13;;36618:24;36636:4;36618:9;:24::i;:::-;:41;;36518:141;36511:148;;36444:223;:::o;36675:715::-;24705:6;:13;;-1:-1:-1;;24705:13:0;24714:4;24705:13;;;:6;36748:24:::1;36766:4;36748:9;:24::i;:::-;36799:17;::::0;36725:47;;-1:-1:-1;36783:49:0::1;::::0;-1:-1:-1;;;;;36799:17:0::1;36725:47:::0;36783:7:::1;:49::i;:::-;-1:-1:-1::0;36884:16:0::1;::::0;;36898:1:::1;36884:16:::0;;;;;::::1;::::0;;36860:21:::1;::::0;36884:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;36884:16:0::1;36860:40;;36929:4;36911;36916:1;36911:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36911:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;36955:17:::1;::::0;:24:::1;::::0;;-1:-1:-1;;;36955:24:0;;;;:17;;;::::1;::::0;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;36911:7;;36955:24;;;;;:17;:24:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36945:4;36950:1;36945:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36945:34:0;;::::1;:7;::::0;;::::1;::::0;;;;;:34;36990:17:::1;::::0;:147:::1;::::0;-1:-1:-1;;;36990:147:0;;:17;::::1;::::0;:68:::1;::::0;:147:::1;::::0;37073:12;;36990:17:::1;::::0;37090:4;;37104::::1;::::0;37111:15:::1;::::0;36990:147:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37148:17;37168:21;37148:41;;37346:36;37358:9;37369:12;37346:11;:36::i;:::-;-1:-1:-1::0;;24741:6:0;:14;;-1:-1:-1;;24741:14:0;;;-1:-1:-1;36675:715:0:o;12594:191::-;12668:16;12687:6;;-1:-1:-1;;;;;12704:17:0;;;-1:-1:-1;;;;;;12704:17:0;;;;;;12737:40;;12687:6;;;;;;;12737:40;;12668:16;12737:40;12657:128;12594:191;:::o;34272:227::-;34360:13;;;;34355:137;;34408:15;;-1:-1:-1;;;;;34398:25:0;;;34408:15;;34398:25;;;;:57;;-1:-1:-1;34440:15:0;;-1:-1:-1;;;;;34427:28:0;;;34440:15;;34427:28;;34398:57;34390:90;;;;-1:-1:-1;;;34390:90:0;;10800:2:1;34390:90:0;;;10782:21:1;10839:2;10819:18;;;10812:30;-1:-1:-1;;;10858:18:1;;;10851:50;10918:18;;34390:90:0;10598:344:1;34390:90:0;34272:227;;:::o;34507:364::-;-1:-1:-1;;;;;34599:26:0;;;;;;:15;:26;;;;;;;;34594:270;;34660:5;;34650:6;:15;;34642:62;;;;-1:-1:-1;;;34642:62:0;;11149:2:1;34642:62:0;;;11131:21:1;11188:2;11168:18;;;11161:30;11227:34;11207:18;;;11200:62;-1:-1:-1;;;11278:18:1;;;11271:32;11320:19;;34642:62:0;10947:398:1;34642:62:0;34719:22;34767:6;34744:20;34754:9;34744;:20::i;:::-;:29;;;;:::i;:::-;34719:54;;34814:10;;34796:14;:28;;34788:64;;;;-1:-1:-1;;;34788:64:0;;11552:2:1;34788:64:0;;;11534:21:1;11591:2;11571:18;;;11564:30;11630:25;11610:18;;;11603:53;11673:18;;34788:64:0;11350:347:1;34788:64:0;34627:237;34507:364;;:::o;29965:399::-;30095:53;;;;;;;;;;;-1:-1:-1;;;30095:53:0;;;;;;;;-1:-1:-1;;;;;30095:17:0;;30058:4;30095:17;;;:9;:17;;;;;;;:53;;30117:6;;30095:21;:53::i;:::-;-1:-1:-1;;;;;30075:17:0;;;;;;:9;:17;;;;;:73;30159:22;30085:6;30159:14;:22::i;:::-;-1:-1:-1;;;;;30215:20:0;;;;;;:9;:20;;;;;;:32;;30240:6;30215:24;:32::i;:::-;-1:-1:-1;;;;;30192:20:0;;;;;;:9;:20;;;;;:55;30258:25;30202:9;30258:14;:25::i;:::-;30316:9;-1:-1:-1;;;;;30299:35:0;30308:6;-1:-1:-1;;;;;30299:35:0;-1:-1:-1;;;;;;;;;;;30327:6:0;30299:35;;;;663:25:1;;651:2;636:18;;517:177;30299:35:0;;;;;;;;-1:-1:-1;30352:4:0;29965:399;;;;;:::o;36155:281::-;36211:21;;:25;36207:222;;36301:7;:14;36277:21;;36253;;36277:38;;;:::i;:::-;36253:62;;36355:13;36330:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;36383:17:0;;;;;;:9;:17;;;;;:34;;36404:13;;36383:17;:34;;36404:13;;36383:34;:::i;:::-;;;;-1:-1:-1;;;36155:281:0;:::o;7610:240::-;7730:7;7791:12;7783:6;;;;7775:29;;;;-1:-1:-1;;;7775:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;7826:5:0;;;7610:240::o;35501:646::-;35561:15;35579:17;35589:6;35579:9;:17::i;:::-;35561:35;-1:-1:-1;35611:11:0;;35607:533;;-1:-1:-1;;;;;35644:16:0;;;;;;:8;:16;;;;;;;;35639:120;;-1:-1:-1;;;;;;35681:16:0;;;;;:8;:16;;;;;:23;;-1:-1:-1;;35681:23:0;35700:4;35681:23;;;;;;35723:7;:20;;;;;;;;;;;;;;-1:-1:-1;;;;;;35723:20:0;;;;;;34272:227::o;35607:533::-;-1:-1:-1;;;;;35795:16:0;;;;;;:8;:16;;;;;;;;35791:338;;;-1:-1:-1;;;;;35832:16:0;;35851:5;35832:16;;;:8;:16;;;;;:24;;-1:-1:-1;;35832:24:0;;;35875:207;35898:7;:14;:18;;35915:1;;35898:18;:::i;:::-;35894:1;:22;35875:207;;;35964:6;-1:-1:-1;;;;;35950:20:0;:7;35958:1;35950:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;35950:10:0;:20;35946:117;;36012:7;36020:14;;:18;;36037:1;;36020:18;:::i;:::-;36012:27;;;;;;;;:::i;:::-;;;;;;;;;;;35999:7;:10;;-1:-1:-1;;;;;36012:27:0;;;;36007:1;;35999:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;35999:40:0;;;;;-1:-1:-1;;;;;35999:40:0;;;;;;35946:117;35918:3;;;;:::i;:::-;;;;35875:207;;;;36100:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;36100:13:0;;;;;-1:-1:-1;;;;;;36100:13:0;;;;;;35550:597;35501:646;:::o;34103:161::-;-1:-1:-1;;;;;34210:19:0;;34185:4;34210:19;;;:11;:19;;;;;;;;34209:20;;:47;;-1:-1:-1;;;;;;;34234:22:0;;;;;:11;:22;;;;;;;;34233:23;;34103:161;-1:-1:-1;34103:161:0:o;33854:241::-;33947:4;;33923:7;;33947:4;;:8;33943:145;;33979:29;33993:6;34001;33979:13;:29::i;:::-;33972:36;;;;33943:145;34048:28;34061:6;34069;34048:12;:28::i;5331:98::-;5389:7;5416:5;5420:1;5416;:5;:::i;39090:480::-;39157:4;;;;39136:18;39176:17;;;39172:56;;39210:7;39090:480::o;39172:56::-;39238:17;39276:13;;39258:15;:31;;;;:::i;:::-;39238:51;;39316:10;;39304:9;:22;39300:61;;;39343:7;;39090:480::o;39300:61::-;39407:1;39387:16;:12;39402:1;39387:16;:::i;:::-;39386:22;;;;:::i;:::-;39371:37;;39423:12;:17;;39439:1;39423:17;39419:66;;39472:1;39457:16;;39419:66;39511:15;39495:13;:31;39537:25;39549:12;39537:11;:25::i;37398:1157::-;37475:17;37529:13;;37512:14;;37495;;:31;;;;:::i;:::-;:47;;;;:::i;:::-;37475:67;;37553:23;37605:9;37588:14;;37579:6;:23;;;;:::i;:::-;:35;;;;:::i;:::-;37553:61;;37625:27;37685:9;37668:14;;37655:10;:27;;;;:::i;:::-;:39;;;;:::i;:::-;37625:69;;37705:23;37757:9;37740:14;;37731:6;:23;;;;:::i;:::-;:35;;;;:::i;:::-;37705:61;;37777:27;37837:9;37820:14;;37807:10;:27;;;;:::i;:::-;:39;;;;:::i;:::-;37777:69;-1:-1:-1;37857:22:0;37909:15;37882:24;37891:15;37882:6;:24;:::i;:::-;:42;;;;:::i;:::-;37857:67;-1:-1:-1;37935:26:0;37999:19;37964:32;37977:19;37964:10;:32;:::i;:::-;:54;;;;:::i;:::-;37935:83;-1:-1:-1;38033:19:0;;38029:168;;38077:16;;38069:51;;-1:-1:-1;;;;;38077:16:0;;;;38069:51;;;;;38104:15;;38077:16;38069:51;38077:16;38069:51;38104:15;38077:16;38069:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38145:16:0;;-1:-1:-1;;;;;38145:16:0;38135:27;;;;:9;:27;;;;;:50;;38166:19;;38135:27;:50;;38166:19;;38135:50;:::i;:::-;;;;-1:-1:-1;;38029:168:0;38211:19;;38207:168;;38255:16;;38247:51;;-1:-1:-1;;;;;38255:16:0;;;;38247:51;;;;;38282:15;;38255:16;38247:51;38255:16;38247:51;38282:15;38255:16;38247:51;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38323:16:0;;-1:-1:-1;;;;;38323:16:0;38313:27;;;;:9;:27;;;;;:50;;38344:19;;38313:27;:50;;38344:19;;38313:50;:::i;:::-;;;;-1:-1:-1;;38207:168:0;38389:18;;38385:163;;38432:15;;38424:49;;-1:-1:-1;;;;;38432:15:0;;;;38424:49;;;;;38458:14;;38432:15;38424:49;38432:15;38424:49;38458:14;38432:15;38424:49;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38498:15:0;;-1:-1:-1;;;;;38498:15:0;38488:26;;;;:9;:26;;;;;:48;;38518:18;;38488:26;:48;;38518:18;;38488:48;:::i;:::-;;;;-1:-1:-1;;38385:163:0;37464:1091;;;;;;;37398:1157;;:::o;32337:1509::-;32430:28;;;;;;;;32451:7;32430:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32430:28:0;;;;;;;;;32521:15;;32410:7;;32430:28;32410:7;;-1:-1:-1;;;;;32521:15:0;;;32511:25;;;;32507:159;;32553:16;;;;;;;;32563:6;32553:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32553:16:0;;;;;;;;32588:4;;32553:16;;-1:-1:-1;32588:4:0;32553:16;32588:9;32584:71;;-1:-1:-1;32635:4:0;32584:71;32676:17;32721:3;32705:7;:13;;;32696:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;32739:16;;32676:48;;-1:-1:-1;32739:20:0;;;32735:237;;32776:26;32836:7;:13;;;32805:44;;32817:7;:16;;;32805:28;;:9;:28;;;;:::i;:::-;:44;;;;:::i;:::-;32776:73;;32881:18;32864:13;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;32932:4:0;32914:24;;;;:9;:24;;;;;:46;;32942:18;;32914:24;:46;;32942:18;;32914:46;:::i;:::-;;;;-1:-1:-1;;;32735:237:0;32986:18;;;;:22;;;32982:408;;33025:28;33089:7;:13;;;33056:46;;33068:7;:18;;;33056:30;;:9;:30;;;;:::i;:::-;:46;;;;:::i;:::-;33025:77;;33121:14;33117:262;;;33156:42;33177:20;33156;:42::i;:::-;33117:262;;;33264:20;33239:21;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;33341:21:0;;33308:55;;;12636:25:1;;;12692:2;12677:18;;12670:34;;;;33308:55:0;;12609:18:1;33308:55:0;;;;;;;33117:262;33010:380;32982:408;33404:13;;;;:17;;;33400:161;;33438:23;33492:7;:13;;;33464:41;;33476:7;:13;;;33464:25;;:9;:25;;;;:::i;:::-;:41;;;;:::i;:::-;33438:67;;33520:29;33533:15;33520:12;:29::i;:::-;33423:138;33400:161;33575:12;;;;:16;;;33571:227;;33608:22;33660:7;:13;;;33633:40;;33645:7;:12;;;33633:24;;:9;:24;;;;:::i;:::-;:40;;;;:::i;:::-;20870:6;33688:15;;;;:9;:15;;;:33;;33608:65;;-1:-1:-1;33608:65:0;;33688:15;;;:33;;33608:65;;33688:33;:::i;:::-;;;;-1:-1:-1;;33741:45:0;;663:25:1;;;20870:6:0;;33758:4;;-1:-1:-1;;;;;;;;;;;33741:45:0;651:2:1;636:18;33741:45:0;;;;;;;33593:205;33571:227;33817:21;:6;33828:9;33817:10;:21::i;:::-;33810:28;32337:1509;-1:-1:-1;;;;;;32337:1509:0:o;30958:1371::-;31074:17;;31126;;31179:18;;31231:16;;31272:15;;31030:7;;31074:17;31126;31179:18;31231:16;-1:-1:-1;;;;;31272:15:0;;;31262:25;;;;31258:231;;31320:16;;31304:32;;31367:16;;31351:32;;31415:17;;31398:34;;31462:15;;31447:30;;31258:231;31499:24;31551:3;31526:22;31535:13;31526:6;:22;:::i;:::-;:28;;;;:::i;:::-;31499:55;-1:-1:-1;31565:24:0;31617:3;31592:22;31601:13;31592:6;:22;:::i;:::-;:28;;;;:::i;:::-;31565:55;-1:-1:-1;31631:23:0;31681:3;31657:21;31666:12;31657:6;:21;:::i;:::-;:27;;;;:::i;:::-;31631:53;-1:-1:-1;31695:28:0;31752:3;31726:23;31735:14;31726:6;:23;:::i;:::-;:29;;;;:::i;:::-;31695:60;-1:-1:-1;31770:18:0;;31766:171;;31830:20;31805:21;;:45;;;;;;;:::i;:::-;;;;-1:-1:-1;;31903:21:0;;31870:55;;;12636:25:1;;;12692:2;12677:18;;12670:34;;;;31870:55:0;;12609:18:1;31870:55:0;;;;;;;31766:171;31965:16;31947:14;;:34;;;;;;;:::i;:::-;;;;;;;;32010:16;31992:14;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;32037:34:0;;-1:-1:-1;32056:15:0;;32037:34;:::i;:::-;;-1:-1:-1;32037:34:0;32110:35;32129:16;32110;:35;:::i;:::-;:53;;;;:::i;:::-;32100:4;32082:24;;;;:9;:24;;;;;:81;;:24;;;:81;;;;;:::i;:::-;;;;-1:-1:-1;32174:23:0;;-1:-1:-1;32256:20:0;32238:15;32200:35;32219:16;32200;:35;:::i;:::-;:53;;;;:::i;:::-;:76;;;;:::i;:::-;32174:102;-1:-1:-1;32294:27:0;:6;32174:102;32294:10;:27::i;:::-;32287:34;30958:1371;-1:-1:-1;;;;;;;;;;;;30958:1371:0:o;35380:109::-;35475:6;35446:25;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;35380:109:0:o;34879:493::-;34937:19;34959:26;34980:1;34983;34959:20;:26::i;:::-;34937:48;;34996:19;35018:7;35026:11;35018:20;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;35018:20:0;;-1:-1:-1;35067:19:0;;;;;:56;;-1:-1:-1;;;;;;35104:19:0;;20870:6;35104:19;;35067:56;:115;;;;-1:-1:-1;35164:17:0;;-1:-1:-1;;;;;35141:41:0;;;35164:17;;35141:41;;35067:115;:163;;;;-1:-1:-1;35215:15:0;;-1:-1:-1;;;;;35200:30:0;;;35215:15;;35200:30;;35067:163;35049:316;;;-1:-1:-1;;;;;35257:22:0;;;;;;:9;:22;;;;;:32;;35283:6;;35257:22;:32;;35283:6;;35257:32;:::i;:::-;;;;-1:-1:-1;;35309:44:0;;663:25:1;;;-1:-1:-1;;;;;35309:44:0;;;35326:4;;-1:-1:-1;;;;;;;;;;;35309:44:0;651:2:1;636:18;35309:44:0;;;;;;;34926:446;;34879:493;:::o;5712:98::-;5770:7;5797:5;5801:1;5797;:5;:::i;30372:578::-;30458:7;;30581:10;30614:11;30648:12;30683:15;30731:16;30746:1;30648:12;30731:16;:::i;:::-;30548:278;;;-1:-1:-1;;;;;13048:32:1;;;30548:278:0;;;13030:51:1;13097:18;;13090:34;;;;13140:18;;;13133:34;;;;13183:18;;;13176:34;30721:27:0;13226:19:1;;;13219:35;13270:19;;;13263:35;;;13314:19;;;13307:35;;;13002:19;;30548:278:0;;;-1:-1:-1;;30548:278:0;;;;;;;;;30520:321;;30548:278;30520:321;;;;30898:7;:14;30520:321;;-1:-1:-1;30498:354:0;;30886:26;;30520:321;30886:26;:::i;:::-;30863:50;30372:578;-1:-1:-1;;;;;30372:578:0: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:661::-;2022:6;2030;2038;2046;2054;2062;2070;2078;2131:3;2119:9;2110:7;2106:23;2102:33;2099:53;;;2148:1;2145;2138:12;2099:53;-1:-1:-1;;2171:23:1;;;2241:2;2226:18;;2213:32;;-1:-1:-1;2292:2:1;2277:18;;2264:32;;2343:2;2328:18;;2315:32;;-1:-1:-1;2394:3:1;2379:19;;2366:33;;-1:-1:-1;2446:3:1;2431:19;;2418:33;;-1:-1:-1;2498:3:1;2483:19;;2470:33;;-1:-1:-1;2550:3:1;2535:19;2522:33;;-1:-1:-1;1900:661:1;-1:-1:-1;1900:661:1:o;2566:456::-;2643:6;2651;2659;2712:2;2700:9;2691:7;2687:23;2683:32;2680:52;;;2728:1;2725;2718:12;2680:52;2767:9;2754:23;2786:31;2811:5;2786:31;:::i;:::-;2836:5;-1:-1:-1;2893:2:1;2878:18;;2865:32;2906:33;2865:32;2906:33;:::i;:::-;2566:456;;2958:7;;-1:-1:-1;;;3012:2:1;2997:18;;;;2984:32;;2566:456::o;3216:180::-;3275:6;3328:2;3316:9;3307:7;3303:23;3299:32;3296:52;;;3344:1;3341;3334:12;3296:52;-1:-1:-1;3367:23:1;;3216:180;-1:-1:-1;3216:180:1: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:615::-;5518:6;5526;5579:2;5567:9;5558:7;5554:23;5550:32;5547:52;;;5595:1;5592;5585:12;5547:52;5635:9;5622:23;5664:18;5705:2;5697:6;5694:14;5691:34;;;5721:1;5718;5711:12;5691:34;5759:6;5748:9;5744:22;5734:32;;5804:7;5797:4;5793:2;5789:13;5785:27;5775:55;;5826:1;5823;5816:12;5775:55;5866:2;5853:16;5892:2;5884:6;5881:14;5878:34;;;5908:1;5905;5898:12;5878:34;5961:7;5956:2;5946:6;5943:1;5939:14;5935:2;5931:23;5927:32;5924:45;5921:65;;;5982:1;5979;5972:12;5921:65;6013:2;6005:11;;;;;6035:6;;-1:-1:-1;5432:615:1;;-1:-1:-1;;;;5432:615:1:o;6052:380::-;6131:1;6127:12;;;;6174;;;6195:61;;6249:4;6241:6;6237:17;6227:27;;6195:61;6302:2;6294:6;6291:14;6271:18;6268:38;6265:161;;6348:10;6343:3;6339:20;6336:1;6329:31;6383:4;6380:1;6373:15;6411:4;6408:1;6401:15;6265:161;;6052:380;;;:::o;6795:127::-;6856:10;6851:3;6847:20;6844:1;6837:31;6887:4;6884:1;6877:15;6911:4;6908:1;6901:15;6927:128;6994:9;;;7015:11;;;7012:37;;;7029:18;;:::i;7403:127::-;7464:10;7459:3;7455:20;7452:1;7445:31;7495:4;7492:1;7485:15;7519:4;7516:1;7509:15;7535:120;7575:1;7601;7591:35;;7606:18;;:::i;:::-;-1:-1:-1;7640:9:1;;7535:120::o;7660:125::-;7725:9;;;7746:10;;;7743:36;;;7759:18;;:::i;8552:127::-;8613:10;8608:3;8604:20;8601:1;8594:31;8644:4;8641:1;8634:15;8668:4;8665:1;8658:15;8684:175;8721:3;8765:4;8758:5;8754:16;8794:4;8785:7;8782:17;8779:43;;8802:18;;:::i;:::-;8851:1;8838:15;;8684:175;-1:-1:-1;;8684:175:1:o;9357:251::-;9427:6;9480:2;9468:9;9459:7;9455:23;9451:32;9448:52;;;9496:1;9493;9486:12;9448:52;9528:9;9522:16;9547:31;9572:5;9547:31;:::i;9613:980::-;9875:4;9923:3;9912:9;9908:19;9954:6;9943:9;9936:25;9980:2;10018:6;10013:2;10002:9;9998:18;9991:34;10061:3;10056:2;10045:9;10041:18;10034:31;10085:6;10120;10114:13;10151:6;10143;10136:22;10189:3;10178:9;10174:19;10167:26;;10228:2;10220:6;10216:15;10202:29;;10249:1;10259:195;10273:6;10270:1;10267:13;10259:195;;;10338:13;;-1:-1:-1;;;;;10334:39:1;10322:52;;10429:15;;;;10394:12;;;;10370:1;10288:9;10259:195;;;-1:-1:-1;;;;;;;10510:32:1;;;;10505:2;10490:18;;10483:60;-1:-1:-1;;;10574:3:1;10559:19;10552:35;10471:3;9613:980;-1:-1:-1;;;9613:980:1:o;11702:135::-;11741:3;11762:17;;;11759:43;;11782:18;;:::i;:::-;-1:-1:-1;11829:1:1;11818:13;;11702:135::o;11842:127::-;11903:10;11898:3;11894:20;11891:1;11884:31;11934:4;11931:1;11924:15;11958:4;11955:1;11948:15;11974:148;12062:4;12041:12;;;12055;;;12037:31;;12080:13;;12077:39;;;12096:18;;:::i;12127:157::-;12157:1;12191:4;12188:1;12184:12;12215:3;12205:37;;12222:18;;:::i;:::-;12274:3;12267:4;12264:1;12260:12;12256:22;12251:27;;;12127:157;;;;:::o;12289:168::-;12362:9;;;12393;;12410:15;;;12404:22;;12390:37;12380:71;;12431:18;;:::i;13353:112::-;13385:1;13411;13401:35;;13416:18;;:::i;:::-;-1:-1:-1;13450:9:1;;13353:112::o
Swarm Source
ipfs://e1279ebefda73a806884f03373bfbe29bc8200aef1a9b4332baa6bb0571856f6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.