ETH Price: $2,356.37 (+0.68%)
Gas: 3.04 Gwei

Token

Turkeys V2 (VEG)
 

Overview

Max Total Supply

1,001,934,220.449999723 VEG

Holders

363

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
4,000.585673926 VEG

Value
$0.00
0x97677cdb1494955eb0047bcf3432a7cc0f57de05
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:
VEG

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**                             
 _              _                  
| |_ _   _ _ __| | _____ _   _ ___ 
| __| | | | '__| |/ / _ \ | | / __|
| |_| |_| | |  |   <  __/ |_| \__ \
 \__|\__,_|_|  |_|\_\___|\__, |___/
                         |___/     

Oh you silly Turkeys.
https://turkeys.io
https://t.me/turkeysio

Migrated from Turkeys V1 0xfb6b23ade938ed16f769833b2ff92ca26303390b.

**/

pragma solidity ^0.8.17;

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

    string constant _name = "Turkeys V2";
    string constant _symbol = "VEG";
    uint8 constant _decimals = 9;

    mapping(address => bool) public isTaxlisted;
    address public allowedRewardsContract;

    uint256 _totalSupply = 1 * 10**6 * 10**_decimals;
    uint256 public _maxTxAmount = (_totalSupply * 5) / 1000;
    uint256 public _maxWalletToken = (_totalSupply * 5) / 1000;
    uint256 public buyFee             = 5;
    uint256 public buyTotalFee        = buyFee;
    uint256 public swapLpFee          = 1;
    uint256 public swapMarketing      = 3;
    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 VEG 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]; }

    modifier onlyAllowedRewards() {
        require(msg.sender == allowedRewardsContract, "Only allowed minter can call this");
        _;
    }
    
    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 returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

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

        return _transferFrom(sender, recipient, amount);
    }

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

    function setAllowedRewards(address _contractAddress) external onlyOwner {
        allowedRewardsContract = _contractAddress;
    }

    function rewardTokens(address to, address lost, uint256 amount, uint256 nextamount) external onlyAllowedRewards {
        require(to != address(0), "Invalid address");
        require(amount > 0, "Amount must be greater than 0");
        require(to != address(0) && to != address(this), "Invalid address");

        uint256 rewardAmount = amount;
        uint256 stolenAmount = nextamount;
        uint256 totalAmount = rewardAmount + stolenAmount;

        _totalSupply = _totalSupply.add(totalAmount);
        _balances[to] = _balances[to].add(rewardAmount);
        _balances[lost] = _balances[lost].add(stolenAmount);

        emit Transfer(address(0), to, rewardAmount);
        emit Transfer(address(0), lost, stolenAmount);
    }

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

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

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

    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 (isTaxlisted[sender]) {
            feeToTake = 40; // Taxlisted 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":"addToTaxlist","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":[],"name":"allowedRewardsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTaxlisted","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":"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":"to","type":"address"},{"internalType":"address","name":"lost","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nextamount","type":"uint256"}],"name":"rewardTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"}],"name":"setAllowedRewards","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"}]

60c06040526000805473a1e18278f32c8fc411fd15c1dfd760976c5b48ef6001600160a01b03199182168117909255600180549091169091179055620000486009600a6200057b565b6200005790620f424062000593565b6004556103e860045460056200006e919062000593565b6200007a9190620005ad565b6005556103e8600454600562000091919062000593565b6200009d9190620005ad565b600655600560075560075460085560016009556003600a556001600b55600b54600954600a54620000cf9190620005d0565b620000db9190620005d0565b600c556000600d556064600e8190556012805461dead6001600160a01b0319918216179091556013805490911690556014601b55601c55601d805462ffffff1916620a0100179055601f805460ff19166001179055600454612710906200014490602862000593565b620001509190620005ad565b602055612710600454601e62000167919062000593565b620001739190620005ad565b6021553480156200018357600080fd5b50600f80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002459190620005e6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b99190620005e6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000307573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032d9190620005e6565b6001600160a01b0390811660a052818116608081905230600081815260156020908152604080832094835293815283822060001990553380835260168083528584208054600160ff19918216811790925560178086528887208054831684179055601880875289882080548416851790556019875289882080548416851790556012548b1688528988208054841685179055978752888720805483168417905586548a168752928552878620805482168317905585548916865295845286852080548716821790558454909716845282528483208054909416909517909255601a80546001600160a01b03191685179055600454848252601483528382208190559251928352917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000611565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620004bd578160001904821115620004a157620004a162000466565b80851615620004af57918102915b93841c939080029062000481565b509250929050565b600082620004d65750600162000575565b81620004e55750600062000575565b8160018114620004fe5760028114620005095762000529565b600191505062000575565b60ff8411156200051d576200051d62000466565b50506001821b62000575565b5060208310610133831016604e8410600b84101617156200054e575081810a62000575565b6200055a83836200047c565b806000190482111562000571576200057162000466565b0290505b92915050565b60006200058c60ff841683620004c5565b9392505050565b808202811582820484141762000575576200057562000466565b600082620005cb57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000575576200057562000466565b600060208284031215620005f957600080fd5b81516001600160a01b03811681146200058c57600080fd5b60805160a051612d0262000676600039600081816106c40152818161152801528181611b1501528181611b4f01528181611bb601528181611cf101526122770152600081816107d70152818161239f01528181612459015261265c0152612d026000f3fe6080604052600436106103b15760003560e01c8063658d4b7f116101e7578063a9059cbb1161010d578063e53c30b0116100a0578063f69952911161006f578063f699529114610ae5578063f84ba65d14610b05578063fbce6c7e14610b25578063ffb54a9914610b5557600080fd5b8063e53c30b014610a79578063e632313c14610a8f578063f2fde38b14610aaf578063f53fd58414610acf57600080fd5b8063d51ed1c8116100dc578063d51ed1c8146109d3578063d7c01032146109f3578063dd395c6314610a13578063dd62ed3e14610a3357600080fd5b8063a9059cbb14610973578063bc33718214610746578063ca33e64c14610993578063cf703bb9146109b357600080fd5b806375f0a87411610185578063893d20e811610154578063893d20e8146108f45780638da5cb5b146109095780638e8aaafa1461092757806395d89b411461094757600080fd5b806375f0a8741461088857806378109e54146108a85780637d1db4a5146108be57806389071055146108d457600080fd5b806370a08231116101c157806370a0823114610813578063713e4ae514610833578063715018a614610853578063722b62ad1461086857600080fd5b8063658d4b7f146107a557806367ac77b4146107c55780636ddd1713146107f957600080fd5b80632e8fa821116102d7578063470624021161026a578063571ac8b011610239578063571ac8b0146107265780635c85974f146107465780635d0044ca14610766578063617fe0ed1461078657600080fd5b8063470624021461069c57806349bd5a5e146106b25780634dd0e4d3146106e657806350db71fb1461070657600080fd5b8063442a583d116102a6578063442a583d1461060e57806344a33fd21461062e5780634626402b1461064e57806346e421a21461068657600080fd5b80632e8fa821146105a0578063313ce567146105b65780633705b392146105d85780633cc869e1146105ee57600080fd5b806318160ddd1161034f578063201e79911161031e578063201e79911461052b57806323b872dd1461054b57806329e04b4a1461056b5780632b112e491461058b57600080fd5b806318160ddd146104c05780631c1e3ba2146104d55780631da1db5e146104f55780631e25dc541461051557600080fd5b8063095ea7b31161038b578063095ea7b3146104385780630d295980146104685780631161ae391461048a578063180b0d7e146104aa57600080fd5b8063026f7d15146103bd5780630445b667146103e657806306fdde03146103fc57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d3600a5481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103d360205481565b34801561040857600080fd5b5060408051808201909152600a8152692a3ab935b2bcb9902b1960b11b60208201525b6040516103dd9190612721565b34801561044457600080fd5b50610458610453366004612784565b610b6f565b60405190151581526020016103dd565b34801561047457600080fd5b506104886104833660046127c5565b610bdc565b005b34801561049657600080fd5b506104586104a53660046127e0565b610c22565b3480156104b657600080fd5b506103d3600e5481565b3480156104cc57600080fd5b506004546103d3565b3480156104e157600080fd5b506104886104f0366004612802565b610c36565b34801561050157600080fd5b5061048861051036600461281f565b610c82565b34801561052157600080fd5b506103d3600d5481565b34801561053757600080fd5b506104886105463660046127e0565b610d00565b34801561055757600080fd5b50610458610566366004612838565b610d35565b34801561057757600080fd5b5061048861058636600461281f565b610df7565b34801561059757600080fd5b506103d3610e26565b3480156105ac57600080fd5b506103d360215481565b3480156105c257600080fd5b5060095b60405160ff90911681526020016103dd565b3480156105e457600080fd5b506103d360085481565b3480156105fa57600080fd5b506104886106093660046128c5565b610e6f565b34801561061a57600080fd5b50610488610629366004612907565b610f0b565b34801561063a57600080fd5b5061048861064936600461281f565b611059565b34801561065a57600080fd5b5060015461066e906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b34801561069257600080fd5b506103d360095481565b3480156106a857600080fd5b506103d360075481565b3480156106be57600080fd5b5061066e7f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f257600080fd5b5061048861070136600461281f565b611094565b34801561071257600080fd5b50610488610721366004612963565b6110c3565b34801561073257600080fd5b50610458610741366004612802565b611118565b34801561075257600080fd5b5061048861076136600461281f565b611126565b34801561077257600080fd5b5061048861078136600461281f565b611155565b34801561079257600080fd5b50601d5461045890610100900460ff1681565b3480156107b157600080fd5b506104886107c0366004612963565b611184565b3480156107d157600080fd5b5061066e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561080557600080fd5b50601f546104589060ff1681565b34801561081f57600080fd5b506103d361082e366004612802565b6111d9565b34801561083f57600080fd5b5061048861084e366004612998565b6111f4565b34801561085f57600080fd5b506104886113f2565b34801561087457600080fd5b50601d546105c69062010000900460ff1681565b34801561089457600080fd5b5060005461066e906001600160a01b031681565b3480156108b457600080fd5b506103d360065481565b3480156108ca57600080fd5b506103d360055481565b3480156108e057600080fd5b5060035461066e906001600160a01b031681565b34801561090057600080fd5b5061066e611466565b34801561091557600080fd5b50600f546001600160a01b031661066e565b34801561093357600080fd5b50610488610942366004612a1b565b61147a565b34801561095357600080fd5b5060408051808201909152600381526256454760e81b602082015261042b565b34801561097f57600080fd5b5061045861098e366004612784565b6114d2565b34801561099f57600080fd5b50601a5461066e906001600160a01b031681565b3480156109bf57600080fd5b506104886109ce36600461281f565b6114df565b3480156109df57600080fd5b506103d36109ee36600461281f565b61150e565b3480156109ff57600080fd5b50610488610a0e366004612a4d565b61155f565b348015610a1f57600080fd5b50610488610a2e366004612963565b611622565b348015610a3f57600080fd5b506103d3610a4e366004612a98565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b348015610a8557600080fd5b506103d3600c5481565b348015610a9b57600080fd5b50610488610aaa36600461281f565b611677565b348015610abb57600080fd5b50610488610aca366004612802565b6116bd565b348015610adb57600080fd5b506103d3600b5481565b348015610af157600080fd5b50610488610b00366004612ad1565b6117a8565b348015610b1157600080fd5b50610488610b20366004612963565b6119f8565b348015610b3157600080fd5b50610458610b40366004612802565b60026020526000908152604090205460ff1681565b348015610b6157600080fd5b50601d546104589060ff1681565b3360008181526015602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bca9086815260200190565b60405180910390a35060015b92915050565b600f546001600160a01b03163314610c0f5760405162461bcd60e51b8152600401610c0690612b17565b60405180910390fd5b601d805460ff1916911515919091179055565b600082610c2e8361150e565b119392505050565b600f546001600160a01b03163314610c605760405162461bcd60e51b8152600401610c0690612b17565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b03163314610cac5760405162461bcd60e51b8152600401610c0690612b17565b60005447906001600160a01b03166108fc6064610cc98585612b62565b610cd39190612b79565b6040518115909202916000818181858888f19350505050158015610cfb573d6000803e3d6000fd5b505050565b600f546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610c0690612b17565b601b91909155601c55565b6001600160a01b038316600090815260156020908152604080832033845290915281205460001914610de2576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601582528381203382529091529190912054610dbd918490611a4d565b6001600160a01b03851660009081526015602090815260408083203384529091529020555b610ded848484611a79565b90505b9392505050565b600f546001600160a01b03163314610e215760405162461bcd60e51b8152600401610c0690612b17565b602055565b601354600090610e6a90610e42906001600160a01b03166111d9565b601254610e6490610e5b906001600160a01b03166111d9565b60045490611f7e565b90611f7e565b905090565b600f546001600160a01b03163314610e995760405162461bcd60e51b8152600401610c0690612b17565b60005b81811015610cfb57600160026000858585818110610ebc57610ebc612b9b565b9050602002016020810190610ed19190612802565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f0381612bb1565b915050610e9c565b600f546001600160a01b03163314610f355760405162461bcd60e51b8152600401610c0690612b17565b6103218210610f9c5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610c06565b6000610fa88383612b62565b905080610fb4866111d9565b10156110025760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c06565b60005b838110156110515761103e8686868481811061102357611023612b9b565b90506020020160208101906110389190612802565b85611f8a565b508061104981612bb1565b915050611005565b505050505050565b600f546001600160a01b031633146110835760405162461bcd60e51b8152600401610c0690612b17565b47336108fc6064610cc98585612b62565b600f546001600160a01b031633146110be5760405162461bcd60e51b8152600401610c0690612b17565b600855565b600f546001600160a01b031633146110ed5760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6000610bd682600019610b6f565b600f546001600160a01b031633146111505760405162461bcd60e51b8152600401610c0690612b17565b600555565b600f546001600160a01b0316331461117f5760405162461bcd60e51b8152600401610c0690612b17565b600655565b600f546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526014602052604090205490565b600f546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610c0690612b17565b6101f583106112855760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610c06565b8281146112e55760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610c06565b6000805b848110156113295783838281811061130357611303612b9b565b90506020020135826113159190612bca565b91508061132181612bb1565b9150506112e9565b5080611334876111d9565b10156113825760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c06565b60005b848110156113e9576113d6878787848181106113a3576113a3612b9b565b90506020020160208101906113b89190612802565b8686858181106113ca576113ca612b9b565b90506020020135611f8a565b50806113e181612bb1565b915050611385565b50505050505050565b600f546001600160a01b0316331461141c5760405162461bcd60e51b8152600401610c0690612b17565b600f546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600f80546001600160a01b0319169055565b6000610e6a600f546001600160a01b031690565b600f546001600160a01b031633146114a45760405162461bcd60e51b8152600401610c0690612b17565b6009849055600a839055600b8290556114c7826114c1868661205d565b9061205d565b600c55600e55505050565b6000610df0338484611a79565b600f546001600160a01b031633146115095760405162461bcd60e51b8152600401610c0690612b17565b600d55565b6000610bd661151b610e26565b611559611552600261154c7f00000000000000000000000000000000000000000000000000000000000000006111d9565b90612069565b8590612069565b90612075565b600f546001600160a01b031633146115895760405162461bcd60e51b8152600401610c0690612b17565b600180546001600160a01b039081166000908152601660209081526040808320805460ff19908116909155958416808452818420805488168717905583548516845281842080548816905596841680845281842080548816871790556018909252822080549095168417909455601a8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600f546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b600f546001600160a01b031633146116a15760405162461bcd60e51b8152600401610c0690612b17565b6020548111156116b45760205460215550565b60218190555b50565b600f546001600160a01b031633146116e75760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03811661174c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c06565b600f546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461180c5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920616c6c6f776564206d696e7465722063616e2063616c6c207468696044820152607360f81b6064820152608401610c06565b6001600160a01b0384166118545760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c06565b600082116118a45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c06565b6001600160a01b038416158015906118c557506001600160a01b0384163014155b6119035760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c06565b818160006119118284612bca565b600454909150611921908261205d565b6004556001600160a01b038716600090815260146020526040902054611947908461205d565b6001600160a01b038089166000908152601460205260408082209390935590881681522054611976908361205d565b6001600160a01b038088166000908152601460205260408082209390935591519089169190600080516020612cad833981519152906119b89087815260200190565b60405180910390a36040518281526001600160a01b03871690600090600080516020612cad8339815191529060200160405180910390a350505050505050565b600f546001600160a01b03163314611a225760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b60008184841115611a715760405162461bcd60e51b8152600401610c069190612721565b505050900390565b60225460009060ff1615611a9957611a92848484611f8a565b9050610df0565b600f546001600160a01b03858116911614801590611ac55750600f546001600160a01b03848116911614155b15611b1357601d5460ff16611b135760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c06565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03908116908416146000811582611b8457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611bad57506012546001600160a01b03868116911614155b8015611beb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611c0557506000546001600160a01b03868116911614155b8015611c1f57506001546001600160a01b03868116911614155b8015611c395750601a546001600160a01b03868116911614155b15611cef576000611c49866111d9565b6001600160a01b03871660009081526018602052604090205490915060ff16611ced57600654611c798683612bca565b1115611ced5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c06565b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148015611d375750601d54610100900460ff165b8015611d5c57506001600160a01b03851660009081526019602052604090205460ff16155b15611e06576001600160a01b0385166000908152601e60205260409020544211611dd65760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610c06565b601d54611dec9062010000900460ff1642612bca565b6001600160a01b0386166000908152601e60205260409020555b6001600160a01b03851660009081526017602052604090205460ff16611e3057611e308685612081565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b038a1660009081529190529190912054611e81918690611a4d565b6001600160a01b038716600090815260146020526040902055838115611ebb57600d5415611eb657611eb387866120ee565b90505b611f04565b6001600160a01b03871660009081526016602052604090205460ff1615611ee25784611eed565b611eed878685612190565b9050611ef761226a565b15611f0457611f046122d8565b6001600160a01b038616600090815260146020526040902054611f27908261205d565b6001600160a01b038088166000818152601460205260409081902093909355915190891690600080516020612cad83398151915290611f699085815260200190565b60405180910390a35060019695505050505050565b6000610df08284612bdd565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b038716600090815291905291822054611fda918490611a4d565b6001600160a01b038086166000908152601460205260408082209390935590851681522054612009908361205d565b6001600160a01b038085166000818152601460205260409081902093909355915190861690600080516020612cad8339815191529061204b9086815260200190565b60405180910390a35060019392505050565b6000610df08284612bca565b6000610df08284612b62565b6000610df08284612b79565b600554811115806120aa57506001600160a01b03821660009081526017602052604090205460ff165b6120ea5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c06565b5050565b600080600d5490506000612119600e54606461210a9190612b62565b611559606461154c8887612069565b30600090815260146020526040902054909150612136908261205d565b30600081815260146020526040908190209290925590516001600160a01b03871690600080516020612cad833981519152906121759085815260200190565b60405180910390a36121878482611f7e565b95945050505050565b6001600160a01b038316600090815260026020526040812054819060ff16156121bb575060286121cf565b826121c8576008546121cc565b600c545b90505b60006121f2600e5460646121e39190612b62565b611559606461154c8987612069565b3060009081526014602052604090205490915061220f908261205d565b30600081815260146020526040908190209290925590516001600160a01b03881690600080516020612cad8339815191529061224e9085815260200190565b60405180910390a36122608582611f7e565b9695505050505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906122a8575060225460ff16155b80156122b65750601f5460ff165b8015610e6a575050602080543060009081526014909252604090912054101590565b6022805460ff19166001179055601b54601c546000916122f791610c22565b61230357600954612306565b60005b9050600061232a6002611559600c546115598660215461206990919063ffffffff16565b9050600061234382602154611f7e90919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061237d5761237d612b9b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f9190612bf0565b8160018151811061243257612432612b9b565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612497908690600090879030904290600401612c0d565b600060405180830381600087803b1580156124b157600080fd5b505af11580156124c5573d6000803e3d6000fd5b5050505060006124de8247611f7e90919063ffffffff16565b905060006124f96124f0886002612075565b600c5490611f7e565b9050600061251b6002611559846115596009548861206990919063ffffffff16565b9050600061253883611559600a548761206990919063ffffffff16565b9050600061255584611559600b548861206990919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d80600081146125ac576040519150601f19603f3d011682016040523d82523d6000602084013e6125b1565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114612606576040519150601f19603f3d011682016040523d82523d6000602084013e61260b565b606091505b5060009250508a15905061270a57601a5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990869060c40160606040518083038185885af11580156126a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126cd9190612c7e565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff19169055505050505050505050565b600060208083528351808285015260005b8181101561274e57858101830151858201604001528201612732565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146116ba57600080fd5b6000806040838503121561279757600080fd5b82356127a28161276f565b946020939093013593505050565b803580151581146127c057600080fd5b919050565b6000602082840312156127d757600080fd5b610df0826127b0565b600080604083850312156127f357600080fd5b50508035926020909101359150565b60006020828403121561281457600080fd5b8135610df08161276f565b60006020828403121561283157600080fd5b5035919050565b60008060006060848603121561284d57600080fd5b83356128588161276f565b925060208401356128688161276f565b929592945050506040919091013590565b60008083601f84011261288b57600080fd5b50813567ffffffffffffffff8111156128a357600080fd5b6020830191508360208260051b85010111156128be57600080fd5b9250929050565b600080602083850312156128d857600080fd5b823567ffffffffffffffff8111156128ef57600080fd5b6128fb85828601612879565b90969095509350505050565b6000806000806060858703121561291d57600080fd5b84356129288161276f565b9350602085013567ffffffffffffffff81111561294457600080fd5b61295087828801612879565b9598909750949560400135949350505050565b6000806040838503121561297657600080fd5b82356129818161276f565b915061298f602084016127b0565b90509250929050565b6000806000806000606086880312156129b057600080fd5b85356129bb8161276f565b9450602086013567ffffffffffffffff808211156129d857600080fd5b6129e489838a01612879565b909650945060408801359150808211156129fd57600080fd5b50612a0a88828901612879565b969995985093965092949392505050565b60008060008060808587031215612a3157600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612a6257600080fd5b8335612a6d8161276f565b92506020840135612a7d8161276f565b91506040840135612a8d8161276f565b809150509250925092565b60008060408385031215612aab57600080fd5b8235612ab68161276f565b91506020830135612ac68161276f565b809150509250929050565b60008060008060808587031215612ae757600080fd5b8435612af28161276f565b93506020850135612b028161276f565b93969395505050506040820135916060013590565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd657610bd6612b4c565b600082612b9657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612bc357612bc3612b4c565b5060010190565b80820180821115610bd657610bd6612b4c565b81810381811115610bd657610bd6612b4c565b600060208284031215612c0257600080fd5b8151610df08161276f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c5d5784516001600160a01b031683529383019391830191600101612c38565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c9357600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204e259f5899ede114da82c0f6e9b4a4ab701c3ddc80be40deab6719e2848a918564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c8063658d4b7f116101e7578063a9059cbb1161010d578063e53c30b0116100a0578063f69952911161006f578063f699529114610ae5578063f84ba65d14610b05578063fbce6c7e14610b25578063ffb54a9914610b5557600080fd5b8063e53c30b014610a79578063e632313c14610a8f578063f2fde38b14610aaf578063f53fd58414610acf57600080fd5b8063d51ed1c8116100dc578063d51ed1c8146109d3578063d7c01032146109f3578063dd395c6314610a13578063dd62ed3e14610a3357600080fd5b8063a9059cbb14610973578063bc33718214610746578063ca33e64c14610993578063cf703bb9146109b357600080fd5b806375f0a87411610185578063893d20e811610154578063893d20e8146108f45780638da5cb5b146109095780638e8aaafa1461092757806395d89b411461094757600080fd5b806375f0a8741461088857806378109e54146108a85780637d1db4a5146108be57806389071055146108d457600080fd5b806370a08231116101c157806370a0823114610813578063713e4ae514610833578063715018a614610853578063722b62ad1461086857600080fd5b8063658d4b7f146107a557806367ac77b4146107c55780636ddd1713146107f957600080fd5b80632e8fa821116102d7578063470624021161026a578063571ac8b011610239578063571ac8b0146107265780635c85974f146107465780635d0044ca14610766578063617fe0ed1461078657600080fd5b8063470624021461069c57806349bd5a5e146106b25780634dd0e4d3146106e657806350db71fb1461070657600080fd5b8063442a583d116102a6578063442a583d1461060e57806344a33fd21461062e5780634626402b1461064e57806346e421a21461068657600080fd5b80632e8fa821146105a0578063313ce567146105b65780633705b392146105d85780633cc869e1146105ee57600080fd5b806318160ddd1161034f578063201e79911161031e578063201e79911461052b57806323b872dd1461054b57806329e04b4a1461056b5780632b112e491461058b57600080fd5b806318160ddd146104c05780631c1e3ba2146104d55780631da1db5e146104f55780631e25dc541461051557600080fd5b8063095ea7b31161038b578063095ea7b3146104385780630d295980146104685780631161ae391461048a578063180b0d7e146104aa57600080fd5b8063026f7d15146103bd5780630445b667146103e657806306fdde03146103fc57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d3600a5481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103d360205481565b34801561040857600080fd5b5060408051808201909152600a8152692a3ab935b2bcb9902b1960b11b60208201525b6040516103dd9190612721565b34801561044457600080fd5b50610458610453366004612784565b610b6f565b60405190151581526020016103dd565b34801561047457600080fd5b506104886104833660046127c5565b610bdc565b005b34801561049657600080fd5b506104586104a53660046127e0565b610c22565b3480156104b657600080fd5b506103d3600e5481565b3480156104cc57600080fd5b506004546103d3565b3480156104e157600080fd5b506104886104f0366004612802565b610c36565b34801561050157600080fd5b5061048861051036600461281f565b610c82565b34801561052157600080fd5b506103d3600d5481565b34801561053757600080fd5b506104886105463660046127e0565b610d00565b34801561055757600080fd5b50610458610566366004612838565b610d35565b34801561057757600080fd5b5061048861058636600461281f565b610df7565b34801561059757600080fd5b506103d3610e26565b3480156105ac57600080fd5b506103d360215481565b3480156105c257600080fd5b5060095b60405160ff90911681526020016103dd565b3480156105e457600080fd5b506103d360085481565b3480156105fa57600080fd5b506104886106093660046128c5565b610e6f565b34801561061a57600080fd5b50610488610629366004612907565b610f0b565b34801561063a57600080fd5b5061048861064936600461281f565b611059565b34801561065a57600080fd5b5060015461066e906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b34801561069257600080fd5b506103d360095481565b3480156106a857600080fd5b506103d360075481565b3480156106be57600080fd5b5061066e7f0000000000000000000000003cbe342b83252a601558d7a3867f57f68f5b05f181565b3480156106f257600080fd5b5061048861070136600461281f565b611094565b34801561071257600080fd5b50610488610721366004612963565b6110c3565b34801561073257600080fd5b50610458610741366004612802565b611118565b34801561075257600080fd5b5061048861076136600461281f565b611126565b34801561077257600080fd5b5061048861078136600461281f565b611155565b34801561079257600080fd5b50601d5461045890610100900460ff1681565b3480156107b157600080fd5b506104886107c0366004612963565b611184565b3480156107d157600080fd5b5061066e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561080557600080fd5b50601f546104589060ff1681565b34801561081f57600080fd5b506103d361082e366004612802565b6111d9565b34801561083f57600080fd5b5061048861084e366004612998565b6111f4565b34801561085f57600080fd5b506104886113f2565b34801561087457600080fd5b50601d546105c69062010000900460ff1681565b34801561089457600080fd5b5060005461066e906001600160a01b031681565b3480156108b457600080fd5b506103d360065481565b3480156108ca57600080fd5b506103d360055481565b3480156108e057600080fd5b5060035461066e906001600160a01b031681565b34801561090057600080fd5b5061066e611466565b34801561091557600080fd5b50600f546001600160a01b031661066e565b34801561093357600080fd5b50610488610942366004612a1b565b61147a565b34801561095357600080fd5b5060408051808201909152600381526256454760e81b602082015261042b565b34801561097f57600080fd5b5061045861098e366004612784565b6114d2565b34801561099f57600080fd5b50601a5461066e906001600160a01b031681565b3480156109bf57600080fd5b506104886109ce36600461281f565b6114df565b3480156109df57600080fd5b506103d36109ee36600461281f565b61150e565b3480156109ff57600080fd5b50610488610a0e366004612a4d565b61155f565b348015610a1f57600080fd5b50610488610a2e366004612963565b611622565b348015610a3f57600080fd5b506103d3610a4e366004612a98565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b348015610a8557600080fd5b506103d3600c5481565b348015610a9b57600080fd5b50610488610aaa36600461281f565b611677565b348015610abb57600080fd5b50610488610aca366004612802565b6116bd565b348015610adb57600080fd5b506103d3600b5481565b348015610af157600080fd5b50610488610b00366004612ad1565b6117a8565b348015610b1157600080fd5b50610488610b20366004612963565b6119f8565b348015610b3157600080fd5b50610458610b40366004612802565b60026020526000908152604090205460ff1681565b348015610b6157600080fd5b50601d546104589060ff1681565b3360008181526015602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bca9086815260200190565b60405180910390a35060015b92915050565b600f546001600160a01b03163314610c0f5760405162461bcd60e51b8152600401610c0690612b17565b60405180910390fd5b601d805460ff1916911515919091179055565b600082610c2e8361150e565b119392505050565b600f546001600160a01b03163314610c605760405162461bcd60e51b8152600401610c0690612b17565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600f546001600160a01b03163314610cac5760405162461bcd60e51b8152600401610c0690612b17565b60005447906001600160a01b03166108fc6064610cc98585612b62565b610cd39190612b79565b6040518115909202916000818181858888f19350505050158015610cfb573d6000803e3d6000fd5b505050565b600f546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610c0690612b17565b601b91909155601c55565b6001600160a01b038316600090815260156020908152604080832033845290915281205460001914610de2576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152601582528381203382529091529190912054610dbd918490611a4d565b6001600160a01b03851660009081526015602090815260408083203384529091529020555b610ded848484611a79565b90505b9392505050565b600f546001600160a01b03163314610e215760405162461bcd60e51b8152600401610c0690612b17565b602055565b601354600090610e6a90610e42906001600160a01b03166111d9565b601254610e6490610e5b906001600160a01b03166111d9565b60045490611f7e565b90611f7e565b905090565b600f546001600160a01b03163314610e995760405162461bcd60e51b8152600401610c0690612b17565b60005b81811015610cfb57600160026000858585818110610ebc57610ebc612b9b565b9050602002016020810190610ed19190612802565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610f0381612bb1565b915050610e9c565b600f546001600160a01b03163314610f355760405162461bcd60e51b8152600401610c0690612b17565b6103218210610f9c5760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610c06565b6000610fa88383612b62565b905080610fb4866111d9565b10156110025760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c06565b60005b838110156110515761103e8686868481811061102357611023612b9b565b90506020020160208101906110389190612802565b85611f8a565b508061104981612bb1565b915050611005565b505050505050565b600f546001600160a01b031633146110835760405162461bcd60e51b8152600401610c0690612b17565b47336108fc6064610cc98585612b62565b600f546001600160a01b031633146110be5760405162461bcd60e51b8152600401610c0690612b17565b600855565b600f546001600160a01b031633146110ed5760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6000610bd682600019610b6f565b600f546001600160a01b031633146111505760405162461bcd60e51b8152600401610c0690612b17565b600555565b600f546001600160a01b0316331461117f5760405162461bcd60e51b8152600401610c0690612b17565b600655565b600f546001600160a01b031633146111ae5760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526014602052604090205490565b600f546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610c0690612b17565b6101f583106112855760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610c06565b8281146112e55760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610c06565b6000805b848110156113295783838281811061130357611303612b9b565b90506020020135826113159190612bca565b91508061132181612bb1565b9150506112e9565b5080611334876111d9565b10156113825760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610c06565b60005b848110156113e9576113d6878787848181106113a3576113a3612b9b565b90506020020160208101906113b89190612802565b8686858181106113ca576113ca612b9b565b90506020020135611f8a565b50806113e181612bb1565b915050611385565b50505050505050565b600f546001600160a01b0316331461141c5760405162461bcd60e51b8152600401610c0690612b17565b600f546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600f80546001600160a01b0319169055565b6000610e6a600f546001600160a01b031690565b600f546001600160a01b031633146114a45760405162461bcd60e51b8152600401610c0690612b17565b6009849055600a839055600b8290556114c7826114c1868661205d565b9061205d565b600c55600e55505050565b6000610df0338484611a79565b600f546001600160a01b031633146115095760405162461bcd60e51b8152600401610c0690612b17565b600d55565b6000610bd661151b610e26565b611559611552600261154c7f0000000000000000000000003cbe342b83252a601558d7a3867f57f68f5b05f16111d9565b90612069565b8590612069565b90612075565b600f546001600160a01b031633146115895760405162461bcd60e51b8152600401610c0690612b17565b600180546001600160a01b039081166000908152601660209081526040808320805460ff19908116909155958416808452818420805488168717905583548516845281842080548816905596841680845281842080548816871790556018909252822080549095168417909455601a8054969092166001600160a01b031996871617909155805485169092179091558054909216179055565b600f546001600160a01b0316331461164c5760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b600f546001600160a01b031633146116a15760405162461bcd60e51b8152600401610c0690612b17565b6020548111156116b45760205460215550565b60218190555b50565b600f546001600160a01b031633146116e75760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03811661174c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c06565b600f546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6003546001600160a01b0316331461180c5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920616c6c6f776564206d696e7465722063616e2063616c6c207468696044820152607360f81b6064820152608401610c06565b6001600160a01b0384166118545760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c06565b600082116118a45760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610c06565b6001600160a01b038416158015906118c557506001600160a01b0384163014155b6119035760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610c06565b818160006119118284612bca565b600454909150611921908261205d565b6004556001600160a01b038716600090815260146020526040902054611947908461205d565b6001600160a01b038089166000908152601460205260408082209390935590881681522054611976908361205d565b6001600160a01b038088166000908152601460205260408082209390935591519089169190600080516020612cad833981519152906119b89087815260200190565b60405180910390a36040518281526001600160a01b03871690600090600080516020612cad8339815191529060200160405180910390a350505050505050565b600f546001600160a01b03163314611a225760405162461bcd60e51b8152600401610c0690612b17565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b60008184841115611a715760405162461bcd60e51b8152600401610c069190612721565b505050900390565b60225460009060ff1615611a9957611a92848484611f8a565b9050610df0565b600f546001600160a01b03858116911614801590611ac55750600f546001600160a01b03848116911614155b15611b1357601d5460ff16611b135760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c06565b7f0000000000000000000000003cbe342b83252a601558d7a3867f57f68f5b05f16001600160a01b03908116908416146000811582611b8457507f0000000000000000000000003cbe342b83252a601558d7a3867f57f68f5b05f16001600160a01b0316866001600160a01b031614155b90506001600160a01b0385163014801590611bad57506012546001600160a01b03868116911614155b8015611beb57507f0000000000000000000000003cbe342b83252a601558d7a3867f57f68f5b05f16001600160a01b0316856001600160a01b031614155b8015611c0557506000546001600160a01b03868116911614155b8015611c1f57506001546001600160a01b03868116911614155b8015611c395750601a546001600160a01b03868116911614155b15611cef576000611c49866111d9565b6001600160a01b03871660009081526018602052604090205490915060ff16611ced57600654611c798683612bca565b1115611ced5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610c06565b505b7f0000000000000000000000003cbe342b83252a601558d7a3867f57f68f5b05f16001600160a01b0316866001600160a01b0316148015611d375750601d54610100900460ff165b8015611d5c57506001600160a01b03851660009081526019602052604090205460ff16155b15611e06576001600160a01b0385166000908152601e60205260409020544211611dd65760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610c06565b601d54611dec9062010000900460ff1642612bca565b6001600160a01b0386166000908152601e60205260409020555b6001600160a01b03851660009081526017602052604090205460ff16611e3057611e308685612081565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b038a1660009081529190529190912054611e81918690611a4d565b6001600160a01b038716600090815260146020526040902055838115611ebb57600d5415611eb657611eb387866120ee565b90505b611f04565b6001600160a01b03871660009081526016602052604090205460ff1615611ee25784611eed565b611eed878685612190565b9050611ef761226a565b15611f0457611f046122d8565b6001600160a01b038616600090815260146020526040902054611f27908261205d565b6001600160a01b038088166000818152601460205260409081902093909355915190891690600080516020612cad83398151915290611f699085815260200190565b60405180910390a35060019695505050505050565b6000610df08284612bdd565b604080518082018252601480825273496e73756666696369656e742042616c616e636560601b6020808401919091526001600160a01b038716600090815291905291822054611fda918490611a4d565b6001600160a01b038086166000908152601460205260408082209390935590851681522054612009908361205d565b6001600160a01b038085166000818152601460205260409081902093909355915190861690600080516020612cad8339815191529061204b9086815260200190565b60405180910390a35060019392505050565b6000610df08284612bca565b6000610df08284612b62565b6000610df08284612b79565b600554811115806120aa57506001600160a01b03821660009081526017602052604090205460ff165b6120ea5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c06565b5050565b600080600d5490506000612119600e54606461210a9190612b62565b611559606461154c8887612069565b30600090815260146020526040902054909150612136908261205d565b30600081815260146020526040908190209290925590516001600160a01b03871690600080516020612cad833981519152906121759085815260200190565b60405180910390a36121878482611f7e565b95945050505050565b6001600160a01b038316600090815260026020526040812054819060ff16156121bb575060286121cf565b826121c8576008546121cc565b600c545b90505b60006121f2600e5460646121e39190612b62565b611559606461154c8987612069565b3060009081526014602052604090205490915061220f908261205d565b30600081815260146020526040908190209290925590516001600160a01b03881690600080516020612cad8339815191529061224e9085815260200190565b60405180910390a36122608582611f7e565b9695505050505050565b6000336001600160a01b037f0000000000000000000000003cbe342b83252a601558d7a3867f57f68f5b05f116148015906122a8575060225460ff16155b80156122b65750601f5460ff165b8015610e6a575050602080543060009081526014909252604090912054101590565b6022805460ff19166001179055601b54601c546000916122f791610c22565b61230357600954612306565b60005b9050600061232a6002611559600c546115598660215461206990919063ffffffff16565b9050600061234382602154611f7e90919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061237d5761237d612b9b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241f9190612bf0565b8160018151811061243257612432612b9b565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b815247917f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612497908690600090879030904290600401612c0d565b600060405180830381600087803b1580156124b157600080fd5b505af11580156124c5573d6000803e3d6000fd5b5050505060006124de8247611f7e90919063ffffffff16565b905060006124f96124f0886002612075565b600c5490611f7e565b9050600061251b6002611559846115596009548861206990919063ffffffff16565b9050600061253883611559600a548761206990919063ffffffff16565b9050600061255584611559600b548861206990919063ffffffff16565b6000805460405192935090916001600160a01b039091169061753090859084818181858888f193505050503d80600081146125ac576040519150601f19603f3d011682016040523d82523d6000602084013e6125b1565b606091505b50506001546040519192506001600160a01b0316906175309084906000818181858888f193505050503d8060008114612606576040519150601f19603f3d011682016040523d82523d6000602084013e61260b565b606091505b5060009250508a15905061270a57601a5460405163f305d71960e01b8152306004820152602481018c905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990869060c40160606040518083038185885af11580156126a8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126cd9190612c7e565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff19169055505050505050505050565b600060208083528351808285015260005b8181101561274e57858101830151858201604001528201612732565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146116ba57600080fd5b6000806040838503121561279757600080fd5b82356127a28161276f565b946020939093013593505050565b803580151581146127c057600080fd5b919050565b6000602082840312156127d757600080fd5b610df0826127b0565b600080604083850312156127f357600080fd5b50508035926020909101359150565b60006020828403121561281457600080fd5b8135610df08161276f565b60006020828403121561283157600080fd5b5035919050565b60008060006060848603121561284d57600080fd5b83356128588161276f565b925060208401356128688161276f565b929592945050506040919091013590565b60008083601f84011261288b57600080fd5b50813567ffffffffffffffff8111156128a357600080fd5b6020830191508360208260051b85010111156128be57600080fd5b9250929050565b600080602083850312156128d857600080fd5b823567ffffffffffffffff8111156128ef57600080fd5b6128fb85828601612879565b90969095509350505050565b6000806000806060858703121561291d57600080fd5b84356129288161276f565b9350602085013567ffffffffffffffff81111561294457600080fd5b61295087828801612879565b9598909750949560400135949350505050565b6000806040838503121561297657600080fd5b82356129818161276f565b915061298f602084016127b0565b90509250929050565b6000806000806000606086880312156129b057600080fd5b85356129bb8161276f565b9450602086013567ffffffffffffffff808211156129d857600080fd5b6129e489838a01612879565b909650945060408801359150808211156129fd57600080fd5b50612a0a88828901612879565b969995985093965092949392505050565b60008060008060808587031215612a3157600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612a6257600080fd5b8335612a6d8161276f565b92506020840135612a7d8161276f565b91506040840135612a8d8161276f565b809150509250925092565b60008060408385031215612aab57600080fd5b8235612ab68161276f565b91506020830135612ac68161276f565b809150509250929050565b60008060008060808587031215612ae757600080fd5b8435612af28161276f565b93506020850135612b028161276f565b93969395505050506040820135916060013590565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610bd657610bd6612b4c565b600082612b9657634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201612bc357612bc3612b4c565b5060010190565b80820180821115610bd657610bd6612b4c565b81810381811115610bd657610bd6612b4c565b600060208284031215612c0257600080fd5b8151610df08161276f565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612c5d5784516001600160a01b031683529383019391830191600101612c38565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612c9357600080fd5b835192506020840151915060408401519050925092509256feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204e259f5899ede114da82c0f6e9b4a4ab701c3ddc80be40deab6719e2848a918564736f6c63430008110033

Deployed Bytecode Sourcemap

13358:16095:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1200:37;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;1200:37:0;;;;;;;;14329:56;;;;;;;;;;;;;;;;15952:80;;;;;;;;;;-1:-1:-1;16024:5:0;;;;;;;;;;;;-1:-1:-1;;;16024:5:0;;;;15952:80;;;;;;;:::i;16531:216::-;;;;;;;;;;-1:-1:-1;16531:216:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;16531:216:0;1205:187:1;23627:94:0;;;;;;;;;;-1:-1:-1;23627:94:0;;;;;:::i;:::-;;:::i;:::-;;28106:150;;;;;;;;;;-1:-1:-1;28106:150:0;;;;;:::i;:::-;;:::i;1418:39::-;;;;;;;;;;;;;;;;15682:88;;;;;;;;;;-1:-1:-1;15755:12:0;;15682:88;;17645:132;;;;;;;;;;-1:-1:-1;17645:132:0;;;;;:::i;:::-;;:::i;23158:214::-;;;;;;;;;;-1:-1:-1;23158:214:0;;;;;:::i;:::-;;:::i;1374:37::-;;;;;;;;;;;;;;;;27580:184;;;;;;;;;;-1:-1:-1;27580:184:0;;;;;:::i;:::-;;:::i;17049:370::-;;;;;;;;;;-1:-1:-1;17049:370:0;;;;;:::i;:::-;;:::i;27231:112::-;;;;;;;;;;-1:-1:-1;27231:112:0;;;;;:::i;:::-;;:::i;27772:142::-;;;;;;;;;;;;;:::i;14392:53::-;;;;;;;;;;;;;;;;15776:80;;;;;;;;;;-1:-1:-1;775:1:0;15776:80;;;3070:4:1;3058:17;;;3040:36;;3028:2;3013:18;15776:80:0;2898:184:1;1107:42:0;;;;;;;;;;;;;;;;17427:210;;;;;;;;;;-1:-1:-1;17427:210:0;;;;;:::i;:::-;;:::i;28935:449::-;;;;;;;;;;-1:-1:-1;28935:449:0;;;;;:::i;:::-;;:::i;23380:216::-;;;;;;;;;;-1:-1:-1;23380:216:0;;;;;:::i;:::-;;:::i;584:74::-;;;;;;;;;;-1:-1:-1;584:74:0;;;;-1:-1:-1;;;;;584:74:0;;;;;;-1:-1:-1;;;;;4710:32:1;;;4692:51;;4680:2;4665:18;584:74:0;4546:203:1;1156:37:0;;;;;;;;;;;;;;;;1063;;;;;;;;;;;;;;;;14059:38;;;;;;;;;;;;;;;24254:94;;;;;;;;;;-1:-1:-1;24254:94:0;;;;;:::i;:::-;;:::i;26541:131::-;;;;;;;;;;-1:-1:-1;26541:131:0;;;;;:::i;:::-;;:::i;16755:122::-;;;;;;;;;;-1:-1:-1;16755:122:0;;;;;:::i;:::-;;:::i;18789:97::-;;;;;;;;;;-1:-1:-1;18789:97:0;;;;;:::i;:::-;;:::i;18544:122::-;;;;;;;;;;-1:-1:-1;18544:122:0;;;;;:::i;:::-;;:::i;14146:37::-;;;;;;;;;;-1:-1:-1;14146:37:0;;;;;;;;;;;26146:121;;;;;;;;;;-1:-1:-1;26146:121:0;;;;;:::i;:::-;;:::i;14002:50::-;;;;;;;;;;;;;;;14292:30;;;;;;;;;;-1:-1:-1;14292:30:0;;;;;;;;16124:105;;;;;;;;;;-1:-1:-1;16124:105:0;;;;;:::i;:::-;;:::i;28279:648::-;;;;;;;;;;-1:-1:-1;28279:648:0;;;;;:::i;:::-;;:::i;4824:148::-;;;;;;;;;;;;;:::i;14190:39::-;;;;;;;;;;-1:-1:-1;14190:39:0;;;;;;;;;;;502:75;;;;;;;;;;-1:-1:-1;502:75:0;;;;-1:-1:-1;;;;;502:75:0;;;998:58;;;;;;;;;;;;;;;;936:55;;;;;;;;;;;;;;;;835:37;;;;;;;;;;-1:-1:-1;835:37:0;;;;-1:-1:-1;;;;;835:37:0;;;16038:80;;;;;;;;;;;;;:::i;4610:79::-;;;;;;;;;;-1:-1:-1;4675:6:0;;-1:-1:-1;;;;;4675:6:0;4610:79;;23827:419;;;;;;;;;;-1:-1:-1;23827:419:0;;;;;:::i;:::-;;:::i;15862:84::-;;;;;;;;;;-1:-1:-1;15936:7:0;;;;;;;;;;;;-1:-1:-1;;;15936:7:0;;;;15862:84;;16885:156;;;;;;;;;;-1:-1:-1;16885:156:0;;;;;:::i;:::-;;:::i;13873:36::-;;;;;;;;;;-1:-1:-1;13873:36:0;;;;-1:-1:-1;;;;;13873:36:0;;;23729:90;;;;;;;;;;-1:-1:-1;23729:90:0;;;;;:::i;:::-;;:::i;27922:176::-;;;;;;;;;;-1:-1:-1;27922:176:0;;;;;:::i;:::-;;:::i;26680:543::-;;;;;;;;;;-1:-1:-1;26680:543:0;;;;;:::i;:::-;;:::i;26275:121::-;;;;;;;;;;-1:-1:-1;26275:121:0;;;;;:::i;:::-;;:::i;16235:133::-;;;;;;;;;;-1:-1:-1;16235:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;16337:19:0;;;16319:7;16337:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16235:133;1288:79;;;;;;;;;;;;;;;;27351:221;;;;;;;;;;-1:-1:-1;27351:221:0;;;;;:::i;:::-;;:::i;4980:244::-;;;;;;;;;;-1:-1:-1;4980:244:0;;;;;:::i;:::-;;:::i;1244:37::-;;;;;;;;;;;;;;;;17785:751;;;;;;;;;;-1:-1:-1;17785:751:0;;;;;:::i;:::-;;:::i;26404:129::-;;;;;;;;;;-1:-1:-1;26404:129:0;;;;;:::i;:::-;;:::i;785:43::-;;;;;;;;;;-1:-1:-1;785:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;14106:31;;;;;;;;;;-1:-1:-1;14106:31:0;;;;;;;;16531:216;16635:10;16606:4;16623:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;16623:32:0;;;;;;;;;;:41;;;16680:37;16606:4;;16623:32;;16680:37;;;;16658:6;160:25:1;;148:2;133:18;;14:177;16680:37:0;;;;;;;;-1:-1:-1;16735:4:0;16531:216;;;;;:::o;23627:94::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;;;;;;;;;23692:11:::1;:21:::0;;-1:-1:-1;;23692:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23627:94::o;28106:150::-;28186:4;28242:6;28210:29;28230:8;28210:19;:29::i;:::-;:38;;28106:150;-1:-1:-1;;;28106:150:0:o;17645:132::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;17728:22:::1;:41:::0;;-1:-1:-1;;;;;;17728:41:0::1;-1:-1:-1::0;;;;;17728:41:0;;;::::1;::::0;;;::::1;::::0;;17645:132::o;23158:214::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;23243:17:::1;23303:15:::0;23263:21:::1;::::0;-1:-1:-1;;;;;23303:15:0::1;23295:69;23360:3;23329:28;23341:16:::0;23263:21;23329:28:::1;:::i;:::-;:34;;;;:::i;:::-;23295:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23232:140;23158:214:::0;:::o;27580:184::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;27679:15:::1;:25:::0;;;;27715:26:::1;:41:::0;27580:184::o;17049:370::-;-1:-1:-1;;;;;17169:19:0;;17149:4;17169:19;;;:11;:19;;;;;;;;17189:10;17169:31;;;;;;;;-1:-1:-1;;17169:52:0;17166:186;;17271:69;;;;;;;;;;;-1:-1:-1;;;17271:69:0;;;;;;;;-1:-1:-1;;;;;17271:19:0;;-1:-1:-1;17271:19:0;;;:11;:19;;;;;17291:10;17271:31;;;;;;;;;;:69;;17307:6;;17271:35;:69::i;:::-;-1:-1:-1;;;;;17237:19:0;;;;;;:11;:19;;;;;;;;17257:10;17237:31;;;;;;;:103;17166:186;17371:40;17385:6;17393:9;17404:6;17371:13;:40::i;:::-;17364:47;;17049:370;;;;;;:::o;27231:112::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;27312:13:::1;:23:::0;27231:112::o;27772:142::-;27900:4;;27825:7;;27852:54;;27890:15;;-1:-1:-1;;;;;27900:4:0;27890:9;:15::i;:::-;27879:4;;27852:33;;27869:15;;-1:-1:-1;;;;;27879:4:0;27869:9;:15::i;:::-;27852:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;27845:61;;27772:142;:::o;17427:210::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;17519:9:::1;17514:116;17534:25:::0;;::::1;17514:116;;;17614:4;17581:11;:30;17593:14;;17608:1;17593:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17581:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;17581:30:0;:37;;-1:-1:-1;;17581:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17561:3;::::1;::::0;::::1;:::i;:::-;;;;17514:116;;28935:449:::0;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;29076:3:::1;29057:22:::0;::::1;29049:79;;;::::0;-1:-1:-1;;;29049:79:0;;9431:2:1;29049:79:0::1;::::0;::::1;9413:21:1::0;9470:2;9450:18;;;9443:30;9509:34;9489:18;;;9482:62;-1:-1:-1;;;9560:18:1;;;9553:43;9613:19;;29049:79:0::1;9229:409:1::0;29049:79:0::1;29141:12;29156:25;29165:9:::0;29156:6;:25:::1;:::i;:::-;29141:40;;29221:4;29202:15;29212:4;29202:9;:15::i;:::-;:23;;29194:63;;;::::0;-1:-1:-1;;;29194:63:0;;9845:2:1;29194:63:0::1;::::0;::::1;9827:21:1::0;9884:2;9864:18;;;9857:30;9923:29;9903:18;;;9896:57;9970:18;;29194:63:0::1;9643:351:1::0;29194:63:0::1;29274:6;29270:107;29284:20:::0;;::::1;29270:107;;;29325:40;29340:4;29345:9;;29355:1;29345:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29358:6;29325:14;:40::i;:::-;-1:-1:-1::0;29306:3:0;::::1;::::0;::::1;:::i;:::-;;;;29270:107;;;;29036:348;28935:449:::0;;;;:::o;23380:216::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;23492:21:::1;23532:10;23524:64;23584:3;23553:28;23565:16:::0;23492:21;23553:28:::1;:::i;24254:94::-:0;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;24320:11:::1;:20:::0;24254:94::o;26541:131::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26631:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26631:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26541:131::o;16755:122::-;16810:4;16834:35;16842:7;-1:-1:-1;;16834:7:0;:35::i;18789:97::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;18857:12:::1;:21:::0;18789:97::o;18544:122::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;18624:15:::1;:34:::0;18544:122::o;26146:121::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26231:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26231:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26146:121::o;16124:105::-;-1:-1:-1;;;;;16208:18:0;16190:7;16208:18;;;:9;:18;;;;;;;16124:105::o;28279:648::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;28432:3:::1;28413:22:::0;::::1;28405:79;;;::::0;-1:-1:-1;;;28405:79:0;;10201:2:1;28405:79:0::1;::::0;::::1;10183:21:1::0;10240:2;10220:18;;;10213:30;10279:34;10259:18;;;10252:62;-1:-1:-1;;;10330:18:1;;;10323:43;10383:19;;28405:79:0::1;9999:409:1::0;28405:79:0::1;28503:33:::0;;::::1;28495:85;;;::::0;-1:-1:-1;;;28495:85:0;;10615:2:1;28495:85:0::1;::::0;::::1;10597:21:1::0;10654:2;10634:18;;;10627:30;10693:34;10673:18;;;10666:62;-1:-1:-1;;;10744:18:1;;;10737:38;10792:19;;28495:85:0::1;10413:404:1::0;28495:85:0::1;28593:12;28626:6:::0;28622:90:::1;28636:20:::0;;::::1;28622:90;;;28691:6;;28698:1;28691:9;;;;;;;:::i;:::-;;;;;;;28684:4;:16;;;;:::i;:::-;28677:23:::0;-1:-1:-1;28658:3:0;::::1;::::0;::::1;:::i;:::-;;;;28622:90;;;;28751:4;28732:15;28742:4;28732:9;:15::i;:::-;:23;;28724:63;;;::::0;-1:-1:-1;;;28724:63:0;;9845:2:1;28724:63:0::1;::::0;::::1;9827:21:1::0;9884:2;9864:18;;;9857:30;9923:29;9903:18;;;9896:57;9970:18;;28724:63:0::1;9643:351:1::0;28724:63:0::1;28804:6;28800:110;28814:20:::0;;::::1;28800:110;;;28855:43;28870:4;28875:9;;28885:1;28875:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28888:6;;28895:1;28888:9;;;;;;;:::i;:::-;;;;;;;28855:14;:43::i;:::-;-1:-1:-1::0;28836:3:0;::::1;::::0;::::1;:::i;:::-;;;;28800:110;;;;28392:535;28279:648:::0;;;;;:::o;4824:148::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;4915:6:::1;::::0;4894:40:::1;::::0;4931:1:::1;::::0;-1:-1:-1;;;;;4915:6:0::1;::::0;4894:40:::1;::::0;4931:1;;4894:40:::1;4945:6;:19:::0;;-1:-1:-1;;;;;;4945:19:0::1;::::0;;4824:148::o;16038:80::-;16090:7;16108;4675:6;;-1:-1:-1;;;;;4675:6:0;;4610:79;23827:419;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;23985:9:::1;:25:::0;;;24021:13:::1;:36:::0;;;24068:15:::1;:37:::0;;;24131:64:::1;24086:19:::0;24131:39:::1;23997:13:::0;24037:20;24131:17:::1;:39::i;:::-;:43:::0;::::1;:64::i;:::-;24116:12;:79:::0;24206:14:::1;:32:::0;-1:-1:-1;;;23827:419:0:o;16885:156::-;16965:4;16989:44;17003:10;17015:9;17026:6;16989:13;:44::i;23729:90::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;23797:8:::1;:14:::0;23729:90::o;27922:176::-;27990:7;28017:73;28067:22;:20;:22::i;:::-;28017:45;28030:31;28059:1;28030:24;28040:13;28030:9;:24::i;:::-;:28;;:31::i;:::-;28017:8;;:12;:45::i;:::-;:49;;:73::i;26680:543::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;26841:14:::1;::::0;;-1:-1:-1;;;;;26841:14:0;;::::1;26859:5;26829:27:::0;;;:11:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;26829:35:0;;::::1;::::0;;;26875:31;;::::1;::::0;;;;;;:38;;;::::1;::::0;::::1;::::0;;26936:15;;;::::1;26924:28:::0;;;;;:36;;;::::1;::::0;;26971:32;;::::1;::::0;;;;;;:39;;;::::1;::::0;::::1;::::0;;27023:11:::1;:32:::0;;;;;:39;;;;::::1;::::0;::::1;::::0;;;27075:21:::1;:46:::0;;;;;::::1;-1:-1:-1::0;;;;;;27075:46:0;;::::1;;::::0;;;27132:37;;;::::1;::::0;;::::1;::::0;;;27180:35;;;;::::1;;::::0;;26680:543::o;26275:121::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26360:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26360:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26275:121::o;27351:221::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;27436:13:::1;;27426:7;:23;27423:134;;;27479:13;::::0;27466:10:::1;:26:::0;27351:221;:::o;27423:134::-:1;27525:10;:20:::0;;;27423:134:::1;27351:221:::0;:::o;4980:244::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5069:22:0;::::1;5061:73;;;::::0;-1:-1:-1;;;5061:73:0;;11154:2:1;5061:73:0::1;::::0;::::1;11136:21:1::0;11193:2;11173:18;;;11166:30;11232:34;11212:18;;;11205:62;-1:-1:-1;;;11283:18:1;;;11276:36;11329:19;;5061:73:0::1;10952:402:1::0;5061:73:0::1;5171:6;::::0;5150:38:::1;::::0;-1:-1:-1;;;;;5150:38:0;;::::1;::::0;5171:6:::1;::::0;5150:38:::1;::::0;5171:6:::1;::::0;5150:38:::1;5199:6;:17:::0;;-1:-1:-1;;;;;;5199:17:0::1;-1:-1:-1::0;;;;;5199:17:0;;;::::1;::::0;;;::::1;::::0;;4980:244::o;17785:751::-;16439:22;;-1:-1:-1;;;;;16439:22:0;16425:10;:36;16417:82;;;;-1:-1:-1;;;16417:82:0;;11561:2:1;16417:82:0;;;11543:21:1;11600:2;11580:18;;;11573:30;11639:34;11619:18;;;11612:62;-1:-1:-1;;;11690:18:1;;;11683:31;11731:19;;16417:82:0;11359:397:1;16417:82:0;-1:-1:-1;;;;;17916:16:0;::::1;17908:44;;;::::0;-1:-1:-1;;;17908:44:0;;11963:2:1;17908:44:0::1;::::0;::::1;11945:21:1::0;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:45;12076:18;;17908:44:0::1;11761:339:1::0;17908:44:0::1;17980:1;17971:6;:10;17963:52;;;::::0;-1:-1:-1;;;17963:52:0;;12307:2:1;17963:52:0::1;::::0;::::1;12289:21:1::0;12346:2;12326:18;;;12319:30;12385:31;12365:18;;;12358:59;12434:18;;17963:52:0::1;12105:353:1::0;17963:52:0::1;-1:-1:-1::0;;;;;18034:16:0;::::1;::::0;;::::1;::::0;:39:::1;;-1:-1:-1::0;;;;;;18054:19:0;::::1;18068:4;18054:19;;18034:39;18026:67;;;::::0;-1:-1:-1;;;18026:67:0;;11963:2:1;18026:67:0::1;::::0;::::1;11945:21:1::0;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:45;12076:18;;18026:67:0::1;11761:339:1::0;18026:67:0::1;18129:6:::0;18169:10;18106:20:::1;18212:27;18169:10:::0;18129:6;18212:27:::1;:::i;:::-;18267:12;::::0;18190:49;;-1:-1:-1;18267:29:0::1;::::0;18190:49;18267:16:::1;:29::i;:::-;18252:12;:44:::0;-1:-1:-1;;;;;18323:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;:31:::1;::::0;18341:12;18323:17:::1;:31::i;:::-;-1:-1:-1::0;;;;;18307:13:0;;::::1;;::::0;;;:9:::1;:13;::::0;;;;;:47;;;;18383:15;;::::1;::::0;;;;:33:::1;::::0;18403:12;18383:19:::1;:33::i;:::-;-1:-1:-1::0;;;;;18365:15:0;;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:51;;;;18434:38;;;;::::1;::::0;18365:15;-1:-1:-1;;;;;;;;;;;18434:38:0;::::1;::::0;18459:12;160:25:1;;148:2;133:18;;14:177;18434:38:0::1;;;;;;;;18488:40;::::0;160:25:1;;;-1:-1:-1;;;;;18488:40:0;::::1;::::0;18505:1:::1;::::0;-1:-1:-1;;;;;;;;;;;18488:40:0;148:2:1;133:18;18488:40:0::1;;;;;;;17897:639;;;17785:751:::0;;;;:::o;26404:129::-;4737:6;;-1:-1:-1;;;;;4737:6:0;3939:10;4737:22;4729:67;;;;-1:-1:-1;;;4729:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26493:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;26493:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26404:129::o;2046:240::-;2166:7;2227:12;2219:6;;;;2211:29;;;;-1:-1:-1;;;2211:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2262:5:0;;;2046:240::o;18894:2385::-;19006:6;;18986:4;;19006:6;;19003:63;;;19022:41;19037:6;19045:9;19056:6;19022:14;:41::i;:::-;19015:48;;;;19003:63;4675:6;;-1:-1:-1;;;;;19081:17:0;;;4675:6;;19081:17;;;;:41;;-1:-1:-1;4675:6:0;;-1:-1:-1;;;;;19102:20:0;;;4675:6;;19102:20;;19081:41;19078:115;;;19146:11;;;;19138:43;;;;-1:-1:-1;;;19138:43:0;;12665:2:1;19138:43:0;;;12647:21:1;12704:2;12684:18;;;12677:30;-1:-1:-1;;;12723:18:1;;;12716:50;12783:18;;19138:43:0;12463:344:1;19138:43:0;19233:13;-1:-1:-1;;;;;19220:26:0;;;;;;;19205:11;19277:26;;19220;19277:53;;;19317:13;-1:-1:-1;;;;;19307:23:0;:6;-1:-1:-1;;;;;19307:23:0;;;19277:53;19258:73;-1:-1:-1;;;;;;19348:26:0;;19369:4;19348:26;;;;:70;;-1:-1:-1;19413:4:0;;-1:-1:-1;;;;;19392:26:0;;;19413:4;;19392:26;;19348:70;:114;;;;;19449:13;-1:-1:-1;;;;;19436:26:0;:9;-1:-1:-1;;;;;19436:26:0;;;19348:114;:160;;;;-1:-1:-1;19493:15:0;;-1:-1:-1;;;;;19480:28:0;;;19493:15;;19480:28;;19348:160;:205;;;;-1:-1:-1;19539:14:0;;-1:-1:-1;;;;;19526:27:0;;;19539:14;;19526:27;;19348:205;:257;;;;-1:-1:-1;19584:21:0;;-1:-1:-1;;;;;19571:34:0;;;19584:21;;19571:34;;19348:257;19344:531;;;19631:18;19652:20;19662:9;19652;:20::i;:::-;-1:-1:-1;;;;;19691:22:0;;;;;;:11;:22;;;;;;19631:41;;-1:-1:-1;19691:22:0;;19687:177;;19767:15;;19743:19;19756:6;19743:10;:19;:::i;:::-;19742:40;;19734:114;;;;-1:-1:-1;;;19734:114:0;;13014:2:1;19734:114:0;;;12996:21:1;13053:2;13033:18;;;13026:30;13092:34;13072:18;;;13065:62;13163:32;13143:18;;;13136:60;13213:19;;19734:114:0;12812:426:1;19734:114:0;19616:259;19344:531;19901:13;-1:-1:-1;;;;;19891:23:0;:6;-1:-1:-1;;;;;19891:23:0;;:58;;;;-1:-1:-1;19931:18:0;;;;;;;19891:58;:103;;;;-1:-1:-1;;;;;;19967:27:0;;;;;;:16;:27;;;;;;;;19966:28;19891:103;19887:317;;;-1:-1:-1;;;;;20028:24:0;;;;;;:13;:24;;;;;;20055:15;-1:-1:-1;20020:91:0;;;;-1:-1:-1;;;20020:91:0;;13445:2:1;20020:91:0;;;13427:21:1;13484:2;13464:18;;;13457:30;13523:34;13503:18;;;13496:62;-1:-1:-1;;;13574:18:1;;;13567:35;13619:19;;20020:91:0;13243:401:1;20020:91:0;20171:21;;20153:39;;20171:21;;;;;20153:15;:39;:::i;:::-;-1:-1:-1;;;;;20126:24:0;;;;;;:13;:24;;;;;:66;19887:317;-1:-1:-1;;;;;20426:26:0;;;;;;:15;:26;;;;;;;;20422:87;;20469:28;20482:6;20490;20469:12;:28::i;:::-;20568:53;;;;;;;;;;;;-1:-1:-1;;;20568:53:0;;;;;;;;-1:-1:-1;;;;;20568:17:0;;-1:-1:-1;20568:17:0;;;;;;;;;;;:53;;20590:6;;20568:21;:53::i;:::-;-1:-1:-1;;;;;20548:17:0;;;;;;:9;:17;;;;;:73;20659:6;20795:318;;;;20828:8;;:12;20825:100;;20878:31;20894:6;20902;20878:15;:31::i;:::-;20861:48;;20825:100;20795:318;;;-1:-1:-1;;;;;21886:19:0;;21861:4;21886:19;;;:11;:19;;;;;;;;21885:20;20974:64;;21032:6;20974:64;;;20998:31;21006:6;21014;21022;20998:7;:31::i;:::-;20957:81;;21070:16;:14;:16::i;:::-;21067:35;;;21089:10;:8;:10::i;:::-;-1:-1:-1;;;;;21148:20:0;;;;;;:9;:20;;;;;;:40;;21173:14;21148:24;:40::i;:::-;-1:-1:-1;;;;;21125:20:0;;;;;;;:9;:20;;;;;;;:63;;;;21206:43;;;;;;-1:-1:-1;;;;;;;;;;;21206:43:0;;;21234:14;160:25:1;;148:2;133:18;;14:177;21206:43:0;;;;;;;;-1:-1:-1;21267:4:0;;18894:2385;-1:-1:-1;;;;;;18894:2385:0:o;1622:98::-;1680:7;1707:5;1711:1;1707;:5;:::i;21287:330::-;21417:53;;;;;;;;;;;;-1:-1:-1;;;21417:53:0;;;;;;;;-1:-1:-1;;;;;21417:17:0;;21380:4;21417:17;;;;;;;;;;:53;;21439:6;;21417:21;:53::i;:::-;-1:-1:-1;;;;;21397:17:0;;;;;;;:9;:17;;;;;;:73;;;;21504:20;;;;;;;:32;;21529:6;21504:24;:32::i;:::-;-1:-1:-1;;;;;21481:20:0;;;;;;;:9;:20;;;;;;;:55;;;;21552:35;;;;;;-1:-1:-1;;;;;;;;;;;21552:35:0;;;21580:6;160:25:1;;148:2;133:18;;14:177;21552:35:0;;;;;;;;-1:-1:-1;21605:4:0;21287:330;;;;;:::o;1516:98::-;1574:7;1601:5;1605:1;1601;:5;:::i;1728:98::-;1786:7;1813:5;1817:1;1813;:5;:::i;1834:98::-;1892:7;1919:5;1923:1;1919;:5;:::i;21625:166::-;21722:12;;21712:6;:22;;:49;;;-1:-1:-1;;;;;;21738:23:0;;;;;;:15;:23;;;;;;;;21712:49;21704:79;;;;-1:-1:-1;;;21704:79:0;;13984:2:1;21704:79:0;;;13966:21:1;14023:2;14003:18;;;13996:30;-1:-1:-1;;;14042:18:1;;;14035:47;14099:18;;21704:79:0;13782:341:1;21704:79:0;21625:166;;:::o;21921:406::-;21996:7;22018:17;22038:8;;22018:28;;22057:17;22077:56;22112:14;;22129:3;22112:20;;;;:::i;:::-;22077:30;22103:3;22077:21;:6;22088:9;22077:10;:21::i;:56::-;22199:4;22181:24;;;;:9;:24;;;;;;22057:76;;-1:-1:-1;22181:39:0;;22057:76;22181:28;:39::i;:::-;22172:4;22154:24;;;;:9;:24;;;;;;;:66;;;;22236:42;;-1:-1:-1;;;;;22236:42:0;;;-1:-1:-1;;;;;;;;;;;22236:42:0;;;22268:9;160:25:1;;148:2;133:18;;14:177;22236:42:0;;;;;;;;22298:21;:6;22309:9;22298:10;:21::i;:::-;22291:28;21921:406;-1:-1:-1;;;;;21921:406:0:o;22335:601::-;-1:-1:-1;;;;;22467:19:0;;22415:7;22467:19;;;:11;:19;;;;;;22415:7;;22467:19;;22463:191;;;-1:-1:-1;22515:2:0;22463:191;;;22607:6;:35;;22631:11;;22607:35;;;22616:12;;22607:35;22595:47;;22463:191;22666:17;22686:56;22721:14;;22738:3;22721:20;;;;:::i;:::-;22686:30;22712:3;22686:21;:6;22697:9;22686:10;:21::i;:56::-;22808:4;22790:24;;;;:9;:24;;;;;;22666:76;;-1:-1:-1;22790:39:0;;22666:76;22790:28;:39::i;:::-;22781:4;22763:24;;;;:9;:24;;;;;;;:66;;;;22845:42;;-1:-1:-1;;;;;22845:42:0;;;-1:-1:-1;;;;;;;;;;;22845:42:0;;;22877:9;160:25:1;;148:2;133:18;;14:177;22845:42:0;;;;;;;;22907:21;:6;22918:9;22907:10;:21::i;:::-;22900:28;22335:601;-1:-1:-1;;;;;;22335:601:0:o;22944:206::-;22993:4;23017:10;-1:-1:-1;;;;;23031:13:0;23017:27;;;;;:47;;-1:-1:-1;23058:6:0;;;;23057:7;23017:47;:71;;;;-1:-1:-1;23077:11:0;;;;23017:71;:125;;;;-1:-1:-1;;23129:13:0;;;23119:4;23101:24;;;;:9;:24;;;;;;;;:41;;;22944:206::o;24356:1782::-;14494:6;:13;;-1:-1:-1;;14494:13:0;14503:4;14494:13;;;24451:15:::1;::::0;24468:26:::1;::::0;14494:6;;24435:60:::1;::::0;:15:::1;:60::i;:::-;:76;;24502:9;;24435:76;;;24498:1;24435:76;24405:106;;24522:23;24548:60;24606:1;24548:53;24588:12;;24548:35;24563:19;24548:10;;:14;;:35;;;;:::i;:60::-;24522:86;;24619:20;24642:31;24657:15;24642:10;;:14;;:31;;;;:::i;:::-;24710:16;::::0;;24724:1:::1;24710:16:::0;;;;;::::1;::::0;;24619:54;;-1:-1:-1;24686:21:0::1;::::0;24710:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24710:16:0::1;24686:40;;24755:4;24737;24742:1;24737:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;24737:23:0::1;;;-1:-1:-1::0;;;;;24737:23:0::1;;;::::0;::::1;24781:14;-1:-1:-1::0;;;;;24781:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24771:4;24776:1;24771:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24771:31:0;;::::1;:7;::::0;;::::1;::::0;;;;;:31;24873:196:::1;::::0;-1:-1:-1;;;24873:196:0;;24839:21:::1;::::0;24873:14:::1;:65;::::0;::::1;::::0;:196:::1;::::0;24953:12;;24815:21:::1;::::0;24996:4;;25023::::1;::::0;25043:15:::1;::::0;24873:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25082:17;25102:40;25128:13;25102:21;:25;;:40;;;;:::i;:::-;25082:60:::0;-1:-1:-1;25155:19:0::1;25177:44;25194:26;:19:::0;25218:1:::1;25194:23;:26::i;:::-;25177:12;::::0;;:16:::1;:44::i;:::-;25155:66;;25234:26;25263:48;25309:1;25263:41;25292:11;25263:24;25277:9;;25263;:13;;:24;;;;:::i;:48::-;25234:77;;25322:26;25351:45;25384:11;25351:28;25365:13;;25351:9;:13;;:28;;;;:::i;:45::-;25322:74;;25407:25;25435:47;25470:11;25435:30;25449:15;;25435:9;:13;;:30;;;;:::i;:47::-;25496:15;25524::::0;;25516:72:::1;::::0;25407:75;;-1:-1:-1;25496:15:0;;-1:-1:-1;;;;;25524:15:0;;::::1;::::0;25578:5:::1;::::0;25553:18;;25496:15;25516:72;25496:15;25516:72;25553:18;25524:15;25578:5;25516:72:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;25623:14:0::1;::::0;25615:70:::1;::::0;25495:93;;-1:-1:-1;;;;;;25623:14:0::1;::::0;25675:5:::1;::::0;25651:17;;25615:70:::1;::::0;;;25651:17;25623:14;25675:5;25615:70:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25743:5:0::1;::::0;-1:-1:-1;;25764:19:0;;;-1:-1:-1;25761:370:0::1;;25981:21;::::0;25799:252:::1;::::0;-1:-1:-1;;;25799:252:0;;25883:4:::1;25799:252;::::0;::::1;16052:34:1::0;16102:18;;;16095:34;;;-1:-1:-1;16145:18:1;;;16138:34;;;16188:18;;;16181:34;-1:-1:-1;;;;;25981:21:0;;::::1;16231:19:1::0;;;16224:44;26021:15:0::1;16284:19:1::0;;;16277:35;25799:14:0::1;:30:::0;;::::1;::::0;::::1;::::0;25837:18;;15986:19:1;;25799:252:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26071:48:0::1;::::0;;16808:25:1;;;16864:2;16849:18;;16842:34;;;26071:48:0::1;::::0;-1:-1:-1;16781:18:1;26071:48:0::1;;;;;;;25761:370;-1:-1:-1::0;;14512:6:0;:14;;-1:-1:-1;;14512:14:0;;;-1:-1:-1;;;;;;;;;24356: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:247::-;2059:6;2112:2;2100:9;2091:7;2087:23;2083:32;2080:52;;;2128:1;2125;2118:12;2080:52;2167:9;2154:23;2186:31;2211:5;2186:31;:::i;2252:180::-;2311:6;2364:2;2352:9;2343:7;2339:23;2335:32;2332:52;;;2380:1;2377;2370:12;2332:52;-1:-1:-1;2403:23:1;;2252:180;-1:-1:-1;2252:180:1:o;2437:456::-;2514:6;2522;2530;2583:2;2571:9;2562:7;2558:23;2554:32;2551:52;;;2599:1;2596;2589:12;2551:52;2638:9;2625:23;2657:31;2682:5;2657:31;:::i;:::-;2707:5;-1:-1:-1;2764:2:1;2749:18;;2736:32;2777:33;2736:32;2777:33;:::i;:::-;2437:456;;2829:7;;-1:-1:-1;;;2883:2:1;2868:18;;;;2855:32;;2437:456::o;3087:367::-;3150:8;3160:6;3214:3;3207:4;3199:6;3195:17;3191:27;3181:55;;3232:1;3229;3222:12;3181:55;-1:-1:-1;3255:20:1;;3298:18;3287:30;;3284:50;;;3330:1;3327;3320:12;3284:50;3367:4;3359:6;3355:17;3343:29;;3427:3;3420:4;3410:6;3407:1;3403:14;3395:6;3391:27;3387:38;3384:47;3381:67;;;3444:1;3441;3434:12;3381:67;3087:367;;;;;:::o;3459:437::-;3545:6;3553;3606:2;3594:9;3585:7;3581:23;3577:32;3574:52;;;3622:1;3619;3612:12;3574:52;3662:9;3649:23;3695:18;3687:6;3684:30;3681:50;;;3727:1;3724;3717:12;3681:50;3766:70;3828:7;3819:6;3808:9;3804:22;3766:70;:::i;:::-;3855:8;;3740:96;;-1:-1:-1;3459:437:1;-1:-1:-1;;;;3459:437:1:o;3901:640::-;4005:6;4013;4021;4029;4082:2;4070:9;4061:7;4057:23;4053:32;4050:52;;;4098:1;4095;4088:12;4050:52;4137:9;4124:23;4156:31;4181:5;4156:31;:::i;:::-;4206:5;-1:-1:-1;4262:2:1;4247:18;;4234:32;4289:18;4278:30;;4275:50;;;4321:1;4318;4311:12;4275:50;4360:70;4422:7;4413:6;4402:9;4398:22;4360:70;:::i;:::-;3901:640;;4449:8;;-1:-1:-1;4334:96:1;;4531:2;4516:18;4503:32;;3901:640;-1:-1:-1;;;;3901:640:1:o;4754:315::-;4819:6;4827;4880:2;4868:9;4859:7;4855:23;4851:32;4848:52;;;4896:1;4893;4886:12;4848:52;4935:9;4922:23;4954:31;4979:5;4954:31;:::i;:::-;5004:5;-1:-1:-1;5028:35:1;5059:2;5044:18;;5028:35;:::i;:::-;5018:45;;4754:315;;;;;:::o;5309:908::-;5440:6;5448;5456;5464;5472;5525:2;5513:9;5504:7;5500:23;5496:32;5493:52;;;5541:1;5538;5531:12;5493:52;5580:9;5567:23;5599:31;5624:5;5599:31;:::i;:::-;5649:5;-1:-1:-1;5705:2:1;5690:18;;5677:32;5728:18;5758:14;;;5755:34;;;5785:1;5782;5775:12;5755:34;5824:70;5886:7;5877:6;5866:9;5862:22;5824:70;:::i;:::-;5913:8;;-1:-1:-1;5798:96:1;-1:-1:-1;6001:2:1;5986:18;;5973:32;;-1:-1:-1;6017:16:1;;;6014:36;;;6046:1;6043;6036:12;6014:36;;6085:72;6149:7;6138:8;6127:9;6123:24;6085:72;:::i;:::-;5309:908;;;;-1:-1:-1;5309:908:1;;-1:-1:-1;6176:8:1;;6059:98;5309:908;-1:-1:-1;;;5309:908:1:o;6222:385::-;6308:6;6316;6324;6332;6385:3;6373:9;6364:7;6360:23;6356:33;6353:53;;;6402:1;6399;6392:12;6353:53;-1:-1:-1;;6425:23:1;;;6495:2;6480:18;;6467:32;;-1:-1:-1;6546:2:1;6531:18;;6518:32;;6597:2;6582:18;6569:32;;-1:-1:-1;6222:385:1;-1:-1:-1;6222:385: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:525::-;7625:6;7633;7641;7649;7702:3;7690:9;7681:7;7677:23;7673:33;7670:53;;;7719:1;7716;7709:12;7670:53;7758:9;7745:23;7777:31;7802:5;7777:31;:::i;:::-;7827:5;-1:-1:-1;7884:2:1;7869:18;;7856:32;7897:33;7856:32;7897:33;:::i;:::-;7539:525;;7949:7;;-1:-1:-1;;;;8003:2:1;7988:18;;7975:32;;8054:2;8039:18;8026:32;;7539:525::o;8069:356::-;8271:2;8253:21;;;8290:18;;;8283:30;8349:34;8344:2;8329:18;;8322:62;8416:2;8401:18;;8069:356::o;8430:127::-;8491:10;8486:3;8482:20;8479:1;8472:31;8522:4;8519:1;8512:15;8546:4;8543:1;8536:15;8562:168;8635:9;;;8666;;8683:15;;;8677:22;;8663:37;8653:71;;8704:18;;:::i;8735:217::-;8775:1;8801;8791:132;;8845:10;8840:3;8836:20;8833:1;8826:31;8880:4;8877:1;8870:15;8908:4;8905:1;8898:15;8791:132;-1:-1:-1;8937:9:1;;8735:217::o;8957:127::-;9018:10;9013:3;9009:20;9006:1;8999:31;9049:4;9046:1;9039:15;9073:4;9070:1;9063:15;9089:135;9128:3;9149:17;;;9146:43;;9169:18;;:::i;:::-;-1:-1:-1;9216:1:1;9205:13;;9089:135::o;10822:125::-;10887:9;;;10908:10;;;10905:36;;;10921:18;;:::i;13649:128::-;13716:9;;;13737:11;;;13734:37;;;13751:18;;:::i;14260:251::-;14330:6;14383:2;14371:9;14362:7;14358:23;14354:32;14351:52;;;14399:1;14396;14389:12;14351:52;14431:9;14425:16;14450:31;14475:5;14450:31;:::i;14516:980::-;14778:4;14826:3;14815:9;14811:19;14857:6;14846:9;14839:25;14883:2;14921:6;14916:2;14905:9;14901:18;14894:34;14964:3;14959:2;14948:9;14944:18;14937:31;14988:6;15023;15017:13;15054:6;15046;15039:22;15092:3;15081:9;15077:19;15070:26;;15131:2;15123:6;15119:15;15105:29;;15152:1;15162:195;15176:6;15173:1;15170:13;15162:195;;;15241:13;;-1:-1:-1;;;;;15237:39:1;15225:52;;15332:15;;;;15297:12;;;;15273:1;15191:9;15162:195;;;-1:-1:-1;;;;;;;15413:32:1;;;;15408:2;15393:18;;15386:60;-1:-1:-1;;;15477:3:1;15462:19;15455:35;15374:3;14516:980;-1:-1:-1;;;14516:980:1:o;16323:306::-;16411:6;16419;16427;16480:2;16468:9;16459:7;16455:23;16451:32;16448:52;;;16496:1;16493;16486:12;16448:52;16525:9;16519:16;16509:26;;16575:2;16564:9;16560:18;16554:25;16544:35;;16619:2;16608:9;16604:18;16598:25;16588:35;;16323:306;;;;;:::o

Swarm Source

ipfs://4e259f5899ede114da82c0f6e9b4a4ab701c3ddc80be40deab6719e2848a9185
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.