ETH Price: $3,406.37 (-0.32%)
Gas: 22 Gwei

Token

Cows.lol (GRASS)
 

Overview

Max Total Supply

1,000,000 GRASS

Holders

148

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.778251235 GRASS

Value
$0.00
0xf1466EBdd36d5e3638A12316477520bF3b2378A1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GRASS

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-10
*/

// SPDX-License-Identifier: MIT

/**
    _______      ,-----.    .--.      .--.   .-'''-.  
   /   __  \   .'  .-,  '.  |  |_     |  |  / _     \ 
  | ,_/  \__) / ,-.|  \ _ \ | _( )_   |  | (`' )/`--' 
,-./  )      ;  \  '_ /  | :|(_ o _)  |  |(_ o _).    
\  '_ '`)    |  _`,/ \ _/  || (_,_) \ |  | (_,_). '.  
 > (_)  )  __: (  '\_/ \   ;|  |/    \|  |.---.  \  : 
(  .  .-'_/  )\ `"/  \  ) / |  '  /\  `  |\    `-'  | 
 `-'`-'     /  '. \_/``".'  |    /  \    | \       /  
   `._____.'     '-----'    `---'    `---`  `-...-'   

Cows
Ethereums number one cow farming game.
https://cows.lol

**/

pragma solidity ^0.8.17;

abstract contract Project {
    address public marketingWallet = 0x0122Ffe7aD150F20231a6452483eFBaECCB13A19;
    address public treasuryWallet = 0x0122Ffe7aD150F20231a6452483eFBaECCB13A19;

    string constant _name = "Cows.lol";
    string constant _symbol = "GRASS";
    uint8 constant _decimals = 9;

    mapping(address => bool) public isBlacklisted;

    uint256 _totalSupply = 1 * 10**6 * 10**_decimals;
    uint256 public maxTxNumber = 10;
    uint256 public maxWalletNumber = 10;
    uint256 public _maxTxAmount = (_totalSupply * maxTxNumber) / 1000;
    uint256 public _maxWalletToken = (_totalSupply * maxWalletNumber) / 1000;
    uint256 public buyFee             = 80;
    uint256 public buyTotalFee        = buyFee;
    uint256 public swapLpFee          = 1;
    uint256 public swapMarketing      = 78;
    uint256 public swapTreasuryFee    = 1;
    uint256 public swapTotalFee       = swapMarketing + swapLpFee + swapTreasuryFee;
    uint256 public transFee           = 0;
    uint256 public feeDenominator     = 100;

}

// SafeMath Library

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

// Standard IERC20 Interface

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    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);
}

// Context

abstract contract Context {
    //function _msgSender() internal view virtual returns (address payable) {
    function _msgSender() internal view virtual returns (address) {
        return 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;
    }
}

// Ownership

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

// Uniswap Factory

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

// Uniswap Pair

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// Uniswap Router

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

// Uniswap Router Updated

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

// Use safemath in uint256
// Custom fee threshholding is in effect.

