Contract Address Details

0x3dccbdDEa3A906f828262190F476F38Ba43543Ac

Token
HUMILITYDOGE (HUMILITYDOGE)
Creator
0x9b09d2–10d324 at 0x4bfb6b–6889f5
Balance
1.724457835186120987 Doge
Tokens
Fetching tokens...
Transactions
116 Transactions
Transfers
383 Transfers
Gas Used
5,364,196
Last Balance Update
26544520
Contract name:
HUMILITYDOGE




Optimization enabled
false
Compiler version
v0.8.6+commit.11564f7e




EVM Version
default




Verified at
2022-08-16T10:27:50.617369Z

Contract source code

/**

TELEGRAM :  https://t.me/HumilityDoge
WEBSITE  :  www.humilitydoge.com

*/

//

// SPDX-License-Identifier: unlicensed
 
pragma solidity ^ 0.8.6;

/**
 * BEP20 standard interface
 */

interface IBEP20 {
    function totalSupply() external view returns(uint256);
    function decimals() external view returns(uint8);
    function symbol() external view returns(string memory);
    function name() external view returns(string memory);
    function getOwner() external view returns(address);
    function balanceOf(address account) external view returns(uint256);
    function transfer(address recipient, uint256 amount) external returns(bool);
    function allowance(address _owner, address spender) external view returns(uint256);
    function approve(address spender, uint256 amount) external returns(bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns(bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
abstract contract Ownable {
    address internal owner;
    address private _previousOwner;
    uint256 private _lockTime;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address _owner) {
        owner = _owner;
    }
 
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    function isOwner(address account) public view returns(bool) {
        return account == owner;
    }

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

    function getUnlockTime() public view returns(uint256) {
        return _lockTime;
    }

    function Ownershiplock(uint256 time) public virtual onlyOwner {
        _previousOwner = owner;
        owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(owner, address(0));
    }

    function Ownershipunlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime, "Contract is locked");
        emit OwnershipTransferred(owner, _previousOwner);
        owner = _previousOwner;
    }
}

/**
 * Router Interfaces
 */

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

interface IDEXRouter {
    function factory() external pure returns(address);
function WWDOGE() external pure returns(address);

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

function addLiquidityWDOGE(
    address token,
    uint amountTokenDesired,
    uint amountTokenMin,
    uint amountWDOGEMin,
    address to,
    uint deadline
) external payable returns(uint amountToken, uint amountWDOGE, uint liquidity);

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

function swapExactWDOGEForTokensSupportingFeeOnTransferTokens(
    uint amountOutMin,
    address[] calldata path,
    address to,
    uint deadline
) external payable;

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

/**
 * Contract Code
 */
 
contract HUMILITYDOGE is IBEP20, Ownable {
 
    address WDOGE = 0xB7ddC6414bf4F5515b52D8BdD69973Ae205ff101;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
 
    string constant _name = "HUMILITYDOGE"; // 
    string constant _symbol = "HUMILITYDOGE"; // 
    uint8 constant _decimals = 9;
    uint256 _totalSupply = 1 * 10 ** 9 * 10 ** _decimals;

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) _allowances;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isTxLimitExempt;

    // Detailed Fees
    uint256 public liquidityFee;
    uint256 public devFee;
    uint256 public marketingFee;
    uint256 public buybackFee;
    uint256 public totalFee;
 
    uint256 public BuyliquidityFee = 3;
    uint256 public BuydevFee = 0;
    uint256 public BuymarketingFee = 5;
    uint256 public BuybuybackFee = 2;
    uint256 public BuytotalFee = BuyliquidityFee + BuydevFee + BuymarketingFee + BuybuybackFee;
 
    uint256 public SellliquidityFee = 3;
    uint256 public SelldevFee = 0;
    uint256 public SellmarketingFee = 5;
    uint256 public SellbuybackFee = 2;
    uint256 public SelltotalFee = SellliquidityFee + SelldevFee + SellmarketingFee + SellbuybackFee;

    // Max wallet & Transaction
    uint256 public _maxBuyTxAmount = _totalSupply / (100) * (2); // 1%
    uint256 public _maxSellTxAmount = _totalSupply / (100) * (2); // 1%
    uint256 public _maxWalletToken = _totalSupply / (100) * (2); // 1%

    // Fees receivers
    address public autoLiquidityReceiver = 0x9b09D25556F4F26b0eE9469FcA9E8F23A210d324;
    address public marketingFeeReceiver = 0xd29133225212c3980De3824fE341ad9333D7c3cE;
    address public devFeeReceiver = 0x9b09D25556F4F26b0eE9469FcA9E8F23A210d324;
    address public buybackFeeReceiver = 0xd29133225212c3980De3824fE341ad9333D7c3cE;
 
