ETH Price: $3,231.17 (-0.72%)
Gas: 1 Gwei

Token

Gas Money (Gas$)
 

Overview

Max Total Supply

100,000 Gas$

Holders

55

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.181749222000419012 Gas$

Value
$0.00
0x3070c282556c2aa7cb83d6278fccd51e2349def5
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:
GasMoney

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-24
*/

/*

 e88~~\                              e    e                                          
d888       /~~~8e   d88~\           d8b  d8b      e88~-_  888-~88e  e88~~8e  Y88b  / 
8888 __        88b C888            d888bdY88b    d888   i 888  888 d888  88b  Y888/  
8888   |  e88~-888  Y88b          / Y88Y Y888b   8888   | 888  888 8888__888   Y8/   
Y888   | C888  888   888D        /   YY   Y888b  Y888   ' 888  888 Y888    ,    Y    
 "88__/   "88_-888 \_88P        /          Y888b  "88_-~  888  888  "88___/    /     
                                                                             _/      

https://t.me/GasMoneyETH
https://twitter.com/GasMoneyETH
https://medium.com/@GasMoneyETH/gas-money-1bf7706739f9

*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.7.4;

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address who) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

interface IPancakeSwapPair {
		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;
}

interface IPancakeSwapRouter{
		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);
		function removeLiquidityETHSupportingFeeOnTransferTokens(
			address token,
			uint liquidity,
			uint amountTokenMin,
			uint amountETHMin,
			address to,
			uint deadline
		) external returns (uint amountETH);
		function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
			address token,
			uint liquidity,
			uint amountTokenMin,
			uint amountETHMin,
			address to,
			uint deadline,
			bool approveMax, uint8 v, bytes32 r, bytes32 s
		) external returns (uint amountETH);
	
		function swapExactTokensForTokensSupportingFeeOnTransferTokens(
			uint amountIn,
			uint amountOutMin,
			address[] calldata path,
			address to,
			uint deadline
		) external;
		function swapExactETHForTokensSupportingFeeOnTransferTokens(
			uint amountOutMin,
			address[] calldata path,
			address to,
			uint deadline
		) external payable;
		function swapExactTokensForETHSupportingFeeOnTransferTokens(
			uint amountIn,
			uint amountOutMin,
			address[] calldata path,
			address to,
			uint deadline
		) external;
}

interface IPancakeSwapFactory {
		event PairCreated(address indexed token0, address indexed token1, address pair, uint);

		function feeTo() external view returns (address);
		function feeToSetter() external view returns (address);

		function getPair(address tokenA, address tokenB) external view returns (address pair);
		function allPairs(uint) external view returns (address pair);
		function allPairsLength() external view returns (uint);

		function createPair(address tokenA, address tokenB) external returns (address pair);

		function setFeeTo(address) external;
		function setFeeToSetter(address) external;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
   
    IERC20 UC = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); 

    IPancakeSwapRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public currentIndex;

    uint256 public dividendsPerShareAccuracyFactor = 10 ** 24;
    uint256 public minPeriod = 3600;
    uint256 public minDistribution = 1 * (10 ** 6);

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
        ? IPancakeSwapRouter(_router)
        : IPancakeSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyToken returns (bool success){
        return IERC20(tokenAddress).transfer(_receiver, tokens);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = UC.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(UC);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = UC.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            UC.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}

contract Ownable {
    address private _owner;

    event OwnershipRenounced(address indexed previousOwner);

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

    constructor() {
        _owner = msg.sender;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    function renounceOwnership() public onlyOwner {
        emit OwnershipRenounced(_owner);
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

abstract contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

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

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

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

contract GasMoney is ERC20Detailed, Ownable {

    using SafeMath for uint256;
    using SafeMathInt for int256;

    uint256 public buyLiquidityFee = 10;
    uint256 public buyMarketingFee = 900;
    uint256 public buyRewardsFee = 10;

    uint256 public sellLiquidityFee = 10;
    uint256 public sellMarketingFee = 900;
    uint256 public sellRewardsFee = 10;

    uint256 public AmountLiquidityFee;
    uint256 public AmountMarketingFee;
    uint256 public AmountRewardsFee;

    uint256 public feeDenominator = 1000;

    address public _marketingWalletAddress = 0x7A8622eF3490Ef7621985Bd81e76b906484a1982;
    address public _liquidityReciever;

    address private constant deadWallet = 0x000000000000000000000000000000000000dEaD;
    address private constant ZeroWallet = 0x0000000000000000000000000000000000000000;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) public isDividendExempt;

    uint256 public constant DECIMALS = 18;

    uint256 public _totalSupply = 100000 * (10 ** DECIMALS);

    uint256 public swapTokensAtAmount = _totalSupply.mul(50).div(feeDenominator); //0.5%

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

    bool public _enableLiquidity = true;
    bool public _enableSwap = true; 

     modifier validRecipient(address to) {
        require(to != address(0x0));
        _;
    }
  
    DividendDistributor distributor;
    address public PCASHDividendReceiver;

    uint256 distributorGas = 500000;
    
    address public pair;
    IPancakeSwapPair public pairContract;
    IPancakeSwapRouter public router;

    bool inSwap = false;

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

    constructor() ERC20Detailed("Gas Money", "Gas$", uint8(DECIMALS)) Ownable() {

        router = IPancakeSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); 

        pair = IPancakeSwapFactory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );

        _allowances[address(this)][address(router)] = uint256(-1);

        pairContract = IPancakeSwapPair(pair);
        automatedMarketMakerPairs[pair] = true;
        _liquidityReciever = msg.sender;

        distributor = new DividendDistributor(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );

        PCASHDividendReceiver = address(distributor);

        isDividendExempt[owner()] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[deadWallet] = true;
        isDividendExempt[ZeroWallet] = true;
        
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _balances[owner()] = _totalSupply;
        emit Transfer(address(0x0), owner(), _totalSupply);
    }

    function transfer(address to, uint256 value)
        external
        override
        validRecipient(to)
        returns (bool)
    {
        _transferFrom(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external override validRecipient(to) returns (bool) {
        
        if (_allowances[from][msg.sender] != uint256(-1)) {
            _allowances[from][msg.sender] = _allowances[from][
                msg.sender
            ].sub(value, "Insufficient Allowance");
        }
        _transferFrom(from, to, value);
        return true;
    }

    function _basicTransfer(
        address from,
        address to,
        uint256 amount
    ) internal returns (bool) {
        _balances[from] = _balances[from].sub(amount);
        _balances[to] = _balances[to].add(amount);
        return true;
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {


        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (shouldAddLiquidity()) {
            addLiquidity();
        }

        if (shouldSwapBack()) {
            swapBack();
        }
        
        _balances[sender] = _balances[sender].sub(amount);
        
        uint256 AmountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;

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

        if(!isDividendExempt[sender]){ try distributor.setShare(sender, balanceOf(sender)) {} catch {} }
        if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, balanceOf(recipient)) {} catch {} }

        try distributor.process(distributorGas) {} catch {}

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

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal  returns (uint256) {

        uint256 feeAmount;
        uint LFEE;
        uint MFEE;
        uint RFEE;
        
        if(automatedMarketMakerPairs[sender]){

            LFEE = amount.mul(buyLiquidityFee).div(feeDenominator);
            AmountLiquidityFee += LFEE;
            MFEE = amount.mul(buyMarketingFee).div(feeDenominator);
            AmountMarketingFee += MFEE;
            RFEE = amount.mul(buyRewardsFee).div(feeDenominator);
            AmountRewardsFee += RFEE;

            feeAmount = LFEE.add(MFEE).add(RFEE);
        }
        else if(automatedMarketMakerPairs[recipient]){

            LFEE = amount.mul(sellLiquidityFee).div(feeDenominator);
            AmountLiquidityFee += LFEE;
            MFEE = amount.mul(sellMarketingFee).div(feeDenominator);
            AmountMarketingFee += MFEE;
            RFEE = amount.mul(sellRewardsFee).div(feeDenominator);
            AmountRewardsFee += RFEE;

            feeAmount = LFEE.add(MFEE).add(RFEE);
    
        }

        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }

    function manualSwap() public onlyOwner swapping { 
        if(AmountLiquidityFee > 0) swapForLiquidity(AmountLiquidityFee); 
        if(AmountMarketingFee > 0) swapForMarketing(AmountMarketingFee);
        if(AmountRewardsFee > 0) swapAndSendDivident(AmountRewardsFee);
    }

    function addLiquidity() internal swapping {

        if(AmountLiquidityFee > 0){
            swapForLiquidity(AmountLiquidityFee);
        }

        if(AmountMarketingFee > 0){
            swapForMarketing(AmountMarketingFee);
        }

    }

    function swapBack() internal swapping {
        if(AmountRewardsFee > 0){
            swapAndSendDivident(AmountRewardsFee);
        }      
    }

    function swapAndSendDivident(uint256 _tokens) private {
        uint initialBalance = address(this).balance;
        swapTokensForEth(_tokens);
        uint ReceivedBalance = address(this).balance.sub(initialBalance);
        AmountRewardsFee = AmountRewardsFee.sub(_tokens);
        try distributor.deposit { value: ReceivedBalance } () {} catch {}  
    }

    function shouldTakeFee(address from, address to)
        internal
        view
        returns (bool)
    {
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            return false;
        }        
        else{
            return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
        }
    }

    function shouldAddLiquidity() internal view returns (bool) {

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        return
            _enableLiquidity && 
            !inSwap && 
            canSwap &&
            !automatedMarketMakerPairs[msg.sender];
    }

    function shouldSwapBack() internal view returns (bool) {
        return 
            _enableSwap &&
            !inSwap &&
            !automatedMarketMakerPairs[msg.sender]; 
    }


    function setAutoAddLiquidity(bool _flag) external onlyOwner {
        if(_flag) {
            _enableLiquidity = _flag;
        } else {
            _enableLiquidity = _flag;
        }
    }

    function setAutoSwapBack(bool _flag) external onlyOwner {
        if(_flag) {
            _enableSwap = _flag;
        } else {
            _enableSwap = _flag;
        }
    }

    function allowance(address owner_, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[owner_][spender];
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        external
        returns (bool)
    {
        uint256 oldValue = _allowances[msg.sender][spender];
        if (subtractedValue >= oldValue) {
            _allowances[msg.sender][spender] = 0;
        } else {
            _allowances[msg.sender][spender] = oldValue.sub(
                subtractedValue
            );
        }
        emit Approval(
            msg.sender,
            spender,
            _allowances[msg.sender][spender]
        );
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        external
        returns (bool)
    {
        _allowances[msg.sender][spender] = _allowances[msg.sender][
            spender
        ].add(addedValue);
        emit Approval(
            msg.sender,
            spender,
            _allowances[msg.sender][spender]
        );
        return true;
    }

    function approve(address spender, uint256 value)
        external
        override
        returns (bool)
    {
        _approve(msg.sender,spender,value);
        return true;
    }

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

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

    function checkFeeExempt(address _addr) external view returns (bool) {
        return _isExcludedFromFees[_addr];
    }

    function setBuyFee(
            uint _newLp,
            uint _newMarketing,
            uint _newReward
        ) public onlyOwner {
      
        buyLiquidityFee = _newLp;
        buyMarketingFee = _newMarketing;
        buyRewardsFee = _newReward;
    }

    function setSellFee(
            uint _newLp,
            uint _newMarketing,
            uint _newReward
        ) public onlyOwner {

        sellLiquidityFee = _newLp;
        sellMarketingFee = _newMarketing;
        sellRewardsFee = _newReward;
    }

    function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
        require(holder != address(this) && !automatedMarketMakerPairs[holder]);
        isDividendExempt[holder] = exempt;

        if (exempt) {
            distributor.setShare(holder, 0);
        } else {
            distributor.setShare(holder, balanceOf(holder));
        }
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function clearStuckBalance(address _receiver) external onlyOwner {
        uint256 balance = address(this).balance;
        payable(_receiver).transfer(balance);
    }

    function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner returns (bool success){
        return IERC20(tokenAddress).transfer(_receiver, tokens);
    }

    function rescueDToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner  returns (bool success) {
        return distributor.rescueToken(tokenAddress, _receiver,tokens);
    }

    function setFeeReceivers(address _marketing,address _liquidity) public onlyOwner {
        _marketingWalletAddress = _marketing;
        _liquidityReciever = _liquidity;
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000, "Gas must be lower than 750000");
        distributorGas = gas;
    }

    function getCirculatingSupply() public view returns (uint256) {
        return
            _totalSupply.sub(_balances[deadWallet]).sub(_balances[ZeroWallet]);
    }

    function isNotInSwap() external view returns (bool) {
        return !inSwap;
    }

    function manualSync() external {
        IPancakeSwapPair(pair).sync();
    }

    function setLP(address _address) external onlyOwner {
        pairContract = IPancakeSwapPair(_address);
        pair = _address;
    }

    function setAutomaticPairMarket(address _addr,bool _status) public onlyOwner {
        if(_status) {
            require(!automatedMarketMakerPairs[_addr],"Pair Already Set!!");
        }
        automatedMarketMakerPairs[_addr] = _status;
        isDividendExempt[_addr] = true;
    }

    function setWhitelistFee(address _addr,bool _status) external onlyOwner {
        require(_isExcludedFromFees[_addr] != _status, "Error: Not changed");
        _isExcludedFromFees[_addr] = _status;
    }

    function setMinSwapAmount(uint _value) external onlyOwner {
        swapTokensAtAmount = _value;
    }
    
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
   
    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function swapForMarketing(uint _tokens) private {
        uint initalBalance = address(this).balance;
        swapTokensForEth(_tokens);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        AmountMarketingFee = AmountMarketingFee.sub(_tokens);
        payable(_marketingWalletAddress).transfer(recieveBalance);
    }

    function swapForLiquidity(uint _tokens) private {
        uint half = AmountLiquidityFee.div(2);
        uint otherhalf = AmountLiquidityFee.sub(half);
        uint initalBalance = address(this).balance;
        swapTokensForEth(half);
        uint recieveBalance = address(this).balance.sub(initalBalance);
        AmountLiquidityFee = AmountLiquidityFee.sub(_tokens);
        addLiquidity(otherhalf,recieveBalance);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);
        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _liquidityReciever,
            block.timestamp
        );

    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

    receive() external payable {}


}

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":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","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":"AmountLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PCASHDividendReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IPancakeSwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueDToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IPancakeSwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAutomaticPairMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMinSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"stateMutability":"payable","type":"receive"}]

6080604052600a60038190556103846004819055600582905560068290556007556008556103e8600c819055600d8054737a8622ef3490ef7621985bd81e76b906484a19826001600160a01b031990911617905569152d02c7e14af680000060128190556200009691906200008290603262000596602090811b620019d317901c565b620005fd60201b62001a2c1790919060201c565b6013556016805461ff001960ff19909116600117166101001790556207a120601855601b805460ff60a01b19169055348015620000d257600080fd5b506040805180820182526009815268476173204d6f6e657960b81b60208083019182528351808501909452600484526311d85cc960e21b90840152815191929160129162000124916000919062000702565b5081516200013a90600190602085019062000702565b506002805460ff191660ff9290921691909117610100600160a81b03191661010033021790555050601b8054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620001cf57600080fd5b505afa158015620001e4573d6000803e3d6000fd5b505050506040513d6020811015620001fb57600080fd5b5051601b54604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200024a57600080fd5b505afa1580156200025f573d6000803e3d6000fd5b505050506040513d60208110156200027657600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002c657600080fd5b505af1158015620002db573d6000803e3d6000fd5b505050506040513d6020811015620002f257600080fd5b5051601980546001600160a01b039283166001600160a01b0319918216178255306000908152601560209081526040808320601b5487168452825280832060001990559354601a8054851691909616908117909555938152601090935291819020805460ff19166001179055600e8054909216331790915551737a250d5630b4cf539739df2c5dacb4c659f2488d906200038c9062000797565b6001600160a01b03909116815260405190819003602001906000f080158015620003ba573d6000803e3d6000fd5b506016805462010000600160b01b031916620100006001600160a01b039384168102919091179182905560178054919092049092166001600160a01b03199092169190911790556001601160006200041162000647565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556019549091168152601190925280822080548416600190811790915530835290822080548416821790557f97847ee99463795296047093514439c3127772df3715e628aa85601cf854171680548416821790558180527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b780549093168117909255600f90620004cd62000647565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600f90925281208054909216600117909155601254906014906200051f62000647565b6001600160a01b031681526020810191909152604001600020556200054362000647565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040518082815260200191505060405180910390a3620007bc565b600082620005a757506000620005f7565b82820282848281620005b557fe5b0414620005f45760405162461bcd60e51b81526004018080602001828103825260218152602001806200405e6021913960400191505060405180910390fd5b90505b92915050565b6000620005f483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200065b60201b60201c565b60025461010090046001600160a01b031690565b60008183620006eb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620006af57818101518382015260200162000695565b50505050905090810190601f168015620006dd5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620006f857fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826200073a576000855562000785565b82601f106200075557805160ff191683800117855562000785565b8280016001018555821562000785579182015b828111156200078557825182559160200191906001019062000768565b5062000793929150620007a5565b5090565b611024806200303a83390190565b5b80821115620007935760008155600101620007a6565b61286e80620007cc6000396000f3fe6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214610c07578063f708a64f14610c1c578063f832679514610c57578063f887ea4014610c6c5761038c565b8063e5711e8b14610b41578063ea8b2c4414610b84578063f11a24d314610bbf578063f2fde38b14610bd45761038c565b8063d4399790116100dc578063d439979014610a83578063dd62ed3e14610ab6578063dde04b9514610af1578063e2f4560514610b2c5761038c565b8063cfbac92f14610a2d578063cfe0e61914610a59578063d4057d7e14610a6e5761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f51461098d578063b677814c146109c0578063bb8d5131146109d5578063c6501c89146109ea5761038c565b8063a8aa1b311461092a578063a9059cbb1461093f578063ad64598a146109785761038c565b80639d1944f5116101ab5780639d1944f514610877578063a457c2d7146108a1578063a4b45c00146108da578063a715184d146109155761038c565b80638f32d59b14610838578063921369131461084d57806395d89b41146108625761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a04146107e45780637fb6df58146107f957806383b4ac681461080e5780638da5cb5b146108235761038c565b8063715018a614610772578063753d02a114610787578063764d72bf1461079c57806377a3b609146107cf5761038c565b80634bc6dd18116102905780634bc6dd18146106e95780634d709adf1461071557806351bc3c851461072a57806370a082311461073f5761038c565b80633eaaf86b146106705780634144d9e4146106855780634355855a146106b65761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146105af578063313ce567146105e2578063320d45341461060d57806339509351146106375761038c565b80632b112e49146105555780632d48e8961461056a5780632e0f26251461059a5761038c565b806318160ddd1161035f57806318160ddd1461048f5780631d865c30146104a457806323b872dd146104dc57806325519cf21461051f5761038c565b806306fdde0314610391578063095ea7b31461041b578063180b0d7e146104685761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610c81565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506104546004803603604081101561043e57600080fd5b506001600160a01b038135169060200135610d17565b604080519115158252519081900360200190f35b34801561047457600080fd5b5061047d610d2e565b60408051918252519081900360200190f35b34801561049b57600080fd5b5061047d610d34565b3480156104b057600080fd5b506104da600480360360608110156104c757600080fd5b5080359060208101359060400135610d3a565b005b3480156104e857600080fd5b50610454600480360360608110156104ff57600080fd5b506001600160a01b03813581169160208101359091169060400135610d59565b34801561052b57600080fd5b506104da6004803603606081101561054257600080fd5b5080359060208101359060400135610e33565b34801561056157600080fd5b5061047d610e52565b34801561057657600080fd5b506104da6004803603604081101561058d57600080fd5b5080359060200135610ec3565b3480156105a657600080fd5b5061047d610f53565b3480156105bb57600080fd5b506104da600480360360208110156105d257600080fd5b50356001600160a01b0316610f58565b3480156105ee57600080fd5b506105f7610f95565b6040805160ff9092168252519081900360200190f35b34801561061957600080fd5b506104da6004803603602081101561063057600080fd5b5035610f9e565b34801561064357600080fd5b506104546004803603604081101561065a57600080fd5b506001600160a01b038135169060200135610fb4565b34801561067c57600080fd5b5061047d611047565b34801561069157600080fd5b5061069a61104d565b604080516001600160a01b039092168252519081900360200190f35b3480156106c257600080fd5b50610454600480360360208110156106d957600080fd5b50356001600160a01b031661105c565b3480156106f557600080fd5b506104da6004803603602081101561070c57600080fd5b50351515611071565b34801561072157600080fd5b5061069a6110b7565b34801561073657600080fd5b506104da6110c6565b34801561074b57600080fd5b5061047d6004803603602081101561076257600080fd5b50356001600160a01b0316611132565b34801561077e57600080fd5b506104da61114d565b34801561079357600080fd5b506104da6111ad565b3480156107a857600080fd5b506104da600480360360208110156107bf57600080fd5b50356001600160a01b0316611217565b3480156107db57600080fd5b5061047d611265565b3480156107f057600080fd5b5061047d61126b565b34801561080557600080fd5b5061069a611271565b34801561081a57600080fd5b50610454611280565b34801561082f57600080fd5b5061069a611291565b34801561084457600080fd5b506104546112a5565b34801561085957600080fd5b5061047d6112bb565b34801561086e57600080fd5b506103a66112c1565b34801561088357600080fd5b506104da6004803603602081101561089a57600080fd5b5035611321565b3480156108ad57600080fd5b50610454600480360360408110156108c457600080fd5b506001600160a01b03813516906020013561138e565b3480156108e657600080fd5b506104da600480360360408110156108fd57600080fd5b506001600160a01b0381358116916020013516611477565b34801561092157600080fd5b5061069a6114b6565b34801561093657600080fd5b5061069a6114c5565b34801561094b57600080fd5b506104546004803603604081101561096257600080fd5b506001600160a01b0381351690602001356114d4565b34801561098457600080fd5b50610454611500565b34801561099957600080fd5b50610454600480360360208110156109b057600080fd5b50356001600160a01b0316611509565b3480156109cc57600080fd5b5061047d61151e565b3480156109e157600080fd5b5061047d611524565b3480156109f657600080fd5b5061045460048036036060811015610a0d57600080fd5b506001600160a01b0381358116916020810135909116906040013561152a565b348015610a3957600080fd5b506104da60048036036020811015610a5057600080fd5b503515156115d8565b348015610a6557600080fd5b5061047d611615565b348015610a7a57600080fd5b5061045461161b565b348015610a8f57600080fd5b5061045460048036036020811015610aa657600080fd5b50356001600160a01b0316611629565b348015610ac257600080fd5b5061047d60048036036040811015610ad957600080fd5b506001600160a01b0381358116916020013516611647565b348015610afd57600080fd5b506104da60048036036040811015610b1457600080fd5b506001600160a01b0381351690602001351515611672565b348015610b3857600080fd5b5061047d611717565b348015610b4d57600080fd5b5061045460048036036060811015610b6457600080fd5b506001600160a01b0381358116916020810135909116906040013561171d565b348015610b9057600080fd5b506104da60048036036040811015610ba757600080fd5b506001600160a01b0381351690602001351515611787565b348015610bcb57600080fd5b5061047d61183e565b348015610be057600080fd5b506104da60048036036020811015610bf757600080fd5b50356001600160a01b0316611844565b348015610c1357600080fd5b5061047d61185e565b348015610c2857600080fd5b506104da60048036036040811015610c3f57600080fd5b506001600160a01b0381351690602001351515611864565b348015610c6357600080fd5b5061047d6119be565b348015610c7857600080fd5b5061069a6119c4565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b6000610d24338484611a6e565b5060015b92915050565b600c5481565b60125490565b610d426112a5565b610d4b57600080fd5b600692909255600755600855565b6000826001600160a01b038116610d6f57600080fd5b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914610e1c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601582528381203382529091529190912054610df7918590611b5a565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b610e27858585611bf1565b50600195945050505050565b610e3b6112a5565b610e4457600080fd5b600392909255600455600555565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00546012549192610ebe929091610eb89190611ed2565b90611ed2565b905090565b610ecb6112a5565b610ed457600080fd5b601660029054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050505050565b601281565b610f606112a5565b610f6957600080fd5b601a80546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b60025460ff1690565b610fa66112a5565b610faf57600080fd5b601355565b3360009081526015602090815260408083206001600160a01b0386168452909152812054610fe29083611f14565b3360008181526015602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60125481565b600d546001600160a01b031681565b60116020526000908152604090205460ff1681565b6110796112a5565b61108257600080fd5b80156110a0576016805461ff001916610100831515021790556110b4565b6016805461ff001916610100831515021790555b50565b601a546001600160a01b031681565b6110ce6112a5565b6110d757600080fd5b601b805460ff60a01b1916600160a01b179055600954156110fd576110fd600954611f6e565b600a541561111057611110600a54611fd4565b600b541561112357611123600b54612037565b601b805460ff60a01b19169055565b6001600160a01b031660009081526014602052604090205490565b6111556112a5565b61115e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b50505050565b61121f6112a5565b61122857600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611260573d6000803e3d6000fd5b505050565b60055481565b60045481565b6017546001600160a01b031681565b601b54600160a01b900460ff161590565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60075481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b6113296112a5565b61133257600080fd5b620b71b08110611389576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601855565b3360009081526015602090815260408083206001600160a01b03861684529091528120548083106113e2573360009081526015602090815260408083206001600160a01b0388168452909152812055611411565b6113ec8184611ed2565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61147f6112a5565b61148857600080fd5b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b600e546001600160a01b031681565b6019546001600160a01b031681565b6000826001600160a01b0381166114ea57600080fd5b6114f5338585611bf1565b506001949350505050565b60165460ff1681565b60106020526000908152604090205460ff1681565b600b5481565b60085481565b60006115346112a5565b61153d57600080fd5b6016546040805163e5711e8b60e01b81526001600160a01b0387811660048301528681166024830152604482018690529151620100009093049091169163e5711e8b916064808201926020929091908290030181600087803b1580156115a257600080fd5b505af11580156115b6573d6000803e3d6000fd5b505050506040513d60208110156115cc57600080fd5b505190505b9392505050565b6115e06112a5565b6115e957600080fd5b8015611602576016805460ff19168215151790556110b4565b6016805482151560ff1990911617905550565b600a5481565b601654610100900460ff1681565b6001600160a01b03166000908152600f602052604090205460ff1690565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b61167a6112a5565b61168357600080fd5b6001600160a01b0382166000908152600f602052604090205460ff16151581151514156116ec576040805162461bcd60e51b8152602060048201526012602482015271115c9c9bdc8e88139bdd0818da185b99d95960721b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60135481565b60006117276112a5565b61173057600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115a257600080fd5b61178f6112a5565b61179857600080fd5b8015611801576001600160a01b03821660009081526010602052604090205460ff1615611801576040805162461bcd60e51b81526020600482015260126024820152715061697220416c726561647920536574212160701b604482015290519081900360640190fd5b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586161790556011909152902080549091166001179055565b60035481565b61184c6112a5565b61185557600080fd5b6110b4816120ce565b60065481565b61186c6112a5565b61187557600080fd5b6001600160a01b03821630148015906118a757506001600160a01b03821660009081526010602052604090205460ff16155b6118b057600080fd5b6001600160a01b0382166000908152601160205260409020805460ff191682158015919091179091556119535760165460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292516201000090940416926314b6ca969260448084019391929182900301818387803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506119ba565b6016546201000090046001600160a01b03166314b6ca968361197481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b5050565b60095481565b601b546001600160a01b031681565b6000826119e257506000610d28565b828202828482816119ef57fe5b04146115d15760405162461bcd60e51b81526004018080602001828103825260218152602001806127f46021913960400191505060405180910390fd5b60006115d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b6001600160a01b038316611ab35760405162461bcd60e51b81526004018080602001828103825260248152602001806128156024913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b81526004018080602001828103825260228152602001806127d26022913960400191505060405180910390fd5b6001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008184841115611be95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bae578181015183820152602001611b96565b50505050905090810190601f168015611bdb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601b54600090600160a01b900460ff1615611c1857611c118484846121ad565b90506115d1565b611c20612222565b15611c2d57611c2d612280565b611c356122b9565b15611c4257611c426122fc565b6001600160a01b038416600090815260146020526040902054611c659083611ed2565b6001600160a01b038516600090815260146020526040812091909155611c8b8585612322565b611c955782611ca0565b611ca08585856123b4565b6001600160a01b038516600090815260146020526040902054909150611cc69082611f14565b6001600160a01b0380861660009081526014602090815260408083209490945591881681526011909152205460ff16611d73576016546201000090046001600160a01b03166314b6ca9686611d1a81611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d71575060015b505b6001600160a01b03841660009081526011602052604090205460ff16611e0d576016546201000090046001600160a01b03166314b6ca9685611db481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611dfa57600080fd5b505af1925050508015611e0b575060015b505b601660029054906101000a90046001600160a01b03166001600160a01b031663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e7b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006115d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b5a565b6000828201838110156115d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600954600090611f7f906002611a2c565b90506000611f9882600954611ed290919063ffffffff16565b905047611fa483612586565b6000611fb04783611ed2565b600954909150611fc09086611ed2565b600955611fcd8382612719565b5050505050565b47611fde82612586565b6000611fea4783611ed2565b600a54909150611ffa9084611ed2565b600a55600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611211573d6000803e3d6000fd5b4761204182612586565b600061204d4783611ed2565b600b5490915061205d9084611ed2565b600b81905550601660029054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b357600080fd5b505af1935050505080156120c5575060015b61126057611260565b6001600160a01b0381166120e157600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611bae578181015183820152602001611b96565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0383166000908152601460205260408120546121d09083611ed2565b6001600160a01b0380861660009081526014602052604080822093909355908516815220546121ff9083611f14565b6001600160a01b0384166000908152601460205260409020555060019392505050565b60008061222e30611132565b6013546016549192508210159060ff1680156122545750601b54600160a01b900460ff16155b801561225d5750805b801561227957503360009081526010602052604090205460ff16155b9250505090565b601b805460ff60a01b1916600160a01b179055600954156122a6576122a6600954611f6e565b600a541561112357611123600a54611fd4565b601654600090610100900460ff1680156122dd5750601b54600160a01b900460ff16155b8015610ebe5750503360009081526010602052604090205460ff161590565b601b805460ff60a01b1916600160a01b179055600b541561112357611123600b54612037565b6001600160a01b0382166000908152600f602052604081205460ff168061236157506001600160a01b0382166000908152600f602052604090205460ff165b1561236e57506000610d28565b6001600160a01b03831660009081526010602052604090205460ff16806123ad57506001600160a01b03821660009081526010602052604090205460ff165b9050610d28565b6001600160a01b038316600090815260106020526040812054819081908190819060ff1615612463576123fe600c546123f8600354896119d390919063ffffffff16565b90611a2c565b6009805482019055600c5460045491945061241e916123f89089906119d3565b600a805482019055600c5460055491935061243e916123f89089906119d3565b600b805482019055905061245c816124568585611f14565b90611f14565b93506124fa565b6001600160a01b03871660009081526010602052604090205460ff16156124fa5761249f600c546123f8600654896119d390919063ffffffff16565b6009805482019055600c546007549194506124bf916123f89089906119d3565b600a805482019055600c546008549193506124df916123f89089906119d3565b600b80548201905590506124f7816124568585611f14565b93505b8315612570573060009081526014602052604090205461251a9085611f14565b30600081815260146020908152604091829020939093558051878152905191926001600160a01b038c16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b61257a8685611ed2565b98975050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125b557fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561260957600080fd5b505afa15801561261d573d6000803e3d6000fd5b505050506040513d602081101561263357600080fd5b505181518290600190811061264457fe5b6001600160a01b039283166020918202929092010152601b5461266a9130911684611a6e565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126f05781810151838201526020016126d8565b505050509050019650505050505050600060405180830381600087803b158015610f3757600080fd5b601b546127319030906001600160a01b031684611a6e565b601b54600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156127a657600080fd5b505af11580156127ba573d6000803e3d6000fd5b50505050506040513d606081101561121157600080fdfe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220026e25c1e15518979542b15ef8373867afd25467e483f3091f10dd21a1d90e0864736f6c634300070600336080604052600180546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4817905569d3c21bcecceda1000000600c55610e10600d55620f4240600e5534801561005157600080fd5b506040516110243803806110248339818101604052602081101561007457600080fd5b50516001600160a01b03811661009e57737a250d5630b4cf539739df2c5dacb4c659f2488d6100a0565b805b600280546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610f4a806100da6000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed146102d6578063f0fc6bca146102eb578063ffb2c47914610300578063ffd49c841461032a576100f3565b8063ce7c2ac214610211578063d0e30db014610262578063e2d2e2191461026a578063e5711e8b1461027f576100f3565b80632d48e896116100c65780632d48e896146101a25780633a98ef39146101d25780634fab0ae8146101e7578063997664d7146101fc576100f3565b806311ce023d146100f857806314b6ca961461011f57806326987b601461015a57806328fd31981461016f575b600080fd5b34801561010457600080fd5b5061010d61033f565b60408051918252519081900360200190f35b34801561012b57600080fd5b506101586004803603604081101561014257600080fd5b506001600160a01b038135169060200135610345565b005b34801561016657600080fd5b5061010d61046a565b34801561017b57600080fd5b5061010d6004803603602081101561019257600080fd5b50356001600160a01b0316610470565b3480156101ae57600080fd5b50610158600480360360408110156101c557600080fd5b50803590602001356104fc565b3480156101de57600080fd5b5061010d61051e565b3480156101f357600080fd5b5061010d610524565b34801561020857600080fd5b5061010d61052a565b34801561021d57600080fd5b506102446004803603602081101561023457600080fd5b50356001600160a01b0316610530565b60408051938452602084019290925282820152519081900360600190f35b610158610551565b34801561027657600080fd5b5061010d610846565b34801561028b57600080fd5b506102c2600480360360608110156102a257600080fd5b506001600160a01b0381358116916020810135909116906040013561084c565b604080519115158252519081900360200190f35b3480156102e257600080fd5b5061010d6108ef565b3480156102f757600080fd5b506101586108f5565b34801561030c57600080fd5b506101586004803603602081101561032357600080fd5b5035610900565b34801561033657600080fd5b5061010d6109e2565b600c5481565b6000546001600160a01b0316331461035c57600080fd5b6001600160a01b0382166000908152600660205260409020541561038357610383826109e8565b6000811180156103a957506001600160a01b038216600090815260066020526040902054155b156103bc576103b782610b10565b6103ef565b801580156103e157506001600160a01b03821660009081526006602052604090205415155b156103ef576103ef82610b71565b6001600160a01b03821660009081526006602052604090205460075461042091839161041a91610c5e565b90610ca9565b6007556001600160a01b038216600090815260066020526040902081905561044781610d03565b6001600160a01b0390921660009081526006602052604090206001019190915550565b600b5481565b6001600160a01b038116600090815260066020526040812054610495575060006104f7565b6001600160a01b0382166000908152600660205260408120546104b790610d03565b6001600160a01b0384166000908152600660205260409020600101549091508082116104e8576000925050506104f7565b6104f28282610c5e565b925050505b919050565b6000546001600160a01b0316331461051357600080fd5b600d91909155600e55565b60075481565b600e5481565b60085481565b60066020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b0316331461056857600080fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156105b357600080fd5b505afa1580156105c7573d6000803e3d6000fd5b505050506040513d60208110156105dd57600080fd5b505160408051600280825260608201835292935060009290916020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561064957600080fd5b505afa15801561065d573d6000803e3d6000fd5b505050506040513d602081101561067357600080fd5b50518151829060009061068257fe5b6001600160a01b03928316602091820292909201015260018054835192169183919081106106ac57fe5b6001600160a01b0392831660209182029290920181019190915260025460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b8381101561073e578181015183820152602001610726565b50505050905001955050505050506000604051808303818588803b15801561076557600080fd5b505af1158015610779573d6000803e3d6000fd5b5050600154604080516370a0823160e01b815230600482015290516000955061080494508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156107d257600080fd5b505afa1580156107e6573d6000803e3d6000fd5b505050506040513d60208110156107fc57600080fd5b505190610c5e565b6008549091506108149082610ca9565b600855600754600c5461083e916108359161082f9085610d20565b90610d79565b600a5490610ca9565b600a55505050565b600a5481565b600080546001600160a01b0316331461086457600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108bb57600080fd5b505af11580156108cf573d6000803e3d6000fd5b505050506040513d60208110156108e557600080fd5b5051949350505050565b60095481565b6108fe336109e8565b565b6000546001600160a01b0316331461091757600080fd5b6003548061092557506109df565b6000805a905060005b848310801561093c57508381105b156109da5783600b5410610950576000600b555b61097c6003600b548154811061096257fe5b6000918252602090912001546001600160a01b0316610dbb565b156109ad576109ad6003600b548154811061099357fe5b6000918252602090912001546001600160a01b03166109e8565b6109c26109bb5a8490610c5e565b8490610ca9565b92505a600b805460019081019091559092500161092e565b505050505b50565b600d5481565b6001600160a01b038116600090815260066020526040902054610a0a576109df565b6000610a1582610470565b90508015610b0c57600954610a2a9082610ca9565b6009556001546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610a8357600080fd5b505af1158015610a97573d6000803e3d6000fd5b505050506040513d6020811015610aad57600080fd5b50506001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610ae29082610ca9565b6001600160a01b038316600090815260066020526040902060028101919091555461044790610d03565b5050565b600380546001600160a01b039092166000818152600460205260408120849055600184018355919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b0319169091179055565b600380546000198101908110610b8357fe5b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610bbb57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600491829052604081205460038054919392916000198101908110610c0957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610c3957fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610df7565b90505b92915050565b600082820183811015610ca0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610ca3600c5461082f600a5485610d2090919063ffffffff16565b600082610d2f57506000610ca3565b82820282848281610d3c57fe5b0414610ca05760405162461bcd60e51b8152600401808060200182810382526021815260200180610ef46021913960400191505060405180910390fd5b6000610ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e8e565b600d546001600160a01b0382166000908152600560205260408120549091429101108015610ca35750600e54610df083610470565b1192915050565b60008184841115610e865760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e4b578181015183820152602001610e33565b50505050905090810190601f168015610e785780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610edd5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e4b578181015183820152602001610e33565b506000838581610ee957fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220b368b0459366909a0ad2a98fc5d95dcefeb575fbcded00a9dadd745a42bd5c8564736f6c63430007060033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214610c07578063f708a64f14610c1c578063f832679514610c57578063f887ea4014610c6c5761038c565b8063e5711e8b14610b41578063ea8b2c4414610b84578063f11a24d314610bbf578063f2fde38b14610bd45761038c565b8063d4399790116100dc578063d439979014610a83578063dd62ed3e14610ab6578063dde04b9514610af1578063e2f4560514610b2c5761038c565b8063cfbac92f14610a2d578063cfe0e61914610a59578063d4057d7e14610a6e5761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f51461098d578063b677814c146109c0578063bb8d5131146109d5578063c6501c89146109ea5761038c565b8063a8aa1b311461092a578063a9059cbb1461093f578063ad64598a146109785761038c565b80639d1944f5116101ab5780639d1944f514610877578063a457c2d7146108a1578063a4b45c00146108da578063a715184d146109155761038c565b80638f32d59b14610838578063921369131461084d57806395d89b41146108625761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a04146107e45780637fb6df58146107f957806383b4ac681461080e5780638da5cb5b146108235761038c565b8063715018a614610772578063753d02a114610787578063764d72bf1461079c57806377a3b609146107cf5761038c565b80634bc6dd18116102905780634bc6dd18146106e95780634d709adf1461071557806351bc3c851461072a57806370a082311461073f5761038c565b80633eaaf86b146106705780634144d9e4146106855780634355855a146106b65761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146105af578063313ce567146105e2578063320d45341461060d57806339509351146106375761038c565b80632b112e49146105555780632d48e8961461056a5780632e0f26251461059a5761038c565b806318160ddd1161035f57806318160ddd1461048f5780631d865c30146104a457806323b872dd146104dc57806325519cf21461051f5761038c565b806306fdde0314610391578063095ea7b31461041b578063180b0d7e146104685761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610c81565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506104546004803603604081101561043e57600080fd5b506001600160a01b038135169060200135610d17565b604080519115158252519081900360200190f35b34801561047457600080fd5b5061047d610d2e565b60408051918252519081900360200190f35b34801561049b57600080fd5b5061047d610d34565b3480156104b057600080fd5b506104da600480360360608110156104c757600080fd5b5080359060208101359060400135610d3a565b005b3480156104e857600080fd5b50610454600480360360608110156104ff57600080fd5b506001600160a01b03813581169160208101359091169060400135610d59565b34801561052b57600080fd5b506104da6004803603606081101561054257600080fd5b5080359060208101359060400135610e33565b34801561056157600080fd5b5061047d610e52565b34801561057657600080fd5b506104da6004803603604081101561058d57600080fd5b5080359060200135610ec3565b3480156105a657600080fd5b5061047d610f53565b3480156105bb57600080fd5b506104da600480360360208110156105d257600080fd5b50356001600160a01b0316610f58565b3480156105ee57600080fd5b506105f7610f95565b6040805160ff9092168252519081900360200190f35b34801561061957600080fd5b506104da6004803603602081101561063057600080fd5b5035610f9e565b34801561064357600080fd5b506104546004803603604081101561065a57600080fd5b506001600160a01b038135169060200135610fb4565b34801561067c57600080fd5b5061047d611047565b34801561069157600080fd5b5061069a61104d565b604080516001600160a01b039092168252519081900360200190f35b3480156106c257600080fd5b50610454600480360360208110156106d957600080fd5b50356001600160a01b031661105c565b3480156106f557600080fd5b506104da6004803603602081101561070c57600080fd5b50351515611071565b34801561072157600080fd5b5061069a6110b7565b34801561073657600080fd5b506104da6110c6565b34801561074b57600080fd5b5061047d6004803603602081101561076257600080fd5b50356001600160a01b0316611132565b34801561077e57600080fd5b506104da61114d565b34801561079357600080fd5b506104da6111ad565b3480156107a857600080fd5b506104da600480360360208110156107bf57600080fd5b50356001600160a01b0316611217565b3480156107db57600080fd5b5061047d611265565b3480156107f057600080fd5b5061047d61126b565b34801561080557600080fd5b5061069a611271565b34801561081a57600080fd5b50610454611280565b34801561082f57600080fd5b5061069a611291565b34801561084457600080fd5b506104546112a5565b34801561085957600080fd5b5061047d6112bb565b34801561086e57600080fd5b506103a66112c1565b34801561088357600080fd5b506104da6004803603602081101561089a57600080fd5b5035611321565b3480156108ad57600080fd5b50610454600480360360408110156108c457600080fd5b506001600160a01b03813516906020013561138e565b3480156108e657600080fd5b506104da600480360360408110156108fd57600080fd5b506001600160a01b0381358116916020013516611477565b34801561092157600080fd5b5061069a6114b6565b34801561093657600080fd5b5061069a6114c5565b34801561094b57600080fd5b506104546004803603604081101561096257600080fd5b506001600160a01b0381351690602001356114d4565b34801561098457600080fd5b50610454611500565b34801561099957600080fd5b50610454600480360360208110156109b057600080fd5b50356001600160a01b0316611509565b3480156109cc57600080fd5b5061047d61151e565b3480156109e157600080fd5b5061047d611524565b3480156109f657600080fd5b5061045460048036036060811015610a0d57600080fd5b506001600160a01b0381358116916020810135909116906040013561152a565b348015610a3957600080fd5b506104da60048036036020811015610a5057600080fd5b503515156115d8565b348015610a6557600080fd5b5061047d611615565b348015610a7a57600080fd5b5061045461161b565b348015610a8f57600080fd5b5061045460048036036020811015610aa657600080fd5b50356001600160a01b0316611629565b348015610ac257600080fd5b5061047d60048036036040811015610ad957600080fd5b506001600160a01b0381358116916020013516611647565b348015610afd57600080fd5b506104da60048036036040811015610b1457600080fd5b506001600160a01b0381351690602001351515611672565b348015610b3857600080fd5b5061047d611717565b348015610b4d57600080fd5b5061045460048036036060811015610b6457600080fd5b506001600160a01b0381358116916020810135909116906040013561171d565b348015610b9057600080fd5b506104da60048036036040811015610ba757600080fd5b506001600160a01b0381351690602001351515611787565b348015610bcb57600080fd5b5061047d61183e565b348015610be057600080fd5b506104da60048036036020811015610bf757600080fd5b50356001600160a01b0316611844565b348015610c1357600080fd5b5061047d61185e565b348015610c2857600080fd5b506104da60048036036040811015610c3f57600080fd5b506001600160a01b0381351690602001351515611864565b348015610c6357600080fd5b5061047d6119be565b348015610c7857600080fd5b5061069a6119c4565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b6000610d24338484611a6e565b5060015b92915050565b600c5481565b60125490565b610d426112a5565b610d4b57600080fd5b600692909255600755600855565b6000826001600160a01b038116610d6f57600080fd5b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914610e1c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601582528381203382529091529190912054610df7918590611b5a565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b610e27858585611bf1565b50600195945050505050565b610e3b6112a5565b610e4457600080fd5b600392909255600455600555565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00546012549192610ebe929091610eb89190611ed2565b90611ed2565b905090565b610ecb6112a5565b610ed457600080fd5b601660029054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050505050565b601281565b610f606112a5565b610f6957600080fd5b601a80546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b60025460ff1690565b610fa66112a5565b610faf57600080fd5b601355565b3360009081526015602090815260408083206001600160a01b0386168452909152812054610fe29083611f14565b3360008181526015602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60125481565b600d546001600160a01b031681565b60116020526000908152604090205460ff1681565b6110796112a5565b61108257600080fd5b80156110a0576016805461ff001916610100831515021790556110b4565b6016805461ff001916610100831515021790555b50565b601a546001600160a01b031681565b6110ce6112a5565b6110d757600080fd5b601b805460ff60a01b1916600160a01b179055600954156110fd576110fd600954611f6e565b600a541561111057611110600a54611fd4565b600b541561112357611123600b54612037565b601b805460ff60a01b19169055565b6001600160a01b031660009081526014602052604090205490565b6111556112a5565b61115e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b50505050565b61121f6112a5565b61122857600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611260573d6000803e3d6000fd5b505050565b60055481565b60045481565b6017546001600160a01b031681565b601b54600160a01b900460ff161590565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60075481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b6113296112a5565b61133257600080fd5b620b71b08110611389576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601855565b3360009081526015602090815260408083206001600160a01b03861684529091528120548083106113e2573360009081526015602090815260408083206001600160a01b0388168452909152812055611411565b6113ec8184611ed2565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61147f6112a5565b61148857600080fd5b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b600e546001600160a01b031681565b6019546001600160a01b031681565b6000826001600160a01b0381166114ea57600080fd5b6114f5338585611bf1565b506001949350505050565b60165460ff1681565b60106020526000908152604090205460ff1681565b600b5481565b60085481565b60006115346112a5565b61153d57600080fd5b6016546040805163e5711e8b60e01b81526001600160a01b0387811660048301528681166024830152604482018690529151620100009093049091169163e5711e8b916064808201926020929091908290030181600087803b1580156115a257600080fd5b505af11580156115b6573d6000803e3d6000fd5b505050506040513d60208110156115cc57600080fd5b505190505b9392505050565b6115e06112a5565b6115e957600080fd5b8015611602576016805460ff19168215151790556110b4565b6016805482151560ff1990911617905550565b600a5481565b601654610100900460ff1681565b6001600160a01b03166000908152600f602052604090205460ff1690565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b61167a6112a5565b61168357600080fd5b6001600160a01b0382166000908152600f602052604090205460ff16151581151514156116ec576040805162461bcd60e51b8152602060048201526012602482015271115c9c9bdc8e88139bdd0818da185b99d95960721b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60135481565b60006117276112a5565b61173057600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115a257600080fd5b61178f6112a5565b61179857600080fd5b8015611801576001600160a01b03821660009081526010602052604090205460ff1615611801576040805162461bcd60e51b81526020600482015260126024820152715061697220416c726561647920536574212160701b604482015290519081900360640190fd5b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586161790556011909152902080549091166001179055565b60035481565b61184c6112a5565b61185557600080fd5b6110b4816120ce565b60065481565b61186c6112a5565b61187557600080fd5b6001600160a01b03821630148015906118a757506001600160a01b03821660009081526010602052604090205460ff16155b6118b057600080fd5b6001600160a01b0382166000908152601160205260409020805460ff191682158015919091179091556119535760165460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292516201000090940416926314b6ca969260448084019391929182900301818387803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506119ba565b6016546201000090046001600160a01b03166314b6ca968361197481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b5050565b60095481565b601b546001600160a01b031681565b6000826119e257506000610d28565b828202828482816119ef57fe5b04146115d15760405162461bcd60e51b81526004018080602001828103825260218152602001806127f46021913960400191505060405180910390fd5b60006115d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b6001600160a01b038316611ab35760405162461bcd60e51b81526004018080602001828103825260248152602001806128156024913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b81526004018080602001828103825260228152602001806127d26022913960400191505060405180910390fd5b6001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008184841115611be95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bae578181015183820152602001611b96565b50505050905090810190601f168015611bdb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601b54600090600160a01b900460ff1615611c1857611c118484846121ad565b90506115d1565b611c20612222565b15611c2d57611c2d612280565b611c356122b9565b15611c4257611c426122fc565b6001600160a01b038416600090815260146020526040902054611c659083611ed2565b6001600160a01b038516600090815260146020526040812091909155611c8b8585612322565b611c955782611ca0565b611ca08585856123b4565b6001600160a01b038516600090815260146020526040902054909150611cc69082611f14565b6001600160a01b0380861660009081526014602090815260408083209490945591881681526011909152205460ff16611d73576016546201000090046001600160a01b03166314b6ca9686611d1a81611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d71575060015b505b6001600160a01b03841660009081526011602052604090205460ff16611e0d576016546201000090046001600160a01b03166314b6ca9685611db481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611dfa57600080fd5b505af1925050508015611e0b575060015b505b601660029054906101000a90046001600160a01b03166001600160a01b031663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e7b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006115d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b5a565b6000828201838110156115d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600954600090611f7f906002611a2c565b90506000611f9882600954611ed290919063ffffffff16565b905047611fa483612586565b6000611fb04783611ed2565b600954909150611fc09086611ed2565b600955611fcd8382612719565b5050505050565b47611fde82612586565b6000611fea4783611ed2565b600a54909150611ffa9084611ed2565b600a55600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611211573d6000803e3d6000fd5b4761204182612586565b600061204d4783611ed2565b600b5490915061205d9084611ed2565b600b81905550601660029054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b357600080fd5b505af1935050505080156120c5575060015b61126057611260565b6001600160a01b0381166120e157600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611bae578181015183820152602001611b96565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0383166000908152601460205260408120546121d09083611ed2565b6001600160a01b0380861660009081526014602052604080822093909355908516815220546121ff9083611f14565b6001600160a01b0384166000908152601460205260409020555060019392505050565b60008061222e30611132565b6013546016549192508210159060ff1680156122545750601b54600160a01b900460ff16155b801561225d5750805b801561227957503360009081526010602052604090205460ff16155b9250505090565b601b805460ff60a01b1916600160a01b179055600954156122a6576122a6600954611f6e565b600a541561112357611123600a54611fd4565b601654600090610100900460ff1680156122dd5750601b54600160a01b900460ff16155b8015610ebe5750503360009081526010602052604090205460ff161590565b601b805460ff60a01b1916600160a01b179055600b541561112357611123600b54612037565b6001600160a01b0382166000908152600f602052604081205460ff168061236157506001600160a01b0382166000908152600f602052604090205460ff165b1561236e57506000610d28565b6001600160a01b03831660009081526010602052604090205460ff16806123ad57506001600160a01b03821660009081526010602052604090205460ff165b9050610d28565b6001600160a01b038316600090815260106020526040812054819081908190819060ff1615612463576123fe600c546123f8600354896119d390919063ffffffff16565b90611a2c565b6009805482019055600c5460045491945061241e916123f89089906119d3565b600a805482019055600c5460055491935061243e916123f89089906119d3565b600b805482019055905061245c816124568585611f14565b90611f14565b93506124fa565b6001600160a01b03871660009081526010602052604090205460ff16156124fa5761249f600c546123f8600654896119d390919063ffffffff16565b6009805482019055600c546007549194506124bf916123f89089906119d3565b600a805482019055600c546008549193506124df916123f89089906119d3565b600b80548201905590506124f7816124568585611f14565b93505b8315612570573060009081526014602052604090205461251a9085611f14565b30600081815260146020908152604091829020939093558051878152905191926001600160a01b038c16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b61257a8685611ed2565b98975050505050505050565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125b557fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561260957600080fd5b505afa15801561261d573d6000803e3d6000fd5b505050506040513d602081101561263357600080fd5b505181518290600190811061264457fe5b6001600160a01b039283166020918202929092010152601b5461266a9130911684611a6e565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126f05781810151838201526020016126d8565b505050509050019650505050505050600060405180830381600087803b158015610f3757600080fd5b601b546127319030906001600160a01b031684611a6e565b601b54600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156127a657600080fd5b505af11580156127ba573d6000803e3d6000fd5b50505050506040513d606081101561121157600080fdfe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a2646970667358221220026e25c1e15518979542b15ef8373867afd25467e483f3091f10dd21a1d90e0864736f6c63430007060033

Deployed Bytecode Sourcemap

19097:16037:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18821:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29067:189;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29067:189:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19597:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32976:102;;;;;;;;;;;;;:::i;30054:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30054:264:0;;;;;;;;;;;;:::i;:::-;;22353:447;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22353:447:0;;;;;;;;;;;;;;;;;:::i;29780:266::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29780:266:0;;;;;;;;;;;;:::i;31846:167::-;;;;;;;;;;;;;:::i;30706:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30706:182:0;;;;;;;:::i;20132:37::-;;;;;;;;;;;;;:::i;32201:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32201:138:0;-1:-1:-1;;;;;32201:138:0;;:::i;19007:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32860:104;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32860:104:0;;:::i;28671:388::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28671:388:0;;;;;;;;:::i;20178:55::-;;;;;;;;;;;;;:::i;19642:83::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19642:83:0;;;;;;;;;;;;;;20075:48;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20075:48:0;-1:-1:-1;;;;;20075:48:0;;:::i;27705:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27705:182:0;;;;:::i;20804:36::-;;;;;;;;;;;;;:::i;25509:279::-;;;;;;;;;;;;;:::i;33089:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33089:119:0;-1:-1:-1;;;;;33089:119:0;;:::i;18032:126::-;;;;;;;;;;;;;:::i;32114:79::-;;;;;;;;;;;;;:::i;30896:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30896:170:0;-1:-1:-1;;;;;30896:170:0;;:::i;19305:33::-;;;;;;;;;;;;;:::i;19262:36::-;;;;;;;;;;;;;:::i;20689:::-;;;;;;;;;;;;;:::i;32021:85::-;;;;;;;;;;;;;:::i;17767:79::-;;;;;;;;;;;;;:::i;17932:92::-;;;;;;;;;;;;;:::i;19390:37::-;;;;;;;;;;;;;:::i;18912:87::-;;;;;;;;;;;;;:::i;31670:168::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31670:168:0;;:::i;28091:572::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28091:572:0;;;;;;;;:::i;31484:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31484:178:0;;;;;;;;;;:::i;19732:33::-;;;;;;;;;;;;;:::i;20778:19::-;;;;;;;;;;;;;:::i;22130:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22130:215:0;;;;;;;;:::i;20464:35::-;;;;;;;;;;;;;:::i;20010:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20010:58:0;-1:-1:-1;;;;;20010:58:0;;:::i;19557:31::-;;;;;;;;;;;;;:::i;19434:34::-;;;;;;;;;;;;;:::i;31274:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31274:202:0;;;;;;;;;;;;;;;;;:::i;27501:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27501:196:0;;;;:::i;19517:33::-;;;;;;;;;;;;;:::i;20506:30::-;;;;;;;;;;;;;:::i;29652:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29652:120:0;-1:-1:-1;;;;;29652:120:0;;:::i;27895:188::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27895:188:0;;;;;;;;;;:::i;32646:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32646:206:0;;;;;;;;;;:::i;20242:76::-;;;;;;;;;;;;;:::i;31074:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31074:192:0;;;;;;;;;;;;;;;;;:::i;32347:291::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;32347:291:0;;;;;;;;;;:::i;19220:35::-;;;;;;;;;;;;;:::i;18166:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18166:109:0;-1:-1:-1;;;;;18166:109:0;;:::i;19347:36::-;;;;;;;;;;;;;:::i;30326:372::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30326:372:0;;;;;;;;;;:::i;19477:33::-;;;;;;;;;;;;;:::i;20847:32::-;;;;;;;;;;;;;:::i;18821:83::-;18891:5;18884:12;;;;;;;;-1:-1:-1;;18884:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18858:13;;18884:12;;18891:5;;18884:12;;18891:5;18884:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18821:83;:::o;29067:189::-;29170:4;29192:34;29201:10;29212:7;29220:5;29192:8;:34::i;:::-;-1:-1:-1;29244:4:0;29067:189;;;;;:::o;19597:36::-;;;;:::o;32976:102::-;33058:12;;32976:102;:::o;30054:264::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;30204:16:::1;:25:::0;;;;30240:16:::1;:32:::0;30283:14:::1;:27:::0;30054:264::o;22353:447::-;22496:4;22483:2;-1:-1:-1;;;;;20602:18:0;;20594:27;;;;;;-1:-1:-1;;;;;22527:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;;;22545:10:::1;22527:29:::0;;;;;;;;-1:-1:-1;;22527:44:0::1;22523:207;;22620:98;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;22620:98:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;22620:17:0;::::1;-1:-1:-1::0;22620:17:0;;;:11:::1;:17:::0;;;;;22656:10:::1;22620:61:::0;;;;;;;;;;:98:::1;::::0;22686:5;;22620:65:::1;:98::i;:::-;-1:-1:-1::0;;;;;22588:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;;;22606:10:::1;22588:29:::0;;;;;;;:130;22523:207:::1;22740:30;22754:4;22760:2;22764:5;22740:13;:30::i;:::-;-1:-1:-1::0;22788:4:0::1;::::0;22353:447;-1:-1:-1;;;;;22353:447:0:o;29780:266::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;29935:15:::1;:24:::0;;;;29970:15:::1;:31:::0;30012:13:::1;:26:::0;29780:266::o;31846:167::-;31983:9;:21;;;;19812:42;31899:7;31956:21;;;;;31939:12;;31899:7;;31939:66;;31983:21;;31939:39;;:12;:16;:39::i;:::-;:43;;:66::i;:::-;31919:86;;31846:167;:::o;30706:182::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;30815:11:::1;;;;;;;;;-1:-1:-1::0;;;;;30815:11:0::1;-1:-1:-1::0;;;;;30815:35:0::1;;30851:10;30863:16;30815:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30706:182:::0;;:::o;20132:37::-;20167:2;20132:37;:::o;32201:138::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;32264:12:::1;:41:::0;;-1:-1:-1;;;;;32264:41:0;;::::1;-1:-1:-1::0;;;;;;32264:41:0;;::::1;::::0;::::1;::::0;;;32316:4:::1;:15:::0;;;;::::1;;::::0;;32201:138::o;19007:83::-;19073:9;;;;19007:83;:::o;32860:104::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;32929::::1;:27:::0;32860:104::o;28671:388::-;28840:10;28771:4;28828:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28828:56:0;;;;;;;;;;:72;;28889:10;28828:60;:72::i;:::-;28805:10;28793:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28793:32:0;;;;;;;;;;;;:107;;;28916:113;;;;;;28793:32;;28916:113;;;;;;;;;;;-1:-1:-1;29047:4:0;28671:388;;;;:::o;20178:55::-;;;;:::o;19642:83::-;;;-1:-1:-1;;;;;19642:83:0;;:::o;20075:48::-;;;;;;;;;;;;;;;:::o;27705:182::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;27775:5:::1;27772:108;;;27797:11;:19:::0;;-1:-1:-1;;27797:19:0::1;;::::0;::::1;;;;::::0;;27772:108:::1;;;27849:11;:19:::0;;-1:-1:-1;;27849:19:0::1;;::::0;::::1;;;;::::0;;27772:108:::1;27705:182:::0;:::o;20804:36::-;;;-1:-1:-1;;;;;20804:36:0;;:::o;25509:279::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;20947:6:::1;:13:::0;;-1:-1:-1;;;;20947:13:0::1;-1:-1:-1::0;;;20947:13:0::1;::::0;;25572:18:::2;::::0;:22;25569:63:::2;;25596:36;25613:18;;25596:16;:36::i;:::-;25647:18;::::0;:22;25644:63:::2;;25671:36;25688:18;;25671:16;:36::i;:::-;25721:16;::::0;:20;25718:62:::2;;25743:37;25763:16;;25743:19;:37::i;:::-;20983:6:::1;:14:::0;;-1:-1:-1;;;;20983:14:0::1;::::0;;25509:279::o;33089:119::-;-1:-1:-1;;;;;33182:18:0;33155:7;33182:18;;;:9;:18;;;;;;;33089:119::o;18032:126::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;18113:6:::1;::::0;18094:26:::1;::::0;18113:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;18113:6:0::1;::::0;18094:26:::1;::::0;;;::::1;18131:6;:19:::0;;-1:-1:-1;;;;;;18131:19:0::1;::::0;;18032:126::o;32114:79::-;32173:4;;;;;;;;;-1:-1:-1;;;;;32173:4:0;-1:-1:-1;;;;;32156:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32114:79::o;30896:170::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;31022:36:::1;::::0;30990:21:::1;::::0;-1:-1:-1;;;;;31022:27:0;::::1;::::0;:36;::::1;;;::::0;30990:21;;30972:15:::1;31022:36:::0;30972:15;31022:36;30990:21;31022:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17915:1;30896:170:::0;:::o;19305:33::-;;;;:::o;19262:36::-;;;;:::o;20689:::-;;;-1:-1:-1;;;;;20689:36:0;;:::o;32021:85::-;32092:6;;-1:-1:-1;;;32092:6:0;;;;32091:7;;32021:85::o;17767:79::-;17832:6;;;;;-1:-1:-1;;;;;17832:6:0;;17767:79::o;17932:92::-;18010:6;;;;;-1:-1:-1;;;;;18010:6:0;17996:10;:20;;17932:92::o;19390:37::-;;;;:::o;18912:87::-;18984:7;18977:14;;;;;;;;-1:-1:-1;;18977:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18951:13;;18977:14;;18984:7;;18977:14;;18984:7;18977:14;;;;;;;;;;;;;;;;;;;;;;;;31670:168;17894:9;:7;:9::i;:::-;17886:18;;;;;;31759:6:::1;31753:3;:12;31745:54;;;::::0;;-1:-1:-1;;;31745:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31810:14;:20:::0;31670:168::o;28091:572::-;28249:10;28196:4;28237:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28237:32:0;;;;;;;;;;28284:27;;;28280:225;;28340:10;28363:1;28328:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28328:32:0;;;;;;;;;:36;28280:225;;;28432:61;:8;28463:15;28432:12;:61::i;:::-;28409:10;28397:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28397:32:0;;;;;;;;;:96;28280:225;28543:10;28590:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28520:113:0;;28590:32;;;;;;;;;;;28520:113;;;;;;;;;28543:10;28520:113;;;;;;;;;;;-1:-1:-1;28651:4:0;;28091:572;-1:-1:-1;;;28091:572:0:o;31484:178::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;31576:23:::1;:36:::0;;-1:-1:-1;;;;;31576:36:0;;::::1;-1:-1:-1::0;;;;;;31576:36:0;;::::1;;::::0;;;31623:18:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;31484:178::o;19732:33::-;;;-1:-1:-1;;;;;19732:33:0;;:::o;20778:19::-;;;-1:-1:-1;;;;;20778:19:0;;:::o;22130:215::-;22257:4;22235:2;-1:-1:-1;;;;;20602:18:0;;20594:27;;;;;;22279:36:::1;22293:10;22305:2;22309:5;22279:13;:36::i;:::-;-1:-1:-1::0;22333:4:0::1;::::0;22130:215;-1:-1:-1;;;;22130:215:0:o;20464:35::-;;;;;;:::o;20010:58::-;;;;;;;;;;;;;;;:::o;19557:31::-;;;;:::o;19434:34::-;;;;:::o;31274:202::-;31381:12;17894:9;:7;:9::i;:::-;17886:18;;;;;;31413:11:::1;::::0;:55:::1;::::0;;-1:-1:-1;;;31413:55:0;;-1:-1:-1;;;;;31413:55:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;:11;;;::::1;::::0;;::::1;::::0;:23:::1;::::0;:55;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;31413:11:0;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31413:55:0;;-1:-1:-1;17915:1:0::1;31274:202:::0;;;;;:::o;27501:196::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;27575:5:::1;27572:118;;;27597:16;:24:::0;;-1:-1:-1;;27597:24:0::1;::::0;::::1;;;::::0;;27572:118:::1;;;27654:16;:24:::0;;;::::1;;-1:-1:-1::0;;27654:24:0;;::::1;;::::0;;27501:196;:::o;19517:33::-;;;;:::o;20506:30::-;;;;;;;;;:::o;29652:120::-;-1:-1:-1;;;;;29738:26:0;29714:4;29738:26;;;:19;:26;;;;;;;;;29652:120::o;27895:188::-;-1:-1:-1;;;;;28047:19:0;;;28015:7;28047:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;27895:188::o;32646:206::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;-1:-1:-1;;;;;32737:26:0;::::1;;::::0;;;:19:::1;:26;::::0;;;;;::::1;;:37;;::::0;::::1;;;;32729:68;;;::::0;;-1:-1:-1;;;32729:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32729:68:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32808:26:0;;;::::1;;::::0;;;:19:::1;:26;::::0;;;;:36;;-1:-1:-1;;32808:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32646:206::o;20242:76::-;;;;:::o;31074:192::-;31179:12;17894:9;:7;:9::i;:::-;17886:18;;;;;;31217:12:::1;-1:-1:-1::0;;;;;31210:29:0::1;;31240:9;31251:6;31210:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;31210:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;32347:291:::0;17894:9;:7;:9::i;:::-;17886:18;;;;;;32438:7:::1;32435:102;;;-1:-1:-1::0;;;;;32471:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;32470:33;32462:63;;;::::0;;-1:-1:-1;;;32462:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32462:63:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32547:32:0;;::::1;;::::0;;;:25:::1;:32;::::0;;;;;;;:42;;;::::1;;-1:-1:-1::0;;32547:42:0;;::::1;;::::0;;32600:16:::1;:23:::0;;;;;:30;;;;::::1;32547:42:::0;32600:30:::1;::::0;;32347:291::o;19220:35::-;;;;:::o;18166:109::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;18239:28:::1;18258:8;18239:18;:28::i;19347:36::-:0;;;;:::o;30326:372::-;17894:9;:7;:9::i;:::-;17886:18;;;;;;-1:-1:-1;;;;;30422:23:0;::::1;30440:4;30422:23;::::0;::::1;::::0;:61:::1;;-1:-1:-1::0;;;;;;30450:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;;::::1;;30449:34;30422:61;30414:70;;;::::0;::::1;;-1:-1:-1::0;;;;;30495:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;30495:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;30541:150:::1;;30568:11;::::0;:31:::1;::::0;;-1:-1:-1;;;30568:31:0;;-1:-1:-1;;;;;30568:31:0;;::::1;;::::0;::::1;::::0;30597:1:::1;30568:31:::0;;;;;;;;:11;;;::::1;;::::0;:20:::1;::::0;:31;;;;;30597:1;;30568:31;;;;;;30597:1;30568:11;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30541:150;;;30632:11;::::0;;;::::1;-1:-1:-1::0;;;;;30632:11:0::1;:20;30653:6:::0;30661:17:::1;30653:6:::0;30661:9:::1;:17::i;:::-;30632:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;30632:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;30541:150;30326:372:::0;;:::o;19477:33::-;;;;:::o;20847:32::-;;;-1:-1:-1;;;;;20847:32:0;;:::o;2449:250::-;2507:7;2531:6;2527:47;;-1:-1:-1;2561:1:0;2554:8;;2527:47;2598:5;;;2602:1;2598;:5;:1;2622:5;;;;;:10;2614:56;;;;-1:-1:-1;;;2614:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2707:132;2765:7;2792:39;2796:1;2799;2792:39;;;;;;;;;;;;;;;;;:3;:39::i;29264:380::-;-1:-1:-1;;;;;29400:19:0;;29392:68;;;;-1:-1:-1;;;29392:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29479:21:0;;29471:68;;;;-1:-1:-1;;;29471:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29552:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;29604:32;;;;;;;;;;;;;;;;;29264:380;;;:::o;2215:226::-;2335:7;2371:12;2363:6;;;;2355:29;;;;-1:-1:-1;;;2355:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2407:5:0;;;2215:226::o;23078:1054::-;23229:6;;23204:4;;-1:-1:-1;;;23229:6:0;;;;23225:87;;;23259:41;23274:6;23282:9;23293:6;23259:14;:41::i;:::-;23252:48;;;;23225:87;23328:20;:18;:20::i;:::-;23324:67;;;23365:14;:12;:14::i;:::-;23407:16;:14;:16::i;:::-;23403:59;;;23440:10;:8;:10::i;:::-;-1:-1:-1;;;;;23502:17:0;;;;;;:9;:17;;;;;;:29;;23524:6;23502:21;:29::i;:::-;-1:-1:-1;;;;;23482:17:0;;;;;;:9;:17;;;;;:49;;;;23577:32;23492:6;23599:9;23577:13;:32::i;:::-;:104;;23675:6;23577:104;;;23625:34;23633:6;23641:9;23652:6;23625:7;:34::i;:::-;-1:-1:-1;;;;;23717:20:0;;;;;;:9;:20;;;;;;23552:129;;-1:-1:-1;23717:40:0;;23552:129;23717:24;:40::i;:::-;-1:-1:-1;;;;;23694:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;23774:24;;;;;:16;:24;;;;;;;23770:96;;23805:11;;;;;-1:-1:-1;;;;;23805:11:0;:20;23826:6;23834:17;23826:6;23834:9;:17::i;:::-;23805:47;;;;;;;;;;;;;-1:-1:-1;;;;;23805:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23801:63;;-1:-1:-1;;;;;23880:27:0;;;;;;:16;:27;;;;;;;;23876:105;;23914:11;;;;;-1:-1:-1;;;;;23914:11:0;:20;23935:9;23946:20;23935:9;23946;:20::i;:::-;23914:53;;;;;;;;;;;;;-1:-1:-1;;;;;23914:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23910:69;;23997:11;;;;;;;;;-1:-1:-1;;;;;23997:11:0;-1:-1:-1;;;;;23997:19:0;;24017:14;;23997:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23993:51;24077:9;-1:-1:-1;;;;;24061:41:0;24070:6;-1:-1:-1;;;;;24061:41:0;;24087:14;24061:41;;;;;;;;;;;;;;;;;;-1:-1:-1;24120:4:0;;23078:1054;-1:-1:-1;;;;23078:1054:0:o;2071:136::-;2129:7;2156:43;2160:1;2163;2156:43;;;;;;;;;;;;;;;;;:3;:43::i;1882:181::-;1940:7;1972:5;;;1996:6;;;;1988:46;;;;;-1:-1:-1;;;1988:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;33573:431;33644:18;;33632:9;;33644:25;;33667:1;33644:22;:25::i;:::-;33632:37;;33680:14;33697:28;33720:4;33697:18;;:22;;:28;;;;:::i;:::-;33680:45;-1:-1:-1;33757:21:0;33789:22;33806:4;33789:16;:22::i;:::-;33822:19;33844:40;:21;33870:13;33844:25;:40::i;:::-;33916:18;;33822:62;;-1:-1:-1;33916:31:0;;33939:7;33916:22;:31::i;:::-;33895:18;:52;33958:38;33971:9;33981:14;33958:12;:38::i;:::-;33573:431;;;;;:::o;33216:349::-;33296:21;33328:25;33345:7;33328:16;:25::i;:::-;33364:19;33386:40;:21;33412:13;33386:25;:40::i;:::-;33458:18;;33364:62;;-1:-1:-1;33458:31:0;;33481:7;33458:22;:31::i;:::-;33437:18;:52;33508:23;;33500:57;;-1:-1:-1;;;;;33508:23:0;;;;33500:57;;;;;33542:14;;33508:23;33500:57;33508:23;33500:57;33542:14;33508:23;33500:57;;;;;;;;;;;;;;;;;;;26216:363;26303:21;26335:25;26352:7;26335:16;:25::i;:::-;26371:20;26394:41;:21;26420:14;26394:25;:41::i;:::-;26465:16;;26371:64;;-1:-1:-1;26465:29:0;;26486:7;26465:20;:29::i;:::-;26446:16;:48;;;;26509:11;;;;;;;;;-1:-1:-1;;;;;26509:11:0;-1:-1:-1;;;;;26509:19:0;;26538:15;26509:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26505:65;;;;18283:187;-1:-1:-1;;;;;18357:22:0;;18349:31;;;;;;18417:6;;18396:38;;-1:-1:-1;;;;;18396:38:0;;;;18417:6;;;;;18396:38;;;;;18445:6;:17;;-1:-1:-1;;;;;18445:17:0;;;;;-1:-1:-1;;;;;;18445:17:0;;;;;;;;;18283:187::o;2847:225::-;2967:7;3002:12;2995:5;2987:28;;;;-1:-1:-1;;;2987:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3026:9;3042:1;3038;:5;;;;;;;2847:225;-1:-1:-1;;;;;2847:225:0:o;22808:262::-;-1:-1:-1;;;;;22961:15:0;;22926:4;22961:15;;;:9;:15;;;;;;:27;;22981:6;22961:19;:27::i;:::-;-1:-1:-1;;;;;22943:15:0;;;;;;;:9;:15;;;;;;:45;;;;23015:13;;;;;;;:25;;23033:6;23015:17;:25::i;:::-;-1:-1:-1;;;;;22999:13:0;;;;;;:9;:13;;;;;:41;-1:-1:-1;23058:4:0;22808:262;;;;;:::o;26940:357::-;26993:4;27012:28;27043:24;27061:4;27043:9;:24::i;:::-;27117:18;;27168:16;;27012:55;;-1:-1:-1;27093:42:0;;;;27168:16;;:41;;;;-1:-1:-1;27203:6:0;;-1:-1:-1;;;27203:6:0;;;;27202:7;27168:41;:66;;;;;27227:7;27168:66;:121;;;;-1:-1:-1;27278:10:0;27252:37;;;;:25;:37;;;;;;;;27251:38;27168:121;27148:141;;;;26940:357;:::o;25796:254::-;20947:6;:13;;-1:-1:-1;;;;20947:13:0;-1:-1:-1;;;20947:13:0;;;25854:18:::1;::::0;:22;25851:89:::1;;25892:36;25909:18;;25892:16;:36::i;:::-;25955:18;::::0;:22;25952:89:::1;;25993:36;26010:18;;25993:16;:36::i;27305:186::-:0;27392:11;;27354:4;;27392:11;;;;;:35;;;;-1:-1:-1;27421:6:0;;-1:-1:-1;;;27421:6:0;;;;27420:7;27392:35;:90;;;;-1:-1:-1;;27471:10:0;27445:37;;;;:25;:37;;;;;;;;27444:38;;27305:186::o;26058:150::-;20947:6;:13;;-1:-1:-1;;;;20947:13:0;-1:-1:-1;;;20947:13:0;;;26110:16:::1;::::0;:20;26107:88:::1;;26146:37;26166:16;;26146:19;:37::i;26587:345::-:0;-1:-1:-1;;;;;26711:25:0;;26686:4;26711:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26740:23:0;;;;;;:19;:23;;;;;;;;26711:52;26708:217;;;-1:-1:-1;26786:5:0;26779:12;;26708:217;-1:-1:-1;;;;;26848:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;26883:29:0;;;;;;:25;:29;;;;;;;;26848:64;26840:73;;;;24140:1361;-1:-1:-1;;;;;24384:33:0;;24261:7;24384:33;;;:25;:33;;;;;;24261:7;;;;;;;;24384:33;;24381:887;;;24442:47;24474:14;;24442:27;24453:15;;24442:6;:10;;:27;;;;:::i;:::-;:31;;:47::i;:::-;24504:18;:26;;;;;;24584:14;;24563:15;;24435:54;;-1:-1:-1;24552:47:0;;:27;;:6;;:10;:27::i;:47::-;24614:18;:26;;;;;;24692:14;;24673:13;;24545:54;;-1:-1:-1;24662:45:0;;:25;;:6;;:10;:25::i;:45::-;24722:16;:24;;;;;;24655:52;-1:-1:-1;24775:24:0;24655:52;24775:14;:4;24784;24775:8;:14::i;:::-;:18;;:24::i;:::-;24763:36;;24381:887;;;-1:-1:-1;;;;;24829:36:0;;;;;;:25;:36;;;;;;;;24826:442;;;24890:48;24923:14;;24890:28;24901:16;;24890:6;:10;;:28;;;;:::i;:48::-;24953:18;:26;;;;;;25034:14;;25012:16;;24883:55;;-1:-1:-1;25001:48:0;;:28;;:6;;:10;:28::i;:48::-;25064:18;:26;;;;;;25143:14;;25123;;24994:55;;-1:-1:-1;25112:46:0;;:26;;:6;;:10;:26::i;:46::-;25173:16;:24;;;;;;25105:53;-1:-1:-1;25226:24:0;25105:53;25226:14;:4;25235;25226:8;:14::i;:24::-;25214:36;;24826:442;25283:13;;25280:173;;25358:4;25340:24;;;;:9;:24;;;;;;:39;;25369:9;25340:28;:39::i;:::-;25331:4;25313:24;;;;:9;:24;;;;;;;;;:66;;;;25399:42;;;;;;;25331:4;;-1:-1:-1;;;;;25399:42:0;;;;;;;;;;;;;25280:173;25472:21;:6;25483:9;25472:10;:21::i;:::-;25465:28;24140:1361;-1:-1:-1;;;;;;;;24140:1361:0:o;34526:564::-;34676:16;;;34690:1;34676:16;;;;;;;;34652:21;;34676:16;;;;;;;;;;-1:-1:-1;34676:16:0;34652:40;;34721:4;34703;34708:1;34703:7;;;;;;;;-1:-1:-1;;;;;34703:23:0;;;:7;;;;;;;;;;:23;;;;34747:6;;:13;;;-1:-1:-1;;;34747:13:0;;;;:6;;;;;:11;;:13;;;;;34703:7;;34747:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34747:13:0;34737:7;;:4;;34742:1;;34737:7;;;;;;-1:-1:-1;;;;;34737:23:0;;;:7;;;;;;;;;:23;34805:6;;34773:53;;34790:4;;34805:6;34814:11;34773:8;:53::i;:::-;34865:6;;:215;;-1:-1:-1;;;34865:215:0;;;;;;;;:6;:215;;;;;;35034:4;34865:215;;;;;;35054:15;34865:215;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34865:6:0;;;;:57;;34937:11;;35007:4;;35034;35054:15;34865:215;;;;;;;;;;;;;;;;:6;:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34012:506;34192:6;;34160:53;;34177:4;;-1:-1:-1;;;;;34192:6:0;34201:11;34160:8;:53::i;:::-;34254:6;;34449:18;;34254:254;;;-1:-1:-1;;;34254:254:0;;34317:4;34254:254;;;;;;;;;;:6;:254;;;;;;;;;;-1:-1:-1;;;;;34449:18:0;;;34254:254;;;;34482:15;34254:254;;;;;;:6;;;;;:22;;34284:9;;34254:254;;;;;;;;;;;;;;;34284:9;34254:6;:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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