ETH Price: $2,383.08 (+1.30%)

Token

DataDrip (DRIP)
 

Overview

Max Total Supply

100,000,000 DRIP

Holders

64

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
17,800.000000000000000008 DRIP

Value
$0.00
0xb51074b09f8799e597e9f39178caed303f26433a
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:
DRIP

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion
File 1 of 1 : DRIP.sol
/**
 *Submitted for verification at basescan.org on 2024-04-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

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

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

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

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

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

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

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

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

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}


contract DRIP is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swappingchv;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForDev;


    address public marketingWallet;
    address public developmentWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    
    mapping(address => bool) private _isExcludedFromFeeschv;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    
    constructor() ERC20("DataDrip","DRIP") {
        
        uint256 _buyMarketingFee = 9;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 32;
        uint256 _sellDevFee = 30;

        if (block.chainid == 1 || block.chainid == 5)
            uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            uniswapV2Router = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        else if (block.chainid == 8453)
            uniswapV2Router = IUniswapV2Router02(0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24);
        else if (block.chainid == 56)
            uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
            
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000 * (10 ** decimals());
        swapTokensAtAmount = (totalSupply * 5) / 40000; // 0.05% swap wallet

        maxTransaction = 2_000_000 * 1e18; // 2% from total supply maxTransactionTxn
        maxWallet = 2_000_000 * 1e18; // 2% from total supply maxWalletSize

        buyMarketingFee = _buyMarketingFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellDevFee;

        marketingWallet = owner();
        developmentWallet = owner();

        // exclude from paying fees or having max transaction amount
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        
        _mint(owner(), totalSupply);
    }

    receive() external payable {}



    
    

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swappingchv) {
                if (!tradingActive) {
                    require(_isExcludedFromFeeschv[from] || _isExcludedFromFeeschv[to], "Trading is not active.");
                }

                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedmaxTransaction[to]) {
                    require(amount <= maxTransaction, "Buy transfer amount exceeds the maxTransaction.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTransaction[from]) {
                    require(amount <= maxTransaction, "Sell transfer amount exceeds the maxTransaction.");
                }
                else if (!_isExcludedmaxTransaction[to]) {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }

        uint256 contractTokenBalancechv = balanceOf(address(this));
        bool canSwap = contractTokenBalancechv >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swappingchv &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFeeschv[from] &&
            !_isExcludedFromFeeschv[to]) {

            swappingchv = true;
            swapBack();
            swappingchv = false;
        }

        bool takeFee = !swappingchv;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

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

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

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

    function manualSwapTax() public onlyOwner {
        uint256 contractTokenBalancechv = balanceOf(address(this));
        bool canSwap = contractTokenBalancechv >= swapTokensAtAmount;
        if (canSwap &&
            swapEnabled &&
            !swappingchv ) {

            swappingchv = true;
            swapBack();
            swappingchv = false;
        }
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForMarketing + tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(contractBalance);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(developmentWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{ value: address(this).balance }("");
    }

    function removeEth(uint256 amount) external onlyOwner {
        (bool success, ) = address(developmentWallet).call{value: address(this).balance}("");
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }


    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateMinSwap(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTx(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateEnableSwap(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyDevFee;
        require(buyTotalFees <= 99, "Must keep fees at 99% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

    

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFeeschv[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingAddress(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updatedevAddress(address newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function isExcludedFromFeeschv(address account) public view returns (bool) {
        return _isExcludedFromFeeschv[account];
    }


}

Settings
{
  "evmVersion": "paris",
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"buyDevFee","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":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFeeschv","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"removeEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","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":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateEnableSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatedevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001601560006101000a81548160ff0219169083151502179055506000601560016101000a81548160ff0219169083151502179055506000601560026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600881526020017f44617461447269700000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f44524950000000000000000000000000000000000000000000000000000000008152508160039081620000e0919062000f3c565b508060049081620000f2919062000f3c565b50505062000115620001096200077a60201b60201c565b6200078260201b60201c565b6000600990506000600290506000602090506000601e905060014614806200013d5750600546145b156200019e57737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002cb565b62aa36a74603620002045773c532a74256d3db42d0bf7a0400fefdbad7694008600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002ca565b61210546036200026957734752ba5dbc23f44d87826276bf6fd6b1c372ad24600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002c9565b60384603620002c8577310ed43c718714eb63d5aa57b78b54704e256024e600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b5b5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035f91906200108d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f91906200108d565b6040518363ffffffff1660e01b81526004016200042e929190620010d0565b6020604051808303816000875af11580156200044e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047491906200108d565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004e9600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084860201b60201c565b6200051e600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200084860201b60201c565b62000553600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200093260201b60201c565b600062000565620009d360201b60201c565b600a6200057391906200128d565b6305f5e100620005849190620012de565b9050619c40600582620005989190620012de565b620005a4919062001358565b6013819055506a01a784379d99db420000006012819055506a01a784379d99db420000006014819055508460098190555083600a81905550600a54600954620005ee919062001390565b60088190555082600c8190555081600d81905550600d54600c5462000614919062001390565b600b819055506200062a620009dc60201b60201c565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200067a620009dc60201b60201c565b601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620006dc620006ce620009dc60201b60201c565b60016200084860201b60201c565b620006ef3060016200084860201b60201c565b6200070461dead60016200084860201b60201c565b6200072662000718620009dc60201b60201c565b600162000a0660201b60201c565b6200073930600162000a0660201b60201c565b6200074e61dead600162000a0660201b60201c565b6200076f62000762620009dc60201b60201c565b8262000b4060201b60201c565b505050505062001528565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008586200077a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200087e620009dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008d7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ce906200142c565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000a166200077a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a3c620009dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8c906200142c565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b3491906200146b565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba990620014d8565b60405180910390fd5b62000bc66000838362000cb860201b60201c565b806002600082825462000bda919062001390565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c31919062001390565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c9891906200150b565b60405180910390a362000cb46000838362000cbd60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d4457607f821691505b60208210810362000d5a5762000d5962000cfc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000dc47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d85565b62000dd0868362000d85565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000e1d62000e1762000e118462000de8565b62000df2565b62000de8565b9050919050565b6000819050919050565b62000e398362000dfc565b62000e5162000e488262000e24565b84845462000d92565b825550505050565b600090565b62000e6862000e59565b62000e7581848462000e2e565b505050565b5b8181101562000e9d5762000e9160008262000e5e565b60018101905062000e7b565b5050565b601f82111562000eec5762000eb68162000d60565b62000ec18462000d75565b8101602085101562000ed1578190505b62000ee962000ee08562000d75565b83018262000e7a565b50505b505050565b600082821c905092915050565b600062000f116000198460080262000ef1565b1980831691505092915050565b600062000f2c838362000efe565b9150826002028217905092915050565b62000f478262000cc2565b67ffffffffffffffff81111562000f635762000f6262000ccd565b5b62000f6f825462000d2b565b62000f7c82828562000ea1565b600060209050601f83116001811462000fb4576000841562000f9f578287015190505b62000fab858262000f1e565b8655506200101b565b601f19841662000fc48662000d60565b60005b8281101562000fee5784890151825560018201915060208501945060208101905062000fc7565b868310156200100e57848901516200100a601f89168262000efe565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620010558262001028565b9050919050565b620010678162001048565b81146200107357600080fd5b50565b60008151905062001087816200105c565b92915050565b600060208284031215620010a657620010a562001023565b5b6000620010b68482850162001076565b91505092915050565b620010ca8162001048565b82525050565b6000604082019050620010e76000830185620010bf565b620010f66020830184620010bf565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200118b57808604811115620011635762001162620010fd565b5b6001851615620011735780820291505b808102905062001183856200112c565b945062001143565b94509492505050565b600082620011a6576001905062001279565b81620011b6576000905062001279565b8160018114620011cf5760028114620011da5762001210565b600191505062001279565b60ff841115620011ef57620011ee620010fd565b5b8360020a915084821115620012095762001208620010fd565b5b5062001279565b5060208310610133831016604e8410600b84101617156200124a5782820a905083811115620012445762001243620010fd565b5b62001279565b62001259848484600162001139565b92509050818404811115620012735762001272620010fd565b5b81810290505b9392505050565b600060ff82169050919050565b60006200129a8262000de8565b9150620012a78362001280565b9250620012d67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001194565b905092915050565b6000620012eb8262000de8565b9150620012f88362000de8565b9250828202620013088162000de8565b91508282048414831517620013225762001321620010fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013658262000de8565b9150620013728362000de8565b92508262001385576200138462001329565b5b828204905092915050565b60006200139d8262000de8565b9150620013aa8362000de8565b9250828201905080821115620013c557620013c4620010fd565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001414602083620013cb565b91506200142182620013dc565b602082019050919050565b60006020820190508181036000830152620014478162001405565b9050919050565b60008115159050919050565b62001465816200144e565b82525050565b60006020820190506200148260008301846200145a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620014c0601f83620013cb565b9150620014cd8262001488565b602082019050919050565b60006020820190508181036000830152620014f381620014b1565b9050919050565b620015058162000de8565b82525050565b6000602082019050620015226000830184620014fa565b92915050565b614a1c80620015386000396000f3fe6080604052600436106102cd5760003560e01c80637bce5a0411610175578063b62496f5116100dc578063d791219911610095578063e1bc33941161006f578063e1bc339414610af5578063e2f4560514610b32578063f2fde38b14610b5d578063f8b45b0514610b86576102d4565b8063d791219914610a64578063d85ba06314610a8d578063dd62ed3e14610ab8576102d4565b8063b62496f514610954578063bbc0c74214610991578063c0246668146109bc578063c04a5414146109e5578063c2d0ffca14610a10578063c3f70b5214610a39576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108425780639fccce321461086d578063a0d82dc514610898578063a457c2d7146108c3578063a73f9b5814610900578063a9059cbb14610917576102d4565b80637bce5a04146107565780638a8c523c146107815780638da5cb5b1461079857806392136913146107c357806395d89b41146107ee5780639a7a23d614610819576102d4565b806344af18e81161023457806370a08231116101ed578063751039fc116101c7578063751039fc1461069a5780637571336a146106c557806375f0a874146106ee57806375fed3c714610719576102d4565b806370a082311461061d57806370df73551461065a578063715018a614610683576102d4565b806344af18e81461051f57806349bd5a5e146105485780634a62bb651461057357806366ca9b831461059e5780636a486a8e146105c75780636ddd1713146105f2576102d4565b80631f3fed8f116102865780631f3fed8f146103e95780632369bf831461041457806323b872dd1461043d578063291984351461047a578063313ce567146104b757806339509351146104e2576102d4565b806302dbd8f8146102d957806306fdde0314610302578063095ea7b31461032d5780631694505e1461036a57806318160ddd146103955780631c499ab0146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb9190613785565b610bb1565b005b34801561030e57600080fd5b50610317610c9b565b6040516103249190613855565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906138d5565b610d2d565b6040516103619190613930565b60405180910390f35b34801561037657600080fd5b5061037f610d4b565b60405161038c91906139aa565b60405180910390f35b3480156103a157600080fd5b506103aa610d71565b6040516103b791906139d4565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906139ef565b610d7b565b005b3480156103f557600080fd5b506103fe610e8a565b60405161040b91906139d4565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613a1c565b610e90565b005b34801561044957600080fd5b50610464600480360381019061045f9190613a49565b610fcc565b6040516104719190613930565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613a1c565b6110c4565b6040516104ae9190613930565b60405180910390f35b3480156104c357600080fd5b506104cc61111a565b6040516104d99190613ab8565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906138d5565b611123565b6040516105169190613930565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906139ef565b6111cf565b005b34801561055457600080fd5b5061055d6112dd565b60405161056a9190613ae2565b60405180910390f35b34801561057f57600080fd5b50610588611303565b6040516105959190613930565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613785565b611316565b005b3480156105d357600080fd5b506105dc611400565b6040516105e991906139d4565b60405180910390f35b3480156105fe57600080fd5b50610607611406565b6040516106149190613930565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613a1c565b611419565b60405161065191906139d4565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190613b29565b611461565b005b34801561068f57600080fd5b506106986114fa565b005b3480156106a657600080fd5b506106af611582565b6040516106bc9190613930565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e79190613b56565b611622565b005b3480156106fa57600080fd5b506107036116f9565b6040516107109190613ae2565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906139ef565b61171f565b60405161074d9190613930565b60405180910390f35b34801561076257600080fd5b5061076b611874565b60405161077891906139d4565b60405180910390f35b34801561078d57600080fd5b5061079661187a565b005b3480156107a457600080fd5b506107ad61192e565b6040516107ba9190613ae2565b60405180910390f35b3480156107cf57600080fd5b506107d8611958565b6040516107e591906139d4565b60405180910390f35b3480156107fa57600080fd5b5061080361195e565b6040516108109190613855565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190613b56565b6119f0565b005b34801561084e57600080fd5b50610857611b0a565b60405161086491906139d4565b60405180910390f35b34801561087957600080fd5b50610882611b10565b60405161088f91906139d4565b60405180910390f35b3480156108a457600080fd5b506108ad611b16565b6040516108ba91906139d4565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906138d5565b611b1c565b6040516108f79190613930565b60405180910390f35b34801561090c57600080fd5b50610915611c07565b005b34801561092357600080fd5b5061093e600480360381019061093991906138d5565b611d14565b60405161094b9190613930565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190613a1c565b611d32565b6040516109889190613930565b60405180910390f35b34801561099d57600080fd5b506109a6611d52565b6040516109b39190613930565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de9190613b56565b611d65565b005b3480156109f157600080fd5b506109fa611e8a565b604051610a079190613ae2565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a3291906139ef565b611eb0565b005b348015610a4557600080fd5b50610a4e611fbf565b604051610a5b91906139d4565b60405180910390f35b348015610a7057600080fd5b50610a8b6004803603810190610a869190613a1c565b611fc5565b005b348015610a9957600080fd5b50610aa2612101565b604051610aaf91906139d4565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613b96565b612107565b604051610aec91906139d4565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190613a1c565b61218e565b604051610b299190613930565b60405180910390f35b348015610b3e57600080fd5b50610b476121ae565b604051610b5491906139d4565b60405180910390f35b348015610b6957600080fd5b50610b846004803603810190610b7f9190613a1c565b6121b4565b005b348015610b9257600080fd5b50610b9b6122ab565b604051610ba891906139d4565b60405180910390f35b610bb96122b1565b73ffffffffffffffffffffffffffffffffffffffff16610bd761192e565b73ffffffffffffffffffffffffffffffffffffffff1614610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2490613c22565b60405180910390fd5b81600c8190555080600d81905550600d54600c54610c4b9190613c71565b600b819055506063600b541115610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90613cf1565b60405180910390fd5b5050565b606060038054610caa90613d40565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd690613d40565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b5050505050905090565b6000610d41610d3a6122b1565b84846122b9565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610d836122b1565b73ffffffffffffffffffffffffffffffffffffffff16610da161192e565b73ffffffffffffffffffffffffffffffffffffffff1614610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613c22565b60405180910390fd5b670de0b6b3a76400006103e86005610e0d610d71565b610e179190613d71565b610e219190613de2565b610e2b9190613de2565b811015610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490613e85565b60405180910390fd5b670de0b6b3a764000081610e819190613d71565b60148190555050565b600e5481565b610e986122b1565b73ffffffffffffffffffffffffffffffffffffffff16610eb661192e565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390613c22565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fd9848484612482565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110246122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613f17565b60405180910390fd5b6110b8856110b06122b1565b8584036122b9565b60019150509392505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012905090565b60006111c56111306122b1565b84846001600061113e6122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c09190613c71565b6122b9565b6001905092915050565b6111d76122b1565b73ffffffffffffffffffffffffffffffffffffffff166111f561192e565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613c22565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161129390613f68565b60006040518083038185875af1925050503d80600081146112d0576040519150601f19603f3d011682016040523d82523d6000602084013e6112d5565b606091505b505090505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900460ff1681565b61131e6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661133c61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613c22565b60405180910390fd5b8160098190555080600a81905550600a546009546113b09190613c71565b600881905550606360085411156113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613cf1565b60405180910390fd5b5050565b600b5481565b601560029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114696122b1565b73ffffffffffffffffffffffffffffffffffffffff1661148761192e565b73ffffffffffffffffffffffffffffffffffffffff16146114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490613c22565b60405180910390fd5b80601560026101000a81548160ff02191690831515021790555050565b6115026122b1565b73ffffffffffffffffffffffffffffffffffffffff1661152061192e565b73ffffffffffffffffffffffffffffffffffffffff1614611576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156d90613c22565b60405180910390fd5b6115806000612eea565b565b600061158c6122b1565b73ffffffffffffffffffffffffffffffffffffffff166115aa61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613c22565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b61162a6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661164861192e565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590613c22565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117296122b1565b73ffffffffffffffffffffffffffffffffffffffff1661174761192e565b73ffffffffffffffffffffffffffffffffffffffff161461179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490613c22565b60405180910390fd5b620186a060016117ab610d71565b6117b59190613d71565b6117bf9190613de2565b821015611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890613fef565b60405180910390fd5b6103e8600561180e610d71565b6118189190613d71565b6118229190613de2565b821115611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90614081565b60405180910390fd5b8160138190555060019050919050565b60095481565b6118826122b1565b73ffffffffffffffffffffffffffffffffffffffff166118a061192e565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613c22565b60405180910390fd5b6001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b60606004805461196d90613d40565b80601f016020809104026020016040519081016040528092919081815260200182805461199990613d40565b80156119e65780601f106119bb576101008083540402835291602001916119e6565b820191906000526020600020905b8154815290600101906020018083116119c957829003601f168201915b5050505050905090565b6119f86122b1565b73ffffffffffffffffffffffffffffffffffffffff16611a1661192e565b73ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6390613c22565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614113565b60405180910390fd5b611b068282612fb0565b5050565b600a5481565b600f5481565b600d5481565b60008060016000611b2b6122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906141a5565b60405180910390fd5b611bfc611bf36122b1565b858584036122b9565b600191505092915050565b611c0f6122b1565b73ffffffffffffffffffffffffffffffffffffffff16611c2d61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a90613c22565b60405180910390fd5b6000611c8e30611419565b905060006013548210159050808015611cb35750601560029054906101000a900460ff165b8015611ccc5750600760149054906101000a900460ff16155b15611d10576001600760146101000a81548160ff021916908315150217905550611cf4613051565b6000600760146101000a81548160ff0219169083151502179055505b5050565b6000611d28611d216122b1565b8484612482565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b601560019054906101000a900460ff1681565b611d6d6122b1565b73ffffffffffffffffffffffffffffffffffffffff16611d8b61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613c22565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e7e9190613930565b60405180910390a25050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eb86122b1565b73ffffffffffffffffffffffffffffffffffffffff16611ed661192e565b73ffffffffffffffffffffffffffffffffffffffff1614611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2390613c22565b60405180910390fd5b670de0b6b3a76400006103e86001611f42610d71565b611f4c9190613d71565b611f569190613de2565b611f609190613de2565b811015611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614237565b60405180910390fd5b670de0b6b3a764000081611fb69190613d71565b60128190555050565b60125481565b611fcd6122b1565b73ffffffffffffffffffffffffffffffffffffffff16611feb61192e565b73ffffffffffffffffffffffffffffffffffffffff1614612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890613c22565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b60135481565b6121bc6122b1565b73ffffffffffffffffffffffffffffffffffffffff166121da61192e565b73ffffffffffffffffffffffffffffffffffffffff1614612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790613c22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612296906142c9565b60405180910390fd5b6122a881612eea565b50565b60145481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f9061435b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e906143ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161247591906139d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061447f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614511565b60405180910390fd5b60008103612579576125748383600061323c565b612ee5565b601560009054906101000a900460ff1615612a745761259661192e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561260457506125d461192e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612677575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126905750600760149054906101000a900460ff16155b15612a7357601560019054906101000a900460ff1661278a57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061274a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612789576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127809061457d565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561282d5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128d457601254811115612877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286e9061460f565b60405180910390fd5b60145461288383611419565b8261288e9190613c71565b11156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c69061467b565b60405180910390fd5b612a72565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129775750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129c6576012548111156129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061470d565b60405180910390fd5b612a71565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a7057601454612a2383611419565b82612a2e9190613c71565b1115612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669061467b565b60405180910390fd5b5b5b5b5b5b6000612a7f30611419565b905060006013548210159050808015612aa45750601560029054906101000a900460ff165b8015612abd5750600760149054906101000a900460ff16155b8015612b125750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612b685750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bbe5750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c02576001600760146101000a81548160ff021916908315150217905550612be6613051565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cb85750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cc257600090505b60008115612ed557601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d2557506000600b54115b15612dbf57612d526064612d44600b54886134bb90919063ffffffff16565b6134d190919063ffffffff16565b9050600b54600d5482612d659190613d71565b612d6f9190613de2565b600f6000828254612d809190613c71565b92505081905550600b54600c5482612d989190613d71565b612da29190613de2565b600e6000828254612db39190613c71565b92505081905550612eb1565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1a57506000600854115b15612eb057612e476064612e39600854886134bb90919063ffffffff16565b6134d190919063ffffffff16565b9050600854600a5482612e5a9190613d71565b612e649190613de2565b600f6000828254612e759190613c71565b9250508190555060085460095482612e8d9190613d71565b612e979190613de2565b600e6000828254612ea89190613c71565b925050819055505b5b6000811115612ec657612ec587308361323c565b5b8085612ed2919061472d565b94505b612ee087878761323c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600061305c30611419565b90506000600f54600e546130709190613c71565b90506000808314806130825750600082145b1561308f5750505061323a565b601460135461309e9190613d71565b8311156130b75760146013546130b49190613d71565b92505b60004790506130c5846134e7565b60006130da824761372a90919063ffffffff16565b90506000613105856130f7600f54856134bb90919063ffffffff16565b6134d190919063ffffffff16565b90506000600e819055506000600f81905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161315d90613f68565b60006040518083038185875af1925050503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b505080945050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131eb90613f68565b60006040518083038185875af1925050503d8060008114613228576040519150601f19603f3d011682016040523d82523d6000602084013e61322d565b606091505b5050809450505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a29061447f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331190614511565b60405180910390fd5b613325838383613740565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a2906147d3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461343e9190613c71565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134a291906139d4565b60405180910390a36134b5848484613745565b50505050565b600081836134c99190613d71565b905092915050565b600081836134df9190613de2565b905092915050565b6000600267ffffffffffffffff811115613504576135036147f3565b5b6040519080825280602002602001820160405280156135325781602001602082028036833780820191505090505b509050308160008151811061354a57613549614822565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136159190614866565b8160018151811061362957613628614822565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061369030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122b9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136f495949392919061498c565b600060405180830381600087803b15801561370e57600080fd5b505af1158015613722573d6000803e3d6000fd5b505050505050565b60008183613738919061472d565b905092915050565b505050565b505050565b600080fd5b6000819050919050565b6137628161374f565b811461376d57600080fd5b50565b60008135905061377f81613759565b92915050565b6000806040838503121561379c5761379b61374a565b5b60006137aa85828601613770565b92505060206137bb85828601613770565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137ff5780820151818401526020810190506137e4565b60008484015250505050565b6000601f19601f8301169050919050565b6000613827826137c5565b61383181856137d0565b93506138418185602086016137e1565b61384a8161380b565b840191505092915050565b6000602082019050818103600083015261386f818461381c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138a282613877565b9050919050565b6138b281613897565b81146138bd57600080fd5b50565b6000813590506138cf816138a9565b92915050565b600080604083850312156138ec576138eb61374a565b5b60006138fa858286016138c0565b925050602061390b85828601613770565b9150509250929050565b60008115159050919050565b61392a81613915565b82525050565b60006020820190506139456000830184613921565b92915050565b6000819050919050565b600061397061396b61396684613877565b61394b565b613877565b9050919050565b600061398282613955565b9050919050565b600061399482613977565b9050919050565b6139a481613989565b82525050565b60006020820190506139bf600083018461399b565b92915050565b6139ce8161374f565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600060208284031215613a0557613a0461374a565b5b6000613a1384828501613770565b91505092915050565b600060208284031215613a3257613a3161374a565b5b6000613a40848285016138c0565b91505092915050565b600080600060608486031215613a6257613a6161374a565b5b6000613a70868287016138c0565b9350506020613a81868287016138c0565b9250506040613a9286828701613770565b9150509250925092565b600060ff82169050919050565b613ab281613a9c565b82525050565b6000602082019050613acd6000830184613aa9565b92915050565b613adc81613897565b82525050565b6000602082019050613af76000830184613ad3565b92915050565b613b0681613915565b8114613b1157600080fd5b50565b600081359050613b2381613afd565b92915050565b600060208284031215613b3f57613b3e61374a565b5b6000613b4d84828501613b14565b91505092915050565b60008060408385031215613b6d57613b6c61374a565b5b6000613b7b858286016138c0565b9250506020613b8c85828601613b14565b9150509250929050565b60008060408385031215613bad57613bac61374a565b5b6000613bbb858286016138c0565b9250506020613bcc858286016138c0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c0c6020836137d0565b9150613c1782613bd6565b602082019050919050565b60006020820190508181036000830152613c3b81613bff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c7c8261374f565b9150613c878361374f565b9250828201905080821115613c9f57613c9e613c42565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613cdb601d836137d0565b9150613ce682613ca5565b602082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5857607f821691505b602082108103613d6b57613d6a613d11565b5b50919050565b6000613d7c8261374f565b9150613d878361374f565b9250828202613d958161374f565b91508282048414831517613dac57613dab613c42565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ded8261374f565b9150613df88361374f565b925082613e0857613e07613db3565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e6f6024836137d0565b9150613e7a82613e13565b604082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f016028836137d0565b9150613f0c82613ea5565b604082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b600081905092915050565b50565b6000613f52600083613f37565b9150613f5d82613f42565b600082019050919050565b6000613f7382613f45565b9150819050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613fd96035836137d0565b9150613fe482613f7d565b604082019050919050565b6000602082019050818103600083015261400881613fcc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061406b6034836137d0565b91506140768261400f565b604082019050919050565b6000602082019050818103600083015261409a8161405e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140fd6039836137d0565b9150614108826140a1565b604082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061418f6025836137d0565b915061419a82614133565b604082019050919050565b600060208201905081810360008301526141be81614182565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006142216029836137d0565b915061422c826141c5565b604082019050919050565b6000602082019050818103600083015261425081614214565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142b36026836137d0565b91506142be82614257565b604082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143456024836137d0565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143d76022836137d0565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144696025836137d0565b91506144748261440d565b604082019050919050565b600060208201905081810360008301526144988161445c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144fb6023836137d0565b91506145068261449f565b604082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145676016836137d0565b915061457282614531565b602082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006145f9602f836137d0565b91506146048261459d565b604082019050919050565b60006020820190508181036000830152614628816145ec565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006146656013836137d0565b91506146708261462f565b602082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006146f76030836137d0565b91506147028261469b565b604082019050919050565b60006020820190508181036000830152614726816146ea565b9050919050565b60006147388261374f565b91506147438361374f565b925082820390508181111561475b5761475a613c42565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147bd6026836137d0565b91506147c882614761565b604082019050919050565b600060208201905081810360008301526147ec816147b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614860816138a9565b92915050565b60006020828403121561487c5761487b61374a565b5b600061488a84828501614851565b91505092915050565b6000819050919050565b60006148b86148b36148ae84614893565b61394b565b61374f565b9050919050565b6148c88161489d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61490381613897565b82525050565b600061491583836148fa565b60208301905092915050565b6000602082019050919050565b6000614939826148ce565b61494381856148d9565b935061494e836148ea565b8060005b8381101561497f5781516149668882614909565b975061497183614921565b925050600181019050614952565b5085935050505092915050565b600060a0820190506149a160008301886139c5565b6149ae60208301876148bf565b81810360408301526149c0818661492e565b90506149cf6060830185613ad3565b6149dc60808301846139c5565b969550505050505056fea2646970667358221220990b9e737dad07b94baa641650037b5b6cd86ea104b0d625e4ef3deec21a488664736f6c63430008180033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c80637bce5a0411610175578063b62496f5116100dc578063d791219911610095578063e1bc33941161006f578063e1bc339414610af5578063e2f4560514610b32578063f2fde38b14610b5d578063f8b45b0514610b86576102d4565b8063d791219914610a64578063d85ba06314610a8d578063dd62ed3e14610ab8576102d4565b8063b62496f514610954578063bbc0c74214610991578063c0246668146109bc578063c04a5414146109e5578063c2d0ffca14610a10578063c3f70b5214610a39576102d4565b80639c3b4fdc1161012e5780639c3b4fdc146108425780639fccce321461086d578063a0d82dc514610898578063a457c2d7146108c3578063a73f9b5814610900578063a9059cbb14610917576102d4565b80637bce5a04146107565780638a8c523c146107815780638da5cb5b1461079857806392136913146107c357806395d89b41146107ee5780639a7a23d614610819576102d4565b806344af18e81161023457806370a08231116101ed578063751039fc116101c7578063751039fc1461069a5780637571336a146106c557806375f0a874146106ee57806375fed3c714610719576102d4565b806370a082311461061d57806370df73551461065a578063715018a614610683576102d4565b806344af18e81461051f57806349bd5a5e146105485780634a62bb651461057357806366ca9b831461059e5780636a486a8e146105c75780636ddd1713146105f2576102d4565b80631f3fed8f116102865780631f3fed8f146103e95780632369bf831461041457806323b872dd1461043d578063291984351461047a578063313ce567146104b757806339509351146104e2576102d4565b806302dbd8f8146102d957806306fdde0314610302578063095ea7b31461032d5780631694505e1461036a57806318160ddd146103955780631c499ab0146103c0576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b5061030060048036038101906102fb9190613785565b610bb1565b005b34801561030e57600080fd5b50610317610c9b565b6040516103249190613855565b60405180910390f35b34801561033957600080fd5b50610354600480360381019061034f91906138d5565b610d2d565b6040516103619190613930565b60405180910390f35b34801561037657600080fd5b5061037f610d4b565b60405161038c91906139aa565b60405180910390f35b3480156103a157600080fd5b506103aa610d71565b6040516103b791906139d4565b60405180910390f35b3480156103cc57600080fd5b506103e760048036038101906103e291906139ef565b610d7b565b005b3480156103f557600080fd5b506103fe610e8a565b60405161040b91906139d4565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613a1c565b610e90565b005b34801561044957600080fd5b50610464600480360381019061045f9190613a49565b610fcc565b6040516104719190613930565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613a1c565b6110c4565b6040516104ae9190613930565b60405180910390f35b3480156104c357600080fd5b506104cc61111a565b6040516104d99190613ab8565b60405180910390f35b3480156104ee57600080fd5b50610509600480360381019061050491906138d5565b611123565b6040516105169190613930565b60405180910390f35b34801561052b57600080fd5b50610546600480360381019061054191906139ef565b6111cf565b005b34801561055457600080fd5b5061055d6112dd565b60405161056a9190613ae2565b60405180910390f35b34801561057f57600080fd5b50610588611303565b6040516105959190613930565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c09190613785565b611316565b005b3480156105d357600080fd5b506105dc611400565b6040516105e991906139d4565b60405180910390f35b3480156105fe57600080fd5b50610607611406565b6040516106149190613930565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190613a1c565b611419565b60405161065191906139d4565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190613b29565b611461565b005b34801561068f57600080fd5b506106986114fa565b005b3480156106a657600080fd5b506106af611582565b6040516106bc9190613930565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e79190613b56565b611622565b005b3480156106fa57600080fd5b506107036116f9565b6040516107109190613ae2565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b91906139ef565b61171f565b60405161074d9190613930565b60405180910390f35b34801561076257600080fd5b5061076b611874565b60405161077891906139d4565b60405180910390f35b34801561078d57600080fd5b5061079661187a565b005b3480156107a457600080fd5b506107ad61192e565b6040516107ba9190613ae2565b60405180910390f35b3480156107cf57600080fd5b506107d8611958565b6040516107e591906139d4565b60405180910390f35b3480156107fa57600080fd5b5061080361195e565b6040516108109190613855565b60405180910390f35b34801561082557600080fd5b50610840600480360381019061083b9190613b56565b6119f0565b005b34801561084e57600080fd5b50610857611b0a565b60405161086491906139d4565b60405180910390f35b34801561087957600080fd5b50610882611b10565b60405161088f91906139d4565b60405180910390f35b3480156108a457600080fd5b506108ad611b16565b6040516108ba91906139d4565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906138d5565b611b1c565b6040516108f79190613930565b60405180910390f35b34801561090c57600080fd5b50610915611c07565b005b34801561092357600080fd5b5061093e600480360381019061093991906138d5565b611d14565b60405161094b9190613930565b60405180910390f35b34801561096057600080fd5b5061097b60048036038101906109769190613a1c565b611d32565b6040516109889190613930565b60405180910390f35b34801561099d57600080fd5b506109a6611d52565b6040516109b39190613930565b60405180910390f35b3480156109c857600080fd5b506109e360048036038101906109de9190613b56565b611d65565b005b3480156109f157600080fd5b506109fa611e8a565b604051610a079190613ae2565b60405180910390f35b348015610a1c57600080fd5b50610a376004803603810190610a3291906139ef565b611eb0565b005b348015610a4557600080fd5b50610a4e611fbf565b604051610a5b91906139d4565b60405180910390f35b348015610a7057600080fd5b50610a8b6004803603810190610a869190613a1c565b611fc5565b005b348015610a9957600080fd5b50610aa2612101565b604051610aaf91906139d4565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190613b96565b612107565b604051610aec91906139d4565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b179190613a1c565b61218e565b604051610b299190613930565b60405180910390f35b348015610b3e57600080fd5b50610b476121ae565b604051610b5491906139d4565b60405180910390f35b348015610b6957600080fd5b50610b846004803603810190610b7f9190613a1c565b6121b4565b005b348015610b9257600080fd5b50610b9b6122ab565b604051610ba891906139d4565b60405180910390f35b610bb96122b1565b73ffffffffffffffffffffffffffffffffffffffff16610bd761192e565b73ffffffffffffffffffffffffffffffffffffffff1614610c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2490613c22565b60405180910390fd5b81600c8190555080600d81905550600d54600c54610c4b9190613c71565b600b819055506063600b541115610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e90613cf1565b60405180910390fd5b5050565b606060038054610caa90613d40565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd690613d40565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b5050505050905090565b6000610d41610d3a6122b1565b84846122b9565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610d836122b1565b73ffffffffffffffffffffffffffffffffffffffff16610da161192e565b73ffffffffffffffffffffffffffffffffffffffff1614610df7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dee90613c22565b60405180910390fd5b670de0b6b3a76400006103e86005610e0d610d71565b610e179190613d71565b610e219190613de2565b610e2b9190613de2565b811015610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490613e85565b60405180910390fd5b670de0b6b3a764000081610e819190613d71565b60148190555050565b600e5481565b610e986122b1565b73ffffffffffffffffffffffffffffffffffffffff16610eb661192e565b73ffffffffffffffffffffffffffffffffffffffff1614610f0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0390613c22565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610fd9848484612482565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110246122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613f17565b60405180910390fd5b6110b8856110b06122b1565b8584036122b9565b60019150509392505050565b6000601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012905090565b60006111c56111306122b1565b84846001600061113e6122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111c09190613c71565b6122b9565b6001905092915050565b6111d76122b1565b73ffffffffffffffffffffffffffffffffffffffff166111f561192e565b73ffffffffffffffffffffffffffffffffffffffff161461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613c22565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161129390613f68565b60006040518083038185875af1925050503d80600081146112d0576040519150601f19603f3d011682016040523d82523d6000602084013e6112d5565b606091505b505090505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900460ff1681565b61131e6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661133c61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611392576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138990613c22565b60405180910390fd5b8160098190555080600a81905550600a546009546113b09190613c71565b600881905550606360085411156113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613cf1565b60405180910390fd5b5050565b600b5481565b601560029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114696122b1565b73ffffffffffffffffffffffffffffffffffffffff1661148761192e565b73ffffffffffffffffffffffffffffffffffffffff16146114dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d490613c22565b60405180910390fd5b80601560026101000a81548160ff02191690831515021790555050565b6115026122b1565b73ffffffffffffffffffffffffffffffffffffffff1661152061192e565b73ffffffffffffffffffffffffffffffffffffffff1614611576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156d90613c22565b60405180910390fd5b6115806000612eea565b565b600061158c6122b1565b73ffffffffffffffffffffffffffffffffffffffff166115aa61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790613c22565b60405180910390fd5b6000601560006101000a81548160ff0219169083151502179055506001905090565b61162a6122b1565b73ffffffffffffffffffffffffffffffffffffffff1661164861192e565b73ffffffffffffffffffffffffffffffffffffffff161461169e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169590613c22565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117296122b1565b73ffffffffffffffffffffffffffffffffffffffff1661174761192e565b73ffffffffffffffffffffffffffffffffffffffff161461179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179490613c22565b60405180910390fd5b620186a060016117ab610d71565b6117b59190613d71565b6117bf9190613de2565b821015611801576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f890613fef565b60405180910390fd5b6103e8600561180e610d71565b6118189190613d71565b6118229190613de2565b821115611864576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185b90614081565b60405180910390fd5b8160138190555060019050919050565b60095481565b6118826122b1565b73ffffffffffffffffffffffffffffffffffffffff166118a061192e565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613c22565b60405180910390fd5b6001601560016101000a81548160ff0219169083151502179055506001601560026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5481565b60606004805461196d90613d40565b80601f016020809104026020016040519081016040528092919081815260200182805461199990613d40565b80156119e65780601f106119bb576101008083540402835291602001916119e6565b820191906000526020600020905b8154815290600101906020018083116119c957829003601f168201915b5050505050905090565b6119f86122b1565b73ffffffffffffffffffffffffffffffffffffffff16611a1661192e565b73ffffffffffffffffffffffffffffffffffffffff1614611a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6390613c22565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af390614113565b60405180910390fd5b611b068282612fb0565b5050565b600a5481565b600f5481565b600d5481565b60008060016000611b2b6122b1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf906141a5565b60405180910390fd5b611bfc611bf36122b1565b858584036122b9565b600191505092915050565b611c0f6122b1565b73ffffffffffffffffffffffffffffffffffffffff16611c2d61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7a90613c22565b60405180910390fd5b6000611c8e30611419565b905060006013548210159050808015611cb35750601560029054906101000a900460ff165b8015611ccc5750600760149054906101000a900460ff16155b15611d10576001600760146101000a81548160ff021916908315150217905550611cf4613051565b6000600760146101000a81548160ff0219169083151502179055505b5050565b6000611d28611d216122b1565b8484612482565b6001905092915050565b60186020528060005260406000206000915054906101000a900460ff1681565b601560019054906101000a900460ff1681565b611d6d6122b1565b73ffffffffffffffffffffffffffffffffffffffff16611d8b61192e565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613c22565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e7e9190613930565b60405180910390a25050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611eb86122b1565b73ffffffffffffffffffffffffffffffffffffffff16611ed661192e565b73ffffffffffffffffffffffffffffffffffffffff1614611f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2390613c22565b60405180910390fd5b670de0b6b3a76400006103e86001611f42610d71565b611f4c9190613d71565b611f569190613de2565b611f609190613de2565b811015611fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9990614237565b60405180910390fd5b670de0b6b3a764000081611fb69190613d71565b60128190555050565b60125481565b611fcd6122b1565b73ffffffffffffffffffffffffffffffffffffffff16611feb61192e565b73ffffffffffffffffffffffffffffffffffffffff1614612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890613c22565b60405180910390fd5b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60176020528060005260406000206000915054906101000a900460ff1681565b60135481565b6121bc6122b1565b73ffffffffffffffffffffffffffffffffffffffff166121da61192e565b73ffffffffffffffffffffffffffffffffffffffff1614612230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222790613c22565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361229f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612296906142c9565b60405180910390fd5b6122a881612eea565b50565b60145481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231f9061435b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238e906143ed565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161247591906139d4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e89061447f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255790614511565b60405180910390fd5b60008103612579576125748383600061323c565b612ee5565b601560009054906101000a900460ff1615612a745761259661192e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561260457506125d461192e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561263d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612677575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126905750600760149054906101000a900460ff16155b15612a7357601560019054906101000a900460ff1661278a57601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061274a5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612789576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127809061457d565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561282d5750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128d457601254811115612877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286e9061460f565b60405180910390fd5b60145461288383611419565b8261288e9190613c71565b11156128cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c69061467b565b60405180910390fd5b612a72565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129775750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129c6576012548111156129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061470d565b60405180910390fd5b612a71565b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a7057601454612a2383611419565b82612a2e9190613c71565b1115612a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a669061467b565b60405180910390fd5b5b5b5b5b5b6000612a7f30611419565b905060006013548210159050808015612aa45750601560029054906101000a900460ff165b8015612abd5750600760149054906101000a900460ff16155b8015612b125750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612b685750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612bbe5750601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c02576001600760146101000a81548160ff021916908315150217905550612be6613051565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612cb85750601660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612cc257600090505b60008115612ed557601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d2557506000600b54115b15612dbf57612d526064612d44600b54886134bb90919063ffffffff16565b6134d190919063ffffffff16565b9050600b54600d5482612d659190613d71565b612d6f9190613de2565b600f6000828254612d809190613c71565b92505081905550600b54600c5482612d989190613d71565b612da29190613de2565b600e6000828254612db39190613c71565b92505081905550612eb1565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e1a57506000600854115b15612eb057612e476064612e39600854886134bb90919063ffffffff16565b6134d190919063ffffffff16565b9050600854600a5482612e5a9190613d71565b612e649190613de2565b600f6000828254612e759190613c71565b9250508190555060085460095482612e8d9190613d71565b612e979190613de2565b600e6000828254612ea89190613c71565b925050819055505b5b6000811115612ec657612ec587308361323c565b5b8085612ed2919061472d565b94505b612ee087878761323c565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600061305c30611419565b90506000600f54600e546130709190613c71565b90506000808314806130825750600082145b1561308f5750505061323a565b601460135461309e9190613d71565b8311156130b75760146013546130b49190613d71565b92505b60004790506130c5846134e7565b60006130da824761372a90919063ffffffff16565b90506000613105856130f7600f54856134bb90919063ffffffff16565b6134d190919063ffffffff16565b90506000600e819055506000600f81905550601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161315d90613f68565b60006040518083038185875af1925050503d806000811461319a576040519150601f19603f3d011682016040523d82523d6000602084013e61319f565b606091505b505080945050601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516131eb90613f68565b60006040518083038185875af1925050503d8060008114613228576040519150601f19603f3d011682016040523d82523d6000602084013e61322d565b606091505b5050809450505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a29061447f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361331a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331190614511565b60405180910390fd5b613325838383613740565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156133ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a2906147d3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461343e9190613c71565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134a291906139d4565b60405180910390a36134b5848484613745565b50505050565b600081836134c99190613d71565b905092915050565b600081836134df9190613de2565b905092915050565b6000600267ffffffffffffffff811115613504576135036147f3565b5b6040519080825280602002602001820160405280156135325781602001602082028036833780820191505090505b509050308160008151811061354a57613549614822565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156135f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136159190614866565b8160018151811061362957613628614822565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061369030600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122b9565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016136f495949392919061498c565b600060405180830381600087803b15801561370e57600080fd5b505af1158015613722573d6000803e3d6000fd5b505050505050565b60008183613738919061472d565b905092915050565b505050565b505050565b600080fd5b6000819050919050565b6137628161374f565b811461376d57600080fd5b50565b60008135905061377f81613759565b92915050565b6000806040838503121561379c5761379b61374a565b5b60006137aa85828601613770565b92505060206137bb85828601613770565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137ff5780820151818401526020810190506137e4565b60008484015250505050565b6000601f19601f8301169050919050565b6000613827826137c5565b61383181856137d0565b93506138418185602086016137e1565b61384a8161380b565b840191505092915050565b6000602082019050818103600083015261386f818461381c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006138a282613877565b9050919050565b6138b281613897565b81146138bd57600080fd5b50565b6000813590506138cf816138a9565b92915050565b600080604083850312156138ec576138eb61374a565b5b60006138fa858286016138c0565b925050602061390b85828601613770565b9150509250929050565b60008115159050919050565b61392a81613915565b82525050565b60006020820190506139456000830184613921565b92915050565b6000819050919050565b600061397061396b61396684613877565b61394b565b613877565b9050919050565b600061398282613955565b9050919050565b600061399482613977565b9050919050565b6139a481613989565b82525050565b60006020820190506139bf600083018461399b565b92915050565b6139ce8161374f565b82525050565b60006020820190506139e960008301846139c5565b92915050565b600060208284031215613a0557613a0461374a565b5b6000613a1384828501613770565b91505092915050565b600060208284031215613a3257613a3161374a565b5b6000613a40848285016138c0565b91505092915050565b600080600060608486031215613a6257613a6161374a565b5b6000613a70868287016138c0565b9350506020613a81868287016138c0565b9250506040613a9286828701613770565b9150509250925092565b600060ff82169050919050565b613ab281613a9c565b82525050565b6000602082019050613acd6000830184613aa9565b92915050565b613adc81613897565b82525050565b6000602082019050613af76000830184613ad3565b92915050565b613b0681613915565b8114613b1157600080fd5b50565b600081359050613b2381613afd565b92915050565b600060208284031215613b3f57613b3e61374a565b5b6000613b4d84828501613b14565b91505092915050565b60008060408385031215613b6d57613b6c61374a565b5b6000613b7b858286016138c0565b9250506020613b8c85828601613b14565b9150509250929050565b60008060408385031215613bad57613bac61374a565b5b6000613bbb858286016138c0565b9250506020613bcc858286016138c0565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c0c6020836137d0565b9150613c1782613bd6565b602082019050919050565b60006020820190508181036000830152613c3b81613bff565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c7c8261374f565b9150613c878361374f565b9250828201905080821115613c9f57613c9e613c42565b5b92915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b6000613cdb601d836137d0565b9150613ce682613ca5565b602082019050919050565b60006020820190508181036000830152613d0a81613cce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5857607f821691505b602082108103613d6b57613d6a613d11565b5b50919050565b6000613d7c8261374f565b9150613d878361374f565b9250828202613d958161374f565b91508282048414831517613dac57613dab613c42565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ded8261374f565b9150613df88361374f565b925082613e0857613e07613db3565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613e6f6024836137d0565b9150613e7a82613e13565b604082019050919050565b60006020820190508181036000830152613e9e81613e62565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f016028836137d0565b9150613f0c82613ea5565b604082019050919050565b60006020820190508181036000830152613f3081613ef4565b9050919050565b600081905092915050565b50565b6000613f52600083613f37565b9150613f5d82613f42565b600082019050919050565b6000613f7382613f45565b9150819050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000613fd96035836137d0565b9150613fe482613f7d565b604082019050919050565b6000602082019050818103600083015261400881613fcc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061406b6034836137d0565b91506140768261400f565b604082019050919050565b6000602082019050818103600083015261409a8161405e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006140fd6039836137d0565b9150614108826140a1565b604082019050919050565b6000602082019050818103600083015261412c816140f0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061418f6025836137d0565b915061419a82614133565b604082019050919050565b600060208201905081810360008301526141be81614182565b9050919050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b60006142216029836137d0565b915061422c826141c5565b604082019050919050565b6000602082019050818103600083015261425081614214565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142b36026836137d0565b91506142be82614257565b604082019050919050565b600060208201905081810360008301526142e2816142a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143456024836137d0565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143d76022836137d0565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144696025836137d0565b91506144748261440d565b604082019050919050565b600060208201905081810360008301526144988161445c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144fb6023836137d0565b91506145068261449f565b604082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006145676016836137d0565b915061457282614531565b602082019050919050565b600060208201905081810360008301526145968161455a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006145f9602f836137d0565b91506146048261459d565b604082019050919050565b60006020820190508181036000830152614628816145ec565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006146656013836137d0565b91506146708261462f565b602082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006146f76030836137d0565b91506147028261469b565b604082019050919050565b60006020820190508181036000830152614726816146ea565b9050919050565b60006147388261374f565b91506147438361374f565b925082820390508181111561475b5761475a613c42565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006147bd6026836137d0565b91506147c882614761565b604082019050919050565b600060208201905081810360008301526147ec816147b0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614860816138a9565b92915050565b60006020828403121561487c5761487b61374a565b5b600061488a84828501614851565b91505092915050565b6000819050919050565b60006148b86148b36148ae84614893565b61394b565b61374f565b9050919050565b6148c88161489d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61490381613897565b82525050565b600061491583836148fa565b60208301905092915050565b6000602082019050919050565b6000614939826148ce565b61494381856148d9565b935061494e836148ea565b8060005b8381101561497f5781516149668882614909565b975061497183614921565b925050600181019050614952565b5085935050505092915050565b600060a0820190506149a160008301886139c5565b6149ae60208301876148bf565b81810360408301526149c0818661492e565b90506149cf6060830185613ad3565b6149dc60808301846139c5565b969550505050505056fea2646970667358221220990b9e737dad07b94baa641650037b5b6cd86ea104b0d625e4ef3deec21a488664736f6c63430008180033

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.