ETH Price: $2,729.13 (+12.66%)
 

Overview

Max Total Supply

100,000,000,000 KISHIMOTO

Holders

1,428 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
2,738,540.531409077 KISHIMOTO

Value
$0.00
0xcde40b10191066efc6e65a682df15a76af7fdec5
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Kishimoto will generate value extending to the entire ecosystem and investors. Kishimoto will also release our highly anticipated Open World RPG Play-to-Earn Game that will be ever expanding with countless updates and features.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Kishimoto

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-20
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

interface IERC20Permit {
    
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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 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 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;
}


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;
}

contract Kishimoto is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using SafeERC20 for IERC20;
    
    address payable public rewardPoolAddress = payable(0x3cD9C25A96a73A226699C45970485F2dDD360ACE); // reward Pool Address
    address payable public devAddress = payable(0xF55bF7dA3deA7a3D9078150abf3a2637d71d9413); // Dev Address

    mapping(address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isBlacklisted;

    uint256 private _totalSupply = 100 * 10**9 * 10**9;  // 100 Bn tokens


    mapping (address => bool) private _isExcludedFromFee;

    string private _name = "Kishimoto";
    string private _symbol = "KISHIMOTO";
    uint8 private _decimals = 9;
    
    uint256 public rewardPoolDivisor = 35;
    uint256 public devDivisor = 35;
    uint256 public autoLpDivisor = 10;

    uint256 public _totalFee = 80;  // rewardPoolDivisor + devDivisor + autoLpDivisor
    uint256 private _previousTotalFee = _totalFee;
    uint256 public sellFactor = 10; // divided by 10
    bool public isBuyTaxEnabled = true;

    uint256 public _maxTxAmount = 3 * 10**8 * 10**9;
    uint256 public _maxWalletAmount = 1 * 10**9 * 10**9;
    uint256 private minimumTokensBeforeSwap = 1 * 10**4 * 10**9; 

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    bool public tradingEnabled = false;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    mapping (address => bool) private automatedMarketMaker;

    event FeesUpdated(uint256 autoLpDivisor, uint256 devDivisor, uint256 rewardPoolDivisor);
    event SellFactorUpdated(uint256 previousSellFactor, uint256 newSellFactor);
    event BuyTaxEnabled(bool indexed enable, uint256 blockNumber);
    event AutomatedMarketMakerEnable(address indexed account, bool indexed enable);
    event AccountBlacklisted(address indexed account, bool indexed blacklist);

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );


    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        automatedMarketMaker[uniswapV2Pair] = true;

        _balances[owner()] = _totalSupply;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function isBlacklisted(address account) external view returns(bool) {
        return _isBlacklisted[account];
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(!_isBlacklisted[from], "Not Allowed");
        require(!_isBlacklisted[to], "Not Allowed");

        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;

        } else {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            require(tradingEnabled, "Trading is not started");
            if (!automatedMarketMaker[to]) {
                require(_balances[to] + amount <= _maxWalletAmount, "Wallet amount exceeds limit");
            }

        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (overMinimumTokenBalance && !inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
        }
        
        bool isSell = automatedMarketMaker[to];

        if(!automatedMarketMaker[from] && !isSell) {
            takeFee = false;
        }

        if(!isBuyTaxEnabled && !isSell) {
            takeFee = false;
        }
        _tokenTransfer(from,to,amount,takeFee,isSell);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 amountToLiquify = contractTokenBalance.mul(autoLpDivisor).div(_totalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(amountToSwap);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);
        uint256 totalETHFee = _totalFee.sub(autoLpDivisor.div(2));

        // adding liquidity
        if(amountToLiquify > 0) // enabling to set autoLP tax to zero
            addLiquidity(amountToLiquify, transferredBalance.mul(autoLpDivisor).div(totalETHFee).div(2));

        //Send to rewardPool and dev address
        transferToAddressETH(rewardPoolAddress, transferredBalance.mul(rewardPoolDivisor).div(totalETHFee));
        transferToAddressETH(devAddress, transferredBalance.mul(devDivisor).div(totalETHFee));
        
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, bool isSell) private {
        if(!takeFee)
            removeAllFee();
        
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 fromBalance = _balances[sender];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        uint256 fees = calculateTotalFee(amount, isSell);
        uint256 amountToTransfer = amount - fees;
        unchecked {
            _balances[sender] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[recipient] += amountToTransfer;
            _balances[address(this)] += fees;
        }

        if(!takeFee)
            restoreAllFee();

        emit Transfer(sender, recipient, amountToTransfer);
        if(fees > 0) {
            emit Transfer(sender, address(this), fees);
        }

        _afterTokenTransfer(sender, recipient, amount);
        
        
    }
    
    function calculateTotalFee(uint256 _amount, bool _isSell) private view returns (uint256) {
        uint256 fees = _amount.mul(_totalFee).div(10**3);
        return _isSell ? fees.mul(sellFactor).div(10) : fees;
    }
    
    function removeAllFee() private {
        if(_totalFee == 0) return;
        
        _previousTotalFee = _totalFee; 
        _totalFee = 0;
    }
    
    function restoreAllFee() private {
        _totalFee = _previousTotalFee;
    }

    function isAutomatedMarketMaker(address account) external view returns(bool) {
        return automatedMarketMaker[account];
    }

    function enableAutomatedMarketMaker(address account, bool enable) external onlyOwner {
        require (automatedMarketMaker[account] != enable, "Already set");
        automatedMarketMaker[account] = enable;

        emit AutomatedMarketMakerEnable(account, enable);
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function updateFeeDivisor(uint256 newAutoLpDivisor, uint256 newDevDivisor, uint256 newrewardPoolDivisor) external onlyOwner {
        uint256 newTotalFee = newAutoLpDivisor.add(newDevDivisor).add(newrewardPoolDivisor);
        require( newTotalFee <= 200, "cant set fees to more than 20%");

        autoLpDivisor = newAutoLpDivisor;
        devDivisor = newDevDivisor;
        rewardPoolDivisor = newrewardPoolDivisor;

        _previousTotalFee = _totalFee;
        _totalFee = newTotalFee;

        emit FeesUpdated(newAutoLpDivisor, newDevDivisor, newrewardPoolDivisor);
    }
    
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMaxWalletLimit(uint256 maxWalletLimit) external onlyOwner() {
        _maxWalletAmount = maxWalletLimit;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
    function setRewardPoolAddress(address _rewardPoolAddress) external onlyOwner() {
        rewardPoolAddress = payable(_rewardPoolAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner() {
        devAddress = payable(_devAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function updateSellFactor(uint256 _sellFactor) external onlyOwner {
        emit SellFactorUpdated(sellFactor, _sellFactor);

        sellFactor = _sellFactor;
    }

    function setBuyTaxEnabled(bool _enable) external onlyOwner {
        require(isBuyTaxEnabled != _enable, "Already set");
        isBuyTaxEnabled = _enable;

        emit BuyTaxEnabled(_enable, block.number);
    }

    function withdrawUnsupportedTokens(address token, address recipient) external onlyOwner {
        require(token != address(this), "Can not withdraw this token");
        uint256 contractBalance = IERC20(token).balanceOf(address(this));
        IERC20(token).safeTransfer(recipient, contractBalance);
    }

    function enableTrading() external onlyOwner {
        require (!tradingEnabled, "Already enabled");
        tradingEnabled = true;
    }

    function blacklistAccount(address account, bool blacklist) external onlyOwner {
        require (_isBlacklisted[account] != blacklist, "Already set");
        require(account != uniswapV2Pair, "can not blacklist uniswap pair");
        _isBlacklisted[account] = blacklist;

        emit AccountBlacklisted(account, blacklist);
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function withdrawETH(address recipient) external onlyOwner {
        (bool success, ) = recipient.call{ value: address(this).balance }("");
        require(success, "unable to send value, recipient may have reverted");
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}


    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"blacklist","type":"bool"}],"name":"AccountBlacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"enable","type":"bool"}],"name":"AutomatedMarketMakerEnable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enable","type":"bool"},{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"BuyTaxEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"autoLpDivisor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devDivisor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPoolDivisor","type":"uint256"}],"name":"FeesUpdated","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":"previousSellFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellFactor","type":"uint256"}],"name":"SellFactorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLpDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"blacklist","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableAutomatedMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAutomatedMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBuyTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPoolAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPoolDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setBuyTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardPoolAddress","type":"address"}],"name":"setRewardPoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAutoLpDivisor","type":"uint256"},{"internalType":"uint256","name":"newDevDivisor","type":"uint256"},{"internalType":"uint256","name":"newrewardPoolDivisor","type":"uint256"}],"name":"updateFeeDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFactor","type":"uint256"}],"name":"updateSellFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawUnsupportedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600380546001600160a01b0319908116733cd9c25a96a73a226699c45970485f2ddd360ace179091556004805490911673f55bf7da3dea7a3d9078150abf3a2637d71d941317905568056bc75e2d6310000060085560e0604052600960a0819052684b697368696d6f746f60b81b60c09081526200008191600a91906200045c565b50604080518082019091526009808252684b495348494d4f544f60b81b6020909201918252620000b491600b916200045c565b50600c805460ff199081166009179091556023600d819055600e55600a600f81905560506010819055601155601255601380549091166001179055670429d069189e0000601455670de0b6b3a76400006015556509184e72a0006016556017805462ff00ff60a01b191690553480156200012d57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001c257600080fd5b505afa158015620001d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000502565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024657600080fd5b505afa1580156200025b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000281919062000502565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002ca57600080fd5b505af1158015620002df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000305919062000502565b601780546001600160a01b0319166001600160a01b03929092169182179055606082901b6001600160601b0319166080526000908152601860205260408120805460ff1916600117905560085490600590620003696000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160096000620003a36200044d60201b60201c565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252902080549091166001179055620003f66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200043e91815260200190565b60405180910390a35062000571565b6000546001600160a01b031690565b8280546200046a9062000534565b90600052602060002090601f0160209004810192826200048e5760008555620004d9565b82601f10620004a957805160ff1916838001178555620004d9565b82800160010185558215620004d9579182015b82811115620004d9578251825591602001919060010190620004bc565b50620004e7929150620004eb565b5090565b5b80821115620004e75760008155600101620004ec565b6000602082840312156200051557600080fd5b81516001600160a01b03811681146200052d57600080fd5b9392505050565b600181811c908216806200054957607f821691505b602082108114156200056b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c612adf620005b36000396000818161037c0152818161216e01528181612236015281816122720152818161232501526123810152612adf6000f3fe6080604052600436106103035760003560e01c80637d1db4a511610190578063c5930482116100dc578063dee6a01611610095578063ef0658f21161006f578063ef0658f214610910578063f0f165af14610926578063f2fde38b14610946578063fe575a871461096657600080fd5b8063dee6a016146108b0578063ea2f0b37146108d0578063ec28438a146108f057600080fd5b8063c59304821461080a578063ca48dd7314610824578063cbff46171461083a578063d0d41fe114610850578063dd46706414610870578063dd62ed3e1461089057600080fd5b806395d89b4111610149578063a69df4b511610123578063a69df4b514610795578063a9059cbb146107aa578063b24cf5d7146107ca578063c49b9a80146107ea57600080fd5b806395d89b411461074b578063a073d37f14610760578063a457c2d71461077557600080fd5b80637d1db4a514610689578063842884171461069f578063845a51ec146106d85780638a8c523c146106f85780638da5cb5b1461070d578063929793911461072b57600080fd5b8063437823ec1161024f578063557ed1ba116102085780636c0a24eb116101e25780636c0a24eb1461060857806370a082311461061e578063715018a614610654578063728d41c91461066957600080fd5b8063557ed1ba146105c0578063602bc62b146105d3578063690d8320146105e857600080fd5b8063437823ec146104e557806349bd5a5e146105055780634a74bb02146105255780634ada218b146105465780634c14c0b3146105675780635342acb41461058757600080fd5b80632d5a5d34116102bc5780633950935111610296578063395093511461046f5780633a40799e1461048f5780633ad10ef6146104a55780634127bcc6146104c557600080fd5b80632d5a5d341461040b578063313ce5671461042d578063382e901d1461044f57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806323b872dd146103d5578063283f7820146103f557600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461099f565b604051610331919061287e565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461272c565b610a31565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506008545b604051908152602001610331565b3480156103e157600080fd5b5061035a6103f03660046126bd565b610a4b565b34801561040157600080fd5b506103c760105481565b34801561041757600080fd5b5061042b6104263660046126fe565b610a6f565b005b34801561043957600080fd5b50600c5460405160ff9091168152602001610331565b34801561045b57600080fd5b5061042b61046a366004612684565b610b93565b34801561047b57600080fd5b5061035a61048a36600461272c565b610cab565b34801561049b57600080fd5b506103c7600e5481565b3480156104b157600080fd5b5060045461039e906001600160a01b031681565b3480156104d157600080fd5b5061042b6104e03660046127c4565b610ccd565b3480156104f157600080fd5b5061042b61050036600461264a565b610dc0565b34801561051157600080fd5b5060175461039e906001600160a01b031681565b34801561053157600080fd5b5060175461035a90600160b01b900460ff1681565b34801561055257600080fd5b5060175461035a90600160a01b900460ff1681565b34801561057357600080fd5b5061042b6105823660046126fe565b610e0e565b34801561059357600080fd5b5061035a6105a236600461264a565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105cc57600080fd5b50426103c7565b3480156105df57600080fd5b506002546103c7565b3480156105f457600080fd5b5061042b61060336600461264a565b610ecb565b34801561061457600080fd5b506103c760155481565b34801561062a57600080fd5b506103c761063936600461264a565b6001600160a01b031660009081526005602052604090205490565b34801561066057600080fd5b5061042b610fb6565b34801561067557600080fd5b5061042b610684366004612792565b611018565b34801561069557600080fd5b506103c760145481565b3480156106ab57600080fd5b5061035a6106ba36600461264a565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156106e457600080fd5b5060035461039e906001600160a01b031681565b34801561070457600080fd5b5061042b611047565b34801561071957600080fd5b506000546001600160a01b031661039e565b34801561073757600080fd5b5061042b610746366004612792565b6110d2565b34801561075757600080fd5b5061032461113d565b34801561076c57600080fd5b506016546103c7565b34801561078157600080fd5b5061035a61079036600461272c565b61114c565b3480156107a157600080fd5b5061042b6111c7565b3480156107b657600080fd5b5061035a6107c536600461272c565b6112cd565b3480156107d657600080fd5b5061042b6107e536600461264a565b6112db565b3480156107f657600080fd5b5061042b610805366004612758565b611327565b34801561081657600080fd5b5060135461035a9060ff1681565b34801561083057600080fd5b506103c7600f5481565b34801561084657600080fd5b506103c760125481565b34801561085c57600080fd5b5061042b61086b36600461264a565b6113a9565b34801561087c57600080fd5b5061042b61088b366004612792565b6113f5565b34801561089c57600080fd5b506103c76108ab366004612684565b61147a565b3480156108bc57600080fd5b5061042b6108cb366004612758565b6114a5565b3480156108dc57600080fd5b5061042b6108eb36600461264a565b61153f565b3480156108fc57600080fd5b5061042b61090b366004612792565b61158a565b34801561091c57600080fd5b506103c7600d5481565b34801561093257600080fd5b5061042b610941366004612792565b6115b9565b34801561095257600080fd5b5061042b61096136600461264a565b6115e8565b34801561097257600080fd5b5061035a61098136600461264a565b6001600160a01b031660009081526007602052604090205460ff1690565b6060600a80546109ae906129fc565b80601f01602080910402602001604051908101604052809291908181526020018280546109da906129fc565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b600033610a3f8185856116c0565b60019150505b92915050565b600033610a598582856117e4565b610a6485858561185e565b506001949350505050565b6000546001600160a01b03163314610aa25760405162461bcd60e51b8152600401610a99906128d6565b60405180910390fd5b6001600160a01b03821660009081526007602052604090205460ff1615158115151415610ae15760405162461bcd60e51b8152600401610a99906128b1565b6017546001600160a01b0383811691161415610b3f5760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6f7420626c61636b6c69737420756e6973776170207061697200006044820152606401610a99565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917f1d3a0f423a29cb00c6d792b5a695e34683386c493edbcf344426b5da5adf0e4491a35050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b038216301415610c165760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f74207769746864726177207468697320746f6b656e00000000006044820152606401610a99565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c5857600080fd5b505afa158015610c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9091906127ab565b9050610ca66001600160a01b0384168383611bef565b505050565b600033610a3f818585610cbe838361147a565b610cc89190612960565b6116c0565b6000546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610a99906128d6565b6000610d0d82610d078686611c41565b90611c41565b905060c8811115610d605760405162461bcd60e51b815260206004820152601e60248201527f63616e7420736574206665657320746f206d6f7265207468616e2032302500006044820152606401610a99565b600f849055600e839055600d8290556010805460115581905560408051858152602081018590529081018390527fcf8a1e1d5f09cf3c97dbb653cd9a4d7aace9292fbc1bb8211febf2d400febbdd9060600160405180910390a150505050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03821660009081526018602052604090205460ff1615158115151415610e775760405162461bcd60e51b8152600401610a99906128b1565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917f8c55f11b6d19d56c8b1800eb4e8b56441df993e14634fe86cd24b1c9bff545d391a35050565b6000546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610a99906128d6565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610f42576040519150601f19603f3d011682016040523d82523d6000602084013e610f47565b606091505b5050905080610fb25760405162461bcd60e51b815260206004820152603160248201527f756e61626c6520746f2073656e642076616c75652c20726563697069656e74206044820152701b585e481a185d99481c995d995c9d1959607a1b6064820152608401610a99565b5050565b6000546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610a99906128d6565b600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610a99906128d6565b601555565b6000546001600160a01b031633146110715760405162461bcd60e51b8152600401610a99906128d6565b601754600160a01b900460ff16156110bd5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610a99565b6017805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610a99906128d6565b60125460408051918252602082018390527fbd246d9b8c3d3843cdfe86c1eef754015151cca52383afcf47cfe2e30389233e910160405180910390a1601255565b6060600b80546109ae906129fc565b6000338161115a828661147a565b9050838110156111ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a99565b610a6482868684036116c0565b6001546001600160a01b0316331461122d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a99565b600254421161127e5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a99565b600154600080546040516001600160a01b039384169390911691600080516020612a8a83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600033610a3f81858561185e565b6000546001600160a01b031633146113055760405162461bcd60e51b8152600401610a99906128d6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113515760405162461bcd60e51b8152600401610a99906128d6565b60178054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061139e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113d35760405162461bcd60e51b8152600401610a99906128d6565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461141f5760405162461bcd60e51b8152600401610a99906128d6565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561144e8142612960565b600255600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a350565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000546001600160a01b031633146114cf5760405162461bcd60e51b8152600401610a99906128d6565b60135460ff16151581151514156114f85760405162461bcd60e51b8152600401610a99906128b1565b6013805460ff19168215159081179091556040514381527f0ca71f7802e05294b7e4e083e369742fd573c5868ff991712ae1ee8af26233159060200160405180910390a250565b6000546001600160a01b031633146115695760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610a99906128d6565b601455565b6000546001600160a01b031633146115e35760405162461bcd60e51b8152600401610a99906128d6565b601655565b6000546001600160a01b031633146116125760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b0381166116775760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a99565b600080546040516001600160a01b0380851693921691600080516020612a8a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a99565b6001600160a01b0382166117835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a99565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006117f0848461147a565b90506000198114611858578181101561184b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a99565b61185884848484036116c0565b50505050565b6001600160a01b0383166118c25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a99565b6001600160a01b03831660009081526007602052604090205460ff16156119195760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03821660009081526007602052604090205460ff16156119705760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03831660009081526009602052604090205460019060ff16806119b257506001600160a01b03831660009081526009602052604090205460ff165b156119bf57506000611b09565b601454821115611a225760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a99565b601754600160a01b900460ff16611a745760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd081cdd185c9d195960521b6044820152606401610a99565b6001600160a01b03831660009081526018602052604090205460ff16611b09576015546001600160a01b038416600090815260056020526040902054611abb908490612960565b1115611b095760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d697400000000006044820152606401610a99565b3060009081526005602052604090205460165481108015908190611b375750601754600160a81b900460ff16155b8015611b4c5750601754600160b01b900460ff165b8015611b6657506017546001600160a01b03878116911614155b15611b7f578015611b7f576016549150611b7f82611ca7565b6001600160a01b0380861660009081526018602052604080822054928916825290205460ff9182169116158015611bb4575080155b15611bbe57600093505b60135460ff16158015611bcf575080155b15611bd957600093505b611be68787878785611dbc565b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ca6908490611f42565b600080611c4e8385612960565b905083811015611ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a99565b9392505050565b6017805460ff60a81b1916600160a81b179055601054600f54600091611cdd91600291611cd79182908790612014565b90612093565b90506000611ceb83836120d5565b905047611cf782612117565b6000611d0347836120d5565b90506000611d29611d206002600f5461209390919063ffffffff16565b601054906120d5565b90508415611d5857611d5885611d536002611cd785611cd7600f548961201490919063ffffffff16565b61231f565b600354600d54611d82916001600160a01b031690611d7d908490611cd7908790612014565b61240e565b600454600e54611da7916001600160a01b031690611d7d908490611cd7908790612014565b50506017805460ff60a81b1916905550505050565b81611dc957611dc9612444565b6001600160a01b03851660009081526005602052604090205483811015611e415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a99565b6000611e4d858461245a565b90506000611e5b82876129b9565b6001600160a01b03808a166000908152600560205260408082208a88039055918a16815281812080548401905530815220805484019055905084611ea457611ea4601154601055565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ee991815260200190565b60405180910390a38115611f385760405182815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050505050505050565b6000611f97826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124a79092919063ffffffff16565b805190915015610ca65780806020019051810190611fb59190612775565b610ca65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a99565b60008261202357506000610a45565b600061202f838561299a565b90508261203c8583612978565b14611ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a99565b6000611ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124b6565b6000611ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ed565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061214c5761214c612a4d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c557600080fd5b505afa1580156121d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fd9190612667565b8160018151811061221057612210612a4d565b60200260200101906001600160a01b031690816001600160a01b03168152505061225b307f0000000000000000000000000000000000000000000000000000000000000000846116c0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122b0908590600090869030904290600401612924565b600060405180830381600087803b1580156122ca57600080fd5b505af11580156122de573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161231392919061290b565b60405180910390a15050565b61234a307f0000000000000000000000000000000000000000000000000000000000000000846116c0565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156123ce57600080fd5b505af11580156123e2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061240791906127f0565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ca6573d6000803e3d6000fd5b60105461244d57565b6010805460115560009055565b6000806124786103e8611cd76010548761201490919063ffffffff16565b905082612485578061249f565b61249f600a611cd76012548461201490919063ffffffff16565b949350505050565b606061249f848460008561251e565b600081836124d75760405162461bcd60e51b8152600401610a99919061287e565b5060006124e48486612978565b95945050505050565b600081848411156125115760405162461bcd60e51b8152600401610a99919061287e565b5060006124e484866129b9565b606061252985612611565b6125755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a99565b600080866001600160a01b031685876040516125919190612862565b60006040518083038185875af1925050503d80600081146125ce576040519150601f19603f3d011682016040523d82523d6000602084013e6125d3565b606091505b509150915081156125e757915061249f9050565b8051156125f75780518082602001fd5b8360405162461bcd60e51b8152600401610a99919061287e565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061249f575050151592915050565b60006020828403121561265c57600080fd5b8135611ca081612a63565b60006020828403121561267957600080fd5b8151611ca081612a63565b6000806040838503121561269757600080fd5b82356126a281612a63565b915060208301356126b281612a63565b809150509250929050565b6000806000606084860312156126d257600080fd5b83356126dd81612a63565b925060208401356126ed81612a63565b929592945050506040919091013590565b6000806040838503121561271157600080fd5b823561271c81612a63565b915060208301356126b281612a7b565b6000806040838503121561273f57600080fd5b823561274a81612a63565b946020939093013593505050565b60006020828403121561276a57600080fd5b8135611ca081612a7b565b60006020828403121561278757600080fd5b8151611ca081612a7b565b6000602082840312156127a457600080fd5b5035919050565b6000602082840312156127bd57600080fd5b5051919050565b6000806000606084860312156127d957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561280557600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156128575781516001600160a01b031687529582019590820190600101612832565b509495945050505050565b600082516128748184602087016129d0565b9190910192915050565b602081526000825180602084015261289d8160408501602087016129d0565b601f01601f19169190910160400192915050565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061249f604083018461281e565b85815284602082015260a06040820152600061294360a083018661281e565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561297357612973612a37565b500190565b60008261299557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129b4576129b4612a37565b500290565b6000828210156129cb576129cb612a37565b500390565b60005b838110156129eb5781810151838201526020016129d3565b838111156118585750506000910152565b600181811c90821680612a1057607f821691505b60208210811415612a3157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612a7857600080fd5b50565b8015158114612a7857600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220fb6281334e7c41a8ec4f00860ef90e49e853a901fb905173b861cf51668c368464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80637d1db4a511610190578063c5930482116100dc578063dee6a01611610095578063ef0658f21161006f578063ef0658f214610910578063f0f165af14610926578063f2fde38b14610946578063fe575a871461096657600080fd5b8063dee6a016146108b0578063ea2f0b37146108d0578063ec28438a146108f057600080fd5b8063c59304821461080a578063ca48dd7314610824578063cbff46171461083a578063d0d41fe114610850578063dd46706414610870578063dd62ed3e1461089057600080fd5b806395d89b4111610149578063a69df4b511610123578063a69df4b514610795578063a9059cbb146107aa578063b24cf5d7146107ca578063c49b9a80146107ea57600080fd5b806395d89b411461074b578063a073d37f14610760578063a457c2d71461077557600080fd5b80637d1db4a514610689578063842884171461069f578063845a51ec146106d85780638a8c523c146106f85780638da5cb5b1461070d578063929793911461072b57600080fd5b8063437823ec1161024f578063557ed1ba116102085780636c0a24eb116101e25780636c0a24eb1461060857806370a082311461061e578063715018a614610654578063728d41c91461066957600080fd5b8063557ed1ba146105c0578063602bc62b146105d3578063690d8320146105e857600080fd5b8063437823ec146104e557806349bd5a5e146105055780634a74bb02146105255780634ada218b146105465780634c14c0b3146105675780635342acb41461058757600080fd5b80632d5a5d34116102bc5780633950935111610296578063395093511461046f5780633a40799e1461048f5780633ad10ef6146104a55780634127bcc6146104c557600080fd5b80632d5a5d341461040b578063313ce5671461042d578063382e901d1461044f57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806323b872dd146103d5578063283f7820146103f557600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461099f565b604051610331919061287e565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461272c565b610a31565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506008545b604051908152602001610331565b3480156103e157600080fd5b5061035a6103f03660046126bd565b610a4b565b34801561040157600080fd5b506103c760105481565b34801561041757600080fd5b5061042b6104263660046126fe565b610a6f565b005b34801561043957600080fd5b50600c5460405160ff9091168152602001610331565b34801561045b57600080fd5b5061042b61046a366004612684565b610b93565b34801561047b57600080fd5b5061035a61048a36600461272c565b610cab565b34801561049b57600080fd5b506103c7600e5481565b3480156104b157600080fd5b5060045461039e906001600160a01b031681565b3480156104d157600080fd5b5061042b6104e03660046127c4565b610ccd565b3480156104f157600080fd5b5061042b61050036600461264a565b610dc0565b34801561051157600080fd5b5060175461039e906001600160a01b031681565b34801561053157600080fd5b5060175461035a90600160b01b900460ff1681565b34801561055257600080fd5b5060175461035a90600160a01b900460ff1681565b34801561057357600080fd5b5061042b6105823660046126fe565b610e0e565b34801561059357600080fd5b5061035a6105a236600461264a565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105cc57600080fd5b50426103c7565b3480156105df57600080fd5b506002546103c7565b3480156105f457600080fd5b5061042b61060336600461264a565b610ecb565b34801561061457600080fd5b506103c760155481565b34801561062a57600080fd5b506103c761063936600461264a565b6001600160a01b031660009081526005602052604090205490565b34801561066057600080fd5b5061042b610fb6565b34801561067557600080fd5b5061042b610684366004612792565b611018565b34801561069557600080fd5b506103c760145481565b3480156106ab57600080fd5b5061035a6106ba36600461264a565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156106e457600080fd5b5060035461039e906001600160a01b031681565b34801561070457600080fd5b5061042b611047565b34801561071957600080fd5b506000546001600160a01b031661039e565b34801561073757600080fd5b5061042b610746366004612792565b6110d2565b34801561075757600080fd5b5061032461113d565b34801561076c57600080fd5b506016546103c7565b34801561078157600080fd5b5061035a61079036600461272c565b61114c565b3480156107a157600080fd5b5061042b6111c7565b3480156107b657600080fd5b5061035a6107c536600461272c565b6112cd565b3480156107d657600080fd5b5061042b6107e536600461264a565b6112db565b3480156107f657600080fd5b5061042b610805366004612758565b611327565b34801561081657600080fd5b5060135461035a9060ff1681565b34801561083057600080fd5b506103c7600f5481565b34801561084657600080fd5b506103c760125481565b34801561085c57600080fd5b5061042b61086b36600461264a565b6113a9565b34801561087c57600080fd5b5061042b61088b366004612792565b6113f5565b34801561089c57600080fd5b506103c76108ab366004612684565b61147a565b3480156108bc57600080fd5b5061042b6108cb366004612758565b6114a5565b3480156108dc57600080fd5b5061042b6108eb36600461264a565b61153f565b3480156108fc57600080fd5b5061042b61090b366004612792565b61158a565b34801561091c57600080fd5b506103c7600d5481565b34801561093257600080fd5b5061042b610941366004612792565b6115b9565b34801561095257600080fd5b5061042b61096136600461264a565b6115e8565b34801561097257600080fd5b5061035a61098136600461264a565b6001600160a01b031660009081526007602052604090205460ff1690565b6060600a80546109ae906129fc565b80601f01602080910402602001604051908101604052809291908181526020018280546109da906129fc565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b600033610a3f8185856116c0565b60019150505b92915050565b600033610a598582856117e4565b610a6485858561185e565b506001949350505050565b6000546001600160a01b03163314610aa25760405162461bcd60e51b8152600401610a99906128d6565b60405180910390fd5b6001600160a01b03821660009081526007602052604090205460ff1615158115151415610ae15760405162461bcd60e51b8152600401610a99906128b1565b6017546001600160a01b0383811691161415610b3f5760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6f7420626c61636b6c69737420756e6973776170207061697200006044820152606401610a99565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917f1d3a0f423a29cb00c6d792b5a695e34683386c493edbcf344426b5da5adf0e4491a35050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b038216301415610c165760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f74207769746864726177207468697320746f6b656e00000000006044820152606401610a99565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c5857600080fd5b505afa158015610c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9091906127ab565b9050610ca66001600160a01b0384168383611bef565b505050565b600033610a3f818585610cbe838361147a565b610cc89190612960565b6116c0565b6000546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610a99906128d6565b6000610d0d82610d078686611c41565b90611c41565b905060c8811115610d605760405162461bcd60e51b815260206004820152601e60248201527f63616e7420736574206665657320746f206d6f7265207468616e2032302500006044820152606401610a99565b600f849055600e839055600d8290556010805460115581905560408051858152602081018590529081018390527fcf8a1e1d5f09cf3c97dbb653cd9a4d7aace9292fbc1bb8211febf2d400febbdd9060600160405180910390a150505050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03821660009081526018602052604090205460ff1615158115151415610e775760405162461bcd60e51b8152600401610a99906128b1565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917f8c55f11b6d19d56c8b1800eb4e8b56441df993e14634fe86cd24b1c9bff545d391a35050565b6000546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610a99906128d6565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610f42576040519150601f19603f3d011682016040523d82523d6000602084013e610f47565b606091505b5050905080610fb25760405162461bcd60e51b815260206004820152603160248201527f756e61626c6520746f2073656e642076616c75652c20726563697069656e74206044820152701b585e481a185d99481c995d995c9d1959607a1b6064820152608401610a99565b5050565b6000546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610a99906128d6565b600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610a99906128d6565b601555565b6000546001600160a01b031633146110715760405162461bcd60e51b8152600401610a99906128d6565b601754600160a01b900460ff16156110bd5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610a99565b6017805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610a99906128d6565b60125460408051918252602082018390527fbd246d9b8c3d3843cdfe86c1eef754015151cca52383afcf47cfe2e30389233e910160405180910390a1601255565b6060600b80546109ae906129fc565b6000338161115a828661147a565b9050838110156111ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a99565b610a6482868684036116c0565b6001546001600160a01b0316331461122d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a99565b600254421161127e5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a99565b600154600080546040516001600160a01b039384169390911691600080516020612a8a83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600033610a3f81858561185e565b6000546001600160a01b031633146113055760405162461bcd60e51b8152600401610a99906128d6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113515760405162461bcd60e51b8152600401610a99906128d6565b60178054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061139e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113d35760405162461bcd60e51b8152600401610a99906128d6565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461141f5760405162461bcd60e51b8152600401610a99906128d6565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561144e8142612960565b600255600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a350565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000546001600160a01b031633146114cf5760405162461bcd60e51b8152600401610a99906128d6565b60135460ff16151581151514156114f85760405162461bcd60e51b8152600401610a99906128b1565b6013805460ff19168215159081179091556040514381527f0ca71f7802e05294b7e4e083e369742fd573c5868ff991712ae1ee8af26233159060200160405180910390a250565b6000546001600160a01b031633146115695760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610a99906128d6565b601455565b6000546001600160a01b031633146115e35760405162461bcd60e51b8152600401610a99906128d6565b601655565b6000546001600160a01b031633146116125760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b0381166116775760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a99565b600080546040516001600160a01b0380851693921691600080516020612a8a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a99565b6001600160a01b0382166117835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a99565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006117f0848461147a565b90506000198114611858578181101561184b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a99565b61185884848484036116c0565b50505050565b6001600160a01b0383166118c25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a99565b6001600160a01b03831660009081526007602052604090205460ff16156119195760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03821660009081526007602052604090205460ff16156119705760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03831660009081526009602052604090205460019060ff16806119b257506001600160a01b03831660009081526009602052604090205460ff165b156119bf57506000611b09565b601454821115611a225760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a99565b601754600160a01b900460ff16611a745760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd081cdd185c9d195960521b6044820152606401610a99565b6001600160a01b03831660009081526018602052604090205460ff16611b09576015546001600160a01b038416600090815260056020526040902054611abb908490612960565b1115611b095760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d697400000000006044820152606401610a99565b3060009081526005602052604090205460165481108015908190611b375750601754600160a81b900460ff16155b8015611b4c5750601754600160b01b900460ff165b8015611b6657506017546001600160a01b03878116911614155b15611b7f578015611b7f576016549150611b7f82611ca7565b6001600160a01b0380861660009081526018602052604080822054928916825290205460ff9182169116158015611bb4575080155b15611bbe57600093505b60135460ff16158015611bcf575080155b15611bd957600093505b611be68787878785611dbc565b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ca6908490611f42565b600080611c4e8385612960565b905083811015611ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a99565b9392505050565b6017805460ff60a81b1916600160a81b179055601054600f54600091611cdd91600291611cd79182908790612014565b90612093565b90506000611ceb83836120d5565b905047611cf782612117565b6000611d0347836120d5565b90506000611d29611d206002600f5461209390919063ffffffff16565b601054906120d5565b90508415611d5857611d5885611d536002611cd785611cd7600f548961201490919063ffffffff16565b61231f565b600354600d54611d82916001600160a01b031690611d7d908490611cd7908790612014565b61240e565b600454600e54611da7916001600160a01b031690611d7d908490611cd7908790612014565b50506017805460ff60a81b1916905550505050565b81611dc957611dc9612444565b6001600160a01b03851660009081526005602052604090205483811015611e415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a99565b6000611e4d858461245a565b90506000611e5b82876129b9565b6001600160a01b03808a166000908152600560205260408082208a88039055918a16815281812080548401905530815220805484019055905084611ea457611ea4601154601055565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ee991815260200190565b60405180910390a38115611f385760405182815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050505050505050565b6000611f97826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124a79092919063ffffffff16565b805190915015610ca65780806020019051810190611fb59190612775565b610ca65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a99565b60008261202357506000610a45565b600061202f838561299a565b90508261203c8583612978565b14611ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a99565b6000611ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124b6565b6000611ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ed565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061214c5761214c612a4d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c557600080fd5b505afa1580156121d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fd9190612667565b8160018151811061221057612210612a4d565b60200260200101906001600160a01b031690816001600160a01b03168152505061225b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122b0908590600090869030904290600401612924565b600060405180830381600087803b1580156122ca57600080fd5b505af11580156122de573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161231392919061290b565b60405180910390a15050565b61234a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c0565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156123ce57600080fd5b505af11580156123e2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061240791906127f0565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ca6573d6000803e3d6000fd5b60105461244d57565b6010805460115560009055565b6000806124786103e8611cd76010548761201490919063ffffffff16565b905082612485578061249f565b61249f600a611cd76012548461201490919063ffffffff16565b949350505050565b606061249f848460008561251e565b600081836124d75760405162461bcd60e51b8152600401610a99919061287e565b5060006124e48486612978565b95945050505050565b600081848411156125115760405162461bcd60e51b8152600401610a99919061287e565b5060006124e484866129b9565b606061252985612611565b6125755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a99565b600080866001600160a01b031685876040516125919190612862565b60006040518083038185875af1925050503d80600081146125ce576040519150601f19603f3d011682016040523d82523d6000602084013e6125d3565b606091505b509150915081156125e757915061249f9050565b8051156125f75780518082602001fd5b8360405162461bcd60e51b8152600401610a99919061287e565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061249f575050151592915050565b60006020828403121561265c57600080fd5b8135611ca081612a63565b60006020828403121561267957600080fd5b8151611ca081612a63565b6000806040838503121561269757600080fd5b82356126a281612a63565b915060208301356126b281612a63565b809150509250929050565b6000806000606084860312156126d257600080fd5b83356126dd81612a63565b925060208401356126ed81612a63565b929592945050506040919091013590565b6000806040838503121561271157600080fd5b823561271c81612a63565b915060208301356126b281612a7b565b6000806040838503121561273f57600080fd5b823561274a81612a63565b946020939093013593505050565b60006020828403121561276a57600080fd5b8135611ca081612a7b565b60006020828403121561278757600080fd5b8151611ca081612a7b565b6000602082840312156127a457600080fd5b5035919050565b6000602082840312156127bd57600080fd5b5051919050565b6000806000606084860312156127d957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561280557600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156128575781516001600160a01b031687529582019590820190600101612832565b509495945050505050565b600082516128748184602087016129d0565b9190910192915050565b602081526000825180602084015261289d8160408501602087016129d0565b601f01601f19169190910160400192915050565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061249f604083018461281e565b85815284602082015260a06040820152600061294360a083018661281e565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561297357612973612a37565b500190565b60008261299557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129b4576129b4612a37565b500290565b6000828210156129cb576129cb612a37565b500390565b60005b838110156129eb5781810151838201526020016129d3565b838111156118585750506000910152565b600181811c90821680612a1057607f821691505b60208210811415612a3157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612a7857600080fd5b50565b8015158114612a7857600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220fb6281334e7c41a8ec4f00860ef90e49e853a901fb905173b861cf51668c368464736f6c63430008070033

Deployed Bytecode Sourcemap

18615:15976:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21710:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22582:201;;;;;;;;;;-1:-1:-1;22582:201:0;;;;;:::i;:::-;;:::i;:::-;;;6028:14:1;;6021:22;6003:41;;5991:2;5976:18;22582:201:0;5863:187:1;19997:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4704:32:1;;;4686:51;;4674:2;4659:18;19997:51:0;4540:203:1;21987:100:0;;;;;;;;;;-1:-1:-1;22067:12:0;;21987:100;;;15900:25:1;;;15888:2;15873:18;21987:100:0;15754:177:1;22791:295:0;;;;;;;;;;-1:-1:-1;22791:295:0;;;;;:::i;:::-;;:::i;19580:29::-;;;;;;;;;;;;;;;;33516:338;;;;;;;;;;-1:-1:-1;33516:338:0;;;;;:::i;:::-;;:::i;:::-;;21896:83;;;;;;;;;;-1:-1:-1;21962:9:0;;21896:83;;21962:9;;;;17579:36:1;;17567:2;17552:18;21896:83:0;17437:184:1;33052:309:0;;;;;;;;;;-1:-1:-1;33052:309:0;;;;;:::i;:::-;;:::i;23094:238::-;;;;;;;;;;-1:-1:-1;23094:238:0;;;;;:::i;:::-;;:::i;19501:30::-;;;;;;;;;;;;;;;;18897:87;;;;;;;;;;-1:-1:-1;18897:87:0;;;;-1:-1:-1;;;;;18897:87:0;;;31149:592;;;;;;;;;;-1:-1:-1;31149:592:0;;;;;:::i;:::-;;:::i;30908:111::-;;;;;;;;;;-1:-1:-1;30908:111:0;;;;;:::i;:::-;;:::i;20055:28::-;;;;;;;;;;-1:-1:-1;20055:28:0;;;;-1:-1:-1;;;;;20055:28:0;;;20165:41;;;;;;;;;;-1:-1:-1;20165:41:0;;;;-1:-1:-1;;;20165:41:0;;;;;;20090:34;;;;;;;;;;-1:-1:-1;20090:34:0;;;;-1:-1:-1;;;20090:34:0;;;;;;30487:278;;;;;;;;;;-1:-1:-1;30487:278:0;;;;;:::i;:::-;;:::i;30773:123::-;;;;;;;;;;-1:-1:-1;30773:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;30861:27:0;30837:4;30861:27;;;:18;:27;;;;;;;;;30773:123;10125:90;;;;;;;;;;-1:-1:-1;10192:15:0;10125:90;;10023;;;;;;;;;;-1:-1:-1;10096:9:0;;10023:90;;33996:227;;;;;;;;;;-1:-1:-1;33996:227:0;;;;;:::i;:::-;;:::i;19870:51::-;;;;;;;;;;;;;;;;22095:119;;;;;;;;;;-1:-1:-1;22095:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;22188:18:0;22161:7;22188:18;;;:9;:18;;;;;;;22095:119;9615:148;;;;;;;;;;;;;:::i;31882:124::-;;;;;;;;;;-1:-1:-1;31882:124:0;;;;;:::i;:::-;;:::i;19816:47::-;;;;;;;;;;;;;;;;30347:132;;;;;;;;;;-1:-1:-1;30347:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;30442:29:0;30418:4;30442:29;;;:20;:29;;;;;;;;;30347:132;18773:94;;;;;;;;;;-1:-1:-1;18773:94:0;;;;-1:-1:-1;;;;;18773:94:0;;;33369:139;;;;;;;;;;;;;:::i;9390:79::-;;;;;;;;;;-1:-1:-1;9428:7:0;9455:6;-1:-1:-1;;;;;9455:6:0;9390:79;;32649:169;;;;;;;;;;-1:-1:-1;32649:169:0;;;;;:::i;:::-;;:::i;21801:87::-;;;;;;;;;;;;;:::i;23784:120::-;;;;;;;;;;-1:-1:-1;23873:23:0;;23784:120;;23340:436;;;;;;;;;;-1:-1:-1;23340:436:0;;;;;:::i;:::-;;:::i;10461:305::-;;;;;;;;;;;;;:::i;22222:193::-;;;;;;;;;;-1:-1:-1;22222:193:0;;;;;:::i;:::-;;:::i;32192:145::-;;;;;;;;;;-1:-1:-1;32192:145:0;;;;;:::i;:::-;;:::i;32470:171::-;;;;;;;;;;-1:-1:-1;32470:171:0;;;;;:::i;:::-;;:::i;19773:34::-;;;;;;;;;;-1:-1:-1;19773:34:0;;;;;;;;19538:33;;;;;;;;;;;;;;;;19719:30;;;;;;;;;;;;;;;;32345:117;;;;;;;;;;-1:-1:-1;32345:117:0;;;;;:::i;:::-;;:::i;10223:226::-;;;;;;;;;;-1:-1:-1;10223:226:0;;;;;:::i;:::-;;:::i;22423:151::-;;;;;;;;;;-1:-1:-1;22423:151:0;;;;;:::i;:::-;;:::i;32826:218::-;;;;;;;;;;-1:-1:-1;32826:218:0;;;;;:::i;:::-;;:::i;31031:110::-;;;;;;;;;;-1:-1:-1;31031:110:0;;;;;:::i;:::-;;:::i;31759:111::-;;;;;;;;;;-1:-1:-1;31759:111:0;;;;;:::i;:::-;;:::i;19457:37::-;;;;;;;;;;;;;;;;32014:166;;;;;;;;;;-1:-1:-1;32014:166:0;;;;;:::i;:::-;;:::i;9771:244::-;;;;;;;;;;-1:-1:-1;9771:244:0;;;;;:::i;:::-;;:::i;23912:117::-;;;;;;;;;;-1:-1:-1;23912:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;23998:23:0;23974:4;23998:23;;;:14;:23;;;;;;;;;23912:117;21710:83;21747:13;21780:5;21773:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21710:83;:::o;22582:201::-;22665:4;198:10;22721:32;198:10;22737:7;22746:6;22721:8;:32::i;:::-;22771:4;22764:11;;;22582:201;;;;;:::o;22791:295::-;22922:4;198:10;22980:38;22996:4;198:10;23011:6;22980:15;:38::i;:::-;23029:27;23039:4;23045:2;23049:6;23029:9;:27::i;:::-;-1:-1:-1;23074:4:0;;22791:295;-1:-1:-1;;;;22791:295:0:o;33516:338::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;33614:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;::::1;;:36;;::::0;::::1;;;;33605:61;;;;-1:-1:-1::0;;;33605:61:0::1;;;;;;;:::i;:::-;33696:13;::::0;-1:-1:-1;;;;;33685:24:0;;::::1;33696:13:::0;::::1;33685:24;;33677:67;;;::::0;-1:-1:-1;;;33677:67:0;;8046:2:1;33677:67:0::1;::::0;::::1;8028:21:1::0;8085:2;8065:18;;;8058:30;8124:32;8104:18;;;8097:60;8174:18;;33677:67:0::1;7844:354:1::0;33677:67:0::1;-1:-1:-1::0;;;;;33755:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:35;;-1:-1:-1;;33755:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33808:38;;33755:35;;:23;33808:38:::1;::::0;::::1;33516:338:::0;;:::o;33052:309::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33159:22:0;::::1;33176:4;33159:22;;33151:62;;;::::0;-1:-1:-1;;;33151:62:0;;8763:2:1;33151:62:0::1;::::0;::::1;8745:21:1::0;8802:2;8782:18;;;8775:30;8841:29;8821:18;;;8814:57;8888:18;;33151:62:0::1;8561:351:1::0;33151:62:0::1;33250:38;::::0;-1:-1:-1;;;33250:38:0;;33282:4:::1;33250:38;::::0;::::1;4686:51:1::0;33224:23:0::1;::::0;-1:-1:-1;;;;;33250:23:0;::::1;::::0;::::1;::::0;4659:18:1;;33250:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33224:64:::0;-1:-1:-1;33299:54:0::1;-1:-1:-1::0;;;;;33299:26:0;::::1;33326:9:::0;33224:64;33299:26:::1;:54::i;:::-;33140:221;33052:309:::0;;:::o;23094:238::-;23182:4;198:10;23238:64;198:10;23254:7;23291:10;23263:25;198:10;23254:7;23263:9;:25::i;:::-;:38;;;;:::i;:::-;23238:8;:64::i;31149:592::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;31284:19:::1;31306:61;31346:20:::0;31306:35:::1;:16:::0;31327:13;31306:20:::1;:35::i;:::-;:39:::0;::::1;:61::i;:::-;31284:83;;31402:3;31387:11;:18;;31378:62;;;::::0;-1:-1:-1;;;31378:62:0;;11807:2:1;31378:62:0::1;::::0;::::1;11789:21:1::0;11846:2;11826:18;;;11819:30;11885:32;11865:18;;;11858:60;11935:18;;31378:62:0::1;11605:354:1::0;31378:62:0::1;31453:13;:32:::0;;;31496:10:::1;:26:::0;;;31533:17:::1;:40:::0;;;31606:9:::1;::::0;;31586:17:::1;:29:::0;31626:23;;;31667:66:::1;::::0;;17315:25:1;;;17371:2;17356:18;;17349:34;;;17399:18;;;17392:34;;;31667:66:0::1;::::0;17303:2:1;17288:18;31667:66:0::1;;;;;;;31273:468;31149:592:::0;;;:::o;30908:111::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30977:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;30977:34:0::1;31007:4;30977:34;::::0;;30908:111::o;30487:278::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30592:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;::::1;;:39;;::::0;::::1;;;;30583:64;;;;-1:-1:-1::0;;;30583:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30658:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;:38;;-1:-1:-1;;30658:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30714:43;;30658:38;;:29;30714:43:::1;::::0;::::1;30487:278:::0;;:::o;33996:227::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;34067:12:::1;34085:9;-1:-1:-1::0;;;;;34085:14:0::1;34108:21;34085:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34066:69;;;34154:7;34146:69;;;::::0;-1:-1:-1;;;34146:69:0;;9526:2:1;34146:69:0::1;::::0;::::1;9508:21:1::0;9565:2;9545:18;;;9538:30;9604:34;9584:18;;;9577:62;-1:-1:-1;;;9655:18:1;;;9648:47;9712:19;;34146:69:0::1;9324:413:1::0;34146:69:0::1;34055:168;33996:227:::0;:::o;9615:148::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;9722:1:::1;9706:6:::0;;9685:40:::1;::::0;-1:-1:-1;;;;;9706:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9685:40:0;9722:1;;9685:40:::1;9753:1;9736:19:::0;;-1:-1:-1;;;;;;9736:19:0::1;::::0;;9615:148::o;31882:124::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;31965:16:::1;:33:::0;31882:124::o;33369:139::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;33434:14:::1;::::0;-1:-1:-1;;;33434:14:0;::::1;;;33433:15;33424:44;;;::::0;-1:-1:-1;;;33424:44:0;;12166:2:1;33424:44:0::1;::::0;::::1;12148:21:1::0;12205:2;12185:18;;;12178:30;-1:-1:-1;;;12224:18:1;;;12217:45;12279:18;;33424:44:0::1;11964:339:1::0;33424:44:0::1;33479:14;:21:::0;;-1:-1:-1;;;;33479:21:0::1;-1:-1:-1::0;;;33479:21:0::1;::::0;;33369:139::o;32649:169::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32749:10:::1;::::0;32731:42:::1;::::0;;17034:25:1;;;17090:2;17075:18;;17068:34;;;32731:42:0::1;::::0;17007:18:1;32731:42:0::1;;;;;;;32786:10;:24:::0;32649:169::o;21801:87::-;21840:13;21873:7;21866:14;;;;;:::i;23340:436::-;23433:4;198:10;23433:4;23516:25;198:10;23533:7;23516:9;:25::i;:::-;23489:52;;23580:15;23560:16;:35;;23552:85;;;;-1:-1:-1;;;23552:85:0;;15550:2:1;23552:85:0;;;15532:21:1;15589:2;15569:18;;;15562:30;15628:34;15608:18;;;15601:62;-1:-1:-1;;;15679:18:1;;;15672:35;15724:19;;23552:85:0;15348:401:1;23552:85:0;23673:60;23682:5;23689:7;23717:15;23698:16;:34;23673:8;:60::i;10461:305::-;10513:14;;-1:-1:-1;;;;;10513:14:0;10531:10;10513:28;10505:76;;;;-1:-1:-1;;;10505:76:0;;15146:2:1;10505:76:0;;;15128:21:1;15185:2;15165:18;;;15158:30;15224:34;15204:18;;;15197:62;-1:-1:-1;;;15275:18:1;;;15268:33;15318:19;;10505:76:0;14944:399:1;10505:76:0;10618:9;;10600:15;:27;10592:72;;;;-1:-1:-1;;;10592:72:0;;14375:2:1;10592:72:0;;;14357:21:1;14414:2;14394:18;;;14387:30;14453:33;14433:18;;;14426:61;14504:18;;10592:72:0;14173:355:1;10592:72:0;10709:14;;;10701:6;;10680:44;;-1:-1:-1;;;;;10709:14:0;;;;10701:6;;;;-1:-1:-1;;;;;;;;;;;10680:44:0;;10744:14;;;10735:23;;-1:-1:-1;;;;;;10735:23:0;-1:-1:-1;;;;;10744:14:0;;;10735:23;;;;;;10461:305::o;22222:193::-;22301:4;198:10;22357:28;198:10;22374:2;22378:6;22357:9;:28::i;32192:145::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32282:17:::1;:47:::0;;-1:-1:-1;;;;;;32282:47:0::1;-1:-1:-1::0;;;;;32282:47:0;;;::::1;::::0;;;::::1;::::0;;32192:145::o;32470:171::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32547:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;32547:32:0::1;-1:-1:-1::0;;;;32547:32:0;;::::1;;::::0;;32595:38:::1;::::0;::::1;::::0;::::1;::::0;32571:8;6028:14:1;6021:22;6003:41;;5991:2;5976:18;;5863:187;32595:38:0::1;;;;;;;;32470:171:::0;:::o;32345:117::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32421:10:::1;:33:::0;;-1:-1:-1;;;;;;32421:33:0::1;-1:-1:-1::0;;;;;32421:33:0;;;::::1;::::0;;;::::1;::::0;;32345:117::o;10223:226::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;10304:6:::1;::::0;;;10287:23;;-1:-1:-1;;;;;;10287:23:0;;::::1;-1:-1:-1::0;;;;;10304:6:0;::::1;10287:23;::::0;;;10321:19:::1;::::0;;10363:22:::1;10381:4:::0;10363:15:::1;:22;:::i;:::-;10351:9;:34:::0;10438:1:::1;10422:6:::0;;10401:40:::1;::::0;-1:-1:-1;;;;;10422:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;10401:40:0;10438:1;;10401:40:::1;10223:226:::0;:::o;22423:151::-;-1:-1:-1;;;;;22539:18:0;;;22512:7;22539:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22423:151::o;32826:218::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32904:15:::1;::::0;::::1;;:26;;::::0;::::1;;;;32896:50;;;;-1:-1:-1::0;;;32896:50:0::1;;;;;;;:::i;:::-;32957:15;:25:::0;;-1:-1:-1;;32957:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33000:36:::1;::::0;33023:12:::1;15900:25:1::0;;33000:36:0::1;::::0;15888:2:1;15873:18;33000:36:0::1;;;;;;;32826:218:::0;:::o;31031:110::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31098:27:0::1;31128:5;31098:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;31098:35:0::1;::::0;;31031:110::o;31759:111::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;31836:12:::1;:26:::0;31759:111::o;32014:166::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32122:23:::1;:50:::0;32014:166::o;9771:244::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9860:22:0;::::1;9852:73;;;::::0;-1:-1:-1;;;9852:73:0;;6880:2:1;9852:73:0::1;::::0;::::1;6862:21:1::0;6919:2;6899:18;;;6892:30;6958:34;6938:18;;;6931:62;-1:-1:-1;;;7009:18:1;;;7002:36;7055:19;;9852:73:0::1;6678:402:1::0;9852:73:0::1;9962:6;::::0;;9941:38:::1;::::0;-1:-1:-1;;;;;9941:38:0;;::::1;::::0;9962:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;9941:38:0;::::1;9990:6;:17:::0;;-1:-1:-1;;;;;;9990:17:0::1;-1:-1:-1::0;;;;;9990:17:0;;;::::1;::::0;;;::::1;::::0;;9771:244::o;24037:380::-;-1:-1:-1;;;;;24173:19:0;;24165:68;;;;-1:-1:-1;;;24165:68:0;;13272:2:1;24165:68:0;;;13254:21:1;13311:2;13291:18;;;13284:30;13350:34;13330:18;;;13323:62;-1:-1:-1;;;13401:18:1;;;13394:34;13445:19;;24165:68:0;13070:400:1;24165:68:0;-1:-1:-1;;;;;24252:21:0;;24244:68;;;;-1:-1:-1;;;24244:68:0;;7287:2:1;24244:68:0;;;7269:21:1;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:32;7458:19;;24244:68:0;7085:398:1;24244:68:0;-1:-1:-1;;;;;24325:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24377:32;;15900:25:1;;;24377:32:0;;15873:18:1;24377:32:0;;;;;;;24037:380;;;:::o;24425:453::-;24560:24;24587:25;24597:5;24604:7;24587:9;:25::i;:::-;24560:52;;-1:-1:-1;;24627:16:0;:37;24623:248;;24709:6;24689:16;:26;;24681:68;;;;-1:-1:-1;;;24681:68:0;;8405:2:1;24681:68:0;;;8387:21:1;8444:2;8424:18;;;8417:30;8483:31;8463:18;;;8456:59;8532:18;;24681:68:0;8203:353:1;24681:68:0;24793:51;24802:5;24809:7;24837:6;24818:16;:25;24793:8;:51::i;:::-;24549:329;24425:453;;;:::o;24886:1636::-;-1:-1:-1;;;;;25008:18:0;;25000:68;;;;-1:-1:-1;;;25000:68:0;;12866:2:1;25000:68:0;;;12848:21:1;12905:2;12885:18;;;12878:30;12944:34;12924:18;;;12917:62;-1:-1:-1;;;12995:18:1;;;12988:35;13040:19;;25000:68:0;12664:401:1;25000:68:0;-1:-1:-1;;;;;25088:20:0;;;;;;:14;:20;;;;;;;;25087:21;25079:45;;;;-1:-1:-1;;;25079:45:0;;14035:2:1;25079:45:0;;;14017:21:1;14074:2;14054:18;;;14047:30;-1:-1:-1;;;14093:18:1;;;14086:41;14144:18;;25079:45:0;13833:335:1;25079:45:0;-1:-1:-1;;;;;25144:18:0;;;;;;:14;:18;;;;;;;;25143:19;25135:43;;;;-1:-1:-1;;;25135:43:0;;14035:2:1;25135:43:0;;;14017:21:1;14074:2;14054:18;;;14047:30;-1:-1:-1;;;14093:18:1;;;14086:41;14144:18;;25135:43:0;13833:335:1;25135:43:0;-1:-1:-1;;;;;25318:24:0;;25191:12;25318:24;;;:18;:24;;;;;;25206:4;;25318:24;;;:50;;-1:-1:-1;;;;;;25346:22:0;;;;;;:18;:22;;;;;;;;25318:50;25315:434;;;-1:-1:-1;25394:5:0;25315:434;;;25452:12;;25442:6;:22;;25434:75;;;;-1:-1:-1;;;25434:75:0;;9944:2:1;25434:75:0;;;9926:21:1;9983:2;9963:18;;;9956:30;10022:34;10002:18;;;9995:62;-1:-1:-1;;;10073:18:1;;;10066:38;10121:19;;25434:75:0;9742:404:1;25434:75:0;25532:14;;-1:-1:-1;;;25532:14:0;;;;25524:49;;;;-1:-1:-1;;;25524:49:0;;10353:2:1;25524:49:0;;;10335:21:1;10392:2;10372:18;;;10365:30;-1:-1:-1;;;10411:18:1;;;10404:52;10473:18;;25524:49:0;10151:346:1;25524:49:0;-1:-1:-1;;;;;25593:24:0;;;;;;:20;:24;;;;;;;;25588:148;;25672:16;;-1:-1:-1;;;;;25646:13:0;;;;;;:9;:13;;;;;;:22;;25662:6;;25646:22;:::i;:::-;:42;;25638:82;;;;-1:-1:-1;;;25638:82:0;;12510:2:1;25638:82:0;;;12492:21:1;12549:2;12529:18;;;12522:30;12588:29;12568:18;;;12561:57;12635:18;;25638:82:0;12308:351:1;25638:82:0;25810:4;25761:28;22188:18;;;:9;:18;;;;;;25882:23;;25858:47;;;;;;;25930:44;;-1:-1:-1;25958:16:0;;-1:-1:-1;;;25958:16:0;;;;25957:17;25930:44;:69;;;;-1:-1:-1;25978:21:0;;-1:-1:-1;;;25978:21:0;;;;25930:69;:94;;;;-1:-1:-1;26011:13:0;;-1:-1:-1;;;;;26003:21:0;;;26011:13;;26003:21;;25930:94;25926:291;;;26045:23;26041:165;;;26112:23;;26089:46;;26154:32;26165:20;26154:10;:32::i;:::-;-1:-1:-1;;;;;26251:24:0;;;26237:11;26251:24;;;:20;:24;;;;;;;26292:26;;;;;;;;26251:24;;;;;26292:26;26291:27;:38;;;;;26323:6;26322:7;26291:38;26288:85;;;26356:5;26346:15;;26288:85;26389:15;;;;26388:16;:27;;;;;26409:6;26408:7;26388:27;26385:74;;;26442:5;26432:15;;26385:74;26469:45;26484:4;26489:2;26492:6;26499:7;26507:6;26469:14;:45::i;:::-;24989:1533;;;;24886:1636;;;:::o;5855:211::-;5999:58;;;-1:-1:-1;;;;;5164:32:1;;5999:58:0;;;5146:51:1;5213:18;;;;5206:34;;;5999:58:0;;;;;;;;;;5119:18:1;;;;5999:58:0;;;;;;;;-1:-1:-1;;;;;5999:58:0;-1:-1:-1;;;5999:58:0;;;5972:86;;5992:5;;5972:19;:86::i;1551:181::-;1609:7;;1641:5;1645:1;1641;:5;:::i;:::-;1629:17;;1670:1;1665;:6;;1657:46;;;;-1:-1:-1;;;1657:46:0;;7690:2:1;1657:46:0;;;7672:21:1;7729:2;7709:18;;;7702:30;7768:29;7748:18;;;7741:57;7815:18;;1657:46:0;7488:351:1;1657:46:0;1723:1;1551:181;-1:-1:-1;;;1551:181:0:o;26530:982::-;21012:16;:23;;-1:-1:-1;;;;21012:23:0;-1:-1:-1;;;21012:23:0;;;26690:9:::1;::::0;26671:13:::1;::::0;21012:23;;26646:61:::1;::::0;26705:1:::1;::::0;26646:54:::1;::::0;;;:20;;:24:::1;:39::i;:::-;:43:::0;::::1;:54::i;:61::-;26620:87:::0;-1:-1:-1;26718:20:0::1;26741:41;:20:::0;26620:87;26741:24:::1;:41::i;:::-;26718:64:::0;-1:-1:-1;26820:21:0::1;26852:30;26718:64:::0;26852:16:::1;:30::i;:::-;26893:26;26922:41;:21;26948:14:::0;26922:25:::1;:41::i;:::-;26893:70;;26974:19;26996:35;27010:20;27028:1;27010:13;;:17;;:20;;;;:::i;:::-;26996:9;::::0;;:13:::1;:35::i;:::-;26974:57:::0;-1:-1:-1;27076:19:0;;27073:167:::1;;27148:92;27161:15;27178:61;27237:1;27178:54;27220:11;27178:37;27201:13;;27178:18;:22;;:37;;;;:::i;:61::-;27148:12;:92::i;:::-;27320:17;::::0;27362::::1;::::0;27299:99:::1;::::0;-1:-1:-1;;;;;27320:17:0::1;::::0;27339:58:::1;::::0;27385:11;;27339:41:::1;::::0;:18;;:22:::1;:41::i;:58::-;27299:20;:99::i;:::-;27430:10;::::0;27465::::1;::::0;27409:85:::1;::::0;-1:-1:-1;;;;;27430:10:0::1;::::0;27442:51:::1;::::0;27481:11;;27442:34:::1;::::0;:18;;:22:::1;:34::i;27409:85::-;-1:-1:-1::0;;21058:16:0;:24;;-1:-1:-1;;;;21058:24:0;;;-1:-1:-1;;;;26530:982:0:o;28729:1123::-;28853:7;28849:40;;28875:14;:12;:14::i;:::-;-1:-1:-1;;;;;28992:17:0;;28970:19;28992:17;;;:9;:17;;;;;;29028:21;;;;29020:72;;;;-1:-1:-1;;;29020:72:0;;9119:2:1;29020:72:0;;;9101:21:1;9158:2;9138:18;;;9131:30;9197:34;9177:18;;;9170:62;-1:-1:-1;;;9248:18:1;;;9241:36;9294:19;;29020:72:0;8917:402:1;29020:72:0;29103:12;29118:33;29136:6;29144;29118:17;:33::i;:::-;29103:48;-1:-1:-1;29162:24:0;29189:13;29103:48;29189:6;:13;:::i;:::-;-1:-1:-1;;;;;29238:17:0;;;;;;;:9;:17;;;;;;29258:20;;;29238:40;;29458:20;;;;;;;;:40;;;;;;29531:4;29513:24;;;:32;;;;;;29162:40;-1:-1:-1;29573:7:0;29569:41;;29595:15;30314:17;;30302:9;:29;30258:81;29595:15;29645:9;-1:-1:-1;;;;;29628:45:0;29637:6;-1:-1:-1;;;;;29628:45:0;;29656:16;29628:45;;;;15900:25:1;;15888:2;15873:18;;15754:177;29628:45:0;;;;;;;;29687:8;;29684:82;;29717:37;;15900:25:1;;;29742:4:0;;-1:-1:-1;;;;;29717:37:0;;;;;15888:2:1;15873:18;29717:37:0;;;;;;;29684:82;28838:1014;;;28729:1123;;;;;:::o;8278:716::-;8702:23;8728:69;8756:4;8728:69;;;;;;;;;;;;;;;;;8736:5;-1:-1:-1;;;;;8728:27:0;;;:69;;;;;:::i;:::-;8812:17;;8702:95;;-1:-1:-1;8812:21:0;8808:179;;8909:10;8898:30;;;;;;;;;;;;:::i;:::-;8890:85;;;;-1:-1:-1;;;8890:85:0;;14735:2:1;8890:85:0;;;14717:21:1;14774:2;14754:18;;;14747:30;14813:34;14793:18;;;14786:62;-1:-1:-1;;;14864:18:1;;;14857:40;14914:19;;8890:85:0;14533:406:1;2084:250:0;2142:7;2166:6;2162:47;;-1:-1:-1;2196:1:0;2189:8;;2162:47;2221:9;2233:5;2237:1;2233;:5;:::i;:::-;2221:17;-1:-1:-1;2266:1:0;2257:5;2261:1;2221:17;2257:5;:::i;:::-;:10;2249:56;;;;-1:-1:-1;;;2249:56:0;;11044:2:1;2249:56:0;;;11026:21:1;11083:2;11063:18;;;11056:30;11122:34;11102:18;;;11095:62;-1:-1:-1;;;11173:18:1;;;11166:31;11214:19;;2249:56:0;10842:397:1;2344:132:0;2402:7;2429:39;2433:1;2436;2429:39;;;;;;;;;;;;;;;;;:3;:39::i;1740:136::-;1798:7;1825:43;1829:1;1832;1825:43;;;;;;;;;;;;;;;;;:3;:43::i;27524:666::-;27674:16;;;27688:1;27674:16;;;;;;;;27650:21;;27674:16;;;;;;;;;;-1:-1:-1;27674:16:0;27650:40;;27719:4;27701;27706:1;27701:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27701:23:0;;;-1:-1:-1;;;;;27701:23:0;;;;;27745:15;-1:-1:-1;;;;;27745:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27735:4;27740:1;27735:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27735:32:0;;;-1:-1:-1;;;;;27735:32:0;;;;;27780:62;27797:4;27812:15;27830:11;27780:8;:62::i;:::-;27881:240;;-1:-1:-1;;;27881:240:0;;-1:-1:-1;;;;;27881:15:0;:66;;;;:240;;27962:11;;27988:1;;28032:4;;28059;;28095:15;;27881:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28147:35;28164:11;28177:4;28147:35;;;;;;;:::i;:::-;;;;;;;;27579:611;27524:666;:::o;28202:519::-;28350:62;28367:4;28382:15;28400:11;28350:8;:62::i;:::-;28455:258;;-1:-1:-1;;;28455:258:0;;28527:4;28455:258;;;5592:34:1;;;5642:18;;;5635:34;;;28573:1:0;5685:18:1;;;5678:34;;;5728:18;;;5721:34;5771:19;;;5764:44;28687:15:0;5824:19:1;;;5817:35;28455:15:0;-1:-1:-1;;;;;28455:31:0;;;;28494:9;;5526:19:1;;28455:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28202:519;;:::o;33862:126::-;33954:26;;-1:-1:-1;;;;;33954:18:0;;;:26;;;;;33973:6;;33954:26;;;;33973:6;33954:18;:26;;;;;;;;;;;;;;;;;;;30095:151;30141:9;;30138:26;;30095:151::o;30138:26::-;30204:9;;;30184:17;:29;-1:-1:-1;30225:13:0;;30095:151::o;29864:219::-;29944:7;29964:12;29979:33;30006:5;29979:22;29991:9;;29979:7;:11;;:22;;;;:::i;:33::-;29964:48;;30030:7;:45;;30071:4;30030:45;;;30040:28;30065:2;30040:20;30049:10;;30040:4;:8;;:20;;;;:::i;:28::-;30023:52;29864:219;-1:-1:-1;;;;29864:219:0:o;4321:196::-;4424:12;4456:53;4479:6;4487:4;4493:1;4496:12;4456:22;:53::i;2484:278::-;2570:7;2605:12;2598:5;2590:28;;;;-1:-1:-1;;;2590:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2629:9:0;2641:5;2645:1;2641;:5;:::i;:::-;2629:17;2484:278;-1:-1:-1;;;;;2484:278:0:o;1884:192::-;1970:7;2006:12;1998:6;;;;1990:29;;;;-1:-1:-1;;;1990:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2030:9:0;2042:5;2046:1;2042;:5;:::i;5083:706::-;5213:12;5246:18;5257:6;5246:10;:18::i;:::-;5238:60;;;;-1:-1:-1;;;5238:60:0;;13677:2:1;5238:60:0;;;13659:21:1;13716:2;13696:18;;;13689:30;13755:31;13735:18;;;13728:59;13804:18;;5238:60:0;13475:353:1;5238:60:0;5312:12;5326:23;5353:6;-1:-1:-1;;;;;5353:11:0;5373:8;5384:4;5353:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5311:78;;;;5404:7;5400:382;;;5435:10;-1:-1:-1;5428:17:0;;-1:-1:-1;5428:17:0;5400:382;5496:17;;:21;5492:279;;5599:10;5593:17;5660:15;5647:10;5643:2;5639:19;5632:44;5492:279;5742:12;5735:20;;-1:-1:-1;;;5735:20:0;;;;;;;;:::i;3106:619::-;3166:4;3634:20;;3477:66;3674:23;;;;;;:42;;-1:-1:-1;;3701:15:0;;;3666:51;-1:-1:-1;;3106:619:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:180::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;-1:-1:-1;2730:23:1;;2579:180;-1:-1:-1;2579:180:1:o;2764:184::-;2834:6;2887:2;2875:9;2866:7;2862:23;2858:32;2855:52;;;2903:1;2900;2893:12;2855:52;-1:-1:-1;2926:16:1;;2764:184;-1:-1:-1;2764:184:1:o;2953:316::-;3030:6;3038;3046;3099:2;3087:9;3078:7;3074:23;3070:32;3067:52;;;3115:1;3112;3105:12;3067:52;-1:-1:-1;;3138:23:1;;;3208:2;3193:18;;3180:32;;-1:-1:-1;3259:2:1;3244:18;;;3231:32;;2953:316;-1:-1:-1;2953:316:1:o;3274:306::-;3362:6;3370;3378;3431:2;3419:9;3410:7;3406:23;3402:32;3399:52;;;3447:1;3444;3437:12;3399:52;3476:9;3470:16;3460:26;;3526:2;3515:9;3511:18;3505:25;3495:35;;3570:2;3559:9;3555:18;3549:25;3539:35;;3274:306;;;;;:::o;3585:461::-;3638:3;3676:5;3670:12;3703:6;3698:3;3691:19;3729:4;3758:2;3753:3;3749:12;3742:19;;3795:2;3788:5;3784:14;3816:1;3826:195;3840:6;3837:1;3834:13;3826:195;;;3905:13;;-1:-1:-1;;;;;3901:39:1;3889:52;;3961:12;;;;3996:15;;;;3937:1;3855:9;3826:195;;;-1:-1:-1;4037:3:1;;3585:461;-1:-1:-1;;;;;3585:461:1:o;4051:274::-;4180:3;4218:6;4212:13;4234:53;4280:6;4275:3;4268:4;4260:6;4256:17;4234:53;:::i;:::-;4303:16;;;;;4051:274;-1:-1:-1;;4051:274:1:o;6290:383::-;6439:2;6428:9;6421:21;6402:4;6471:6;6465:13;6514:6;6509:2;6498:9;6494:18;6487:34;6530:66;6589:6;6584:2;6573:9;6569:18;6564:2;6556:6;6552:15;6530:66;:::i;:::-;6657:2;6636:15;-1:-1:-1;;6632:29:1;6617:45;;;;6664:2;6613:54;;6290:383;-1:-1:-1;;6290:383:1:o;10502:335::-;10704:2;10686:21;;;10743:2;10723:18;;;10716:30;-1:-1:-1;;;10777:2:1;10762:18;;10755:41;10828:2;10813:18;;10502:335::o;11244:356::-;11446:2;11428:21;;;11465:18;;;11458:30;11524:34;11519:2;11504:18;;11497:62;11591:2;11576:18;;11244:356::o;15936:332::-;16143:6;16132:9;16125:25;16186:2;16181;16170:9;16166:18;16159:30;16106:4;16206:56;16258:2;16247:9;16243:18;16235:6;16206:56;:::i;16273:582::-;16572:6;16561:9;16554:25;16615:6;16610:2;16599:9;16595:18;16588:34;16658:3;16653:2;16642:9;16638:18;16631:31;16535:4;16679:57;16731:3;16720:9;16716:19;16708:6;16679:57;:::i;:::-;-1:-1:-1;;;;;16772:32:1;;;;16767:2;16752:18;;16745:60;-1:-1:-1;16836:3:1;16821:19;16814:35;16671:65;16273:582;-1:-1:-1;;;16273:582:1:o;17626:128::-;17666:3;17697:1;17693:6;17690:1;17687:13;17684:39;;;17703:18;;:::i;:::-;-1:-1:-1;17739:9:1;;17626:128::o;17759:217::-;17799:1;17825;17815:132;;17869:10;17864:3;17860:20;17857:1;17850:31;17904:4;17901:1;17894:15;17932:4;17929:1;17922:15;17815:132;-1:-1:-1;17961:9:1;;17759:217::o;17981:168::-;18021:7;18087:1;18083;18079:6;18075:14;18072:1;18069:21;18064:1;18057:9;18050:17;18046:45;18043:71;;;18094:18;;:::i;:::-;-1:-1:-1;18134:9:1;;17981:168::o;18154:125::-;18194:4;18222:1;18219;18216:8;18213:34;;;18227:18;;:::i;:::-;-1:-1:-1;18264:9:1;;18154:125::o;18284:258::-;18356:1;18366:113;18380:6;18377:1;18374:13;18366:113;;;18456:11;;;18450:18;18437:11;;;18430:39;18402:2;18395:10;18366:113;;;18497:6;18494:1;18491:13;18488:48;;;-1:-1:-1;;18532:1:1;18514:16;;18507:27;18284:258::o;18547:380::-;18626:1;18622:12;;;;18669;;;18690:61;;18744:4;18736:6;18732:17;18722:27;;18690:61;18797:2;18789:6;18786:14;18766:18;18763:38;18760:161;;;18843:10;18838:3;18834:20;18831:1;18824:31;18878:4;18875:1;18868:15;18906:4;18903:1;18896:15;18760:161;;18547:380;;;:::o;18932:127::-;18993:10;18988:3;18984:20;18981:1;18974:31;19024:4;19021:1;19014:15;19048:4;19045:1;19038:15;19064:127;19125:10;19120:3;19116:20;19113:1;19106:31;19156:4;19153:1;19146:15;19180:4;19177:1;19170:15;19328:131;-1:-1:-1;;;;;19403:31:1;;19393:42;;19383:70;;19449:1;19446;19439:12;19383:70;19328:131;:::o;19464:118::-;19550:5;19543:13;19536:21;19529:5;19526:32;19516:60;;19572:1;19569;19562:12

Swarm Source

ipfs://fb6281334e7c41a8ec4f00860ef90e49e853a901fb905173b861cf51668c3684
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.