contract GRASS is Project, IERC20, Ownable {
    using SafeMath for uint256;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isMaxExempt;
    mapping (address => bool) isTimelockExempt;

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IUniswapV2Router02 public immutable contractRouter;
    address public immutable uniswapV2Pair;

    bool public tradingOpen = false;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 40 / 10000;
    uint256 public swapAmount = _totalSupply * 30 / 10000;

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //Mainnet & Testnet ETH
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        contractRouter = _uniswapV2Router;

        _allowances[address(this)][address(contractRouter)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isFeeExempt[marketingWallet] = true;
        isMaxExempt[marketingWallet] = true;
        isTxLimitExempt[marketingWallet] = true;

        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner(); }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override notBlacklisted(msg.sender) returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override notBlacklisted(sender) returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function addToBlacklist(address[] calldata addressesToAdd) external onlyOwner {
        for (uint256 i = 0; i < addressesToAdd.length; i++) {
            isBlacklisted[addressesToAdd[i]] = true;
        }
    }

    function setMaxWallet(uint256 maxWalletPercent) external onlyOwner() {
        maxWalletNumber = maxWalletPercent;
    }

    function setMaxTx(uint256 maxTxPercent) external onlyOwner() {
        maxTxNumber = maxTxPercent;
    }

    function setTxLimit(uint256 amount) external onlyOwner() {
        _maxTxAmount = amount;
    }

    modifier notBlacklisted(address sender) {
        require(!isBlacklisted[sender], "Address is blacklisted");
        _;
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(sender != owner() && recipient != owner()){
            require(tradingOpen,"Trading not open yet");
        }

        bool inSell = (recipient == uniswapV2Pair);
        bool inTransfer = (recipient != uniswapV2Pair && sender != uniswapV2Pair);

        if (recipient != address(this) && 
            recipient != address(DEAD) && 
            recipient != uniswapV2Pair && 
            recipient != marketingWallet && 
            recipient != treasuryWallet && 
            recipient != autoLiquidityReceiver
        ){
            uint256 heldTokens = balanceOf(recipient);
            if(!isMaxExempt[recipient]) {
                require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
            }
        }

        if (sender == uniswapV2Pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]
        ){
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        // but no point if the recipient is exempt
        // this check ensures that someone that is buying and is txnExempt then they are able to buy any amount
        if(!isTxLimitExempt[recipient]) {
            checkTxLimit(sender, amount);
        }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = amount;

        // Do NOT take a fee if sender AND recipient are NOT the contract
        // i.e. you are doing a transfer
        if(inTransfer) {
            if(transFee > 0) {
                amountReceived = takeTransferFee(sender, amount);
            }
        } else {
            amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount, inSell) : amount;
            
            if(shouldSwapBack()){ swapBack(); }
        }

        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256) {

        uint256 feeToTake = transFee;
        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        uint256 feeToTake;
        if (isBlacklisted[sender]) {
            feeToTake = 40; // Blacklisted holders have 40% taxes forever.
        } else {
            feeToTake = isSell ? swapTotalFee : buyTotalFee;
        }

        uint256 feeAmount = amount.mul(feeToTake).mul(100).div(feeDenominator * 100);
        
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != uniswapV2Pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(marketingWallet).transfer(amountETH * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner() {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    function feeOnTransfer(uint256 fee) external onlyOwner() {
        transFee = fee;
    }

    function feeOnSell(uint256 _newSwapLpFee, uint256 _newSwapMarketingFee, uint256 _newSwapTreasuryFee, uint256 _feeDenominator) external onlyOwner() {
        swapLpFee = _newSwapLpFee;
        swapMarketing = _newSwapMarketingFee;
        swapTreasuryFee = _newSwapTreasuryFee;
        swapTotalFee = _newSwapLpFee.add(_newSwapMarketingFee).add(_newSwapTreasuryFee);
        feeDenominator = _feeDenominator;
    }

    function feeOnBuy(uint256 buyTax) external onlyOwner() {
        buyTotalFee = buyTax;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : swapLpFee;
        uint256 amountToLiquify = swapAmount.mul(dynamicLiquidityFee).div(swapTotalFee).div(2);
        uint256 amountToSwap = swapAmount.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = contractRouter.WETH();

        uint256 balanceBefore = address(this).balance;

        contractRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = swapTotalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(swapLpFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(swapMarketing).div(totalETHFee);
        uint256 amountETHTreasury = amountETH.mul(swapTreasuryFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingWallet).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(treasuryWallet).call{value: amountETHTreasury, gas: 30000}("");

        // Supress warning msg
        tmpSuccess = false;

        if(amountToLiquify > 0){
            contractRouter.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner() {
        isFeeExempt[holder] = exempt;
    }

    function setIsMaxExempt(address holder, bool exempt) external onlyOwner() {
        isMaxExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner() {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external onlyOwner() {
        isTimelockExempt[holder] = exempt;
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _newMarketingWallet, address _newTreasuryWallet ) external onlyOwner() {

        isFeeExempt[treasuryWallet] = false;
        isFeeExempt[_newTreasuryWallet] = true;
        isFeeExempt[marketingWallet] = false;
        isFeeExempt[_newMarketingWallet] = true;

        isMaxExempt[_newMarketingWallet] = true;

        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingWallet = _newMarketingWallet;
        treasuryWallet = _newTreasuryWallet;
    }

    function setSwapThresholdAmount(uint256 _amount) external onlyOwner() {
        swapThreshold = _amount;
    }

    function setSwapAmount(uint256 _amount) external onlyOwner() {
        if(_amount > swapThreshold) {
            swapAmount = swapThreshold;
        } else {
            swapAmount = _amount;
        }        
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external onlyOwner() {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(uniswapV2Pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

/* Airdrop */
    function airDropCustom(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

        require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
        require(addresses.length == tokens.length,"Mismatch between Address and token count");

        uint256 SCCC = 0;

        for(uint i=0; i < addresses.length; i++){
            SCCC = SCCC + tokens[i];
        }

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens[i]);
        }
        
    }

    function airDropFixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

        require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses");

        uint256 SCCC = tokens * addresses.length;

        require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

        for(uint i=0; i < addresses.length; i++){
            _basicTransfer(from,addresses[i],tokens);
        }
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addressesToAdd","type":"address[]"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airDropCustom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"airDropFixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"}],"name":"feeOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSwapLpFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_newSwapTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"feeOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"feeOnTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_newMarketingWallet","type":"address"},{"internalType":"address","name":"_newTreasuryWallet","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletPercent","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapThresholdAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260008054730122ffe7ad150f20231a6452483efbaeccb13a196001600160a01b03199182168117909255600180549091169091179055620000486009600a62000585565b6200005790620f42406200059d565b600355600a600455600a6005556103e86004546003546200007991906200059d565b620000859190620005b7565b6006556103e86005546003546200009d91906200059d565b620000a99190620005b7565b60075560506008556008546009556001600a55604e600b556001600c55600c54600a54600b54620000db9190620005da565b620000e79190620005da565b600d556000600e556064600f8190556013805461dead6001600160a01b031991821617909155601480549091168155601c55601d55601e805462ffffff1916620a01001790556020805460ff19166001179055600354612710906200014e9060286200059d565b6200015a9190620005b7565b602155612710600354601e6200017191906200059d565b6200017d9190620005b7565b6022553480156200018d57600080fd5b50601080546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000229573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024f9190620005f0565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c39190620005f0565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000311573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003379190620005f0565b6001600160a01b0390811660a052818116608081905230600081815260166020908152604080832094835293815283822060001990553380835260178083528584208054600160ff1991821681179092556018808652888720805483168417905560198087528988208054841685179055601a875289882080548416851790556013548b1688528988208054841685179055978752888720805483168417905586548a168752928552878620805482168317905585548916865295845286852080548716821790558454909716845282528483208054909416909517909255601b80546001600160a01b03191685179055600354848252601583528382208190559251928352917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200061b565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004c7578160001904821115620004ab57620004ab62000470565b80851615620004b957918102915b93841c93908002906200048b565b509250929050565b600082620004e0575060016200057f565b81620004ef575060006200057f565b8160018114620005085760028114620005135762000533565b60019150506200057f565b60ff84111562000527576200052762000470565b50506001821b6200057f565b5060208310610133831016604e8410600b841016171562000558575081810a6200057f565b62000564838362000486565b80600019048211156200057b576200057b62000470565b0290505b92915050565b60006200059660ff841683620004cf565b9392505050565b80820281158282048414176200057f576200057f62000470565b600082620005d557634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200057f576200057f62000470565b6000602082840312156200060357600080fd5b81516001600160a01b03811681146200059657600080fd5b60805160a051612af0620006806000396000818161068d015281816115b0015281816119520152818161198c015281816119f301528181611b2e01526120ad0152600081816107a0015281816121d30152818161228d01526124900152612af06000f3fe6080604052600436106103a65760003560e01c8063658d4b7f116101e7578063a84c01041161010d578063dd62ed3e116100a0578063f53fd5841161006f578063f53fd58414610ad0578063f84ba65d14610ae6578063fe575a8714610b06578063ffb54a9914610b3657600080fd5b8063dd62ed3e14610a34578063e53c30b014610a7a578063e632313c14610a90578063f2fde38b14610ab057600080fd5b8063cf703bb9116100dc578063cf703bb9146109b4578063d51ed1c8146109d4578063d7c01032146109f4578063dd395c6314610a1457600080fd5b8063a84c01041461093e578063a9059cbb14610954578063bc33718214610974578063ca33e64c1461099457600080fd5b806375f0a874116101855780638da5cb5b116101545780638da5cb5b146108b25780638e8aaafa146108d0578063935eb35f146108f057806395d89b411461091057600080fd5b806375f0a8741461085157806378109e54146108715780637d1db4a514610887578063893d20e81461089d57600080fd5b806370a08231116101c157806370a08231146107dc578063713e4ae5146107fc578063715018a61461081c578063722b62ad1461083157600080fd5b8063658d4b7f1461076e57806367ac77b41461078e5780636ddd1713146107c257600080fd5b80632e8fa821116102cc578063470624021161026a578063571ac8b011610239578063571ac8b0146106ef5780635c85974f1461070f5780635d0044ca1461072f578063617fe0ed1461074f57600080fd5b8063470624021461066557806349bd5a5e1461067b5780634dd0e4d3146106af57806350db71fb146106cf57600080fd5b8063442a583d116102a6578063442a583d146105d757806344a33fd2146105f75780634626402b1461061757806346e421a21461064f57600080fd5b80632e8fa82114610589578063313ce5671461059f5780633705b392146105c157600080fd5b806318160ddd1161034457806323b872dd1161031357806323b872dd1461051e57806329e04b4a1461053e5780632a6be0d21461055e5780632b112e491461057457600080fd5b806318160ddd146104b35780631da1db5e146104c85780631e25dc54146104e8578063201e7991146104fe57600080fd5b8063095ea7b311610380578063095ea7b31461042b5780630d2959801461045b5780631161ae391461047d578063180b0d7e1461049d57600080fd5b8063026f7d15146103b25780630445b667146103db57806306fdde03146103f157600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c8600b5481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506103c860215481565b3480156103fd57600080fd5b5060408051808201909152600881526710dbdddccb9b1bdb60c21b60208201525b6040516103d29190612555565b34801561043757600080fd5b5061044b6104463660046125b8565b610b50565b60405190151581526020016103d2565b34801561046757600080fd5b5061047b6104763660046125f9565b610bbd565b005b34801561048957600080fd5b5061044b610498366004612614565b610c03565b3480156104a957600080fd5b506103c8600f5481565b3480156104bf57600080fd5b506003546103c8565b3480156104d457600080fd5b5061047b6104e3366004612636565b610c17565b3480156104f457600080fd5b506103c8600e5481565b34801561050a57600080fd5b5061047b610519366004612614565b610c95565b34801561052a57600080fd5b5061044b61053936600461264f565b610cca565b34801561054a57600080fd5b5061047b610559366004612636565b610dee565b34801561056a57600080fd5b506103c860055481565b34801561058057600080fd5b506103c8610e1d565b34801561059557600080fd5b506103c860225481565b3480156105ab57600080fd5b5060095b60405160ff90911681526020016103d2565b3480156105cd57600080fd5b506103c860095481565b3480156105e357600080fd5b5061047b6105f23660046126dc565b610e66565b34801561060357600080fd5b5061047b610612366004612636565b610fb4565b34801561062357600080fd5b50600154610637906001600160a01b031681565b6040516001600160a01b0390911681526020016103d2565b34801561065b57600080fd5b506103c8600a5481565b34801561067157600080fd5b506103c860085481565b34801561068757600080fd5b506106377f000000000000000000000000000000000000000000000000000000000000000081565b3480156106bb57600080fd5b5061047b6106ca366004612636565b610fef565b3480156106db57600080fd5b5061047b6106ea366004612738565b61101e565b3480156106fb57600080fd5b5061044b61070a36600461276d565b611073565b34801561071b57600080fd5b5061047b61072a366004612636565b611081565b34801561073b57600080fd5b5061047b61074a366004612636565b6110b0565b34801561075b57600080fd5b50601e5461044b90610100900460ff1681565b34801561077a57600080fd5b5061047b610789366004612738565b6110df565b34801561079a57600080fd5b506106377f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ce57600080fd5b5060205461044b9060ff1681565b3480156107e857600080fd5b506103c86107f736600461276d565b611134565b34801561080857600080fd5b5061047b61081736600461278a565b61114f565b34801561082857600080fd5b5061047b61134d565b34801561083d57600080fd5b50601e546105af9062010000900460ff1681565b34801561085d57600080fd5b50600054610637906001600160a01b031681565b34801561087d57600080fd5b506103c860075481565b34801561089357600080fd5b506103c860065481565b3480156108a957600080fd5b506106376113c1565b3480156108be57600080fd5b506010546001600160a01b0316610637565b3480156108dc57600080fd5b5061047b6108eb36600461280d565b6113d5565b3480156108fc57600080fd5b5061047b61090b36600461283f565b61142d565b34801561091c57600080fd5b50604080518082019091526005815264475241535360d81b602082015261041e565b34801561094a57600080fd5b506103c860045481565b34801561096057600080fd5b5061044b61096f3660046125b8565b6114c9565b34801561098057600080fd5b5061047b61098f366004612636565b611538565b3480156109a057600080fd5b50601b54610637906001600160a01b031681565b3480156109c057600080fd5b5061047b6109cf366004612636565b611567565b3480156109e057600080fd5b506103c86109ef366004612636565b611596565b348015610a0057600080fd5b5061047b610a0f366004612881565b6115e7565b348015610a2057600080fd5b5061047b610a2f366004612738565b6116aa565b348015610a4057600080fd5b506103c8610a4f3660046128cc565b6001600160a01b03918216600090815260166020908152604080832093909416825291909152205490565b348015610a8657600080fd5b506103c8600d5481565b348015610a9c57600080fd5b5061047b610aab366004612636565b6116ff565b348015610abc57600080fd5b5061047b610acb36600461276d565b611745565b348015610adc57600080fd5b506103c8600c5481565b348015610af257600080fd5b5061047b610b01366004612738565b611830565b348015610b1257600080fd5b5061044b610b2136600461276d565b60026020526000908152604090205460ff1681565b348015610b4257600080fd5b50601e5461044b9060ff1681565b3360008181526016602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bab9086815260200190565b60405180910390a35060015b92915050565b6010546001600160a01b03163314610bf05760405162461bcd60e51b8152600401610be790612905565b60405180910390fd5b601e805460ff1916911515919091179055565b600082610c0f83611596565b119392505050565b6010546001600160a01b03163314610c415760405162461bcd60e51b8152600401610be790612905565b60005447906001600160a01b03166108fc6064610c5e8585612950565b610c689190612967565b6040518115909202916000818181858888f19350505050158015610c90573d6000803e3d6000fd5b505050565b6010546001600160a01b03163314610cbf5760405162461bcd60e51b8152600401610be790612905565b601c91909155601d55565b6001600160a01b038316600090815260026020526040812054849060ff1615610d2e5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610be7565b6001600160a01b038516600090815260166020908152604080832033845290915290205460001914610dda57604080518082018252601680825275496e73756666696369656e7420416c6c6f77616e636560501b6020808401919091526001600160a01b038916600090815291815283822033835290529190912054610db5918590611885565b6001600160a01b03861660009081526016602090815260408083203384529091529020555b610de58585856118b6565b95945050505050565b6010546001600160a01b03163314610e185760405162461bcd60e51b8152600401610be790612905565b602155565b601454600090610e6190610e39906001600160a01b0316611134565b601354610e5b90610e52906001600160a01b0316611134565b60035490611dbc565b90611dbc565b905090565b6010546001600160a01b03163314610e905760405162461bcd60e51b8152600401610be790612905565b6103218210610ef75760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610be7565b6000610f038383612950565b905080610f0f86611134565b1015610f5d5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610be7565b60005b83811015610fac57610f9986868684818110610f7e57610f7e612989565b9050602002016020810190610f93919061276d565b85611dc8565b5080610fa48161299f565b915050610f60565b505050505050565b6010546001600160a01b03163314610fde5760405162461bcd60e51b8152600401610be790612905565b47336108fc6064610c5e8585612950565b6010546001600160a01b031633146110195760405162461bcd60e51b8152600401610be790612905565b600955565b6010546001600160a01b031633146110485760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6000610bb782600019610b50565b6010546001600160a01b031633146110ab5760405162461bcd60e51b8152600401610be790612905565b600655565b6010546001600160a01b031633146110da5760405162461bcd60e51b8152600401610be790612905565b600555565b6010546001600160a01b031633146111095760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526015602052604090205490565b6010546001600160a01b031633146111795760405162461bcd60e51b8152600401610be790612905565b6101f583106111e05760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610be7565b8281146112405760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610be7565b6000805b848110156112845783838281811061125e5761125e612989565b905060200201358261127091906129b8565b91508061127c8161299f565b915050611244565b508061128f87611134565b10156112dd5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610be7565b60005b8481101561134457611331878787848181106112fe576112fe612989565b9050602002016020810190611313919061276d565b86868581811061132557611325612989565b90506020020135611dc8565b508061133c8161299f565b9150506112e0565b50505050505050565b6010546001600160a01b031633146113775760405162461bcd60e51b8152600401610be790612905565b6010546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601080546001600160a01b0319169055565b6000610e616010546001600160a01b031690565b6010546001600160a01b031633146113ff5760405162461bcd60e51b8152600401610be790612905565b600a849055600b839055600c8290556114228261141c8686611e9c565b90611e9c565b600d55600f55505050565b6010546001600160a01b031633146114575760405162461bcd60e51b8152600401610be790612905565b60005b81811015610c905760016002600085858581811061147a5761147a612989565b905060200201602081019061148f919061276d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114c18161299f565b91505061145a565b3360008181526002602052604081205490919060ff16156115255760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610be7565b6115303385856118b6565b949350505050565b6010546001600160a01b031633146115625760405162461bcd60e51b8152600401610be790612905565b600455565b6010546001600160a01b031633146115915760405162461bcd60e51b8152600401610be790612905565b600e55565b6000610bb76115a3610e1d565b6115e16115da60026115d47f0000000000000000000000000000000000000000000000000000000000000000611134565b90611ea8565b8590611ea8565b90611eb4565b6010546001600160a01b031633146116115760405162461bcd60e51b8152600401610be790612905565b600180546001600160a01b039081166000908152601760209081526040808320805460ff19908116909155958416808452818420805488168717905583548516845281842080548816905596841680845281842080548816871790556019909252822080549095168417909455601b8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b6010546001600160a01b031633146116d45760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6010546001600160a01b031633146117295760405162461bcd60e51b8152600401610be790612905565b60215481111561173c5760215460225550565b60228190555b50565b6010546001600160a01b0316331461176f5760405162461bcd60e51b8152600401610be790612905565b6001600160a01b0381166117d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be7565b6010546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546001600160a01b0316331461185a5760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b600081848411156118a95760405162461bcd60e51b8152600401610be79190612555565b50508183035b9392505050565b60235460009060ff16156118d6576118cf848484611dc8565b90506118af565b6010546001600160a01b0385811691161480159061190257506010546001600160a01b03848116911614155b1561195057601e5460ff166119505760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610be7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169084161460008115826119c157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b03851630148015906119ea57506013546001600160a01b03868116911614155b8015611a2857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611a4257506000546001600160a01b03868116911614155b8015611a5c57506001546001600160a01b03868116911614155b8015611a765750601b546001600160a01b03868116911614155b15611b2c576000611a8686611134565b6001600160a01b03871660009081526019602052604090205490915060ff16611b2a57600754611ab686836129b8565b1115611b2a5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610be7565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611b745750601e54610100900460ff165b8015611b9957506001600160a01b0385166000908152601a602052604090205460ff16155b15611c43576001600160a01b0385166000908152601f60205260409020544211611c135760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610be7565b601e54611c299062010000900460ff16426129b8565b6001600160a01b0386166000908152601f60205260409020555b6001600160a01b03851660009081526018602052604090205460ff16611c6d57611c6d8685611ec0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260159091529190912054611cbf918690611885565b6001600160a01b038716600090815260156020526040902055838115611cf957600e5415611cf457611cf18786611f2d565b90505b611d42565b6001600160a01b03871660009081526017602052604090205460ff1615611d205784611d2b565b611d2b878685611fc6565b9050611d356120a0565b15611d4257611d4261210c565b6001600160a01b038616600090815260156020526040902054611d659082611e9c565b6001600160a01b038088166000818152601560205260409081902093909355915190891690600080516020612a9b83398151915290611da79085815260200190565b60405180910390a35060019695505050505050565b60006118af82846129cb565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601590915291822054611e19918490611885565b6001600160a01b038086166000908152601560205260408082209390935590851681522054611e489083611e9c565b6001600160a01b038085166000818152601560205260409081902093909355915190861690600080516020612a9b83398151915290611e8a9086815260200190565b60405180910390a35060019392505050565b60006118af82846129b8565b60006118af8284612950565b60006118af8284612967565b60065481111580611ee957506001600160a01b03821660009081526018602052604090205460ff165b611f295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610be7565b5050565b600080600e5490506000611f58600f546064611f499190612950565b6115e160646115d48887611ea8565b30600090815260156020526040902054909150611f759082611e9c565b30600081815260156020526040908190209290925590516001600160a01b03871690600080516020612a9b83398151915290611fb49085815260200190565b60405180910390a3610de58482611dbc565b6001600160a01b038316600090815260026020526040812054819060ff1615611ff157506028612005565b82611ffe57600954612002565b600d545b90505b6000612028600f5460646120199190612950565b6115e160646115d48987611ea8565b306000908152601560205260409020549091506120459082611e9c565b30600081815260156020526040908190209290925590516001600160a01b03881690600080516020612a9b833981519152906120849085815260200190565b60405180910390a36120968582611dbc565b9695505050505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906120de575060235460ff16155b80156120ec575060205460ff165b8015610e6157505060215430600090815260156020526040902054101590565b6023805460ff19166001179055601c54601d5460009161212b91610c03565b61213757600a5461213a565b60005b9050600061215e60026115e1600d546115e186602254611ea890919063ffffffff16565b9050600061217782602254611dbc90919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121b1576121b1612989565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225391906129de565b8160018151811061226657612266612989565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122cb9086906000908790309042906004016129fb565b600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b5050505060006123128247611dbc90919063ffffffff16565b9050600061232d612324886002611eb4565b600d5490611dbc565b9050600061234f60026115e1846115e1600a5488611ea890919063ffffffff16565b9050600061236c836115e1600b5487611ea890919063ffffffff16565b90506000612389846115e1600c5488611ea890919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d80600081146123e0576040519150601f19603f3d011682016040523d82523d6000602084013e6123e5565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d806000811461243a576040519150601f19603f3d011682016040523d82523d6000602084013e61243f565b606091505b5060009250508a15905061253e57601b5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af11580156124dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125019190612a6c565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506023805460ff19169055505050505050505050565b600060208083528351808285015260005b8181101561258257858101830151858201604001528201612566565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461174257600080fd5b600080604083850312156125cb57600080fd5b82356125d6816125a3565b946020939093013593505050565b803580151581146125f457600080fd5b919050565b60006020828403121561260b57600080fd5b6118af826125e4565b6000806040838503121561262757600080fd5b50508035926020909101359150565b60006020828403121561264857600080fd5b5035919050565b60008060006060848603121561266457600080fd5b833561266f816125a3565b9250602084013561267f816125a3565b929592945050506040919091013590565b60008083601f8401126126a257600080fd5b50813567ffffffffffffffff8111156126ba57600080fd5b6020830191508360208260051b85010111156126d557600080fd5b9250929050565b600080600080606085870312156126f257600080fd5b84356126fd816125a3565b9350602085013567ffffffffffffffff81111561271957600080fd5b61272587828801612690565b9598909750949560400135949350505050565b6000806040838503121561274b57600080fd5b8235612756816125a3565b9150612764602084016125e4565b90509250929050565b60006020828403121561277f57600080fd5b81356118af816125a3565b6000806000806000606086880312156127a257600080fd5b85356127ad816125a3565b9450602086013567ffffffffffffffff808211156127ca57600080fd5b6127d689838a01612690565b909650945060408801359150808211156127ef57600080fd5b506127fc88828901612690565b969995985093965092949392505050565b6000806000806080858703121561282357600080fd5b5050823594602084013594506040840135936060013592509050565b6000806020838503121561285257600080fd5b823567ffffffffffffffff81111561286957600080fd5b61287585828601612690565b90969095509350505050565b60008060006060848603121561289657600080fd5b83356128a1816125a3565b925060208401356128b1816125a3565b915060408401356128c1816125a3565b809150509250925092565b600080604083850312156128df57600080fd5b82356128ea816125a3565b915060208301356128fa816125a3565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bb757610bb761293a565b60008261298457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016129b1576129b161293a565b5060010190565b80820180821115610bb757610bb761293a565b81810381811115610bb757610bb761293a565b6000602082840312156129f057600080fd5b81516118af816125a3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a4b5784516001600160a01b031683529383019391830191600101612a26565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a8157600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209fbc65e77f074f50f9e7329c90c89a0a527f55887b8814535d6e7fe1b8f2e8ee64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c8063658d4b7f116101e7578063a84c01041161010d578063dd62ed3e116100a0578063f53fd5841161006f578063f53fd58414610ad0578063f84ba65d14610ae6578063fe575a8714610b06578063ffb54a9914610b3657600080fd5b8063dd62ed3e14610a34578063e53c30b014610a7a578063e632313c14610a90578063f2fde38b14610ab057600080fd5b8063cf703bb9116100dc578063cf703bb9146109b4578063d51ed1c8146109d4578063d7c01032146109f4578063dd395c6314610a1457600080fd5b8063a84c01041461093e578063a9059cbb14610954578063bc33718214610974578063ca33e64c1461099457600080fd5b806375f0a874116101855780638da5cb5b116101545780638da5cb5b146108b25780638e8aaafa146108d0578063935eb35f146108f057806395d89b411461091057600080fd5b806375f0a8741461085157806378109e54146108715780637d1db4a514610887578063893d20e81461089d57600080fd5b806370a08231116101c157806370a08231146107dc578063713e4ae5146107fc578063715018a61461081c578063722b62ad1461083157600080fd5b8063658d4b7f1461076e57806367ac77b41461078e5780636ddd1713146107c257600080fd5b80632e8fa821116102cc578063470624021161026a578063571ac8b011610239578063571ac8b0146106ef5780635c85974f1461070f5780635d0044ca1461072f578063617fe0ed1461074f57600080fd5b8063470624021461066557806349bd5a5e1461067b5780634dd0e4d3146106af57806350db71fb146106cf57600080fd5b8063442a583d116102a6578063442a583d146105d757806344a33fd2146105f75780634626402b1461061757806346e421a21461064f57600080fd5b80632e8fa82114610589578063313ce5671461059f5780633705b392146105c157600080fd5b806318160ddd1161034457806323b872dd1161031357806323b872dd1461051e57806329e04b4a1461053e5780632a6be0d21461055e5780632b112e491461057457600080fd5b806318160ddd146104b35780631da1db5e146104c85780631e25dc54146104e8578063201e7991146104fe57600080fd5b8063095ea7b311610380578063095ea7b31461042b5780630d2959801461045b5780631161ae391461047d578063180b0d7e1461049d57600080fd5b8063026f7d15146103b25780630445b667146103db57806306fdde03146103f157600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c8600b5481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506103c860215481565b3480156103fd57600080fd5b5060408051808201909152600881526710dbdddccb9b1bdb60c21b60208201525b6040516103d29190612555565b34801561043757600080fd5b5061044b6104463660046125b8565b610b50565b60405190151581526020016103d2565b34801561046757600080fd5b5061047b6104763660046125f9565b610bbd565b005b34801561048957600080fd5b5061044b610498366004612614565b610c03565b3480156104a957600080fd5b506103c8600f5481565b3480156104bf57600080fd5b506003546103c8565b3480156104d457600080fd5b5061047b6104e3366004612636565b610c17565b3480156104f457600080fd5b506103c8600e5481565b34801561050a57600080fd5b5061047b610519366004612614565b610c95565b34801561052a57600080fd5b5061044b61053936600461264f565b610cca565b34801561054a57600080fd5b5061047b610559366004612636565b610dee565b34801561056a57600080fd5b506103c860055481565b34801561058057600080fd5b506103c8610e1d565b34801561059557600080fd5b506103c860225481565b3480156105ab57600080fd5b5060095b60405160ff90911681526020016103d2565b3480156105cd57600080fd5b506103c860095481565b3480156105e357600080fd5b5061047b6105f23660046126dc565b610e66565b34801561060357600080fd5b5061047b610612366004612636565b610fb4565b34801561062357600080fd5b50600154610637906001600160a01b031681565b6040516001600160a01b0390911681526020016103d2565b34801561065b57600080fd5b506103c8600a5481565b34801561067157600080fd5b506103c860085481565b34801561068757600080fd5b506106377f00000000000000000000000000bb7fe8cb8a13881a4b8b71323af744287e4e2d81565b3480156106bb57600080fd5b5061047b6106ca366004612636565b610fef565b3480156106db57600080fd5b5061047b6106ea366004612738565b61101e565b3480156106fb57600080fd5b5061044b61070a36600461276d565b611073565b34801561071b57600080fd5b5061047b61072a366004612636565b611081565b34801561073b57600080fd5b5061047b61074a366004612636565b6110b0565b34801561075b57600080fd5b50601e5461044b90610100900460ff1681565b34801561077a57600080fd5b5061047b610789366004612738565b6110df565b34801561079a57600080fd5b506106377f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107ce57600080fd5b5060205461044b9060ff1681565b3480156107e857600080fd5b506103c86107f736600461276d565b611134565b34801561080857600080fd5b5061047b61081736600461278a565b61114f565b34801561082857600080fd5b5061047b61134d565b34801561083d57600080fd5b50601e546105af9062010000900460ff1681565b34801561085d57600080fd5b50600054610637906001600160a01b031681565b34801561087d57600080fd5b506103c860075481565b34801561089357600080fd5b506103c860065481565b3480156108a957600080fd5b506106376113c1565b3480156108be57600080fd5b506010546001600160a01b0316610637565b3480156108dc57600080fd5b5061047b6108eb36600461280d565b6113d5565b3480156108fc57600080fd5b5061047b61090b36600461283f565b61142d565b34801561091c57600080fd5b50604080518082019091526005815264475241535360d81b602082015261041e565b34801561094a57600080fd5b506103c860045481565b34801561096057600080fd5b5061044b61096f3660046125b8565b6114c9565b34801561098057600080fd5b5061047b61098f366004612636565b611538565b3480156109a057600080fd5b50601b54610637906001600160a01b031681565b3480156109c057600080fd5b5061047b6109cf366004612636565b611567565b3480156109e057600080fd5b506103c86109ef366004612636565b611596565b348015610a0057600080fd5b5061047b610a0f366004612881565b6115e7565b348015610a2057600080fd5b5061047b610a2f366004612738565b6116aa565b348015610a4057600080fd5b506103c8610a4f3660046128cc565b6001600160a01b03918216600090815260166020908152604080832093909416825291909152205490565b348015610a8657600080fd5b506103c8600d5481565b348015610a9c57600080fd5b5061047b610aab366004612636565b6116ff565b348015610abc57600080fd5b5061047b610acb36600461276d565b611745565b348015610adc57600080fd5b506103c8600c5481565b348015610af257600080fd5b5061047b610b01366004612738565b611830565b348015610b1257600080fd5b5061044b610b2136600461276d565b60026020526000908152604090205460ff1681565b348015610b4257600080fd5b50601e5461044b9060ff1681565b3360008181526016602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bab9086815260200190565b60405180910390a35060015b92915050565b6010546001600160a01b03163314610bf05760405162461bcd60e51b8152600401610be790612905565b60405180910390fd5b601e805460ff1916911515919091179055565b600082610c0f83611596565b119392505050565b6010546001600160a01b03163314610c415760405162461bcd60e51b8152600401610be790612905565b60005447906001600160a01b03166108fc6064610c5e8585612950565b610c689190612967565b6040518115909202916000818181858888f19350505050158015610c90573d6000803e3d6000fd5b505050565b6010546001600160a01b03163314610cbf5760405162461bcd60e51b8152600401610be790612905565b601c91909155601d55565b6001600160a01b038316600090815260026020526040812054849060ff1615610d2e5760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610be7565b6001600160a01b038516600090815260166020908152604080832033845290915290205460001914610dda57604080518082018252601680825275496e73756666696369656e7420416c6c6f77616e636560501b6020808401919091526001600160a01b038916600090815291815283822033835290529190912054610db5918590611885565b6001600160a01b03861660009081526016602090815260408083203384529091529020555b610de58585856118b6565b95945050505050565b6010546001600160a01b03163314610e185760405162461bcd60e51b8152600401610be790612905565b602155565b601454600090610e6190610e39906001600160a01b0316611134565b601354610e5b90610e52906001600160a01b0316611134565b60035490611dbc565b90611dbc565b905090565b6010546001600160a01b03163314610e905760405162461bcd60e51b8152600401610be790612905565b6103218210610ef75760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610be7565b6000610f038383612950565b905080610f0f86611134565b1015610f5d5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610be7565b60005b83811015610fac57610f9986868684818110610f7e57610f7e612989565b9050602002016020810190610f93919061276d565b85611dc8565b5080610fa48161299f565b915050610f60565b505050505050565b6010546001600160a01b03163314610fde5760405162461bcd60e51b8152600401610be790612905565b47336108fc6064610c5e8585612950565b6010546001600160a01b031633146110195760405162461bcd60e51b8152600401610be790612905565b600955565b6010546001600160a01b031633146110485760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601a60205260409020805460ff1916911515919091179055565b6000610bb782600019610b50565b6010546001600160a01b031633146110ab5760405162461bcd60e51b8152600401610be790612905565b600655565b6010546001600160a01b031633146110da5760405162461bcd60e51b8152600401610be790612905565b600555565b6010546001600160a01b031633146111095760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526015602052604090205490565b6010546001600160a01b031633146111795760405162461bcd60e51b8152600401610be790612905565b6101f583106111e05760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610be7565b8281146112405760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610be7565b6000805b848110156112845783838281811061125e5761125e612989565b905060200201358261127091906129b8565b91508061127c8161299f565b915050611244565b508061128f87611134565b10156112dd5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610be7565b60005b8481101561134457611331878787848181106112fe576112fe612989565b9050602002016020810190611313919061276d565b86868581811061132557611325612989565b90506020020135611dc8565b508061133c8161299f565b9150506112e0565b50505050505050565b6010546001600160a01b031633146113775760405162461bcd60e51b8152600401610be790612905565b6010546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3601080546001600160a01b0319169055565b6000610e616010546001600160a01b031690565b6010546001600160a01b031633146113ff5760405162461bcd60e51b8152600401610be790612905565b600a849055600b839055600c8290556114228261141c8686611e9c565b90611e9c565b600d55600f55505050565b6010546001600160a01b031633146114575760405162461bcd60e51b8152600401610be790612905565b60005b81811015610c905760016002600085858581811061147a5761147a612989565b905060200201602081019061148f919061276d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114c18161299f565b91505061145a565b3360008181526002602052604081205490919060ff16156115255760405162461bcd60e51b81526020600482015260166024820152751059191c995cdcc81a5cc8189b1858dadb1a5cdd195960521b6044820152606401610be7565b6115303385856118b6565b949350505050565b6010546001600160a01b031633146115625760405162461bcd60e51b8152600401610be790612905565b600455565b6010546001600160a01b031633146115915760405162461bcd60e51b8152600401610be790612905565b600e55565b6000610bb76115a3610e1d565b6115e16115da60026115d47f00000000000000000000000000bb7fe8cb8a13881a4b8b71323af744287e4e2d611134565b90611ea8565b8590611ea8565b90611eb4565b6010546001600160a01b031633146116115760405162461bcd60e51b8152600401610be790612905565b600180546001600160a01b039081166000908152601760209081526040808320805460ff19908116909155958416808452818420805488168717905583548516845281842080548816905596841680845281842080548816871790556019909252822080549095168417909455601b8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b6010546001600160a01b031633146116d45760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6010546001600160a01b031633146117295760405162461bcd60e51b8152600401610be790612905565b60215481111561173c5760215460225550565b60228190555b50565b6010546001600160a01b0316331461176f5760405162461bcd60e51b8152600401610be790612905565b6001600160a01b0381166117d45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be7565b6010546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6010546001600160a01b0316331461185a5760405162461bcd60e51b8152600401610be790612905565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b600081848411156118a95760405162461bcd60e51b8152600401610be79190612555565b50508183035b9392505050565b60235460009060ff16156118d6576118cf848484611dc8565b90506118af565b6010546001600160a01b0385811691161480159061190257506010546001600160a01b03848116911614155b1561195057601e5460ff166119505760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610be7565b7f00000000000000000000000000bb7fe8cb8a13881a4b8b71323af744287e4e2d6001600160a01b039081169084161460008115826119c157507f00000000000000000000000000bb7fe8cb8a13881a4b8b71323af744287e4e2d6001600160a01b0316866001600160a01b031614155b90506001600160a01b03851630148015906119ea57506013546001600160a01b03868116911614155b8015611a2857507f00000000000000000000000000bb7fe8cb8a13881a4b8b71323af744287e4e2d6001600160a01b0316856001600160a01b031614155b8015611a4257506000546001600160a01b03868116911614155b8015611a5c57506001546001600160a01b03868116911614155b8015611a765750601b546001600160a01b03868116911614155b15611b2c576000611a8686611134565b6001600160a01b03871660009081526019602052604090205490915060ff16611b2a57600754611ab686836129b8565b1115611b2a5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610be7565b505b7f00000000000000000000000000bb7fe8cb8a13881a4b8b71323af744287e4e2d6001600160a01b0316866001600160a01b0316148015611b745750601e54610100900460ff165b8015611b9957506001600160a01b0385166000908152601a602052604090205460ff16155b15611c43576001600160a01b0385166000908152601f60205260409020544211611c135760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610be7565b601e54611c299062010000900460ff16426129b8565b6001600160a01b0386166000908152601f60205260409020555b6001600160a01b03851660009081526018602052604090205460ff16611c6d57611c6d8685611ec0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260159091529190912054611cbf918690611885565b6001600160a01b038716600090815260156020526040902055838115611cf957600e5415611cf457611cf18786611f2d565b90505b611d42565b6001600160a01b03871660009081526017602052604090205460ff1615611d205784611d2b565b611d2b878685611fc6565b9050611d356120a0565b15611d4257611d4261210c565b6001600160a01b038616600090815260156020526040902054611d659082611e9c565b6001600160a01b038088166000818152601560205260409081902093909355915190891690600080516020612a9b83398151915290611da79085815260200190565b60405180910390a35060019695505050505050565b60006118af82846129cb565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152601590915291822054611e19918490611885565b6001600160a01b038086166000908152601560205260408082209390935590851681522054611e489083611e9c565b6001600160a01b038085166000818152601560205260409081902093909355915190861690600080516020612a9b83398151915290611e8a9086815260200190565b60405180910390a35060019392505050565b60006118af82846129b8565b60006118af8284612950565b60006118af8284612967565b60065481111580611ee957506001600160a01b03821660009081526018602052604090205460ff165b611f295760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610be7565b5050565b600080600e5490506000611f58600f546064611f499190612950565b6115e160646115d48887611ea8565b30600090815260156020526040902054909150611f759082611e9c565b30600081815260156020526040908190209290925590516001600160a01b03871690600080516020612a9b83398151915290611fb49085815260200190565b60405180910390a3610de58482611dbc565b6001600160a01b038316600090815260026020526040812054819060ff1615611ff157506028612005565b82611ffe57600954612002565b600d545b90505b6000612028600f5460646120199190612950565b6115e160646115d48987611ea8565b306000908152601560205260409020549091506120459082611e9c565b30600081815260156020526040908190209290925590516001600160a01b03881690600080516020612a9b833981519152906120849085815260200190565b60405180910390a36120968582611dbc565b9695505050505050565b6000336001600160a01b037f00000000000000000000000000bb7fe8cb8a13881a4b8b71323af744287e4e2d16148015906120de575060235460ff16155b80156120ec575060205460ff165b8015610e6157505060215430600090815260156020526040902054101590565b6023805460ff19166001179055601c54601d5460009161212b91610c03565b61213757600a5461213a565b60005b9050600061215e60026115e1600d546115e186602254611ea890919063ffffffff16565b9050600061217782602254611dbc90919063ffffffff16565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106121b1576121b1612989565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225391906129de565b8160018151811061226657612266612989565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122cb9086906000908790309042906004016129fb565b600060405180830381600087803b1580156122e557600080fd5b505af11580156122f9573d6000803e3d6000fd5b5050505060006123128247611dbc90919063ffffffff16565b9050600061232d612324886002611eb4565b600d5490611dbc565b9050600061234f60026115e1846115e1600a5488611ea890919063ffffffff16565b9050600061236c836115e1600b5487611ea890919063ffffffff16565b90506000612389846115e1600c5488611ea890919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d80600081146123e0576040519150601f19603f3d011682016040523d82523d6000602084013e6123e5565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d806000811461243a576040519150601f19603f3d011682016040523d82523d6000602084013e61243f565b606091505b5060009250508a15905061253e57601b5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af11580156124dc573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906125019190612a6c565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506023805460ff19169055505050505050505050565b600060208083528351808285015260005b8181101561258257858101830151858201604001528201612566565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461174257600080fd5b600080604083850312156125cb57600080fd5b82356125d6816125a3565b946020939093013593505050565b803580151581146125f457600080fd5b919050565b60006020828403121561260b57600080fd5b6118af826125e4565b6000806040838503121561262757600080fd5b50508035926020909101359150565b60006020828403121561264857600080fd5b5035919050565b60008060006060848603121561266457600080fd5b833561266f816125a3565b9250602084013561267f816125a3565b929592945050506040919091013590565b60008083601f8401126126a257600080fd5b50813567ffffffffffffffff8111156126ba57600080fd5b6020830191508360208260051b85010111156126d557600080fd5b9250929050565b600080600080606085870312156126f257600080fd5b84356126fd816125a3565b9350602085013567ffffffffffffffff81111561271957600080fd5b61272587828801612690565b9598909750949560400135949350505050565b6000806040838503121561274b57600080fd5b8235612756816125a3565b9150612764602084016125e4565b90509250929050565b60006020828403121561277f57600080fd5b81356118af816125a3565b6000806000806000606086880312156127a257600080fd5b85356127ad816125a3565b9450602086013567ffffffffffffffff808211156127ca57600080fd5b6127d689838a01612690565b909650945060408801359150808211156127ef57600080fd5b506127fc88828901612690565b969995985093965092949392505050565b6000806000806080858703121561282357600080fd5b5050823594602084013594506040840135936060013592509050565b6000806020838503121561285257600080fd5b823567ffffffffffffffff81111561286957600080fd5b61287585828601612690565b90969095509350505050565b60008060006060848603121561289657600080fd5b83356128a1816125a3565b925060208401356128b1816125a3565b915060408401356128c1816125a3565b809150509250925092565b600080604083850312156128df57600080fd5b82356128ea816125a3565b915060208301356128fa816125a3565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bb757610bb761293a565b60008261298457634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000600182016129b1576129b161293a565b5060010190565b80820180821115610bb757610bb761293a565b81810381811115610bb757610bb761293a565b6000602082840312156129f057600080fd5b81516118af816125a3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a4b5784516001600160a01b031683529383019391830191600101612a26565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612a8157600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212209fbc65e77f074f50f9e7329c90c89a0a527f55887b8814535d6e7fe1b8f2e8ee64736f6c63430008110033

Deployed Bytecode Sourcemap

13600:15236:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1441:38;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;1441:38:0;;;;;;;;14573:56;;;;;;;;;;;;;;;;16196:80;;;;;;;;;;-1:-1:-1;16268:5:0;;;;;;;;;;;;-1:-1:-1;;;16268:5:0;;;;16196:80;;;;;;;:::i;16620:216::-;;;;;;;;;;-1:-1:-1;16620:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;16620:216:0;1205:187:1;23010:94:0;;;;;;;;;;-1:-1:-1;23010:94:0;;;;;:::i;:::-;;:::i;:::-;;27489:150;;;;;;;;;;-1:-1:-1;27489:150:0;;;;;:::i;:::-;;:::i;1660:39::-;;;;;;;;;;;;;;;;15926:88;;;;;;;;;;-1:-1:-1;15999:12:0;;15926:88;;22541:214;;;;;;;;;;-1:-1:-1;22541:214:0;;;;;:::i;:::-;;:::i;1616:37::-;;;;;;;;;;;;;;;;26963:184;;;;;;;;;;-1:-1:-1;26963:184:0;;;;;:::i;:::-;;:::i;17165:393::-;;;;;;;;;;-1:-1:-1;17165:393:0;;;;;:::i;:::-;;:::i;26614:112::-;;;;;;;;;;-1:-1:-1;26614:112:0;;;;;:::i;:::-;;:::i;1110:35::-;;;;;;;;;;;;;;;;27155:142;;;;;;;;;;;;;:::i;14636:53::-;;;;;;;;;;;;;;;;16020:80;;;;;;;;;;-1:-1:-1;953:1:0;16020:80;;;2818:4:1;2806:17;;;2788:36;;2776:2;2761:18;16020:80:0;2646:184:1;1348:42:0;;;;;;;;;;;;;;;;28318:449;;;;;;;;;;-1:-1:-1;28318:449:0;;;;;:::i;:::-;;:::i;22763:216::-;;;;;;;;;;-1:-1:-1;22763:216:0;;;;;:::i;:::-;;:::i;762:74::-;;;;;;;;;;-1:-1:-1;762:74:0;;;;-1:-1:-1;;;;;762:74:0;;;;;;-1:-1:-1;;;;;4016:32:1;;;3998:51;;3986:2;3971:18;762:74:0;3852:203:1;1397:37:0;;;;;;;;;;;;;;;;1303:38;;;;;;;;;;;;;;;;14303;;;;;;;;;;;;;;;23637:94;;;;;;;;;;-1:-1:-1;23637:94:0;;;;;:::i;:::-;;:::i;25924:131::-;;;;;;;;;;-1:-1:-1;25924:131:0;;;;;:::i;:::-;;:::i;16844:122::-;;;;;;;;;;-1:-1:-1;16844:122:0;;;;;:::i;:::-;;:::i;18032:97::-;;;;;;;;;;-1:-1:-1;18032:97:0;;;;;:::i;:::-;;:::i;17788:122::-;;;;;;;;;;-1:-1:-1;17788:122:0;;;;;:::i;:::-;;:::i;14390:37::-;;;;;;;;;;-1:-1:-1;14390:37:0;;;;;;;;;;;25529:121;;;;;;;;;;-1:-1:-1;25529:121:0;;;;;:::i;:::-;;:::i;14246:50::-;;;;;;;;;;;;;;;14536:30;;;;;;;;;;-1:-1:-1;14536:30:0;;;;;;;;16368:105;;;;;;;;;;-1:-1:-1;16368:105:0;;;;;:::i;:::-;;:::i;27662:648::-;;;;;;;;;;-1:-1:-1;27662:648:0;;;;;:::i;:::-;;:::i;5066:148::-;;;;;;;;;;;;;:::i;14434:39::-;;;;;;;;;;-1:-1:-1;14434:39:0;;;;;;;;;;;680:75;;;;;;;;;;-1:-1:-1;680:75:0;;;;-1:-1:-1;;;;;680:75:0;;;1224:72;;;;;;;;;;;;;;;;1152:65;;;;;;;;;;;;;;;;16282:80;;;;;;;;;;;;;:::i;4852:79::-;;;;;;;;;;-1:-1:-1;4917:6:0;;-1:-1:-1;;;;;4917:6:0;4852:79;;23210:419;;;;;;;;;;-1:-1:-1;23210:419:0;;;;;:::i;:::-;;:::i;17566:214::-;;;;;;;;;;-1:-1:-1;17566:214:0;;;;;:::i;:::-;;:::i;16106:84::-;;;;;;;;;;-1:-1:-1;16180:7:0;;;;;;;;;;;;-1:-1:-1;;;16180:7:0;;;;16106:84;;1072:31;;;;;;;;;;;;;;;;16974:183;;;;;;;;;;-1:-1:-1;16974:183:0;;;;;:::i;:::-;;:::i;17918:106::-;;;;;;;;;;-1:-1:-1;17918:106:0;;;;;:::i;:::-;;:::i;14117:36::-;;;;;;;;;;-1:-1:-1;14117:36:0;;;;-1:-1:-1;;;;;14117:36:0;;;23112:90;;;;;;;;;;-1:-1:-1;23112:90:0;;;;;:::i;:::-;;:::i;27305:176::-;;;;;;;;;;-1:-1:-1;27305:176:0;;;;;:::i;:::-;;:::i;26063:543::-;;;;;;;;;;-1:-1:-1;26063:543:0;;;;;:::i;:::-;;:::i;25658:121::-;;;;;;;;;;-1:-1:-1;25658:121:0;;;;;:::i;:::-;;:::i;16479:133::-;;;;;;;;;;-1:-1:-1;16479:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16581:19:0;;;16563:7;16581:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16479:133;1530:79;;;;;;;;;;;;;;;;26734:221;;;;;;;;;;-1:-1:-1;26734:221:0;;;;;:::i;:::-;;:::i;5222:244::-;;;;;;;;;;-1:-1:-1;5222:244:0;;;;;:::i;:::-;;:::i;1486:37::-;;;;;;;;;;;;;;;;25787:129;;;;;;;;;;-1:-1:-1;25787:129:0;;;;;:::i;:::-;;:::i;963:45::-;;;;;;;;;;-1:-1:-1;963:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14350:31;;;;;;;;;;-1:-1:-1;14350:31:0;;;;;;;;16620:216;16724:10;16695:4;16712:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16712:32:0;;;;;;;;;;:41;;;16769:37;16695:4;;16712:32;;16769:37;;;;16747:6;160:25:1;;148:2;133:18;;14:177;16769:37:0;;;;;;;;-1:-1:-1;16824:4:0;16620:216;;;;;:::o;23010:94::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;;;;;;;;;23075:11:::1;:21:::0;;-1:-1:-1;;23075:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23010:94::o;27489:150::-;27569:4;27625:6;27593:29;27613:8;27593:19;:29::i;:::-;:38;;27489:150;-1:-1:-1;;;27489:150:0:o;22541:214::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;22626:17:::1;22686:15:::0;22646:21:::1;::::0;-1:-1:-1;;;;;22686:15:0::1;22678:69;22743:3;22712:28;22724:16:::0;22646:21;22712:28:::1;:::i;:::-;:34;;;;:::i;:::-;22678:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22615:140;22541:214:::0;:::o;26963:184::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;27062:15:::1;:25:::0;;;;27098:26:::1;:41:::0;26963:184::o;17165:393::-;-1:-1:-1;;;;;18197:21:0;;17288:4;18197:21;;;:13;:21;;;;;;17271:6;;18197:21;;18196:22;18188:57;;;;-1:-1:-1;;;18188:57:0;;8629:2:1;18188:57:0;;;8611:21:1;8668:2;8648:18;;;8641:30;-1:-1:-1;;;8687:18:1;;;8680:52;8749:18;;18188:57:0;8427:346:1;18188:57:0;-1:-1:-1;;;;;17308:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;17328:10:::1;17308:31:::0;;;;;;;;-1:-1:-1;;17308:52:0::1;17305:186;;17410:69;::::0;;;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;;;17410:69:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;17410:19:0;::::1;-1:-1:-1::0;17410:19:0;;;;;;;;;17430:10:::1;17410:31:::0;;;;;;;;;:69:::1;::::0;17446:6;;17410:35:::1;:69::i;:::-;-1:-1:-1::0;;;;;17376:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;17396:10:::1;17376:31:::0;;;;;;;:103;17305:186:::1;17510:40;17524:6;17532:9;17543:6;17510:13;:40::i;:::-;17503:47:::0;17165:393;-1:-1:-1;;;;;17165:393:0:o;26614:112::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;26695:13:::1;:23:::0;26614:112::o;27155:142::-;27283:4;;27208:7;;27235:54;;27273:15;;-1:-1:-1;;;;;27283:4:0;27273:9;:15::i;:::-;27262:4;;27235:33;;27252:15;;-1:-1:-1;;;;;27262:4:0;27252:9;:15::i;:::-;27235:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;27228:61;;27155:142;:::o;28318:449::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;28459:3:::1;28440:22:::0;::::1;28432:79;;;::::0;-1:-1:-1;;;28432:79:0;;8980:2:1;28432:79:0::1;::::0;::::1;8962:21:1::0;9019:2;8999:18;;;8992:30;9058:34;9038:18;;;9031:62;-1:-1:-1;;;9109:18:1;;;9102:43;9162:19;;28432:79:0::1;8778:409:1::0;28432:79:0::1;28524:12;28539:25;28548:9:::0;28539:6;:25:::1;:::i;:::-;28524:40;;28604:4;28585:15;28595:4;28585:9;:15::i;:::-;:23;;28577:63;;;::::0;-1:-1:-1;;;28577:63:0;;9394:2:1;28577:63:0::1;::::0;::::1;9376:21:1::0;9433:2;9413:18;;;9406:30;9472:29;9452:18;;;9445:57;9519:18;;28577:63:0::1;9192:351:1::0;28577:63:0::1;28657:6;28653:107;28667:20:::0;;::::1;28653:107;;;28708:40;28723:4;28728:9;;28738:1;28728:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28741:6;28708:14;:40::i;:::-;-1:-1:-1::0;28689:3:0;::::1;::::0;::::1;:::i;:::-;;;;28653:107;;;;28419:348;28318:449:::0;;;;:::o;22763:216::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;22875:21:::1;22915:10;22907:64;22967:3;22936:28;22948:16:::0;22875:21;22936:28:::1;:::i;23637:94::-:0;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;23703:11:::1;:20:::0;23637:94::o;25924:131::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26014:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26014:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25924:131::o;16844:122::-;16899:4;16923:35;16931:7;-1:-1:-1;;16923:7:0;:35::i;18032:97::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;18100:12:::1;:21:::0;18032:97::o;17788:122::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;17868:15:::1;:34:::0;17788:122::o;25529:121::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25614:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;25614:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25529:121::o;16368:105::-;-1:-1:-1;;;;;16452:18:0;16434:7;16452:18;;;:9;:18;;;;;;;16368:105::o;27662:648::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;27815:3:::1;27796:22:::0;::::1;27788:79;;;::::0;-1:-1:-1;;;27788:79:0;;10022:2:1;27788:79:0::1;::::0;::::1;10004:21:1::0;10061:2;10041:18;;;10034:30;10100:34;10080:18;;;10073:62;-1:-1:-1;;;10151:18:1;;;10144:43;10204:19;;27788:79:0::1;9820:409:1::0;27788:79:0::1;27886:33:::0;;::::1;27878:85;;;::::0;-1:-1:-1;;;27878:85:0;;10436:2:1;27878:85:0::1;::::0;::::1;10418:21:1::0;10475:2;10455:18;;;10448:30;10514:34;10494:18;;;10487:62;-1:-1:-1;;;10565:18:1;;;10558:38;10613:19;;27878:85:0::1;10234:404:1::0;27878:85:0::1;27976:12;28009:6:::0;28005:90:::1;28019:20:::0;;::::1;28005:90;;;28074:6;;28081:1;28074:9;;;;;;;:::i;:::-;;;;;;;28067:4;:16;;;;:::i;:::-;28060:23:::0;-1:-1:-1;28041:3:0;::::1;::::0;::::1;:::i;:::-;;;;28005:90;;;;28134:4;28115:15;28125:4;28115:9;:15::i;:::-;:23;;28107:63;;;::::0;-1:-1:-1;;;28107:63:0;;9394:2:1;28107:63:0::1;::::0;::::1;9376:21:1::0;9433:2;9413:18;;;9406:30;9472:29;9452:18;;;9445:57;9519:18;;28107:63:0::1;9192:351:1::0;28107:63:0::1;28187:6;28183:110;28197:20:::0;;::::1;28183:110;;;28238:43;28253:4;28258:9;;28268:1;28258:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28271:6;;28278:1;28271:9;;;;;;;:::i;:::-;;;;;;;28238:14;:43::i;:::-;-1:-1:-1::0;28219:3:0;::::1;::::0;::::1;:::i;:::-;;;;28183:110;;;;27775:535;27662:648:::0;;;;;:::o;5066:148::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;5157:6:::1;::::0;5136:40:::1;::::0;5173:1:::1;::::0;-1:-1:-1;;;;;5157:6:0::1;::::0;5136:40:::1;::::0;5173:1;;5136:40:::1;5187:6;:19:::0;;-1:-1:-1;;;;;;5187:19:0::1;::::0;;5066:148::o;16282:80::-;16334:7;16352;4917:6;;-1:-1:-1;;;;;4917:6:0;;4852:79;23210:419;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;23368:9:::1;:25:::0;;;23404:13:::1;:36:::0;;;23451:15:::1;:37:::0;;;23514:64:::1;23469:19:::0;23514:39:::1;23380:13:::0;23420:20;23514:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;23499:12;:79:::0;23589:14:::1;:32:::0;-1:-1:-1;;;23210:419:0:o;17566:214::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;17660:9:::1;17655:118;17675:25:::0;;::::1;17655:118;;;17757:4;17722:13;:32;17736:14;;17751:1;17736:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17722:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17722:32:0;:39;;-1:-1:-1;;17722:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17702:3;::::1;::::0;::::1;:::i;:::-;;;;17655:118;;16974:183:::0;17060:10;17081:4;18197:21;;;:13;:21;;;;;;17081:4;;17060:10;18197:21;;18196:22;18188:57;;;;-1:-1:-1;;;18188:57:0;;8629:2:1;18188:57:0;;;8611:21:1;8668:2;8648:18;;;8641:30;-1:-1:-1;;;8687:18:1;;;8680:52;8749:18;;18188:57:0;8427:346:1;18188:57:0;17105:44:::1;17119:10;17131:9;17142:6;17105:13;:44::i;:::-;17098:51:::0;16974:183;-1:-1:-1;;;;16974:183:0:o;17918:106::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;17990:11:::1;:26:::0;17918:106::o;23112:90::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;23180:8:::1;:14:::0;23112:90::o;27305:176::-;27373:7;27400:73;27450:22;:20;:22::i;:::-;27400:45;27413:31;27442:1;27413:24;27423:13;27413:9;:24::i;:::-;:28;;:31::i;:::-;27400:8;;:12;:45::i;:::-;:49;;:73::i;26063:543::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;26224:14:::1;::::0;;-1:-1:-1;;;;;26224:14:0;;::::1;26242:5;26212:27:::0;;;:11:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;26212:35:0;;::::1;::::0;;;26258:31;;::::1;::::0;;;;;;:38;;;::::1;::::0;::::1;::::0;;26319:15;;;::::1;26307:28:::0;;;;;:36;;;::::1;::::0;;26354:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;26406:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;26458:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;26458:46:0;;::::1;;::::0;;;26515:37;;;::::1;::::0;;::::1;::::0;;;26563:35;;;;::::1;;::::0;;26063:543::o;25658:121::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25743:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;25743:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25658:121::o;26734:221::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;26819:13:::1;;26809:7;:23;26806:134;;;26862:13;::::0;26849:10:::1;:26:::0;26734:221;:::o;26806:134::-:1;26908:10;:20:::0;;;26806:134:::1;26734:221:::0;:::o;5222:244::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5311:22:0;::::1;5303:73;;;::::0;-1:-1:-1;;;5303:73:0;;10975:2:1;5303:73:0::1;::::0;::::1;10957:21:1::0;11014:2;10994:18;;;10987:30;11053:34;11033:18;;;11026:62;-1:-1:-1;;;11104:18:1;;;11097:36;11150:19;;5303:73:0::1;10773:402:1::0;5303:73:0::1;5413:6;::::0;5392:38:::1;::::0;-1:-1:-1;;;;;5392:38:0;;::::1;::::0;5413:6:::1;::::0;5392:38:::1;::::0;5413:6:::1;::::0;5392:38:::1;5441:6;:17:::0;;-1:-1:-1;;;;;;5441:17:0::1;-1:-1:-1::0;;;;;5441:17:0;;;::::1;::::0;;;::::1;::::0;;5222:244::o;25787:129::-;4979:6;;-1:-1:-1;;;;;4979:6:0;4181:10;4979:22;4971:67;;;;-1:-1:-1;;;4971:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25876:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;25876:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25787:129::o;2288:240::-;2408:7;2469:12;2461:6;;;;2453:29;;;;-1:-1:-1;;;2453:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;2504:5:0;;;2288:240;;;;;;:::o;18273:2385::-;18385:6;;18365:4;;18385:6;;18382:63;;;18401:41;18416:6;18424:9;18435:6;18401:14;:41::i;:::-;18394:48;;;;18382:63;4917:6;;-1:-1:-1;;;;;18460:17:0;;;4917:6;;18460:17;;;;:41;;-1:-1:-1;4917:6:0;;-1:-1:-1;;;;;18481:20:0;;;4917:6;;18481:20;;18460:41;18457:115;;;18525:11;;;;18517:43;;;;-1:-1:-1;;;18517:43:0;;11382:2:1;18517:43:0;;;11364:21:1;11421:2;11401:18;;;11394:30;-1:-1:-1;;;11440:18:1;;;11433:50;11500:18;;18517:43:0;11180:344:1;18517:43:0;18612:13;-1:-1:-1;;;;;18599:26:0;;;;;;;18584:11;18656:26;;18599;18656:53;;;18696:13;-1:-1:-1;;;;;18686:23:0;:6;-1:-1:-1;;;;;18686:23:0;;;18656:53;18637:73;-1:-1:-1;;;;;;18727:26:0;;18748:4;18727:26;;;;:70;;-1:-1:-1;18792:4:0;;-1:-1:-1;;;;;18771:26:0;;;18792:4;;18771:26;;18727:70;:114;;;;;18828:13;-1:-1:-1;;;;;18815:26:0;:9;-1:-1:-1;;;;;18815:26:0;;;18727:114;:160;;;;-1:-1:-1;18872:15:0;;-1:-1:-1;;;;;18859:28:0;;;18872:15;;18859:28;;18727:160;:205;;;;-1:-1:-1;18918:14:0;;-1:-1:-1;;;;;18905:27:0;;;18918:14;;18905:27;;18727:205;:257;;;;-1:-1:-1;18963:21:0;;-1:-1:-1;;;;;18950:34:0;;;18963:21;;18950:34;;18727:257;18723:531;;;19010:18;19031:20;19041:9;19031;:20::i;:::-;-1:-1:-1;;;;;19070:22:0;;;;;;:11;:22;;;;;;19010:41;;-1:-1:-1;19070:22:0;;19066:177;;19146:15;;19122:19;19135:6;19122:10;:19;:::i;:::-;19121:40;;19113:114;;;;-1:-1:-1;;;19113:114:0;;11731:2:1;19113:114:0;;;11713:21:1;11770:2;11750:18;;;11743:30;11809:34;11789:18;;;11782:62;11880:32;11860:18;;;11853:60;11930:19;;19113:114:0;11529:426:1;19113:114:0;18995:259;18723:531;19280:13;-1:-1:-1;;;;;19270:23:0;:6;-1:-1:-1;;;;;19270:23:0;;:58;;;;-1:-1:-1;19310:18:0;;;;;;;19270:58;:103;;;;-1:-1:-1;;;;;;19346:27:0;;;;;;:16;:27;;;;;;;;19345:28;19270:103;19266:317;;;-1:-1:-1;;;;;19407:24:0;;;;;;:13;:24;;;;;;19434:15;-1:-1:-1;19399:91:0;;;;-1:-1:-1;;;19399:91:0;;12162:2:1;19399:91:0;;;12144:21:1;12201:2;12181:18;;;12174:30;12240:34;12220:18;;;12213:62;-1:-1:-1;;;12291:18:1;;;12284:35;12336:19;;19399:91:0;11960:401:1;19399:91:0;19550:21;;19532:39;;19550:21;;;;;19532:15;:39;:::i;:::-;-1:-1:-1;;;;;19505:24:0;;;;;;:13;:24;;;;;:66;19266:317;-1:-1:-1;;;;;19805:26:0;;;;;;:15;:26;;;;;;;;19801:87;;19848:28;19861:6;19869;19848:12;:28::i;:::-;19947:53;;;;;;;;;;;-1:-1:-1;;;19947:53:0;;;;;;;;-1:-1:-1;;;;;19947:17:0;;-1:-1:-1;19947:17:0;;;:9;:17;;;;;;;;:53;;19969:6;;19947:21;:53::i;:::-;-1:-1:-1;;;;;19927:17:0;;;;;;:9;:17;;;;;:73;20038:6;20174:318;;;;20207:8;;:12;20204:100;;20257:31;20273:6;20281;20257:15;:31::i;:::-;20240:48;;20204:100;20174:318;;;-1:-1:-1;;;;;21265:19:0;;21240:4;21265:19;;;:11;:19;;;;;;;;21264:20;20353:64;;20411:6;20353:64;;;20377:31;20385:6;20393;20401;20377:7;:31::i;:::-;20336:81;;20449:16;:14;:16::i;:::-;20446:35;;;20468:10;:8;:10::i;:::-;-1:-1:-1;;;;;20527:20:0;;;;;;:9;:20;;;;;;:40;;20552:14;20527:24;:40::i;:::-;-1:-1:-1;;;;;20504:20:0;;;;;;;:9;:20;;;;;;;:63;;;;20585:43;;;;;;-1:-1:-1;;;;;;;;;;;20585:43:0;;;20613:14;160:25:1;;148:2;133:18;;14:177;20585:43:0;;;;;;;;-1:-1:-1;20646:4:0;;18273:2385;-1:-1:-1;;;;;;18273:2385:0:o;1864:98::-;1922:7;1949:5;1953:1;1949;:5;:::i;20666:330::-;20796:53;;;;;;;;;;;-1:-1:-1;;;20796:53:0;;;;;;;;-1:-1:-1;;;;;20796:17:0;;20759:4;20796:17;;;:9;:17;;;;;;;:53;;20818:6;;20796:21;:53::i;:::-;-1:-1:-1;;;;;20776:17:0;;;;;;;:9;:17;;;;;;:73;;;;20883:20;;;;;;;:32;;20908:6;20883:24;:32::i;:::-;-1:-1:-1;;;;;20860:20:0;;;;;;;:9;:20;;;;;;;:55;;;;20931:35;;;;;;-1:-1:-1;;;;;;;;;;;20931:35:0;;;20959:6;160:25:1;;148:2;133:18;;14:177;20931:35:0;;;;;;;;-1:-1:-1;20984:4:0;20666:330;;;;;:::o;1758:98::-;1816:7;1843:5;1847:1;1843;:5;:::i;1970:98::-;2028:7;2055:5;2059:1;2055;:5;:::i;2076:98::-;2134:7;2161:5;2165:1;2161;:5;:::i;21004:166::-;21101:12;;21091:6;:22;;:49;;;-1:-1:-1;;;;;;21117:23:0;;;;;;:15;:23;;;;;;;;21091:49;21083:79;;;;-1:-1:-1;;;21083:79:0;;12701:2:1;21083:79:0;;;12683:21:1;12740:2;12720:18;;;12713:30;-1:-1:-1;;;12759:18:1;;;12752:47;12816:18;;21083:79:0;12499:341:1;21083:79:0;21004:166;;:::o;21300:406::-;21375:7;21397:17;21417:8;;21397:28;;21436:17;21456:56;21491:14;;21508:3;21491:20;;;;:::i;:::-;21456:30;21482:3;21456:21;:6;21467:9;21456:10;:21::i;:56::-;21578:4;21560:24;;;;:9;:24;;;;;;21436:76;;-1:-1:-1;21560:39:0;;21436:76;21560:28;:39::i;:::-;21551:4;21533:24;;;;:9;:24;;;;;;;:66;;;;21615:42;;-1:-1:-1;;;;;21615:42:0;;;-1:-1:-1;;;;;;;;;;;21615:42:0;;;21647:9;160:25:1;;148:2;133:18;;14:177;21615:42:0;;;;;;;;21677:21;:6;21688:9;21677:10;:21::i;21714:605::-;-1:-1:-1;;;;;21846:21:0;;21794:7;21846:21;;;:13;:21;;;;;;21794:7;;21846:21;;21842:195;;;-1:-1:-1;21896:2:0;21842:195;;;21990:6;:35;;22014:11;;21990:35;;;21999:12;;21990:35;21978:47;;21842:195;22049:17;22069:56;22104:14;;22121:3;22104:20;;;;:::i;:::-;22069:30;22095:3;22069:21;:6;22080:9;22069:10;:21::i;:56::-;22191:4;22173:24;;;;:9;:24;;;;;;22049:76;;-1:-1:-1;22173:39:0;;22049:76;22173:28;:39::i;:::-;22164:4;22146:24;;;;:9;:24;;;;;;;:66;;;;22228:42;;-1:-1:-1;;;;;22228:42:0;;;-1:-1:-1;;;;;;;;;;;22228:42:0;;;22260:9;160:25:1;;148:2;133:18;;14:177;22228:42:0;;;;;;;;22290:21;:6;22301:9;22290:10;:21::i;:::-;22283:28;21714:605;-1:-1:-1;;;;;;21714:605:0:o;22327:206::-;22376:4;22400:10;-1:-1:-1;;;;;22414:13:0;22400:27;;;;;:47;;-1:-1:-1;22441:6:0;;;;22440:7;22400:47;:71;;;;-1:-1:-1;22460:11:0;;;;22400:71;:125;;;;-1:-1:-1;;22512:13:0;;22502:4;22484:24;;;;:9;:24;;;;;;:41;;;22327:206::o;23739:1782::-;14738:6;:13;;-1:-1:-1;;14738:13:0;14747:4;14738:13;;;23834:15:::1;::::0;23851:26:::1;::::0;14738:6;;23818:60:::1;::::0;:15:::1;:60::i;:::-;:76;;23885:9;;23818:76;;;23881:1;23818:76;23788:106;;23905:23;23931:60;23989:1;23931:53;23971:12;;23931:35;23946:19;23931:10;;:14;;:35;;;;:::i;:60::-;23905:86;;24002:20;24025:31;24040:15;24025:10;;:14;;:31;;;;:::i;:::-;24093:16;::::0;;24107:1:::1;24093:16:::0;;;;;::::1;::::0;;24002:54;;-1:-1:-1;24069:21:0::1;::::0;24093:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24093:16:0::1;24069:40;;24138:4;24120;24125:1;24120:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24120:23:0::1;;;-1:-1:-1::0;;;;;24120:23:0::1;;;::::0;::::1;24164:14;-1:-1:-1::0;;;;;24164:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24154:4;24159:1;24154:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24154:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;24256:196:::1;::::0;-1:-1:-1;;;24256:196:0;;24222:21:::1;::::0;24256:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;24336:12;;24198:21:::1;::::0;24379:4;;24406::::1;::::0;24426:15:::1;::::0;24256:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24465:17;24485:40;24511:13;24485:21;:25;;:40;;;;:::i;:::-;24465:60:::0;-1:-1:-1;24538:19:0::1;24560:44;24577:26;:19:::0;24601:1:::1;24577:23;:26::i;:::-;24560:12;::::0;;:16:::1;:44::i;:::-;24538:66;;24617:26;24646:48;24692:1;24646:41;24675:11;24646:24;24660:9;;24646;:13;;:24;;;;:::i;:48::-;24617:77;;24705:26;24734:45;24767:11;24734:28;24748:13;;24734:9;:13;;:28;;;;:::i;:45::-;24705:74;;24790:25;24818:47;24853:11;24818:30;24832:15;;24818:9;:13;;:30;;;;:::i;:47::-;24879:15;24907::::0;;24899:72:::1;::::0;24790:75;;-1:-1:-1;24879:15:0;;-1:-1:-1;;;;;24907:15:0;;::::1;::::0;24961:5:::1;::::0;24936:18;;24879:15;24899:72;24879:15;24899:72;24936:18;24907:15;24961:5;24899:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25006:14:0::1;::::0;24998:70:::1;::::0;24878:93;;-1:-1:-1;;;;;;25006:14:0::1;::::0;25058:5:::1;::::0;25034:17;;24998:70:::1;::::0;;;25034:17;25006:14;25058:5;24998:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25126:5:0::1;::::0;-1:-1:-1;;25147:19:0;;;-1:-1:-1;25144:370:0::1;;25364:21;::::0;25182:252:::1;::::0;-1:-1:-1;;;25182:252:0;;25266:4:::1;25182:252;::::0;::::1;14769:34:1::0;14819:18;;;14812:34;;;-1:-1:-1;14862:18:1;;;14855:34;;;14905:18;;;14898:34;-1:-1:-1;;;;;25364:21:0;;::::1;14948:19:1::0;;;14941:44;25404:15:0::1;15001:19:1::0;;;14994:35;25182:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;25220:18;;14703:19:1;;25182:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25454:48:0::1;::::0;;15525:25:1;;;15581:2;15566:18;;15559:34;;;25454:48:0::1;::::0;-1:-1:-1;15498:18:1;25454:48:0::1;;;;;;;25144:370;-1:-1:-1::0;;14756:6:0;:14;;-1:-1:-1;;14756:14:0;;;-1:-1:-1;;;;;;;;;23739:1782:0:o;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:160::-;1462:20;;1518:13;;1511:21;1501:32;;1491:60;;1547:1;1544;1537:12;1491:60;1397:160;;;:::o;1562:180::-;1618:6;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1710:26;1726:9;1710:26;:::i;1747:248::-;1815:6;1823;1876:2;1864:9;1855:7;1851:23;1847:32;1844:52;;;1892:1;1889;1882:12;1844:52;-1:-1:-1;;1915:23:1;;;1985:2;1970:18;;;1957:32;;-1:-1:-1;1747:248:1:o;2000:180::-;2059:6;2112:2;2100:9;2091:7;2087:23;2083:32;2080:52;;;2128:1;2125;2118:12;2080:52;-1:-1:-1;2151:23:1;;2000:180;-1:-1:-1;2000:180:1:o;2185:456::-;2262:6;2270;2278;2331:2;2319:9;2310:7;2306:23;2302:32;2299:52;;;2347:1;2344;2337:12;2299:52;2386:9;2373:23;2405:31;2430:5;2405:31;:::i;:::-;2455:5;-1:-1:-1;2512:2:1;2497:18;;2484:32;2525:33;2484:32;2525:33;:::i;:::-;2185:456;;2577:7;;-1:-1:-1;;;2631:2:1;2616:18;;;;2603:32;;2185:456::o;2835:367::-;2898:8;2908:6;2962:3;2955:4;2947:6;2943:17;2939:27;2929:55;;2980:1;2977;2970:12;2929:55;-1:-1:-1;3003:20:1;;3046:18;3035:30;;3032:50;;;3078:1;3075;3068:12;3032:50;3115:4;3107:6;3103:17;3091:29;;3175:3;3168:4;3158:6;3155:1;3151:14;3143:6;3139:27;3135:38;3132:47;3129:67;;;3192:1;3189;3182:12;3129:67;2835:367;;;;;:::o;3207:640::-;3311:6;3319;3327;3335;3388:2;3376:9;3367:7;3363:23;3359:32;3356:52;;;3404:1;3401;3394:12;3356:52;3443:9;3430:23;3462:31;3487:5;3462:31;:::i;:::-;3512:5;-1:-1:-1;3568:2:1;3553:18;;3540:32;3595:18;3584:30;;3581:50;;;3627:1;3624;3617:12;3581:50;3666:70;3728:7;3719:6;3708:9;3704:22;3666:70;:::i;:::-;3207:640;;3755:8;;-1:-1:-1;3640:96:1;;3837:2;3822:18;3809:32;;3207:640;-1:-1:-1;;;;3207:640:1:o;4060:315::-;4125:6;4133;4186:2;4174:9;4165:7;4161:23;4157:32;4154:52;;;4202:1;4199;4192:12;4154:52;4241:9;4228:23;4260:31;4285:5;4260:31;:::i;:::-;4310:5;-1:-1:-1;4334:35:1;4365:2;4350:18;;4334:35;:::i;:::-;4324:45;;4060:315;;;;;:::o;4380:247::-;4439:6;4492:2;4480:9;4471:7;4467:23;4463:32;4460:52;;;4508:1;4505;4498:12;4460:52;4547:9;4534:23;4566:31;4591:5;4566:31;:::i;4867:908::-;4998:6;5006;5014;5022;5030;5083:2;5071:9;5062:7;5058:23;5054:32;5051:52;;;5099:1;5096;5089:12;5051:52;5138:9;5125:23;5157:31;5182:5;5157:31;:::i;:::-;5207:5;-1:-1:-1;5263:2:1;5248:18;;5235:32;5286:18;5316:14;;;5313:34;;;5343:1;5340;5333:12;5313:34;5382:70;5444:7;5435:6;5424:9;5420:22;5382:70;:::i;:::-;5471:8;;-1:-1:-1;5356:96:1;-1:-1:-1;5559:2:1;5544:18;;5531:32;;-1:-1:-1;5575:16:1;;;5572:36;;;5604:1;5601;5594:12;5572:36;;5643:72;5707:7;5696:8;5685:9;5681:24;5643:72;:::i;:::-;4867:908;;;;-1:-1:-1;4867:908:1;;-1:-1:-1;5734:8:1;;5617:98;4867:908;-1:-1:-1;;;4867:908:1:o;5780:385::-;5866:6;5874;5882;5890;5943:3;5931:9;5922:7;5918:23;5914:33;5911:53;;;5960:1;5957;5950:12;5911:53;-1:-1:-1;;5983:23:1;;;6053:2;6038:18;;6025:32;;-1:-1:-1;6104:2:1;6089:18;;6076:32;;6155:2;6140:18;6127:32;;-1:-1:-1;5780:385:1;-1:-1:-1;5780:385:1:o;6170:437::-;6256:6;6264;6317:2;6305:9;6296:7;6292:23;6288:32;6285:52;;;6333:1;6330;6323:12;6285:52;6373:9;6360:23;6406:18;6398:6;6395:30;6392:50;;;6438:1;6435;6428:12;6392:50;6477:70;6539:7;6530:6;6519:9;6515:22;6477:70;:::i;:::-;6566:8;;6451:96;;-1:-1:-1;6170:437:1;-1:-1:-1;;;;6170:437:1:o;6612:529::-;6689:6;6697;6705;6758:2;6746:9;6737:7;6733:23;6729:32;6726:52;;;6774:1;6771;6764:12;6726:52;6813:9;6800:23;6832:31;6857:5;6832:31;:::i;:::-;6882:5;-1:-1:-1;6939:2:1;6924:18;;6911:32;6952:33;6911:32;6952:33;:::i;:::-;7004:7;-1:-1:-1;7063:2:1;7048:18;;7035:32;7076:33;7035:32;7076:33;:::i;:::-;7128:7;7118:17;;;6612:529;;;;;:::o;7146:388::-;7214:6;7222;7275:2;7263:9;7254:7;7250:23;7246:32;7243:52;;;7291:1;7288;7281:12;7243:52;7330:9;7317:23;7349:31;7374:5;7349:31;:::i;:::-;7399:5;-1:-1:-1;7456:2:1;7441:18;;7428:32;7469:33;7428:32;7469:33;:::i;:::-;7521:7;7511:17;;;7146:388;;;;;:::o;7539:356::-;7741:2;7723:21;;;7760:18;;;7753:30;7819:34;7814:2;7799:18;;7792:62;7886:2;7871:18;;7539:356::o;7900:127::-;7961:10;7956:3;7952:20;7949:1;7942:31;7992:4;7989:1;7982:15;8016:4;8013:1;8006:15;8032:168;8105:9;;;8136;;8153:15;;;8147:22;;8133:37;8123:71;;8174:18;;:::i;8205:217::-;8245:1;8271;8261:132;;8315:10;8310:3;8306:20;8303:1;8296:31;8350:4;8347:1;8340:15;8378:4;8375:1;8368:15;8261:132;-1:-1:-1;8407:9:1;;8205:217::o;9548:127::-;9609:10;9604:3;9600:20;9597:1;9590:31;9640:4;9637:1;9630:15;9664:4;9661:1;9654:15;9680:135;9719:3;9740:17;;;9737:43;;9760:18;;:::i;:::-;-1:-1:-1;9807:1:1;9796:13;;9680:135::o;10643:125::-;10708:9;;;10729:10;;;10726:36;;;10742:18;;:::i;12366:128::-;12433:9;;;12454:11;;;12451:37;;;12468:18;;:::i;12977:251::-;13047:6;13100:2;13088:9;13079:7;13075:23;13071:32;13068:52;;;13116:1;13113;13106:12;13068:52;13148:9;13142:16;13167:31;13192:5;13167:31;:::i;13233:980::-;13495:4;13543:3;13532:9;13528:19;13574:6;13563:9;13556:25;13600:2;13638:6;13633:2;13622:9;13618:18;13611:34;13681:3;13676:2;13665:9;13661:18;13654:31;13705:6;13740;13734:13;13771:6;13763;13756:22;13809:3;13798:9;13794:19;13787:26;;13848:2;13840:6;13836:15;13822:29;;13869:1;13879:195;13893:6;13890:1;13887:13;13879:195;;;13958:13;;-1:-1:-1;;;;;13954:39:1;13942:52;;14049:15;;;;14014:12;;;;13990:1;13908:9;13879:195;;;-1:-1:-1;;;;;;;14130:32:1;;;;14125:2;14110:18;;14103:60;-1:-1:-1;;;14194:3:1;14179:19;14172:35;14091:3;13233:980;-1:-1:-1;;;13233:980:1:o;15040:306::-;15128:6;15136;15144;15197:2;15185:9;15176:7;15172:23;15168:32;15165:52;;;15213:1;15210;15203:12;15165:52;15242:9;15236:16;15226:26;;15292:2;15281:9;15277:18;15271:25;15261:35;;15336:2;15325:9;15321:18;15315:25;15305:35;;15040:306;;;;;:::o

Swarm Source

ipfs://9fbc65e77f074f50f9e7329c90c89a0a527f55887b8814535d6e7fe1b8f2e8ee
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.