    IDEXRouter public router;
    address public pair;
 
    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 1000 * 1; // 0.1%
    uint256 public maxSwapSize = _totalSupply / 100 * 1; //1%
    uint256 public tokensToSell;
 
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor() Ownable(msg.sender) {
        router = IDEXRouter(0xa4EE06Ce40cb7e8c04E127c1F7D3dFB7F7039C81);
        pair = IDEXFactory(router.factory()).createPair(WDOGE, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

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

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

    receive() external payable { }

    function totalSupply() external view override returns(uint256) { return _totalSupply; }
    function decimals() external pure override returns(uint8) { return _decimals; }
    function symbol() external pure override returns(string memory) { return _symbol; }
    function name() external pure override returns(string memory) { return _name; }
    function getOwner() external view override returns(address) { return owner; }
    function balanceOf(address account) public view override returns(uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns(uint256) { return _allowances[holder][spender]; }
    function approve(address spender, uint256 amount) public override returns(bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

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

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

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

        return _transferFrom(sender, recipient, amount);
    }

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

        if (sender == pair) {
            buyFees();
        }

        if (recipient == pair) {
            sellFees();
        }

        if (sender != owner && recipient != address(this) && recipient != address(DEAD) && recipient != pair || isTxLimitExempt[recipient]) {
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken, "Total Holding is currently limited, you can not buy that much.");
        }

        // Checks max transaction limit
        if (sender == pair) {
            require(amount <= _maxBuyTxAmount || isTxLimitExempt[recipient], "TX Limit Exceeded");
        }

        if (recipient == pair) {
            require(amount <= _maxSellTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
        }
        //Exchange tokens
        if (shouldSwapBack()) { swapBack(); }

        _balances[sender] = _balances[sender] - amount;
 
        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(recipient, amount) : amount;
        _balances[recipient] = _balances[recipient] + amountReceived;
 
        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns(bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + (amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    // Internal Functions
    function buyFees() internal{
        liquidityFee = BuyliquidityFee;
        devFee = BuydevFee;
        marketingFee = BuymarketingFee;
        buybackFee = BuybuybackFee;
        totalFee = BuytotalFee;
    }

    function sellFees() internal{
        liquidityFee = SellliquidityFee;
        devFee = SelldevFee;
        marketingFee = SellmarketingFee;
        buybackFee = SellbuybackFee;
        totalFee = SelltotalFee;
    }

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

    function takeFee(address sender, uint256 amount) internal returns(uint256) {
        uint256 feeAmount = amount / 100 * (totalFee);

        _balances[address(this)] = _balances[address(this)] + (feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount - (feeAmount);
    }

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

    function swapBack() internal swapping {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance >= maxSwapSize) {
            tokensToSell = maxSwapSize;
        }
        else {
            tokensToSell = contractTokenBalance;
        }
 
        uint256 amountToLiquify = tokensToSell / (totalFee) * (liquidityFee) / (2);
        uint256 amountToSwap = tokensToSell - (amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WDOGE;
 
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForWDOGESupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
 
        uint256 amountDOGE = address(this).balance - (balanceBefore);
 
        uint256 totalDOGEFee = totalFee - (liquidityFee / (2));
 
        uint256 amountDOGELiquidity = amountDOGE * (liquidityFee) / (totalDOGEFee) / (2);
        uint256 amountDOGEbuyback = amountDOGE * (buybackFee) / (totalDOGEFee);
        uint256 amountDOGEMarketing = amountDOGE * (marketingFee) / (totalDOGEFee);
        uint256 amountDOGEDev = amountDOGE - amountDOGELiquidity - amountDOGEbuyback - amountDOGEMarketing;

        (bool MarketingSuccess,) = payable(marketingFeeReceiver).call{ value: amountDOGEMarketing, gas: 30000 } ("");
        require(MarketingSuccess, "receiver rejected WDOGE transfer");
        (bool buybackSuccess,) = payable(buybackFeeReceiver).call{ value: amountDOGEbuyback, gas: 30000 } ("");
        require(buybackSuccess, "receiver rejected WDOGE transfer");
        (bool devSuccess,) = payable(devFeeReceiver).call{ value: amountDOGEDev, gas: 30000 } ("");
        require(devSuccess, "receiver rejected WDOGE transfer");

        addLiquidity(amountToLiquify, amountDOGELiquidity);
    }

    function addLiquidity(uint256 tokenAmount, uint256 DOGEAmount) private {
        if (tokenAmount > 0) {
            router.addLiquidityWDOGE{ value: DOGEAmount } (
                address(this),
                tokenAmount,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(DOGEAmount, tokenAmount);
        }
    }

    // External Functions
    function checkSwapThreshold() external view returns(uint256) {
        return swapThreshold;
    }

    function checkMaxWalletToken() external view returns(uint256) {
        return _maxWalletToken;
    }

    function checkMaxBuyTxAmount() external view returns(uint256) {
        return _maxBuyTxAmount;
    }

    function checkMaxSellTxAmount() external view returns(uint256) {
        return _maxSellTxAmount;
    }

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

    // Only Owner allowed
    function setBuyFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _marketingFee, uint256 _devFee) external onlyOwner {
        BuyliquidityFee = _liquidityFee;
        BuybuybackFee = _buybackFee;
        BuymarketingFee = _marketingFee;
        BuydevFee = _devFee;
        BuytotalFee = _liquidityFee + (_buybackFee) + (_marketingFee) + (_devFee);
    }

    function setSellFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _marketingFee, uint256 _devFee) external onlyOwner {
        SellliquidityFee = _liquidityFee;
        SellbuybackFee = _buybackFee;
        SellmarketingFee = _marketingFee;
        SelldevFee = _devFee;
        SelltotalFee = _liquidityFee + (_buybackFee) + (_marketingFee) + (_devFee);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _buybackFeeReceiver, address _devFeeReceiver) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        buybackFeeReceiver = _buybackFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _percentage_min_base10000, uint256 _percentage_max_base10000) external onlyOwner {
        swapEnabled = _enabled;
        swapThreshold = _totalSupply / (10000) * (_percentage_min_base10000);
        maxSwapSize = _totalSupply / (10000) * (_percentage_max_base10000);
    }

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

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

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner {
        _maxWalletToken = _totalSupply / (1000) * (maxWallPercent_base1000);
    }

    function setMaxBuyTxPercent_base1000(uint256 maxBuyTXPercentage_base1000) external onlyOwner {
        _maxBuyTxAmount = _totalSupply / (1000) * (maxBuyTXPercentage_base1000);
    }

    function setMaxSellTxPercent_base1000(uint256 maxSellTXPercentage_base1000) external onlyOwner {
        _maxSellTxAmount = _totalSupply / (1000) * (maxSellTXPercentage_base1000);
    }

    // Stuck Balances Functions
    function rescueToken(address tokenAddress, uint256 tokens) public onlyOwner returns(bool success) {
        return IBEP20(tokenAddress).transfer(msg.sender, tokens);
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        uint256 amountDOGE = address(this).balance;
        payable(msg.sender).transfer(amountDOGE * amountPercentage / 100);
    }
 
event AutoLiquify(uint256 amountDOGE, uint256 amountTokens);

}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountDOGE","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountTokens","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BuybuybackFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BuydevFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BuyliquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BuymarketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"BuytotalFee","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Ownershiplock","inputs":[{"type":"uint256","name":"time","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"Ownershipunlock","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"SellbuybackFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"SelldevFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"SellliquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"SellmarketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"SelltotalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxBuyTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxSellTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxWalletToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"buybackFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"buybackFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"checkMaxBuyTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"checkMaxSellTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"checkMaxWalletToken","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"checkSwapThreshold","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"devFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"devFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getUnlockTime","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isFeeExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isNotInSwap","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isTxLimitExempt","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"marketingFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"marketingFeeReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxSwapSize","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"rescueToken","inputs":[{"type":"address","name":"tokenAddress","internalType":"address"},{"type":"uint256","name":"tokens","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBuyFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_buybackFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_devFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"},{"type":"address","name":"_marketingFeeReceiver","internalType":"address"},{"type":"address","name":"_buybackFeeReceiver","internalType":"address"},{"type":"address","name":"_devFeeReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxBuyTxPercent_base1000","inputs":[{"type":"uint256","name":"maxBuyTXPercentage_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxSellTxPercent_base1000","inputs":[{"type":"uint256","name":"maxSellTXPercentage_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxWalletPercent_base1000","inputs":[{"type":"uint256","name":"maxWallPercent_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSellFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_buybackFee","internalType":"uint256"},{"type":"uint256","name":"_marketingFee","internalType":"uint256"},{"type":"uint256","name":"_devFee","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_percentage_min_base10000","internalType":"uint256"},{"type":"uint256","name":"_percentage_max_base10000","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"tokensToSell","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
            

Contract Creation Code

0x608060405273b7ddc6414bf4f5515b52d8bdd69973ae205ff101600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000ee9190620009b5565b633b9aca00620000ff919062000af2565b60065560036010556000601155600560125560026013556013546012546011546010546200012e9190620008c5565b6200013a9190620008c5565b620001469190620008c5565b6014556003601555600060165560056017556002601855601854601754601654601554620001759190620008c5565b620001819190620008c5565b6200018d9190620008c5565b60195560026064600654620001a3919062000922565b620001af919062000af2565b601a5560026064600654620001c5919062000922565b620001d1919062000af2565b601b5560026064600654620001e7919062000922565b620001f3919062000af2565b601c55739b09d25556f4f26b0ee9469fca9e8f23a210d324601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d29133225212c3980de3824fe341ad9333d7c3ce601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739b09d25556f4f26b0ee9469fca9e8f23a210d324601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d29133225212c3980de3824fe341ad9333d7c3ce602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001602260146101000a81548160ff02191690831515021790555060016103e860065462000379919062000922565b62000385919062000af2565b602355600160646006546200039b919062000922565b620003a7919062000af2565b602455348015620003b757600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505073a4ee06ce40cb7e8c04e127c1f7d3dfb7f7039c81602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620004b857600080fd5b505afa158015620004cd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f3919062000827565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620005519291906200087b565b602060405180830381600087803b1580156200056c57600080fd5b505af115801562000581573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005a7919062000827565b602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600654600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620008029190620008a8565b60405180910390a362000c28565b600081519050620008218162000c0e565b92915050565b60006020828403121562000840576200083f62000bfc565b5b6000620008508482850162000810565b91505092915050565b620008648162000b53565b82525050565b620008758162000b87565b82525050565b600060408201905062000892600083018562000859565b620008a1602083018462000859565b9392505050565b6000602082019050620008bf60008301846200086a565b92915050565b6000620008d28262000b87565b9150620008df8362000b87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000917576200091662000b9e565b5b828201905092915050565b60006200092f8262000b87565b91506200093c8362000b87565b9250826200094f576200094e62000bcd565b5b828204905092915050565b6000808291508390505b6001851115620009ac5780860481111562000984576200098362000b9e565b5b6001851615620009945780820291505b8081029050620009a48562000c01565b945062000964565b94509492505050565b6000620009c28262000b87565b9150620009cf8362000b91565b9250620009fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a06565b905092915050565b60008262000a18576001905062000aeb565b8162000a28576000905062000aeb565b816001811462000a41576002811462000a4c5762000a82565b600191505062000aeb565b60ff84111562000a615762000a6062000b9e565b5b8360020a91508482111562000a7b5762000a7a62000b9e565b5b5062000aeb565b5060208310610133831016604e8410600b841016171562000abc5782820a90508381111562000ab65762000ab562000b9e565b5b62000aeb565b62000acb84848460016200095a565b9250905081840481111562000ae55762000ae462000b9e565b5b81810290505b9392505050565b600062000aff8262000b87565b915062000b0c8362000b87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b485762000b4762000b9e565b5b828202905092915050565b600062000b608262000b67565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b62000c198162000b53565b811462000c2557600080fd5b50565b6140668062000c386000396000f3fe6080604052600436106103b15760003560e01c80636ddd1713116101e7578063ab00d68d1161010d578063e96fada2116100a0578063f7baf3c51161006f578063f7baf3c514610e19578063f84ba65d14610e30578063f887ea4014610e59578063fc44ed4814610e84576103b8565b8063e96fada214610d6f578063e99090c114610d9a578063ea19e4a814610dc5578063f2fde38b14610df0576103b8565b8063d0889358116100dc578063d088935814610cb3578063dab84ee714610cdc578063dd62ed3e14610d07578063e9563dfd14610d44576103b8565b8063ab00d68d14610c07578063b43b783514610c32578063ca33e64c14610c5d578063cf4be39414610c88576103b8565b8063893d20e81161018557806398118cb41161015457806398118cb414610b4b578063a4e1307114610b76578063a8aa1b3114610b9f578063a9059cbb14610bca576103b8565b8063893d20e814610a8f5780638b42507f14610aba57806395d89b4114610af757806396c99f5b14610b22576103b8565b806378109e54116101c157806378109e54146109e35780637fbcedff14610a0e57806383b4ac6814610a3957806384b1d1ef14610a64576103b8565b80636ddd17131461095057806370a082311461097b5780637724555f146109b8576103b8565b8063391e73a3116102d7578063602bc62b1161026a5780636b67c4df116102395780636b67c4df146108a65780636c5b2855146108d15780636d351d1a146108fa5780636d796e8814610925576103b8565b8063602bc62b146107fc5780636533e39314610827578063658d4b7f146108525780636827e7641461087b576103b8565b80633f4218e0116102a65780633f4218e01461072c5780634f28cac214610769578063541b4de714610794578063571ac8b0146107bf576103b8565b8063391e73a3146106825780633b2d081c146106ad5780633c8e556d146106d85780633d95669114610701576103b8565b80631898cab21161034f5780632f54bf6e1161031e5780632f54bf6e146105b2578063313ce567146105ef578063334773271461061a57806333f3d62814610645576103b8565b80631898cab2146104f65780631da1db5e146105215780631df4ccfc1461054a57806323b872dd14610575576103b8565b8063095ea7b31161038b578063095ea7b31461043c578063154d4abb14610479578063178d9b8e146104a257806318160ddd146104cb576103b8565b80630445b667146103bd57806306fdde03146103e857806309302dc614610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610eaf565b6040516103df9190613a99565b60405180910390f35b3480156103f457600080fd5b506103fd610eb5565b60405161040a9190613997565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190613590565b610ef2565b005b34801561044857600080fd5b50610463600480360381019061045e91906134d0565b610f5e565b6040516104709190613961565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b9190613590565b611050565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190613610565b6110bc565b005b3480156104d757600080fd5b506104e061114e565b6040516104ed9190613a99565b60405180910390f35b34801561050257600080fd5b5061050b611158565b6040516105189190613a99565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613590565b611162565b005b34801561055657600080fd5b5061055f611211565b60405161056c9190613a99565b60405180910390f35b34801561058157600080fd5b5061059c6004803603810190610597919061343d565b611217565b6040516105a99190613961565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613369565b6113d9565b6040516105e69190613961565b60405180910390f35b3480156105fb57600080fd5b50610604611432565b6040516106119190613b37565b60405180910390f35b34801561062657600080fd5b5061062f61143b565b60405161063c9190613a99565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906134d0565b611441565b6040516106799190613961565b60405180910390f35b34801561068e57600080fd5b50610697611520565b6040516106a49190613a99565b60405180910390f35b3480156106b957600080fd5b506106c2611526565b6040516106cf9190613a99565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa91906133d6565b61152c565b005b34801561070d57600080fd5b5061071661167e565b6040516107239190613a99565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190613369565b611684565b6040516107609190613961565b60405180910390f35b34801561077557600080fd5b5061077e6116a4565b60405161078b9190613a99565b60405180910390f35b3480156107a057600080fd5b506107a96116aa565b6040516107b69190613a99565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613369565b6116b4565b6040516107f39190613961565b60405180910390f35b34801561080857600080fd5b506108116116e7565b60405161081e9190613a99565b60405180910390f35b34801561083357600080fd5b5061083c6116f1565b6040516108499190613a99565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190613490565b6116f7565b005b34801561088757600080fd5b5061089061179a565b60405161089d9190613a99565b60405180910390f35b3480156108b257600080fd5b506108bb6117a0565b6040516108c89190613a99565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190613610565b6117a6565b005b34801561090657600080fd5b5061090f611838565b60405161091c9190613a99565b60405180910390f35b34801561093157600080fd5b5061093a611842565b6040516109479190613a99565b60405180910390f35b34801561095c57600080fd5b50610965611848565b6040516109729190613961565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613369565b61185b565b6040516109af9190613a99565b60405180910390f35b3480156109c457600080fd5b506109cd6118a4565b6040516109da9190613a99565b60405180910390f35b3480156109ef57600080fd5b506109f86118aa565b604051610a059190613a99565b60405180910390f35b348015610a1a57600080fd5b50610a236118b0565b604051610a309190613a99565b60405180910390f35b348015610a4557600080fd5b50610a4e6118b6565b604051610a5b9190613961565b60405180910390f35b348015610a7057600080fd5b50610a796118ce565b604051610a8691906138bc565b60405180910390f35b348015610a9b57600080fd5b50610aa46118f4565b604051610ab191906138bc565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190613369565b61191d565b604051610aee9190613961565b60405180910390f35b348015610b0357600080fd5b50610b0c61193d565b604051610b199190613997565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b449190613590565b61197a565b005b348015610b5757600080fd5b50610b606119e6565b604051610b6d9190613a99565b60405180910390f35b348015610b8257600080fd5b50610b9d6004803603810190610b989190613590565b6119ec565b005b348015610bab57600080fd5b50610bb4611b66565b604051610bc191906138bc565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec91906134d0565b611b8c565b604051610bfe9190613961565b60405180910390f35b348015610c1357600080fd5b50610c1c611ba1565b604051610c299190613a99565b60405180910390f35b348015610c3e57600080fd5b50610c47611ba7565b604051610c549190613a99565b60405180910390f35b348015610c6957600080fd5b50610c72611bb1565b604051610c7f91906138bc565b60405180910390f35b348015610c9457600080fd5b50610c9d611bd7565b604051610caa9190613a99565b60405180910390f35b348015610cbf57600080fd5b50610cda6004803603810190610cd5919061353d565b611bdd565b005b348015610ce857600080fd5b50610cf1611c86565b604051610cfe91906138bc565b60405180910390f35b348015610d1357600080fd5b50610d2e6004803603810190610d299190613396565b611cac565b604051610d3b9190613a99565b60405180910390f35b348015610d5057600080fd5b50610d59611d33565b604051610d669190613a99565b60405180910390f35b348015610d7b57600080fd5b50610d84611d39565b604051610d9191906138bc565b60405180910390f35b348015610da657600080fd5b50610daf611d5f565b604051610dbc9190613a99565b60405180910390f35b348015610dd157600080fd5b50610dda611d65565b604051610de79190613a99565b60405180910390f35b348015610dfc57600080fd5b50610e176004803603810190610e129190613369565b611d6b565b005b348015610e2557600080fd5b50610e2e611ee0565b005b348015610e3c57600080fd5b50610e576004803603810190610e529190613490565b6120b4565b005b348015610e6557600080fd5b50610e6e612157565b604051610e7b919061397c565b60405180910390f35b348015610e9057600080fd5b50610e9961217d565b604051610ea69190613a99565b60405180910390f35b60235481565b60606040518060400160405280600c81526020017f48554d494c495459444f47450000000000000000000000000000000000000000815250905090565b610efb336113d9565b610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613a39565b60405180910390fd5b806103e8600654610f4b9190613c08565b610f559190613c39565b601c8190555050565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161103e9190613a99565b60405180910390a36001905092915050565b611059336113d9565b611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613a39565b60405180910390fd5b806103e86006546110a99190613c08565b6110b39190613c39565b601a8190555050565b6110c5336113d9565b611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613a39565b60405180910390fd5b836010819055508260138190555081601281905550806011819055508082848661112e9190613bb2565b6111389190613bb2565b6111429190613bb2565b60148190555050505050565b6000600654905090565b6000601a54905090565b61116b336113d9565b6111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190613a39565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc606484846111d79190613c39565b6111e19190613c08565b9081150290604051600060405180830381858888f1935050505015801561120c573d6000803e3d6000fd5b505050565b600f5481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113c55781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113449190613c93565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113d0848484612183565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b601a5481565b600061144c336113d9565b61148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290613a39565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016114c69291906138d7565b602060405180830381600087803b1580156114e057600080fd5b505af11580156114f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115189190613510565b905092915050565b60145481565b600e5481565b611535336113d9565b611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613a39565b60405180910390fd5b83601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60255481565b60096020528060005260406000206000915054906101000a900460ff1681565b60245481565b6000601b54905090565b60006116e0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f5e565b9050919050565b6000600254905090565b60115481565b611700336113d9565b61173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613a39565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b600d5481565b6117af336113d9565b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613a39565b60405180910390fd5b83601581905550826018819055508160178190555080601681905550808284866118189190613bb2565b6118229190613bb2565b61182c9190613bb2565b60198190555050505050565b6000602354905090565b60175481565b602260149054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601c5481565b60125481565b6000602660009054906101000a900460ff1615905090565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600c81526020017f48554d494c495459444f47450000000000000000000000000000000000000000815250905090565b611983336113d9565b6119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613a39565b60405180910390fd5b806103e86006546119d39190613c08565b6119dd9190613c39565b601b8190555050565b600b5481565b6119f5336113d9565b611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613a39565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611ae29190613bb2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611b99338484612183565b905092915050565b60165481565b6000601c54905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611be6336113d9565b611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613a39565b60405180910390fd5b82602260146101000a81548160ff02191690831515021790555081612710600654611c509190613c08565b611c5a9190613c39565b60238190555080612710600654611c719190613c08565b611c7b9190613c39565b602481905550505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60135481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60105481565b611d74336113d9565b611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613a39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a906139f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790613a79565b60405180910390fd5b6002544211611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90613a59565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6120bd336113d9565b6120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390613a39565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b6000602660009054906101000a900460ff16156121ac576121a5848484612804565b90506127fd565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561220b5761220a612992565b5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561226a576122696129c1565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156122f257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561234c5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123a65750602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b806123fa5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561245e57600061240a8461185b565b9050601c54838261241b9190613bb2565b111561245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390613a19565b60405180910390fd5b505b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561254e57601a548211158061250e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906139b9565b60405180910390fd5b5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561263e57601b54821115806125fe5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906139b9565b60405180910390fd5b5b6126466129f0565b1561265457612653612ac7565b5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269f9190613c93565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006126ed8561305d565b6126f75782612702565b61270184846130b4565b5b905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274f9190613bb2565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127ef9190613a99565b60405180910390a360019150505b9392505050565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128519190613c93565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128df9190613bb2565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161297f9190613a99565b60405180910390a3600190509392505050565b601054600b81905550601154600c81905550601254600d81905550601354600e81905550601454600f81905550565b601554600b81905550601654600c81905550601754600d81905550601854600e81905550601954600f81905550565b6000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612a5d5750602660009054906101000a900460ff16155b8015612a755750602260149054906101000a900460ff165b8015612ac25750602354600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602660006101000a81548160ff0219169083151502179055506000612aed3061185b565b90506024548110612b0657602454602581905550612b0e565b806025819055505b60006002600b54600f54602554612b259190613c08565b612b2f9190613c39565b612b399190613c08565b9050600081602554612b4b9190613c93565b90506000600267ffffffffffffffff811115612b6a57612b69613e12565b5b604051908082528060200260200182016040528015612b985781602001602082028036833780820191505090505b5090503081600081518110612bb057612baf613de3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c2157612c20613de3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b43d9bbb8460008530426040518663ffffffff1660e01b8152600401612cc4959493929190613ab4565b600060405180830381600087803b158015612cde57600080fd5b505af1158015612cf2573d6000803e3d6000fd5b5050505060008147612d049190613c93565b905060006002600b54612d179190613c08565b600f54612d249190613c93565b90506000600282600b5485612d399190613c39565b612d439190613c08565b612d4d9190613c08565b9050600082600e5485612d609190613c39565b612d6a9190613c08565b9050600083600d5486612d7d9190613c39565b612d879190613c08565b9050600081838588612d999190613c93565b612da39190613c93565b612dad9190613c93565b90506000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051612dfb906138a7565b600060405180830381858888f193505050503d8060008114612e39576040519150601f19603f3d011682016040523d82523d6000602084013e612e3e565b606091505b5050905080612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e79906139d9565b60405180910390fd5b6000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168561753090604051612ece906138a7565b600060405180830381858888f193505050503d8060008114612f0c576040519150601f19603f3d011682016040523d82523d6000602084013e612f11565b606091505b5050905080612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c906139d9565b60405180910390fd5b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168461753090604051612fa1906138a7565b600060405180830381858888f193505050503d8060008114612fdf576040519150601f19603f3d011682016040523d82523d6000602084013e612fe4565b606091505b5050905080613028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301f906139d9565b60405180910390fd5b6130328d886131db565b50505050505050505050505050506000602660006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080600f546064846130c79190613c08565b6130d19190613c39565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311e9190613bb2565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131be9190613a99565b60405180910390a380836131d29190613c93565b91505092915050565b60008211156132fc57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6529ab4823085600080601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161326d96959493929190613900565b6060604051808303818588803b15801561328657600080fd5b505af115801561329a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132bf91906135bd565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450681836040516132f3929190613b0e565b60405180910390a15b5050565b60008135905061330f81613feb565b92915050565b60008135905061332481614002565b92915050565b60008151905061333981614002565b92915050565b60008135905061334e81614019565b92915050565b60008151905061336381614019565b92915050565b60006020828403121561337f5761337e613e41565b5b600061338d84828501613300565b91505092915050565b600080604083850312156133ad576133ac613e41565b5b60006133bb85828601613300565b92505060206133cc85828601613300565b9150509250929050565b600080600080608085870312156133f0576133ef613e41565b5b60006133fe87828801613300565b945050602061340f87828801613300565b935050604061342087828801613300565b925050606061343187828801613300565b91505092959194509250565b60008060006060848603121561345657613455613e41565b5b600061346486828701613300565b935050602061347586828701613300565b92505060406134868682870161333f565b9150509250925092565b600080604083850312156134a7576134a6613e41565b5b60006134b585828601613300565b92505060206134c685828601613315565b9150509250929050565b600080604083850312156134e7576134e6613e41565b5b60006134f585828601613300565b92505060206135068582860161333f565b9150509250929050565b60006020828403121561352657613525613e41565b5b60006135348482850161332a565b91505092915050565b60008060006060848603121561355657613555613e41565b5b600061356486828701613315565b93505060206135758682870161333f565b92505060406135868682870161333f565b9150509250925092565b6000602082840312156135a6576135a5613e41565b5b60006135b48482850161333f565b91505092915050565b6000806000606084860312156135d6576135d5613e41565b5b60006135e486828701613354565b93505060206135f586828701613354565b925050604061360686828701613354565b9150509250925092565b6000806000806080858703121561362a57613629613e41565b5b60006136388782880161333f565b94505060206136498782880161333f565b935050604061365a8782880161333f565b925050606061366b8782880161333f565b91505092959194509250565b6000613683838361368f565b60208301905092915050565b61369881613cc7565b82525050565b6136a781613cc7565b82525050565b60006136b882613b62565b6136c28185613b85565b93506136cd83613b52565b8060005b838110156136fe5781516136e58882613677565b97506136f083613b78565b9250506001810190506136d1565b5085935050505092915050565b61371481613cd9565b82525050565b61372381613d1c565b82525050565b61373281613d40565b82525050565b600061374382613b6d565b61374d8185613ba1565b935061375d818560208601613d52565b61376681613e46565b840191505092915050565b600061377e601183613ba1565b915061378982613e57565b602082019050919050565b60006137a1602083613ba1565b91506137ac82613e80565b602082019050919050565b60006137c4602683613ba1565b91506137cf82613ea9565b604082019050919050565b60006137e7603e83613ba1565b91506137f282613ef8565b604082019050919050565b600061380a600683613ba1565b915061381582613f47565b602082019050919050565b600061382d600083613b96565b915061383882613f70565b600082019050919050565b6000613850601283613ba1565b915061385b82613f73565b602082019050919050565b6000613873602383613ba1565b915061387e82613f9c565b604082019050919050565b61389281613d05565b82525050565b6138a181613d0f565b82525050565b60006138b282613820565b9150819050919050565b60006020820190506138d1600083018461369e565b92915050565b60006040820190506138ec600083018561369e565b6138f96020830184613889565b9392505050565b600060c082019050613915600083018961369e565b6139226020830188613889565b61392f6040830187613729565b61393c6060830186613729565b613949608083018561369e565b61395660a0830184613889565b979650505050505050565b6000602082019050613976600083018461370b565b92915050565b6000602082019050613991600083018461371a565b92915050565b600060208201905081810360008301526139b18184613738565b905092915050565b600060208201905081810360008301526139d281613771565b9050919050565b600060208201905081810360008301526139f281613794565b9050919050565b60006020820190508181036000830152613a12816137b7565b9050919050565b60006020820190508181036000830152613a32816137da565b9050919050565b60006020820190508181036000830152613a52816137fd565b9050919050565b60006020820190508181036000830152613a7281613843565b9050919050565b60006020820190508181036000830152613a9281613866565b9050919050565b6000602082019050613aae6000830184613889565b92915050565b600060a082019050613ac96000830188613889565b613ad66020830187613729565b8181036040830152613ae881866136ad565b9050613af7606083018561369e565b613b046080830184613889565b9695505050505050565b6000604082019050613b236000830185613889565b613b306020830184613889565b9392505050565b6000602082019050613b4c6000830184613898565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613bbd82613d05565b9150613bc883613d05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bfd57613bfc613d85565b5b828201905092915050565b6000613c1382613d05565b9150613c1e83613d05565b925082613c2e57613c2d613db4565b5b828204905092915050565b6000613c4482613d05565b9150613c4f83613d05565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c8857613c87613d85565b5b828202905092915050565b6000613c9e82613d05565b9150613ca983613d05565b925082821015613cbc57613cbb613d85565b5b828203905092915050565b6000613cd282613ce5565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613d2782613d2e565b9050919050565b6000613d3982613ce5565b9050919050565b6000613d4b82613d05565b9050919050565b60005b83811015613d70578082015181840152602081019050613d55565b83811115613d7f576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f72656365697665722072656a65637465642057444f4745207472616e73666572600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b50565b7f436f6e7472616374206973206c6f636b65640000000000000000000000000000600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b613ff481613cc7565b8114613fff57600080fd5b50565b61400b81613cd9565b811461401657600080fd5b50565b61402281613d05565b811461402d57600080fd5b5056fea2646970667358221220c0c62f84db8fbb8493086082c7802f43de1960bcc2e7668d69beb22a97800e5164736f6c63430008060033

Deployed ByteCode

0x6080604052600436106103b15760003560e01c80636ddd1713116101e7578063ab00d68d1161010d578063e96fada2116100a0578063f7baf3c51161006f578063f7baf3c514610e19578063f84ba65d14610e30578063f887ea4014610e59578063fc44ed4814610e84576103b8565b8063e96fada214610d6f578063e99090c114610d9a578063ea19e4a814610dc5578063f2fde38b14610df0576103b8565b8063d0889358116100dc578063d088935814610cb3578063dab84ee714610cdc578063dd62ed3e14610d07578063e9563dfd14610d44576103b8565b8063ab00d68d14610c07578063b43b783514610c32578063ca33e64c14610c5d578063cf4be39414610c88576103b8565b8063893d20e81161018557806398118cb41161015457806398118cb414610b4b578063a4e1307114610b76578063a8aa1b3114610b9f578063a9059cbb14610bca576103b8565b8063893d20e814610a8f5780638b42507f14610aba57806395d89b4114610af757806396c99f5b14610b22576103b8565b806378109e54116101c157806378109e54146109e35780637fbcedff14610a0e57806383b4ac6814610a3957806384b1d1ef14610a64576103b8565b80636ddd17131461095057806370a082311461097b5780637724555f146109b8576103b8565b8063391e73a3116102d7578063602bc62b1161026a5780636b67c4df116102395780636b67c4df146108a65780636c5b2855146108d15780636d351d1a146108fa5780636d796e8814610925576103b8565b8063602bc62b146107fc5780636533e39314610827578063658d4b7f146108525780636827e7641461087b576103b8565b80633f4218e0116102a65780633f4218e01461072c5780634f28cac214610769578063541b4de714610794578063571ac8b0146107bf576103b8565b8063391e73a3146106825780633b2d081c146106ad5780633c8e556d146106d85780633d95669114610701576103b8565b80631898cab21161034f5780632f54bf6e1161031e5780632f54bf6e146105b2578063313ce567146105ef578063334773271461061a57806333f3d62814610645576103b8565b80631898cab2146104f65780631da1db5e146105215780631df4ccfc1461054a57806323b872dd14610575576103b8565b8063095ea7b31161038b578063095ea7b31461043c578063154d4abb14610479578063178d9b8e146104a257806318160ddd146104cb576103b8565b80630445b667146103bd57806306fdde03146103e857806309302dc614610413576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610eaf565b6040516103df9190613a99565b60405180910390f35b3480156103f457600080fd5b506103fd610eb5565b60405161040a9190613997565b60405180910390f35b34801561041f57600080fd5b5061043a60048036038101906104359190613590565b610ef2565b005b34801561044857600080fd5b50610463600480360381019061045e91906134d0565b610f5e565b6040516104709190613961565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b9190613590565b611050565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190613610565b6110bc565b005b3480156104d757600080fd5b506104e061114e565b6040516104ed9190613a99565b60405180910390f35b34801561050257600080fd5b5061050b611158565b6040516105189190613a99565b60405180910390f35b34801561052d57600080fd5b5061054860048036038101906105439190613590565b611162565b005b34801561055657600080fd5b5061055f611211565b60405161056c9190613a99565b60405180910390f35b34801561058157600080fd5b5061059c6004803603810190610597919061343d565b611217565b6040516105a99190613961565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613369565b6113d9565b6040516105e69190613961565b60405180910390f35b3480156105fb57600080fd5b50610604611432565b6040516106119190613b37565b60405180910390f35b34801561062657600080fd5b5061062f61143b565b60405161063c9190613a99565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906134d0565b611441565b6040516106799190613961565b60405180910390f35b34801561068e57600080fd5b50610697611520565b6040516106a49190613a99565b60405180910390f35b3480156106b957600080fd5b506106c2611526565b6040516106cf9190613a99565b60405180910390f35b3480156106e457600080fd5b506106ff60048036038101906106fa91906133d6565b61152c565b005b34801561070d57600080fd5b5061071661167e565b6040516107239190613a99565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190613369565b611684565b6040516107609190613961565b60405180910390f35b34801561077557600080fd5b5061077e6116a4565b60405161078b9190613a99565b60405180910390f35b3480156107a057600080fd5b506107a96116aa565b6040516107b69190613a99565b60405180910390f35b3480156107cb57600080fd5b506107e660048036038101906107e19190613369565b6116b4565b6040516107f39190613961565b60405180910390f35b34801561080857600080fd5b506108116116e7565b60405161081e9190613a99565b60405180910390f35b34801561083357600080fd5b5061083c6116f1565b6040516108499190613a99565b60405180910390f35b34801561085e57600080fd5b5061087960048036038101906108749190613490565b6116f7565b005b34801561088757600080fd5b5061089061179a565b60405161089d9190613a99565b60405180910390f35b3480156108b257600080fd5b506108bb6117a0565b6040516108c89190613a99565b60405180910390f35b3480156108dd57600080fd5b506108f860048036038101906108f39190613610565b6117a6565b005b34801561090657600080fd5b5061090f611838565b60405161091c9190613a99565b60405180910390f35b34801561093157600080fd5b5061093a611842565b6040516109479190613a99565b60405180910390f35b34801561095c57600080fd5b50610965611848565b6040516109729190613961565b60405180910390f35b34801561098757600080fd5b506109a2600480360381019061099d9190613369565b61185b565b6040516109af9190613a99565b60405180910390f35b3480156109c457600080fd5b506109cd6118a4565b6040516109da9190613a99565b60405180910390f35b3480156109ef57600080fd5b506109f86118aa565b604051610a059190613a99565b60405180910390f35b348015610a1a57600080fd5b50610a236118b0565b604051610a309190613a99565b60405180910390f35b348015610a4557600080fd5b50610a4e6118b6565b604051610a5b9190613961565b60405180910390f35b348015610a7057600080fd5b50610a796118ce565b604051610a8691906138bc565b60405180910390f35b348015610a9b57600080fd5b50610aa46118f4565b604051610ab191906138bc565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190613369565b61191d565b604051610aee9190613961565b60405180910390f35b348015610b0357600080fd5b50610b0c61193d565b604051610b199190613997565b60405180910390f35b348015610b2e57600080fd5b50610b496004803603810190610b449190613590565b61197a565b005b348015610b5757600080fd5b50610b606119e6565b604051610b6d9190613a99565b60405180910390f35b348015610b8257600080fd5b50610b9d6004803603810190610b989190613590565b6119ec565b005b348015610bab57600080fd5b50610bb4611b66565b604051610bc191906138bc565b60405180910390f35b348015610bd657600080fd5b50610bf16004803603810190610bec91906134d0565b611b8c565b604051610bfe9190613961565b60405180910390f35b348015610c1357600080fd5b50610c1c611ba1565b604051610c299190613a99565b60405180910390f35b348015610c3e57600080fd5b50610c47611ba7565b604051610c549190613a99565b60405180910390f35b348015610c6957600080fd5b50610c72611bb1565b604051610c7f91906138bc565b60405180910390f35b348015610c9457600080fd5b50610c9d611bd7565b604051610caa9190613a99565b60405180910390f35b348015610cbf57600080fd5b50610cda6004803603810190610cd5919061353d565b611bdd565b005b348015610ce857600080fd5b50610cf1611c86565b604051610cfe91906138bc565b60405180910390f35b348015610d1357600080fd5b50610d2e6004803603810190610d299190613396565b611cac565b604051610d3b9190613a99565b60405180910390f35b348015610d5057600080fd5b50610d59611d33565b604051610d669190613a99565b60405180910390f35b348015610d7b57600080fd5b50610d84611d39565b604051610d9191906138bc565b60405180910390f35b348015610da657600080fd5b50610daf611d5f565b604051610dbc9190613a99565b60405180910390f35b348015610dd157600080fd5b50610dda611d65565b604051610de79190613a99565b60405180910390f35b348015610dfc57600080fd5b50610e176004803603810190610e129190613369565b611d6b565b005b348015610e2557600080fd5b50610e2e611ee0565b005b348015610e3c57600080fd5b50610e576004803603810190610e529190613490565b6120b4565b005b348015610e6557600080fd5b50610e6e612157565b604051610e7b919061397c565b60405180910390f35b348015610e9057600080fd5b50610e9961217d565b604051610ea69190613a99565b60405180910390f35b60235481565b60606040518060400160405280600c81526020017f48554d494c495459444f47450000000000000000000000000000000000000000815250905090565b610efb336113d9565b610f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3190613a39565b60405180910390fd5b806103e8600654610f4b9190613c08565b610f559190613c39565b601c8190555050565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161103e9190613a99565b60405180910390a36001905092915050565b611059336113d9565b611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90613a39565b60405180910390fd5b806103e86006546110a99190613c08565b6110b39190613c39565b601a8190555050565b6110c5336113d9565b611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90613a39565b60405180910390fd5b836010819055508260138190555081601281905550806011819055508082848661112e9190613bb2565b6111389190613bb2565b6111429190613bb2565b60148190555050505050565b6000600654905090565b6000601a54905090565b61116b336113d9565b6111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190613a39565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc606484846111d79190613c39565b6111e19190613c08565b9081150290604051600060405180830381858888f1935050505015801561120c573d6000803e3d6000fd5b505050565b600f5481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113c55781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113449190613c93565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6113d0848484612183565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b601a5481565b600061144c336113d9565b61148b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148290613a39565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016114c69291906138d7565b602060405180830381600087803b1580156114e057600080fd5b505af11580156114f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115189190613510565b905092915050565b60145481565b600e5481565b611535336113d9565b611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b90613a39565b60405180910390fd5b83601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b60255481565b60096020528060005260406000206000915054906101000a900460ff1681565b60245481565b6000601b54905090565b60006116e0827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610f5e565b9050919050565b6000600254905090565b60115481565b611700336113d9565b61173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613a39565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b600d5481565b6117af336113d9565b6117ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e590613a39565b60405180910390fd5b83601581905550826018819055508160178190555080601681905550808284866118189190613bb2565b6118229190613bb2565b61182c9190613bb2565b60198190555050505050565b6000602354905090565b60175481565b602260149054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601c5481565b60125481565b6000602660009054906101000a900460ff1615905090565b602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600c81526020017f48554d494c495459444f47450000000000000000000000000000000000000000815250905090565b611983336113d9565b6119c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b990613a39565b60405180910390fd5b806103e86006546119d39190613c08565b6119dd9190613c39565b601b8190555050565b600b5481565b6119f5336113d9565b611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b90613a39565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042611ae29190613bb2565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611b99338484612183565b905092915050565b60165481565b6000601c54905090565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b611be6336113d9565b611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613a39565b60405180910390fd5b82602260146101000a81548160ff02191690831515021790555081612710600654611c509190613c08565b611c5a9190613c39565b60238190555080612710600654611c719190613c08565b611c7b9190613c39565b602481905550505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60135481565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b60105481565b611d74336113d9565b611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa90613a39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a906139f9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790613a79565b60405180910390fd5b6002544211611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab90613a59565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6120bd336113d9565b6120fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f390613a39565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b6000602660009054906101000a900460ff16156121ac576121a5848484612804565b90506127fd565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561220b5761220a612992565b5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561226a576122696129c1565b5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156122f257503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561234c5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123a65750602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b806123fa5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561245e57600061240a8461185b565b9050601c54838261241b9190613bb2565b111561245c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245390613a19565b60405180910390fd5b505b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561254e57601a548211158061250e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61254d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612544906139b9565b60405180910390fd5b5b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561263e57601b54821115806125fe5750600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906139b9565b60405180910390fd5b5b6126466129f0565b1561265457612653612ac7565b5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461269f9190613c93565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006126ed8561305d565b6126f75782612702565b61270184846130b4565b5b905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274f9190613bb2565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516127ef9190613a99565b60405180910390a360019150505b9392505050565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128519190613c93565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128df9190613bb2565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161297f9190613a99565b60405180910390a3600190509392505050565b601054600b81905550601154600c81905550601254600d81905550601354600e81905550601454600f81905550565b601554600b81905550601654600c81905550601754600d81905550601854600e81905550601954600f81905550565b6000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612a5d5750602660009054906101000a900460ff16155b8015612a755750602260149054906101000a900460ff165b8015612ac25750602354600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602660006101000a81548160ff0219169083151502179055506000612aed3061185b565b90506024548110612b0657602454602581905550612b0e565b806025819055505b60006002600b54600f54602554612b259190613c08565b612b2f9190613c39565b612b399190613c08565b9050600081602554612b4b9190613c93565b90506000600267ffffffffffffffff811115612b6a57612b69613e12565b5b604051908082528060200260200182016040528015612b985781602001602082028036833780820191505090505b5090503081600081518110612bb057612baf613de3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612c2157612c20613de3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b43d9bbb8460008530426040518663ffffffff1660e01b8152600401612cc4959493929190613ab4565b600060405180830381600087803b158015612cde57600080fd5b505af1158015612cf2573d6000803e3d6000fd5b5050505060008147612d049190613c93565b905060006002600b54612d179190613c08565b600f54612d249190613c93565b90506000600282600b5485612d399190613c39565b612d439190613c08565b612d4d9190613c08565b9050600082600e5485612d609190613c39565b612d6a9190613c08565b9050600083600d5486612d7d9190613c39565b612d879190613c08565b9050600081838588612d999190613c93565b612da39190613c93565b612dad9190613c93565b90506000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051612dfb906138a7565b600060405180830381858888f193505050503d8060008114612e39576040519150601f19603f3d011682016040523d82523d6000602084013e612e3e565b606091505b5050905080612e82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e79906139d9565b60405180910390fd5b6000602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168561753090604051612ece906138a7565b600060405180830381858888f193505050503d8060008114612f0c576040519150601f19603f3d011682016040523d82523d6000602084013e612f11565b606091505b5050905080612f55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4c906139d9565b60405180910390fd5b6000601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168461753090604051612fa1906138a7565b600060405180830381858888f193505050503d8060008114612fdf576040519150601f19603f3d011682016040523d82523d6000602084013e612fe4565b606091505b5050905080613028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301f906139d9565b60405180910390fd5b6130328d886131db565b50505050505050505050505050506000602660006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080600f546064846130c79190613c08565b6130d19190613c39565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461311e9190613bb2565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131be9190613a99565b60405180910390a380836131d29190613c93565b91505092915050565b60008211156132fc57602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6529ab4823085600080601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161326d96959493929190613900565b6060604051808303818588803b15801561328657600080fd5b505af115801561329a573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132bf91906135bd565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450681836040516132f3929190613b0e565b60405180910390a15b5050565b60008135905061330f81613feb565b92915050565b60008135905061332481614002565b92915050565b60008151905061333981614002565b92915050565b60008135905061334e81614019565b92915050565b60008151905061336381614019565b92915050565b60006020828403121561337f5761337e613e41565b5b600061338d84828501613300565b91505092915050565b600080604083850312156133ad576133ac613e41565b5b60006133bb85828601613300565b92505060206133cc85828601613300565b9150509250929050565b600080600080608085870312156133f0576133ef613e41565b5b60006133fe87828801613300565b945050602061340f87828801613300565b935050604061342087828801613300565b925050606061343187828801613300565b91505092959194509250565b60008060006060848603121561345657613455613e41565b5b600061346486828701613300565b935050602061347586828701613300565b92505060406134868682870161333f565b9150509250925092565b600080604083850312156134a7576134a6613e41565b5b60006134b585828601613300565b92505060206134c685828601613315565b9150509250929050565b600080604083850312156134e7576134e6613e41565b5b60006134f585828601613300565b92505060206135068582860161333f565b9150509250929050565b60006020828403121561352657613525613e41565b5b60006135348482850161332a565b91505092915050565b60008060006060848603121561355657613555613e41565b5b600061356486828701613315565b93505060206135758682870161333f565b92505060406135868682870161333f565b9150509250925092565b6000602082840312156135a6576135a5613e41565b5b60006135b48482850161333f565b91505092915050565b6000806000606084860312156135d6576135d5613e41565b5b60006135e486828701613354565b93505060206135f586828701613354565b925050604061360686828701613354565b9150509250925092565b6000806000806080858703121561362a57613629613e41565b5b60006136388782880161333f565b94505060206136498782880161333f565b935050604061365a8782880161333f565b925050606061366b8782880161333f565b91505092959194509250565b6000613683838361368f565b60208301905092915050565b61369881613cc7565b82525050565b6136a781613cc7565b82525050565b60006136b882613b62565b6136c28185613b85565b93506136cd83613b52565b8060005b838110156136fe5781516136e58882613677565b97506136f083613b78565b9250506001810190506136d1565b5085935050505092915050565b61371481613cd9565b82525050565b61372381613d1c565b82525050565b61373281613d40565b82525050565b600061374382613b6d565b61374d8185613ba1565b935061375d818560208601613d52565b61376681613e46565b840191505092915050565b600061377e601183613ba1565b915061378982613e57565b602082019050919050565b60006137a1602083613ba1565b91506137ac82613e80565b602082019050919050565b60006137c4602683613ba1565b91506137cf82613ea9565b604082019050919050565b60006137e7603e83613ba1565b91506137f282613ef8565b604082019050919050565b600061380a600683613ba1565b915061381582613f47565b602082019050919050565b600061382d600083613b96565b915061383882613f70565b600082019050919050565b6000613850601283613ba1565b915061385b82613f73565b602082019050919050565b6000613873602383613ba1565b915061387e82613f9c565b604082019050919050565b61389281613d05565b82525050565b6138a181613d0f565b82525050565b60006138b282613820565b9150819050919050565b60006020820190506138d1600083018461369e565b92915050565b60006040820190506138ec600083018561369e565b6138f96020830184613889565b9392505050565b600060c082019050613915600083018961369e565b6139226020830188613889565b61392f6040830187613729565b61393c6060830186613729565b613949608083018561369e565b61395660a0830184613889565b979650505050505050565b6000602082019050613976600083018461370b565b92915050565b6000602082019050613991600083018461371a565b92915050565b600060208201905081810360008301526139b18184613738565b905092915050565b600060208201905081810360008301526139d281613771565b9050919050565b600060208201905081810360008301526139f281613794565b9050919050565b60006020820190508181036000830152613a12816137b7565b9050919050565b60006020820190508181036000830152613a32816137da565b9050919050565b60006020820190508181036000830152613a52816137fd565b9050919050565b60006020820190508181036000830152613a7281613843565b9050919050565b60006020820190508181036000830152613a9281613866565b9050919050565b6000602082019050613aae6000830184613889565b92915050565b600060a082019050613ac96000830188613889565b613ad66020830187613729565b8181036040830152613ae881866136ad565b9050613af7606083018561369e565b613b046080830184613889565b9695505050505050565b6000604082019050613b236000830185613889565b613b306020830184613889565b9392505050565b6000602082019050613b4c6000830184613898565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000613bbd82613d05565b9150613bc883613d05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613bfd57613bfc613d85565b5b828201905092915050565b6000613c1382613d05565b9150613c1e83613d05565b925082613c2e57613c2d613db4565b5b828204905092915050565b6000613c4482613d05565b9150613c4f83613d05565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c8857613c87613d85565b5b828202905092915050565b6000613c9e82613d05565b9150613ca983613d05565b925082821015613cbc57613cbb613d85565b5b828203905092915050565b6000613cd282613ce5565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613d2782613d2e565b9050919050565b6000613d3982613ce5565b9050919050565b6000613d4b82613d05565b9050919050565b60005b83811015613d70578082015181840152602081019050613d55565b83811115613d7f576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f72656365697665722072656a65637465642057444f4745207472616e73666572600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b50565b7f436f6e7472616374206973206c6f636b65640000000000000000000000000000600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b613ff481613cc7565b8114613fff57600080fd5b50565b61400b81613cd9565b811461401657600080fd5b50565b61402281613d05565b811461402d57600080fd5b5056fea2646970667358221220c0c62f84db8fbb8493086082c7802f43de1960bcc2e7668d69beb22a97800e5164736f6c63430008060033