ETH Price: $2,675.72 (-2.53%)

Token

Proof of Satoshi (BTC 2.0)
 

Overview

Max Total Supply

1,000,000,000 BTC 2.0

Holders

27

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.651303141216061025 BTC 2.0

Value
$0.00
0x741a624babe24eefda00b4aa68c6b0a166c44b95
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:
BTC2

Compiler Version
v0.7.4+commit.3f05b770

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-10
*/

/**
Proof of Satoshi (BTC 2.0)
TG: t.me/ProofOfSatoshiPortal

5% USDC Reward
*/
// 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 IUniSwapPair {
		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 IUniSwapRouter{
		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 IUniSwapFactory {
		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); 

    IUniSwapRouter 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)
        ? IUniSwapRouter(_router)
        : IUniSwapRouter(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 BTC2 is ERC20Detailed, Ownable {

    using SafeMath for uint256;
    using SafeMathInt for int256;

    uint256 public buyLiquidityFee = 0;
    uint256 public buyMarketingFee = 0;
    uint256 public buyRewardsFee = 50;

    uint256 public sellLiquidityFee = 0;
    uint256 public sellMarketingFee = 940;
    uint256 public sellRewardsFee = 50;

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

    uint256 public feeDenominator = 1000;

    address public _marketingWalletAddress = 0x6828d3456c5dc1954ba2379C10462F09883a09fd;
    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 = 1_000_000_000 * (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;
    IUniSwapPair public pairContract;
    IUniSwapRouter public router;

    bool inSwap = false;

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

    constructor() ERC20Detailed("Proof of Satoshi", "BTC 2.0", uint8(DECIMALS)) Ownable() {

        router = IUniSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); 

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

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

        pairContract = IUniSwapPair(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 {
        IUniSwapPair(pair).sync();
    }

    function setLP(address _address) external onlyOwner {
        pairContract = IUniSwapPair(_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 IUniSwapPair","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 IUniSwapRouter","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"}]

6080604052600060038190556004819055603260058190556006919091556103ac60075560088190556103e8600c819055600d8054736828d3456c5dc1954ba2379c10462f09883a09fd6001600160a01b03199091161790556b033b2e3c9fd0803ce800000060128190556200009b92620000879190620005a5602090811b620019d317901c565b6200060c60201b62001a2c1790919060201c565b6013556016805461ff001960ff19909116600117166101001790556207a120601855601b805460ff60a01b19169055348015620000d757600080fd5b50604080518082018252601081526f50726f6f66206f66205361746f73686960801b602080830191825283518085019094526007845266042544320322e360cc1b90840152815191929160129162000133916000919062000711565b5081516200014990600190602085019062000711565b506002805460ff191660ff9290921691909117610100600160a81b03191661010033021790555050601b8054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620001de57600080fd5b505afa158015620001f3573d6000803e3d6000fd5b505050506040513d60208110156200020a57600080fd5b5051601b54604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200025957600080fd5b505afa1580156200026e573d6000803e3d6000fd5b505050506040513d60208110156200028557600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002d557600080fd5b505af1158015620002ea573d6000803e3d6000fd5b505050506040513d60208110156200030157600080fd5b5051601980546001600160a01b039283166001600160a01b0319918216178255306000908152601560209081526040808320601b5487168452825280832060001990559354601a8054851691909616908117909555938152601090935291819020805460ff19166001179055600e8054909216331790915551737a250d5630b4cf539739df2c5dacb4c659f2488d906200039b90620007a6565b6001600160a01b03909116815260405190819003602001906000f080158015620003c9573d6000803e3d6000fd5b506016805462010000600160b01b031916620100006001600160a01b039384168102919091179182905560178054919092049092166001600160a01b03199092169190911790556001601160006200042062000656565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556019549091168152601190925280822080548416600190811790915530835290822080548416821790557f97847ee99463795296047093514439c3127772df3715e628aa85601cf854171680548416821790558180527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b780549093168117909255600f90620004dc62000656565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600f90925281208054909216600117909155601254906014906200052e62000656565b6001600160a01b031681526020810191909152604001600020556200055262000656565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040518082815260200191505060405180910390a3620007cb565b600082620005b65750600062000606565b82820282848281620005c457fe5b0414620006035760405162461bcd60e51b81526004018080602001828103825260218152602001806200406a6021913960400191505060405180910390fd5b90505b92915050565b60006200060383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200066a60201b60201c565b60025461010090046001600160a01b031690565b60008183620006fa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620006be578181015183820152602001620006a4565b50505050905090810190601f168015620006ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200070757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000749576000855562000794565b82601f106200076457805160ff191683800117855562000794565b8280016001018555821562000794579182015b828111156200079457825182559160200191906001019062000777565b50620007a2929150620007b4565b5090565b611022806200304883390190565b5b80821115620007a25760008155600101620007b5565b61286d80620007db6000396000f3fe6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214610c07578063f708a64f14610c1c578063f832679514610c57578063f887ea4014610c6c5761038c565b8063e5711e8b14610b41578063ea8b2c4414610b84578063f11a24d314610bbf578063f2fde38b14610bd45761038c565b8063d4399790116100dc578063d439979014610a83578063dd62ed3e14610ab6578063dde04b9514610af1578063e2f4560514610b2c5761038c565b8063cfbac92f14610a2d578063cfe0e61914610a59578063d4057d7e14610a6e5761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f51461098d578063b677814c146109c0578063bb8d5131146109d5578063c6501c89146109ea5761038c565b8063a8aa1b311461092a578063a9059cbb1461093f578063ad64598a146109785761038c565b80639d1944f5116101ab5780639d1944f514610877578063a457c2d7146108a1578063a4b45c00146108da578063a715184d146109155761038c565b80638f32d59b14610838578063921369131461084d57806395d89b41146108625761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a04146107e45780637fb6df58146107f957806383b4ac681461080e5780638da5cb5b146108235761038c565b8063715018a614610772578063753d02a114610787578063764d72bf1461079c57806377a3b609146107cf5761038c565b80634bc6dd18116102905780634bc6dd18146106e95780634d709adf1461071557806351bc3c851461072a57806370a082311461073f5761038c565b80633eaaf86b146106705780634144d9e4146106855780634355855a146106b65761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146105af578063313ce567146105e2578063320d45341461060d57806339509351146106375761038c565b80632b112e49146105555780632d48e8961461056a5780632e0f26251461059a5761038c565b806318160ddd1161035f57806318160ddd1461048f5780631d865c30146104a457806323b872dd146104dc57806325519cf21461051f5761038c565b806306fdde0314610391578063095ea7b31461041b578063180b0d7e146104685761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610c81565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506104546004803603604081101561043e57600080fd5b506001600160a01b038135169060200135610d17565b604080519115158252519081900360200190f35b34801561047457600080fd5b5061047d610d2e565b60408051918252519081900360200190f35b34801561049b57600080fd5b5061047d610d34565b3480156104b057600080fd5b506104da600480360360608110156104c757600080fd5b5080359060208101359060400135610d3a565b005b3480156104e857600080fd5b50610454600480360360608110156104ff57600080fd5b506001600160a01b03813581169160208101359091169060400135610d59565b34801561052b57600080fd5b506104da6004803603606081101561054257600080fd5b5080359060208101359060400135610e33565b34801561056157600080fd5b5061047d610e52565b34801561057657600080fd5b506104da6004803603604081101561058d57600080fd5b5080359060200135610ec3565b3480156105a657600080fd5b5061047d610f53565b3480156105bb57600080fd5b506104da600480360360208110156105d257600080fd5b50356001600160a01b0316610f58565b3480156105ee57600080fd5b506105f7610f95565b6040805160ff9092168252519081900360200190f35b34801561061957600080fd5b506104da6004803603602081101561063057600080fd5b5035610f9e565b34801561064357600080fd5b506104546004803603604081101561065a57600080fd5b506001600160a01b038135169060200135610fb4565b34801561067c57600080fd5b5061047d611047565b34801561069157600080fd5b5061069a61104d565b604080516001600160a01b039092168252519081900360200190f35b3480156106c257600080fd5b50610454600480360360208110156106d957600080fd5b50356001600160a01b031661105c565b3480156106f557600080fd5b506104da6004803603602081101561070c57600080fd5b50351515611071565b34801561072157600080fd5b5061069a6110b7565b34801561073657600080fd5b506104da6110c6565b34801561074b57600080fd5b5061047d6004803603602081101561076257600080fd5b50356001600160a01b0316611132565b34801561077e57600080fd5b506104da61114d565b34801561079357600080fd5b506104da6111ad565b3480156107a857600080fd5b506104da600480360360208110156107bf57600080fd5b50356001600160a01b0316611217565b3480156107db57600080fd5b5061047d611265565b3480156107f057600080fd5b5061047d61126b565b34801561080557600080fd5b5061069a611271565b34801561081a57600080fd5b50610454611280565b34801561082f57600080fd5b5061069a611291565b34801561084457600080fd5b506104546112a5565b34801561085957600080fd5b5061047d6112bb565b34801561086e57600080fd5b506103a66112c1565b34801561088357600080fd5b506104da6004803603602081101561089a57600080fd5b5035611321565b3480156108ad57600080fd5b50610454600480360360408110156108c457600080fd5b506001600160a01b03813516906020013561138e565b3480156108e657600080fd5b506104da600480360360408110156108fd57600080fd5b506001600160a01b0381358116916020013516611477565b34801561092157600080fd5b5061069a6114b6565b34801561093657600080fd5b5061069a6114c5565b34801561094b57600080fd5b506104546004803603604081101561096257600080fd5b506001600160a01b0381351690602001356114d4565b34801561098457600080fd5b50610454611500565b34801561099957600080fd5b50610454600480360360208110156109b057600080fd5b50356001600160a01b0316611509565b3480156109cc57600080fd5b5061047d61151e565b3480156109e157600080fd5b5061047d611524565b3480156109f657600080fd5b5061045460048036036060811015610a0d57600080fd5b506001600160a01b0381358116916020810135909116906040013561152a565b348015610a3957600080fd5b506104da60048036036020811015610a5057600080fd5b503515156115d8565b348015610a6557600080fd5b5061047d611615565b348015610a7a57600080fd5b5061045461161b565b348015610a8f57600080fd5b5061045460048036036020811015610aa657600080fd5b50356001600160a01b0316611629565b348015610ac257600080fd5b5061047d60048036036040811015610ad957600080fd5b506001600160a01b0381358116916020013516611647565b348015610afd57600080fd5b506104da60048036036040811015610b1457600080fd5b506001600160a01b0381351690602001351515611672565b348015610b3857600080fd5b5061047d611717565b348015610b4d57600080fd5b5061045460048036036060811015610b6457600080fd5b506001600160a01b0381358116916020810135909116906040013561171d565b348015610b9057600080fd5b506104da60048036036040811015610ba757600080fd5b506001600160a01b0381351690602001351515611787565b348015610bcb57600080fd5b5061047d61183e565b348015610be057600080fd5b506104da60048036036020811015610bf757600080fd5b50356001600160a01b0316611844565b348015610c1357600080fd5b5061047d61185e565b348015610c2857600080fd5b506104da60048036036040811015610c3f57600080fd5b506001600160a01b0381351690602001351515611864565b348015610c6357600080fd5b5061047d6119be565b348015610c7857600080fd5b5061069a6119c4565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b6000610d24338484611a6e565b5060015b92915050565b600c5481565b60125490565b610d426112a5565b610d4b57600080fd5b600692909255600755600855565b6000826001600160a01b038116610d6f57600080fd5b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914610e1c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601582528381203382529091529190912054610df7918590611b5a565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b610e27858585611bf1565b50600195945050505050565b610e3b6112a5565b610e4457600080fd5b600392909255600455600555565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00546012549192610ebe929091610eb89190611ed2565b90611ed2565b905090565b610ecb6112a5565b610ed457600080fd5b601660029054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050505050565b601281565b610f606112a5565b610f6957600080fd5b601a80546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b60025460ff1690565b610fa66112a5565b610faf57600080fd5b601355565b3360009081526015602090815260408083206001600160a01b0386168452909152812054610fe29083611f14565b3360008181526015602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60125481565b600d546001600160a01b031681565b60116020526000908152604090205460ff1681565b6110796112a5565b61108257600080fd5b80156110a0576016805461ff001916610100831515021790556110b4565b6016805461ff001916610100831515021790555b50565b601a546001600160a01b031681565b6110ce6112a5565b6110d757600080fd5b601b805460ff60a01b1916600160a01b179055600954156110fd576110fd600954611f6e565b600a541561111057611110600a54611fd4565b600b541561112357611123600b54612037565b601b805460ff60a01b19169055565b6001600160a01b031660009081526014602052604090205490565b6111556112a5565b61115e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b50505050565b61121f6112a5565b61122857600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611260573d6000803e3d6000fd5b505050565b60055481565b60045481565b6017546001600160a01b031681565b601b54600160a01b900460ff161590565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60075481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b6113296112a5565b61133257600080fd5b620b71b08110611389576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601855565b3360009081526015602090815260408083206001600160a01b03861684529091528120548083106113e2573360009081526015602090815260408083206001600160a01b0388168452909152812055611411565b6113ec8184611ed2565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61147f6112a5565b61148857600080fd5b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b600e546001600160a01b031681565b6019546001600160a01b031681565b6000826001600160a01b0381166114ea57600080fd5b6114f5338585611bf1565b506001949350505050565b60165460ff1681565b60106020526000908152604090205460ff1681565b600b5481565b60085481565b60006115346112a5565b61153d57600080fd5b6016546040805163e5711e8b60e01b81526001600160a01b0387811660048301528681166024830152604482018690529151620100009093049091169163e5711e8b916064808201926020929091908290030181600087803b1580156115a257600080fd5b505af11580156115b6573d6000803e3d6000fd5b505050506040513d60208110156115cc57600080fd5b505190505b9392505050565b6115e06112a5565b6115e957600080fd5b8015611602576016805460ff19168215151790556110b4565b6016805482151560ff1990911617905550565b600a5481565b601654610100900460ff1681565b6001600160a01b03166000908152600f602052604090205460ff1690565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b61167a6112a5565b61168357600080fd5b6001600160a01b0382166000908152600f602052604090205460ff16151581151514156116ec576040805162461bcd60e51b8152602060048201526012602482015271115c9c9bdc8e88139bdd0818da185b99d95960721b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60135481565b60006117276112a5565b61173057600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115a257600080fd5b61178f6112a5565b61179857600080fd5b8015611801576001600160a01b03821660009081526010602052604090205460ff1615611801576040805162461bcd60e51b81526020600482015260126024820152715061697220416c726561647920536574212160701b604482015290519081900360640190fd5b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586161790556011909152902080549091166001179055565b60035481565b61184c6112a5565b61185557600080fd5b6110b4816120ce565b60065481565b61186c6112a5565b61187557600080fd5b6001600160a01b03821630148015906118a757506001600160a01b03821660009081526010602052604090205460ff16155b6118b057600080fd5b6001600160a01b0382166000908152601160205260409020805460ff191682158015919091179091556119535760165460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292516201000090940416926314b6ca969260448084019391929182900301818387803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506119ba565b6016546201000090046001600160a01b03166314b6ca968361197481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b5050565b60095481565b601b546001600160a01b031681565b6000826119e257506000610d28565b828202828482816119ef57fe5b04146115d15760405162461bcd60e51b81526004018080602001828103825260218152602001806127f36021913960400191505060405180910390fd5b60006115d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b6001600160a01b038316611ab35760405162461bcd60e51b81526004018080602001828103825260248152602001806128146024913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b81526004018080602001828103825260228152602001806127d16022913960400191505060405180910390fd5b6001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008184841115611be95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bae578181015183820152602001611b96565b50505050905090810190601f168015611bdb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601b54600090600160a01b900460ff1615611c1857611c118484846121ad565b90506115d1565b611c20612222565b15611c2d57611c2d612280565b611c356122b9565b15611c4257611c426122fc565b6001600160a01b038416600090815260146020526040902054611c659083611ed2565b6001600160a01b038516600090815260146020526040812091909155611c8b8585612322565b611c955782611ca0565b611ca08585856123b4565b6001600160a01b038516600090815260146020526040902054909150611cc69082611f14565b6001600160a01b0380861660009081526014602090815260408083209490945591881681526011909152205460ff16611d73576016546201000090046001600160a01b03166314b6ca9686611d1a81611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d71575060015b505b6001600160a01b03841660009081526011602052604090205460ff16611e0d576016546201000090046001600160a01b03166314b6ca9685611db481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611dfa57600080fd5b505af1925050508015611e0b575060015b505b601660029054906101000a90046001600160a01b03166001600160a01b031663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e7b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006115d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b5a565b6000828201838110156115d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600954600090611f7f906002611a2c565b90506000611f9882600954611ed290919063ffffffff16565b905047611fa483612586565b6000611fb04783611ed2565b600954909150611fc09086611ed2565b600955611fcd8382612718565b5050505050565b47611fde82612586565b6000611fea4783611ed2565b600a54909150611ffa9084611ed2565b600a55600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611211573d6000803e3d6000fd5b4761204182612586565b600061204d4783611ed2565b600b5490915061205d9084611ed2565b600b81905550601660029054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b357600080fd5b505af1935050505080156120c5575060015b61126057611260565b6001600160a01b0381166120e157600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611bae578181015183820152602001611b96565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0383166000908152601460205260408120546121d09083611ed2565b6001600160a01b0380861660009081526014602052604080822093909355908516815220546121ff9083611f14565b6001600160a01b0384166000908152601460205260409020555060019392505050565b60008061222e30611132565b6013546016549192508210159060ff1680156122545750601b54600160a01b900460ff16155b801561225d5750805b801561227957503360009081526010602052604090205460ff16155b9250505090565b601b805460ff60a01b1916600160a01b179055600954156122a6576122a6600954611f6e565b600a541561112357611123600a54611fd4565b601654600090610100900460ff1680156122dd5750601b54600160a01b900460ff16155b8015610ebe5750503360009081526010602052604090205460ff161590565b601b805460ff60a01b1916600160a01b179055600b541561112357611123600b54612037565b6001600160a01b0382166000908152600f602052604081205460ff168061236157506001600160a01b0382166000908152600f602052604090205460ff165b1561236e57506000610d28565b6001600160a01b03831660009081526010602052604090205460ff16806123ad57506001600160a01b03821660009081526010602052604090205460ff165b9050610d28565b6001600160a01b038316600090815260106020526040812054819081908190819060ff1615612463576123fe600c546123f8600354896119d390919063ffffffff16565b90611a2c565b6009805482019055600c5460045491945061241e916123f89089906119d3565b600a805482019055600c5460055491935061243e916123f89089906119d3565b600b805482019055905061245c816124568585611f14565b90611f14565b93506124fa565b6001600160a01b03871660009081526010602052604090205460ff16156124fa5761249f600c546123f8600654896119d390919063ffffffff16565b6009805482019055600c546007549194506124bf916123f89089906119d3565b600a805482019055600c546008549193506124df916123f89089906119d3565b600b80548201905590506124f7816124568585611f14565b93505b8315612570573060009081526014602052604090205461251a9085611f14565b30600081815260146020908152604091829020939093558051878152905191926001600160a01b038c16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b61257a8685611ed2565b98975050505050505050565b604080516002808252606080830184529260208301908036833701905050905030816000815181106125b457fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561260857600080fd5b505afa15801561261c573d6000803e3d6000fd5b505050506040513d602081101561263257600080fd5b505181518290600190811061264357fe5b6001600160a01b039283166020918202929092010152601b546126699130911684611a6e565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126ef5781810151838201526020016126d7565b505050509050019650505050505050600060405180830381600087803b158015610f3757600080fd5b601b546127309030906001600160a01b031684611a6e565b601b54600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156127a557600080fd5b505af11580156127b9573d6000803e3d6000fd5b50505050506040513d606081101561121157600080fdfe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122067f0973db063b206d4c0b4e256e10535b8ad42f66851b4fdd1e31f7027f14e1d64736f6c634300070400336080604052600180546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4817905569d3c21bcecceda1000000600c55610e10600d55620f4240600e5534801561005157600080fd5b506040516110223803806110228339818101604052602081101561007457600080fd5b50516001600160a01b03811661009e57737a250d5630b4cf539739df2c5dacb4c659f2488d6100a0565b805b600280546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610f48806100da6000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed146102d6578063f0fc6bca146102eb578063ffb2c47914610300578063ffd49c841461032a576100f3565b8063ce7c2ac214610211578063d0e30db014610262578063e2d2e2191461026a578063e5711e8b1461027f576100f3565b80632d48e896116100c65780632d48e896146101a25780633a98ef39146101d25780634fab0ae8146101e7578063997664d7146101fc576100f3565b806311ce023d146100f857806314b6ca961461011f57806326987b601461015a57806328fd31981461016f575b600080fd5b34801561010457600080fd5b5061010d61033f565b60408051918252519081900360200190f35b34801561012b57600080fd5b506101586004803603604081101561014257600080fd5b506001600160a01b038135169060200135610345565b005b34801561016657600080fd5b5061010d61046a565b34801561017b57600080fd5b5061010d6004803603602081101561019257600080fd5b50356001600160a01b0316610470565b3480156101ae57600080fd5b50610158600480360360408110156101c557600080fd5b50803590602001356104fc565b3480156101de57600080fd5b5061010d61051e565b3480156101f357600080fd5b5061010d610524565b34801561020857600080fd5b5061010d61052a565b34801561021d57600080fd5b506102446004803603602081101561023457600080fd5b50356001600160a01b0316610530565b60408051938452602084019290925282820152519081900360600190f35b610158610551565b34801561027657600080fd5b5061010d610844565b34801561028b57600080fd5b506102c2600480360360608110156102a257600080fd5b506001600160a01b0381358116916020810135909116906040013561084a565b604080519115158252519081900360200190f35b3480156102e257600080fd5b5061010d6108ed565b3480156102f757600080fd5b506101586108f3565b34801561030c57600080fd5b506101586004803603602081101561032357600080fd5b50356108fe565b34801561033657600080fd5b5061010d6109e0565b600c5481565b6000546001600160a01b0316331461035c57600080fd5b6001600160a01b0382166000908152600660205260409020541561038357610383826109e6565b6000811180156103a957506001600160a01b038216600090815260066020526040902054155b156103bc576103b782610b0e565b6103ef565b801580156103e157506001600160a01b03821660009081526006602052604090205415155b156103ef576103ef82610b6f565b6001600160a01b03821660009081526006602052604090205460075461042091839161041a91610c5c565b90610ca7565b6007556001600160a01b038216600090815260066020526040902081905561044781610d01565b6001600160a01b0390921660009081526006602052604090206001019190915550565b600b5481565b6001600160a01b038116600090815260066020526040812054610495575060006104f7565b6001600160a01b0382166000908152600660205260408120546104b790610d01565b6001600160a01b0384166000908152600660205260409020600101549091508082116104e8576000925050506104f7565b6104f28282610c5c565b925050505b919050565b6000546001600160a01b0316331461051357600080fd5b600d91909155600e55565b60075481565b600e5481565b60085481565b60066020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b0316331461056857600080fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156105b357600080fd5b505afa1580156105c7573d6000803e3d6000fd5b505050506040513d60208110156105dd57600080fd5b50516040805160028082526060808301845293945090916020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561064757600080fd5b505afa15801561065b573d6000803e3d6000fd5b505050506040513d602081101561067157600080fd5b50518151829060009061068057fe5b6001600160a01b03928316602091820292909201015260018054835192169183919081106106aa57fe5b6001600160a01b0392831660209182029290920181019190915260025460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b8381101561073c578181015183820152602001610724565b50505050905001955050505050506000604051808303818588803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b5050600154604080516370a0823160e01b815230600482015290516000955061080294508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d60208110156107fa57600080fd5b505190610c5c565b6008549091506108129082610ca7565b600855600754600c5461083c916108339161082d9085610d1e565b90610d77565b600a5490610ca7565b600a55505050565b600a5481565b600080546001600160a01b0316331461086257600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108b957600080fd5b505af11580156108cd573d6000803e3d6000fd5b505050506040513d60208110156108e357600080fd5b5051949350505050565b60095481565b6108fc336109e6565b565b6000546001600160a01b0316331461091557600080fd5b6003548061092357506109dd565b6000805a905060005b848310801561093a57508381105b156109d85783600b541061094e576000600b555b61097a6003600b548154811061096057fe5b6000918252602090912001546001600160a01b0316610db9565b156109ab576109ab6003600b548154811061099157fe5b6000918252602090912001546001600160a01b03166109e6565b6109c06109b95a8490610c5c565b8490610ca7565b92505a600b805460019081019091559092500161092c565b505050505b50565b600d5481565b6001600160a01b038116600090815260066020526040902054610a08576109dd565b6000610a1382610470565b90508015610b0a57600954610a289082610ca7565b6009556001546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b505050506040513d6020811015610aab57600080fd5b50506001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610ae09082610ca7565b6001600160a01b038316600090815260066020526040902060028101919091555461044790610d01565b5050565b600380546001600160a01b039092166000818152600460205260408120849055600184018355919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b0319169091179055565b600380546000198101908110610b8157fe5b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610bb957fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600491829052604081205460038054919392916000198101908110610c0757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610c3757fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610c9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610df5565b90505b92915050565b600082820183811015610c9e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610ca1600c5461082d600a5485610d1e90919063ffffffff16565b600082610d2d57506000610ca1565b82820282848281610d3a57fe5b0414610c9e5760405162461bcd60e51b8152600401808060200182810382526021815260200180610ef26021913960400191505060405180910390fd5b6000610c9e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e8c565b600d546001600160a01b0382166000908152600560205260408120549091429101108015610ca15750600e54610dee83610470565b1192915050565b60008184841115610e845760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e49578181015183820152602001610e31565b50505050905090810190601f168015610e765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610edb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e49578181015183820152602001610e31565b506000838581610ee757fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220fbdad5509790114ddfe42c4959af71bf00c390cb17df8f1cc179561ef2a22e4164736f6c63430007040033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214610c07578063f708a64f14610c1c578063f832679514610c57578063f887ea4014610c6c5761038c565b8063e5711e8b14610b41578063ea8b2c4414610b84578063f11a24d314610bbf578063f2fde38b14610bd45761038c565b8063d4399790116100dc578063d439979014610a83578063dd62ed3e14610ab6578063dde04b9514610af1578063e2f4560514610b2c5761038c565b8063cfbac92f14610a2d578063cfe0e61914610a59578063d4057d7e14610a6e5761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f51461098d578063b677814c146109c0578063bb8d5131146109d5578063c6501c89146109ea5761038c565b8063a8aa1b311461092a578063a9059cbb1461093f578063ad64598a146109785761038c565b80639d1944f5116101ab5780639d1944f514610877578063a457c2d7146108a1578063a4b45c00146108da578063a715184d146109155761038c565b80638f32d59b14610838578063921369131461084d57806395d89b41146108625761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a04146107e45780637fb6df58146107f957806383b4ac681461080e5780638da5cb5b146108235761038c565b8063715018a614610772578063753d02a114610787578063764d72bf1461079c57806377a3b609146107cf5761038c565b80634bc6dd18116102905780634bc6dd18146106e95780634d709adf1461071557806351bc3c851461072a57806370a082311461073f5761038c565b80633eaaf86b146106705780634144d9e4146106855780634355855a146106b65761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146105af578063313ce567146105e2578063320d45341461060d57806339509351146106375761038c565b80632b112e49146105555780632d48e8961461056a5780632e0f26251461059a5761038c565b806318160ddd1161035f57806318160ddd1461048f5780631d865c30146104a457806323b872dd146104dc57806325519cf21461051f5761038c565b806306fdde0314610391578063095ea7b31461041b578063180b0d7e146104685761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610c81565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506104546004803603604081101561043e57600080fd5b506001600160a01b038135169060200135610d17565b604080519115158252519081900360200190f35b34801561047457600080fd5b5061047d610d2e565b60408051918252519081900360200190f35b34801561049b57600080fd5b5061047d610d34565b3480156104b057600080fd5b506104da600480360360608110156104c757600080fd5b5080359060208101359060400135610d3a565b005b3480156104e857600080fd5b50610454600480360360608110156104ff57600080fd5b506001600160a01b03813581169160208101359091169060400135610d59565b34801561052b57600080fd5b506104da6004803603606081101561054257600080fd5b5080359060208101359060400135610e33565b34801561056157600080fd5b5061047d610e52565b34801561057657600080fd5b506104da6004803603604081101561058d57600080fd5b5080359060200135610ec3565b3480156105a657600080fd5b5061047d610f53565b3480156105bb57600080fd5b506104da600480360360208110156105d257600080fd5b50356001600160a01b0316610f58565b3480156105ee57600080fd5b506105f7610f95565b6040805160ff9092168252519081900360200190f35b34801561061957600080fd5b506104da6004803603602081101561063057600080fd5b5035610f9e565b34801561064357600080fd5b506104546004803603604081101561065a57600080fd5b506001600160a01b038135169060200135610fb4565b34801561067c57600080fd5b5061047d611047565b34801561069157600080fd5b5061069a61104d565b604080516001600160a01b039092168252519081900360200190f35b3480156106c257600080fd5b50610454600480360360208110156106d957600080fd5b50356001600160a01b031661105c565b3480156106f557600080fd5b506104da6004803603602081101561070c57600080fd5b50351515611071565b34801561072157600080fd5b5061069a6110b7565b34801561073657600080fd5b506104da6110c6565b34801561074b57600080fd5b5061047d6004803603602081101561076257600080fd5b50356001600160a01b0316611132565b34801561077e57600080fd5b506104da61114d565b34801561079357600080fd5b506104da6111ad565b3480156107a857600080fd5b506104da600480360360208110156107bf57600080fd5b50356001600160a01b0316611217565b3480156107db57600080fd5b5061047d611265565b3480156107f057600080fd5b5061047d61126b565b34801561080557600080fd5b5061069a611271565b34801561081a57600080fd5b50610454611280565b34801561082f57600080fd5b5061069a611291565b34801561084457600080fd5b506104546112a5565b34801561085957600080fd5b5061047d6112bb565b34801561086e57600080fd5b506103a66112c1565b34801561088357600080fd5b506104da6004803603602081101561089a57600080fd5b5035611321565b3480156108ad57600080fd5b50610454600480360360408110156108c457600080fd5b506001600160a01b03813516906020013561138e565b3480156108e657600080fd5b506104da600480360360408110156108fd57600080fd5b506001600160a01b0381358116916020013516611477565b34801561092157600080fd5b5061069a6114b6565b34801561093657600080fd5b5061069a6114c5565b34801561094b57600080fd5b506104546004803603604081101561096257600080fd5b506001600160a01b0381351690602001356114d4565b34801561098457600080fd5b50610454611500565b34801561099957600080fd5b50610454600480360360208110156109b057600080fd5b50356001600160a01b0316611509565b3480156109cc57600080fd5b5061047d61151e565b3480156109e157600080fd5b5061047d611524565b3480156109f657600080fd5b5061045460048036036060811015610a0d57600080fd5b506001600160a01b0381358116916020810135909116906040013561152a565b348015610a3957600080fd5b506104da60048036036020811015610a5057600080fd5b503515156115d8565b348015610a6557600080fd5b5061047d611615565b348015610a7a57600080fd5b5061045461161b565b348015610a8f57600080fd5b5061045460048036036020811015610aa657600080fd5b50356001600160a01b0316611629565b348015610ac257600080fd5b5061047d60048036036040811015610ad957600080fd5b506001600160a01b0381358116916020013516611647565b348015610afd57600080fd5b506104da60048036036040811015610b1457600080fd5b506001600160a01b0381351690602001351515611672565b348015610b3857600080fd5b5061047d611717565b348015610b4d57600080fd5b5061045460048036036060811015610b6457600080fd5b506001600160a01b0381358116916020810135909116906040013561171d565b348015610b9057600080fd5b506104da60048036036040811015610ba757600080fd5b506001600160a01b0381351690602001351515611787565b348015610bcb57600080fd5b5061047d61183e565b348015610be057600080fd5b506104da60048036036020811015610bf757600080fd5b50356001600160a01b0316611844565b348015610c1357600080fd5b5061047d61185e565b348015610c2857600080fd5b506104da60048036036040811015610c3f57600080fd5b506001600160a01b0381351690602001351515611864565b348015610c6357600080fd5b5061047d6119be565b348015610c7857600080fd5b5061069a6119c4565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b6000610d24338484611a6e565b5060015b92915050565b600c5481565b60125490565b610d426112a5565b610d4b57600080fd5b600692909255600755600855565b6000826001600160a01b038116610d6f57600080fd5b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914610e1c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601582528381203382529091529190912054610df7918590611b5a565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b610e27858585611bf1565b50600195945050505050565b610e3b6112a5565b610e4457600080fd5b600392909255600455600555565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00546012549192610ebe929091610eb89190611ed2565b90611ed2565b905090565b610ecb6112a5565b610ed457600080fd5b601660029054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050505050565b601281565b610f606112a5565b610f6957600080fd5b601a80546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b60025460ff1690565b610fa66112a5565b610faf57600080fd5b601355565b3360009081526015602090815260408083206001600160a01b0386168452909152812054610fe29083611f14565b3360008181526015602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60125481565b600d546001600160a01b031681565b60116020526000908152604090205460ff1681565b6110796112a5565b61108257600080fd5b80156110a0576016805461ff001916610100831515021790556110b4565b6016805461ff001916610100831515021790555b50565b601a546001600160a01b031681565b6110ce6112a5565b6110d757600080fd5b601b805460ff60a01b1916600160a01b179055600954156110fd576110fd600954611f6e565b600a541561111057611110600a54611fd4565b600b541561112357611123600b54612037565b601b805460ff60a01b19169055565b6001600160a01b031660009081526014602052604090205490565b6111556112a5565b61115e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b50505050565b61121f6112a5565b61122857600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611260573d6000803e3d6000fd5b505050565b60055481565b60045481565b6017546001600160a01b031681565b601b54600160a01b900460ff161590565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60075481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b6113296112a5565b61133257600080fd5b620b71b08110611389576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601855565b3360009081526015602090815260408083206001600160a01b03861684529091528120548083106113e2573360009081526015602090815260408083206001600160a01b0388168452909152812055611411565b6113ec8184611ed2565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61147f6112a5565b61148857600080fd5b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b600e546001600160a01b031681565b6019546001600160a01b031681565b6000826001600160a01b0381166114ea57600080fd5b6114f5338585611bf1565b506001949350505050565b60165460ff1681565b60106020526000908152604090205460ff1681565b600b5481565b60085481565b60006115346112a5565b61153d57600080fd5b6016546040805163e5711e8b60e01b81526001600160a01b0387811660048301528681166024830152604482018690529151620100009093049091169163e5711e8b916064808201926020929091908290030181600087803b1580156115a257600080fd5b505af11580156115b6573d6000803e3d6000fd5b505050506040513d60208110156115cc57600080fd5b505190505b9392505050565b6115e06112a5565b6115e957600080fd5b8015611602576016805460ff19168215151790556110b4565b6016805482151560ff1990911617905550565b600a5481565b601654610100900460ff1681565b6001600160a01b03166000908152600f602052604090205460ff1690565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b61167a6112a5565b61168357600080fd5b6001600160a01b0382166000908152600f602052604090205460ff16151581151514156116ec576040805162461bcd60e51b8152602060048201526012602482015271115c9c9bdc8e88139bdd0818da185b99d95960721b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60135481565b60006117276112a5565b61173057600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115a257600080fd5b61178f6112a5565b61179857600080fd5b8015611801576001600160a01b03821660009081526010602052604090205460ff1615611801576040805162461bcd60e51b81526020600482015260126024820152715061697220416c726561647920536574212160701b604482015290519081900360640190fd5b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586161790556011909152902080549091166001179055565b60035481565b61184c6112a5565b61185557600080fd5b6110b4816120ce565b60065481565b61186c6112a5565b61187557600080fd5b6001600160a01b03821630148015906118a757506001600160a01b03821660009081526010602052604090205460ff16155b6118b057600080fd5b6001600160a01b0382166000908152601160205260409020805460ff191682158015919091179091556119535760165460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292516201000090940416926314b6ca969260448084019391929182900301818387803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506119ba565b6016546201000090046001600160a01b03166314b6ca968361197481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b5050565b60095481565b601b546001600160a01b031681565b6000826119e257506000610d28565b828202828482816119ef57fe5b04146115d15760405162461bcd60e51b81526004018080602001828103825260218152602001806127f36021913960400191505060405180910390fd5b60006115d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b6001600160a01b038316611ab35760405162461bcd60e51b81526004018080602001828103825260248152602001806128146024913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b81526004018080602001828103825260228152602001806127d16022913960400191505060405180910390fd5b6001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008184841115611be95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bae578181015183820152602001611b96565b50505050905090810190601f168015611bdb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601b54600090600160a01b900460ff1615611c1857611c118484846121ad565b90506115d1565b611c20612222565b15611c2d57611c2d612280565b611c356122b9565b15611c4257611c426122fc565b6001600160a01b038416600090815260146020526040902054611c659083611ed2565b6001600160a01b038516600090815260146020526040812091909155611c8b8585612322565b611c955782611ca0565b611ca08585856123b4565b6001600160a01b038516600090815260146020526040902054909150611cc69082611f14565b6001600160a01b0380861660009081526014602090815260408083209490945591881681526011909152205460ff16611d73576016546201000090046001600160a01b03166314b6ca9686611d1a81611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d71575060015b505b6001600160a01b03841660009081526011602052604090205460ff16611e0d576016546201000090046001600160a01b03166314b6ca9685611db481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611dfa57600080fd5b505af1925050508015611e0b575060015b505b601660029054906101000a90046001600160a01b03166001600160a01b031663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e7b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006115d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b5a565b6000828201838110156115d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600954600090611f7f906002611a2c565b90506000611f9882600954611ed290919063ffffffff16565b905047611fa483612586565b6000611fb04783611ed2565b600954909150611fc09086611ed2565b600955611fcd8382612718565b5050505050565b47611fde82612586565b6000611fea4783611ed2565b600a54909150611ffa9084611ed2565b600a55600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611211573d6000803e3d6000fd5b4761204182612586565b600061204d4783611ed2565b600b5490915061205d9084611ed2565b600b81905550601660029054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b357600080fd5b505af1935050505080156120c5575060015b61126057611260565b6001600160a01b0381166120e157600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611bae578181015183820152602001611b96565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0383166000908152601460205260408120546121d09083611ed2565b6001600160a01b0380861660009081526014602052604080822093909355908516815220546121ff9083611f14565b6001600160a01b0384166000908152601460205260409020555060019392505050565b60008061222e30611132565b6013546016549192508210159060ff1680156122545750601b54600160a01b900460ff16155b801561225d5750805b801561227957503360009081526010602052604090205460ff16155b9250505090565b601b805460ff60a01b1916600160a01b179055600954156122a6576122a6600954611f6e565b600a541561112357611123600a54611fd4565b601654600090610100900460ff1680156122dd5750601b54600160a01b900460ff16155b8015610ebe5750503360009081526010602052604090205460ff161590565b601b805460ff60a01b1916600160a01b179055600b541561112357611123600b54612037565b6001600160a01b0382166000908152600f602052604081205460ff168061236157506001600160a01b0382166000908152600f602052604090205460ff165b1561236e57506000610d28565b6001600160a01b03831660009081526010602052604090205460ff16806123ad57506001600160a01b03821660009081526010602052604090205460ff165b9050610d28565b6001600160a01b038316600090815260106020526040812054819081908190819060ff1615612463576123fe600c546123f8600354896119d390919063ffffffff16565b90611a2c565b6009805482019055600c5460045491945061241e916123f89089906119d3565b600a805482019055600c5460055491935061243e916123f89089906119d3565b600b805482019055905061245c816124568585611f14565b90611f14565b93506124fa565b6001600160a01b03871660009081526010602052604090205460ff16156124fa5761249f600c546123f8600654896119d390919063ffffffff16565b6009805482019055600c546007549194506124bf916123f89089906119d3565b600a805482019055600c546008549193506124df916123f89089906119d3565b600b80548201905590506124f7816124568585611f14565b93505b8315612570573060009081526014602052604090205461251a9085611f14565b30600081815260146020908152604091829020939093558051878152905191926001600160a01b038c16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b61257a8685611ed2565b98975050505050505050565b604080516002808252606080830184529260208301908036833701905050905030816000815181106125b457fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561260857600080fd5b505afa15801561261c573d6000803e3d6000fd5b505050506040513d602081101561263257600080fd5b505181518290600190811061264357fe5b6001600160a01b039283166020918202929092010152601b546126699130911684611a6e565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126ef5781810151838201526020016126d7565b505050509050019650505050505050600060405180830381600087803b158015610f3757600080fd5b601b546127309030906001600160a01b031684611a6e565b601b54600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156127a557600080fd5b505af11580156127b9573d6000803e3d6000fd5b50505050506040513d606081101561121157600080fdfe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122067f0973db063b206d4c0b4e256e10535b8ad42f66851b4fdd1e31f7027f14e1d64736f6c63430007040033

Deployed Bytecode Sourcemap

18419:16018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18143:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28378:189;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28378:189:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18911:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32279:102;;;;;;;;;;;;;:::i;29365:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29365:264:0;;;;;;;;;;;;:::i;:::-;;21664:447;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21664:447:0;;;;;;;;;;;;;;;;;:::i;29091:266::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29091:266:0;;;;;;;;;;;;:::i;31157:167::-;;;;;;;;;;;;;:::i;30017:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30017:182:0;;;;;;;:::i;19446:37::-;;;;;;;;;;;;;:::i;31508:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31508:134:0;-1:-1:-1;;;;;31508:134:0;;:::i;18329:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32163:104;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32163:104:0;;:::i;27982:388::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27982:388:0;;;;;;;;:::i;19492:62::-;;;;;;;;;;;;;:::i;18956:83::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;18956:83:0;;;;;;;;;;;;;;19389:48;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19389:48:0;-1:-1:-1;;;;;19389:48:0;;:::i;27016:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27016:182:0;;;;:::i;20125:32::-;;;;;;;;;;;;;:::i;24820:279::-;;;;;;;;;;;;;:::i;32392:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32392:119:0;-1:-1:-1;;;;;32392:119:0;;:::i;17354:126::-;;;;;;;;;;;;;:::i;31425:75::-;;;;;;;;;;;;;:::i;30207:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30207:170:0;-1:-1:-1;;;;;30207:170:0;;:::i;18620:33::-;;;;;;;;;;;;;:::i;18579:34::-;;;;;;;;;;;;;:::i;20010:36::-;;;;;;;;;;;;;:::i;31332:85::-;;;;;;;;;;;;;:::i;17089:79::-;;;;;;;;;;;;;:::i;17254:92::-;;;;;;;;;;;;;:::i;18704:37::-;;;;;;;;;;;;;:::i;18234:87::-;;;;;;;;;;;;;:::i;30981:168::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30981:168:0;;:::i;27402:572::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27402:572:0;;;;;;;;:::i;30795:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30795:178:0;;;;;;;;;;:::i;19046:33::-;;;;;;;;;;;;;:::i;20099:19::-;;;;;;;;;;;;;:::i;21441:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21441:215:0;;;;;;;;:::i;19785:35::-;;;;;;;;;;;;;:::i;19324:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19324:58:0;-1:-1:-1;;;;;19324:58:0;;:::i;18871:31::-;;;;;;;;;;;;;:::i;18748:34::-;;;;;;;;;;;;;:::i;30585:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30585:202:0;;;;;;;;;;;;;;;;;:::i;26812:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26812:196:0;;;;:::i;18831:33::-;;;;;;;;;;;;;:::i;19827:30::-;;;;;;;;;;;;;:::i;28963:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28963:120:0;-1:-1:-1;;;;;28963:120:0;;:::i;27206:188::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27206:188:0;;;;;;;;;;:::i;31949:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31949:206:0;;;;;;;;;;:::i;19563:76::-;;;;;;;;;;;;;:::i;30385:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30385:192:0;;;;;;;;;;;;;;;;;:::i;31650:291::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31650:291:0;;;;;;;;;;:::i;18538:34::-;;;;;;;;;;;;;:::i;17488:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17488:109:0;-1:-1:-1;;;;;17488:109:0;;:::i;18662:35::-;;;;;;;;;;;;;:::i;29637:372::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29637:372:0;;;;;;;;;;:::i;18791:33::-;;;;;;;;;;;;;:::i;20164:28::-;;;;;;;;;;;;;:::i;18143:83::-;18213:5;18206:12;;;;;;;;-1:-1:-1;;18206:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18180:13;;18206:12;;18213:5;;18206:12;;18213:5;18206:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18143:83;:::o;28378:189::-;28481:4;28503:34;28512:10;28523:7;28531:5;28503:8;:34::i;:::-;-1:-1:-1;28555:4:0;28378:189;;;;;:::o;18911:36::-;;;;:::o;32279:102::-;32361:12;;32279:102;:::o;29365:264::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;29515:16:::1;:25:::0;;;;29551:16:::1;:32:::0;29594:14:::1;:27:::0;29365:264::o;21664:447::-;21807:4;21794:2;-1:-1:-1;;;;;19923:18:0;;19915:27;;;;;;-1:-1:-1;;;;;21838:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;;;21856:10:::1;21838:29:::0;;;;;;;;-1:-1:-1;;21838:44:0::1;21834:207;;21931:98;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;21931:98:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;21931:17:0;::::1;-1:-1:-1::0;21931:17:0;;;:11:::1;:17:::0;;;;;21967:10:::1;21931:61:::0;;;;;;;;;;:98:::1;::::0;21997:5;;21931:65:::1;:98::i;:::-;-1:-1:-1::0;;;;;21899:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;;;21917:10:::1;21899:29:::0;;;;;;;:130;21834:207:::1;22051:30;22065:4;22071:2;22075:5;22051:13;:30::i;:::-;-1:-1:-1::0;22099:4:0::1;::::0;21664:447;-1:-1:-1;;;;;21664:447:0:o;29091:266::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;29246:15:::1;:24:::0;;;;29281:15:::1;:31:::0;29323:13:::1;:26:::0;29091:266::o;31157:167::-;31294:9;:21;;;;19126:42;31210:7;31267:21;;;;;31250:12;;31210:7;;31250:66;;31294:21;;31250:39;;:12;:16;:39::i;:::-;:43;;:66::i;:::-;31230:86;;31157:167;:::o;30017:182::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;30126:11:::1;;;;;;;;;-1:-1:-1::0;;;;;30126:11:0::1;-1:-1:-1::0;;;;;30126:35:0::1;;30162:10;30174:16;30126:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30017:182:::0;;:::o;19446:37::-;19481:2;19446:37;:::o;31508:134::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;31571:12:::1;:37:::0;;-1:-1:-1;;;;;31571:37:0;;::::1;-1:-1:-1::0;;;;;;31571:37:0;;::::1;::::0;::::1;::::0;;;31619:4:::1;:15:::0;;;;::::1;;::::0;;31508:134::o;18329:83::-;18395:9;;;;18329:83;:::o;32163:104::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;32232::::1;:27:::0;32163:104::o;27982:388::-;28151:10;28082:4;28139:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28139:56:0;;;;;;;;;;:72;;28200:10;28139:60;:72::i;:::-;28116:10;28104:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28104:32:0;;;;;;;;;;;;:107;;;28227:113;;;;;;28104:32;;28227:113;;;;;;;;;;;-1:-1:-1;28358:4:0;27982:388;;;;:::o;19492:62::-;;;;:::o;18956:83::-;;;-1:-1:-1;;;;;18956:83:0;;:::o;19389:48::-;;;;;;;;;;;;;;;:::o;27016:182::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;27086:5:::1;27083:108;;;27108:11;:19:::0;;-1:-1:-1;;27108:19:0::1;;::::0;::::1;;;;::::0;;27083:108:::1;;;27160:11;:19:::0;;-1:-1:-1;;27160:19:0::1;;::::0;::::1;;;;::::0;;27083:108:::1;27016:182:::0;:::o;20125:32::-;;;-1:-1:-1;;;;;20125:32:0;;:::o;24820:279::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;20260:6:::1;:13:::0;;-1:-1:-1;;;;20260:13:0::1;-1:-1:-1::0;;;20260:13:0::1;::::0;;24883:18:::2;::::0;:22;24880:63:::2;;24907:36;24924:18;;24907:16;:36::i;:::-;24958:18;::::0;:22;24955:63:::2;;24982:36;24999:18;;24982:16;:36::i;:::-;25032:16;::::0;:20;25029:62:::2;;25054:37;25074:16;;25054:19;:37::i;:::-;20296:6:::1;:14:::0;;-1:-1:-1;;;;20296:14:0::1;::::0;;24820:279::o;32392:119::-;-1:-1:-1;;;;;32485:18:0;32458:7;32485:18;;;:9;:18;;;;;;;32392:119::o;17354:126::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;17435:6:::1;::::0;17416:26:::1;::::0;17435:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;17435:6:0::1;::::0;17416:26:::1;::::0;;;::::1;17453:6;:19:::0;;-1:-1:-1;;;;;;17453:19:0::1;::::0;;17354:126::o;31425:75::-;31480:4;;;;;;;;;-1:-1:-1;;;;;31480:4:0;-1:-1:-1;;;;;31467:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31425:75::o;30207:170::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;30333:36:::1;::::0;30301:21:::1;::::0;-1:-1:-1;;;;;30333:27:0;::::1;::::0;:36;::::1;;;::::0;30301:21;;30283:15:::1;30333:36:::0;30283:15;30333:36;30301:21;30333:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17237:1;30207:170:::0;:::o;18620:33::-;;;;:::o;18579:34::-;;;;:::o;20010:36::-;;;-1:-1:-1;;;;;20010:36:0;;:::o;31332:85::-;31403:6;;-1:-1:-1;;;31403:6:0;;;;31402:7;;31332:85::o;17089:79::-;17154:6;;;;;-1:-1:-1;;;;;17154:6:0;;17089:79::o;17254:92::-;17332:6;;;;;-1:-1:-1;;;;;17332:6:0;17318:10;:20;;17254:92::o;18704:37::-;;;;:::o;18234:87::-;18306:7;18299:14;;;;;;;;-1:-1:-1;;18299:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18273:13;;18299:14;;18306:7;;18299:14;;18306:7;18299:14;;;;;;;;;;;;;;;;;;;;;;;;30981:168;17216:9;:7;:9::i;:::-;17208:18;;;;;;31070:6:::1;31064:3;:12;31056:54;;;::::0;;-1:-1:-1;;;31056:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31121:14;:20:::0;30981:168::o;27402:572::-;27560:10;27507:4;27548:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27548:32:0;;;;;;;;;;27595:27;;;27591:225;;27651:10;27674:1;27639:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27639:32:0;;;;;;;;;:36;27591:225;;;27743:61;:8;27774:15;27743:12;:61::i;:::-;27720:10;27708:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27708:32:0;;;;;;;;;:96;27591:225;27854:10;27901:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27831:113:0;;27901:32;;;;;;;;;;;27831:113;;;;;;;;;27854:10;27831:113;;;;;;;;;;;-1:-1:-1;27962:4:0;;27402:572;-1:-1:-1;;;27402:572:0:o;30795:178::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;30887:23:::1;:36:::0;;-1:-1:-1;;;;;30887:36:0;;::::1;-1:-1:-1::0;;;;;;30887:36:0;;::::1;;::::0;;;30934:18:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;30795:178::o;19046:33::-;;;-1:-1:-1;;;;;19046:33:0;;:::o;20099:19::-;;;-1:-1:-1;;;;;20099:19:0;;:::o;21441:215::-;21568:4;21546:2;-1:-1:-1;;;;;19923:18:0;;19915:27;;;;;;21590:36:::1;21604:10;21616:2;21620:5;21590:13;:36::i;:::-;-1:-1:-1::0;21644:4:0::1;::::0;21441:215;-1:-1:-1;;;;21441:215:0:o;19785:35::-;;;;;;:::o;19324:58::-;;;;;;;;;;;;;;;:::o;18871:31::-;;;;:::o;18748:34::-;;;;:::o;30585:202::-;30692:12;17216:9;:7;:9::i;:::-;17208:18;;;;;;30724:11:::1;::::0;:55:::1;::::0;;-1:-1:-1;;;30724:55:0;;-1:-1:-1;;;;;30724:55:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;:11;;;::::1;::::0;;::::1;::::0;:23:::1;::::0;:55;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;30724:11:0;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30724:55:0;;-1:-1:-1;17237:1:0::1;30585:202:::0;;;;;:::o;26812:196::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;26886:5:::1;26883:118;;;26908:16;:24:::0;;-1:-1:-1;;26908:24:0::1;::::0;::::1;;;::::0;;26883:118:::1;;;26965:16;:24:::0;;;::::1;;-1:-1:-1::0;;26965:24:0;;::::1;;::::0;;26812:196;:::o;18831:33::-;;;;:::o;19827:30::-;;;;;;;;;:::o;28963:120::-;-1:-1:-1;;;;;29049:26:0;29025:4;29049:26;;;:19;:26;;;;;;;;;28963:120::o;27206:188::-;-1:-1:-1;;;;;27358:19:0;;;27326:7;27358:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;27206:188::o;31949:206::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;-1:-1:-1;;;;;32040:26:0;::::1;;::::0;;;:19:::1;:26;::::0;;;;;::::1;;:37;;::::0;::::1;;;;32032:68;;;::::0;;-1:-1:-1;;;32032:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32032:68:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32111:26:0;;;::::1;;::::0;;;:19:::1;:26;::::0;;;;:36;;-1:-1:-1;;32111:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31949:206::o;19563:76::-;;;;:::o;30385:192::-;30490:12;17216:9;:7;:9::i;:::-;17208:18;;;;;;30528:12:::1;-1:-1:-1::0;;;;;30521:29:0::1;;30551:9;30562:6;30521:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;30521:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;31650:291:::0;17216:9;:7;:9::i;:::-;17208:18;;;;;;31741:7:::1;31738:102;;;-1:-1:-1::0;;;;;31774:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;31773:33;31765:63;;;::::0;;-1:-1:-1;;;31765:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31765:63:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;31850:32:0;;::::1;;::::0;;;:25:::1;:32;::::0;;;;;;;:42;;;::::1;;-1:-1:-1::0;;31850:42:0;;::::1;;::::0;;31903:16:::1;:23:::0;;;;;:30;;;;::::1;31850:42:::0;31903:30:::1;::::0;;31650:291::o;18538:34::-;;;;:::o;17488:109::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;17561:28:::1;17580:8;17561:18;:28::i;18662:35::-:0;;;;:::o;29637:372::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;-1:-1:-1;;;;;29733:23:0;::::1;29751:4;29733:23;::::0;::::1;::::0;:61:::1;;-1:-1:-1::0;;;;;;29761:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;;::::1;;29760:34;29733:61;29725:70;;;::::0;::::1;;-1:-1:-1::0;;;;;29806:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29806:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;29852:150:::1;;29879:11;::::0;:31:::1;::::0;;-1:-1:-1;;;29879:31:0;;-1:-1:-1;;;;;29879:31:0;;::::1;;::::0;::::1;::::0;29908:1:::1;29879:31:::0;;;;;;;;:11;;;::::1;;::::0;:20:::1;::::0;:31;;;;;29908:1;;29879:31;;;;;;29908:1;29879:11;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29852:150;;;29943:11;::::0;;;::::1;-1:-1:-1::0;;;;;29943:11:0::1;:20;29964:6:::0;29972:17:::1;29964:6:::0;29972:9:::1;:17::i;:::-;29943:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;29943:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;29852:150;29637:372:::0;;:::o;18791:33::-;;;;:::o;20164:28::-;;;-1:-1:-1;;;;;20164:28:0;;:::o;1795:250::-;1853:7;1877:6;1873:47;;-1:-1:-1;1907:1:0;1900:8;;1873:47;1944:5;;;1948:1;1944;:5;:1;1968:5;;;;;:10;1960:56;;;;-1:-1:-1;;;1960:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2053:132;2111:7;2138:39;2142:1;2145;2138:39;;;;;;;;;;;;;;;;;:3;:39::i;28575:380::-;-1:-1:-1;;;;;28711:19:0;;28703:68;;;;-1:-1:-1;;;28703:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28790:21:0;;28782:68;;;;-1:-1:-1;;;28782:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28863:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28915:32;;;;;;;;;;;;;;;;;28575:380;;;:::o;1561:226::-;1681:7;1717:12;1709:6;;;;1701:29;;;;-1:-1:-1;;;1701:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1753:5:0;;;1561:226::o;22389:1054::-;22540:6;;22515:4;;-1:-1:-1;;;22540:6:0;;;;22536:87;;;22570:41;22585:6;22593:9;22604:6;22570:14;:41::i;:::-;22563:48;;;;22536:87;22639:20;:18;:20::i;:::-;22635:67;;;22676:14;:12;:14::i;:::-;22718:16;:14;:16::i;:::-;22714:59;;;22751:10;:8;:10::i;:::-;-1:-1:-1;;;;;22813:17:0;;;;;;:9;:17;;;;;;:29;;22835:6;22813:21;:29::i;:::-;-1:-1:-1;;;;;22793:17:0;;;;;;:9;:17;;;;;:49;;;;22888:32;22803:6;22910:9;22888:13;:32::i;:::-;:104;;22986:6;22888:104;;;22936:34;22944:6;22952:9;22963:6;22936:7;:34::i;:::-;-1:-1:-1;;;;;23028:20:0;;;;;;:9;:20;;;;;;22863:129;;-1:-1:-1;23028:40:0;;22863:129;23028:24;:40::i;:::-;-1:-1:-1;;;;;23005:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;23085:24;;;;;:16;:24;;;;;;;23081:96;;23116:11;;;;;-1:-1:-1;;;;;23116:11:0;:20;23137:6;23145:17;23137:6;23145:9;:17::i;:::-;23116:47;;;;;;;;;;;;;-1:-1:-1;;;;;23116:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23112:63;;-1:-1:-1;;;;;23191:27:0;;;;;;:16;:27;;;;;;;;23187:105;;23225:11;;;;;-1:-1:-1;;;;;23225:11:0;:20;23246:9;23257:20;23246:9;23257;:20::i;:::-;23225:53;;;;;;;;;;;;;-1:-1:-1;;;;;23225:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23221:69;;23308:11;;;;;;;;;-1:-1:-1;;;;;23308:11:0;-1:-1:-1;;;;;23308:19:0;;23328:14;;23308:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23304:51;23388:9;-1:-1:-1;;;;;23372:41:0;23381:6;-1:-1:-1;;;;;23372:41:0;;23398:14;23372:41;;;;;;;;;;;;;;;;;;-1:-1:-1;23431:4:0;;22389:1054;-1:-1:-1;;;;22389:1054:0:o;1417:136::-;1475:7;1502:43;1506:1;1509;1502:43;;;;;;;;;;;;;;;;;:3;:43::i;1228:181::-;1286:7;1318:5;;;1342:6;;;;1334:46;;;;;-1:-1:-1;;;1334:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;32876:431;32947:18;;32935:9;;32947:25;;32970:1;32947:22;:25::i;:::-;32935:37;;32983:14;33000:28;33023:4;33000:18;;:22;;:28;;;;:::i;:::-;32983:45;-1:-1:-1;33060:21:0;33092:22;33109:4;33092:16;:22::i;:::-;33125:19;33147:40;:21;33173:13;33147:25;:40::i;:::-;33219:18;;33125:62;;-1:-1:-1;33219:31:0;;33242:7;33219:22;:31::i;:::-;33198:18;:52;33261:38;33274:9;33284:14;33261:12;:38::i;:::-;32876:431;;;;;:::o;32519:349::-;32599:21;32631:25;32648:7;32631:16;:25::i;:::-;32667:19;32689:40;:21;32715:13;32689:25;:40::i;:::-;32761:18;;32667:62;;-1:-1:-1;32761:31:0;;32784:7;32761:22;:31::i;:::-;32740:18;:52;32811:23;;32803:57;;-1:-1:-1;;;;;32811:23:0;;;;32803:57;;;;;32845:14;;32811:23;32803:57;32811:23;32803:57;32845:14;32811:23;32803:57;;;;;;;;;;;;;;;;;;;25527:363;25614:21;25646:25;25663:7;25646:16;:25::i;:::-;25682:20;25705:41;:21;25731:14;25705:25;:41::i;:::-;25776:16;;25682:64;;-1:-1:-1;25776:29:0;;25797:7;25776:20;:29::i;:::-;25757:16;:48;;;;25820:11;;;;;;;;;-1:-1:-1;;;;;25820:11:0;-1:-1:-1;;;;;25820:19:0;;25849:15;25820:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25816:65;;;;17605:187;-1:-1:-1;;;;;17679:22:0;;17671:31;;;;;;17739:6;;17718:38;;-1:-1:-1;;;;;17718:38:0;;;;17739:6;;;;;17718:38;;;;;17767:6;:17;;-1:-1:-1;;;;;17767:17:0;;;;;-1:-1:-1;;;;;;17767:17:0;;;;;;;;;17605:187::o;2193:225::-;2313:7;2348:12;2341:5;2333:28;;;;-1:-1:-1;;;2333:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2372:9;2388:1;2384;:5;;;;;;;2193:225;-1:-1:-1;;;;;2193:225:0:o;22119:262::-;-1:-1:-1;;;;;22272:15:0;;22237:4;22272:15;;;:9;:15;;;;;;:27;;22292:6;22272:19;:27::i;:::-;-1:-1:-1;;;;;22254:15:0;;;;;;;:9;:15;;;;;;:45;;;;22326:13;;;;;;;:25;;22344:6;22326:17;:25::i;:::-;-1:-1:-1;;;;;22310:13:0;;;;;;:9;:13;;;;;:41;-1:-1:-1;22369:4:0;22119:262;;;;;:::o;26251:357::-;26304:4;26323:28;26354:24;26372:4;26354:9;:24::i;:::-;26428:18;;26479:16;;26323:55;;-1:-1:-1;26404:42:0;;;;26479:16;;:41;;;;-1:-1:-1;26514:6:0;;-1:-1:-1;;;26514:6:0;;;;26513:7;26479:41;:66;;;;;26538:7;26479:66;:121;;;;-1:-1:-1;26589:10:0;26563:37;;;;:25;:37;;;;;;;;26562:38;26479:121;26459:141;;;;26251:357;:::o;25107:254::-;20260:6;:13;;-1:-1:-1;;;;20260:13:0;-1:-1:-1;;;20260:13:0;;;25165:18:::1;::::0;:22;25162:89:::1;;25203:36;25220:18;;25203:16;:36::i;:::-;25266:18;::::0;:22;25263:89:::1;;25304:36;25321:18;;25304:16;:36::i;26616:186::-:0;26703:11;;26665:4;;26703:11;;;;;:35;;;;-1:-1:-1;26732:6:0;;-1:-1:-1;;;26732:6:0;;;;26731:7;26703:35;:90;;;;-1:-1:-1;;26782:10:0;26756:37;;;;:25;:37;;;;;;;;26755:38;;26616:186::o;25369:150::-;20260:6;:13;;-1:-1:-1;;;;20260:13:0;-1:-1:-1;;;20260:13:0;;;25421:16:::1;::::0;:20;25418:88:::1;;25457:37;25477:16;;25457:19;:37::i;25898:345::-:0;-1:-1:-1;;;;;26022:25:0;;25997:4;26022:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26051:23:0;;;;;;:19;:23;;;;;;;;26022:52;26019:217;;;-1:-1:-1;26097:5:0;26090:12;;26019:217;-1:-1:-1;;;;;26159:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;26194:29:0;;;;;;:25;:29;;;;;;;;26159:64;26151:73;;;;23451:1361;-1:-1:-1;;;;;23695:33:0;;23572:7;23695:33;;;:25;:33;;;;;;23572:7;;;;;;;;23695:33;;23692:887;;;23753:47;23785:14;;23753:27;23764:15;;23753:6;:10;;:27;;;;:::i;:::-;:31;;:47::i;:::-;23815:18;:26;;;;;;23895:14;;23874:15;;23746:54;;-1:-1:-1;23863:47:0;;:27;;:6;;:10;:27::i;:47::-;23925:18;:26;;;;;;24003:14;;23984:13;;23856:54;;-1:-1:-1;23973:45:0;;:25;;:6;;:10;:25::i;:45::-;24033:16;:24;;;;;;23966:52;-1:-1:-1;24086:24:0;23966:52;24086:14;:4;24095;24086:8;:14::i;:::-;:18;;:24::i;:::-;24074:36;;23692:887;;;-1:-1:-1;;;;;24140:36:0;;;;;;:25;:36;;;;;;;;24137:442;;;24201:48;24234:14;;24201:28;24212:16;;24201:6;:10;;:28;;;;:::i;:48::-;24264:18;:26;;;;;;24345:14;;24323:16;;24194:55;;-1:-1:-1;24312:48:0;;:28;;:6;;:10;:28::i;:48::-;24375:18;:26;;;;;;24454:14;;24434;;24305:55;;-1:-1:-1;24423:46:0;;:26;;:6;;:10;:26::i;:46::-;24484:16;:24;;;;;;24416:53;-1:-1:-1;24537:24:0;24416:53;24537:14;:4;24546;24537:8;:14::i;:24::-;24525:36;;24137:442;24594:13;;24591:173;;24669:4;24651:24;;;;:9;:24;;;;;;:39;;24680:9;24651:28;:39::i;:::-;24642:4;24624:24;;;;:9;:24;;;;;;;;;:66;;;;24710:42;;;;;;;24642:4;;-1:-1:-1;;;;;24710:42:0;;;;;;;;;;;;;24591:173;24783:21;:6;24794:9;24783:10;:21::i;:::-;24776:28;23451:1361;-1:-1:-1;;;;;;;;23451:1361:0:o;33829:564::-;33979:16;;;33993:1;33979:16;;;33955:21;33979:16;;;;;33955:21;33979:16;;;;;;;;;;-1:-1:-1;33979:16:0;33955:40;;34024:4;34006;34011:1;34006:7;;;;;;;;-1:-1:-1;;;;;34006:23:0;;;:7;;;;;;;;;;:23;;;;34050:6;;:13;;;-1:-1:-1;;;34050:13:0;;;;:6;;;;;:11;;:13;;;;;34006:7;;34050:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34050:13:0;34040:7;;:4;;34045:1;;34040:7;;;;;;-1:-1:-1;;;;;34040:23:0;;;:7;;;;;;;;;:23;34108:6;;34076:53;;34093:4;;34108:6;34117:11;34076:8;:53::i;:::-;34168:6;;:215;;-1:-1:-1;;;34168:215:0;;;;;;;;:6;:215;;;;;;34337:4;34168:215;;;;;;34357:15;34168:215;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34168:6:0;;;;:57;;34240:11;;34310:4;;34337;34357:15;34168:215;;;;;;;;;;;;;;;;:6;:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:506;33495:6;;33463:53;;33480:4;;-1:-1:-1;;;;;33495:6:0;33504:11;33463:8;:53::i;:::-;33557:6;;33752:18;;33557:254;;;-1:-1:-1;;;33557:254:0;;33620:4;33557:254;;;;;;;;;;:6;:254;;;;;;;;;;-1:-1:-1;;;;;33752:18:0;;;33557:254;;;;33785:15;33557:254;;;;;;:6;;;;;:22;;33587:9;;33557:254;;;;;;;;;;;;;;;33587:9;33557:6;:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

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