false
true
0

Contract Address Details

0xe70A3dA3553b4f9a4EE7B84d27CF68a7E62FBAAd

Token
one (1)
Creator
0x0d3b2a–c91068 at 0x79b477–b5feb9
Balance
2,328.828999 PLS ( )
Tokens
Fetching tokens...
Transactions
695 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25901241
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
one




Optimization enabled
false
Compiler version
v0.8.20+commit.a1b79de6




EVM Version
default




Verified at
2025-11-19T19:56:09.708047Z

Constructor Arguments

0x000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000036f6e65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000

Arg [0] (string) : one
Arg [1] (string) : 1
Arg [2] (uint8) : 18
Arg [3] (uint256) : 100000000000

              

Contract source code

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

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

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

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

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

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

/**
 * PRC20 standard interface.
 */
interface IPRC20 {
    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 Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

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

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

interface IDEXRouterV1 {
    function swapExactTokensForTokensV1(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to
    ) external payable returns (uint256 amountOut);
}

contract one is IPRC20, Auth {
    using SafeMath for uint256;

    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address DEAD = 0x0000000000000000000000000000000000000369;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _totalSupply;

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

    mapping (address => bool) isFeeExempt;

    bool public notliftoff = true;

    uint256 public DaoFee      = 50; // 5.0% DaoFee
    uint256 public totalFee           = DaoFee;
    uint256 public feeDenominator     = 1000;

    uint256 public sellMultiplier  = 100;

    address public DaoFeeReceiver;

    IDEXRouter public router;
    IDEXRouterV1 public routerv1;

    address public pair;

    bool public tradingOpen = false;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 5 / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (
        string memory tokenName, 
        string memory tokenSymbol, 
        uint8 tokenDecimals, 
        uint256 tokenTotalSupply
    ) Auth(msg.sender) {
        _name = tokenName;
        _symbol = tokenSymbol;
        _decimals = tokenDecimals; 
        _totalSupply = tokenTotalSupply.mul(10**uint256(tokenDecimals));
        swapThreshold = _totalSupply * 5 / 10000;
        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        routerv1 = IDEXRouterV1(0xDA9aBA4eACF54E0273f56dfFee6B8F1e20B23Bba);
        pair = IDEXFactory(router.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        isFeeExempt[msg.sender] = true; // fee exempting deployer
        isFeeExempt[address(this)] = true; // fee exempting the token contract

        DaoFeeReceiver = msg.sender;

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

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external view override returns (uint8) { return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view 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].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

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

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

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, amount,(recipient == pair)) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

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

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        
        uint256 multiplier = isSell ? sellMultiplier : 100;
        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);

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

        return amount.sub(feeAmount);
    }

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

    function clearStuckBalance_sender(uint256 amountPercentage) external onlyOwner {
        uint256 amountPLS = address(this).balance;
        payable(address(owner)).transfer(amountPLS * amountPercentage / 100);
    }

    function clearStuckToken_sender(address _token) external onlyOwner {
        require (_token != address(this), "Cannot withdraw Token itself.");

        IPRC20 tokeninst = IPRC20(_token);
        uint256 tokeninstbalance = tokeninst.balanceOf(address(this));
    
        tokeninst.transfer(address(owner), tokeninstbalance);
    }

    function swapBack() internal swapping {
        uint256 amountToSwap = swapThreshold;

        uint256 balanceBefore = address(this).balance;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WPLS;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountPLS = address(this).balance.sub(balanceBefore);

        IPRC20 token1 = IPRC20(0x02DcdD04e3F455D838cd1249292C58f3B79e3C3C); //WETH

        address[] memory path2 = new address[](2);
        path2[0] = WPLS;
        path2[1] = address(token1);

        routerv1.swapExactTokensForTokensV1{value: amountPLS}(
            amountPLS,
            0,
            path2,
            address(DaoFeeReceiver)
        );

    }

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

    function setFees(uint256 _DaoFee) external authorized {
        DaoFee = _DaoFee;
        feeDenominator = 1000;
        totalFee = DaoFee;
        require(DaoFee <= 50, "Fees cannot be more than 5%");
    }

    function liftoff() public onlyOwner {
        require(notliftoff, "Moon mission already a go");
        tradingOpen = true;
        notliftoff = false;
    }

    function setFeeReceivers( address _DaoFeeReceiver) external authorized {
        DaoFeeReceiver = _DaoFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"tokenName","internalType":"string"},{"type":"string","name":"tokenSymbol","internalType":"string"},{"type":"uint8","name":"tokenDecimals","internalType":"uint8"},{"type":"uint256","name":"tokenTotalSupply","internalType":"uint256"}]},{"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":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"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":"DaoFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"DaoFeeReceiver","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":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckBalance_sender","inputs":[{"type":"uint256","name":"amountPercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"clearStuckToken_sender","inputs":[{"type":"address","name":"_token","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"liftoff","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"notliftoff","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouterV1"}],"name":"routerv1","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"sellMultiplier","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_DaoFeeReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_DaoFee","internalType":"uint256"}]},{"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":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","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":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","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":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"tradingOpen","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":"adr","internalType":"address payable"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405273a1077a294dde1b09bb078844df40758a5d0f9a2760025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061036960035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c5f6101000a81548160ff0219169083151502179055506032600d55600d54600e556103e8600f5560646010555f6014806101000a81548160ff0219169083151502179055506001601460156101000a81548160ff0219169083151502179055506127106005600854620001529190620007e5565b6200015e91906200085c565b6015553480156200016d575f80fd5b50604051620042a4380380620042a4833981810160405281019062000193919062000a82565b33805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050836005908162000239919062000d5d565b5082600690816200024b919062000d5d565b508160075f6101000a81548160ff021916908360ff1602179055506200028c8260ff16600a6200027c919062000f91565b826200072f60201b90919060201c565b6008819055506127106005600854620002a69190620007e5565b620002b291906200085c565b60158190555073165c3410fc91ef562c50559f7d2289febed552d960125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073da9aba4eacf54e0273f56dffee6b8f1e20b23bba60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003f1919062001042565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200044e92919062001083565b6020604051808303815f875af11580156200046b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000491919062001042565b60145f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085460095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200071d9190620010bf565b60405180910390a3505050506200117e565b5f80830362000741575f9050620007a9565b5f8284620007509190620007e5565b90508284826200076191906200085c565b14620007a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200079b906200115e565b60405180910390fd5b809150505b92915050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620007f182620007af565b9150620007fe83620007af565b92508282026200080e81620007af565b91508282048414831517620008285762000827620007b8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200086882620007af565b91506200087583620007af565b9250826200088857620008876200082f565b5b828204905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620008f482620008ac565b810181811067ffffffffffffffff82111715620009165762000915620008bc565b5b80604052505050565b5f6200092a62000893565b9050620009388282620008e9565b919050565b5f67ffffffffffffffff8211156200095a5762000959620008bc565b5b6200096582620008ac565b9050602081019050919050565b5f5b838110156200099157808201518184015260208101905062000974565b5f8484015250505050565b5f620009b2620009ac846200093d565b6200091f565b905082815260208101848484011115620009d157620009d0620008a8565b5b620009de84828562000972565b509392505050565b5f82601f830112620009fd57620009fc620008a4565b5b815162000a0f8482602086016200099c565b91505092915050565b5f60ff82169050919050565b62000a2f8162000a18565b811462000a3a575f80fd5b50565b5f8151905062000a4d8162000a24565b92915050565b62000a5e81620007af565b811462000a69575f80fd5b50565b5f8151905062000a7c8162000a53565b92915050565b5f805f806080858703121562000a9d5762000a9c6200089c565b5b5f85015167ffffffffffffffff81111562000abd5762000abc620008a0565b5b62000acb87828801620009e6565b945050602085015167ffffffffffffffff81111562000aef5762000aee620008a0565b5b62000afd87828801620009e6565b935050604062000b108782880162000a3d565b925050606062000b238782880162000a6c565b91505092959194509250565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b7e57607f821691505b60208210810362000b945762000b9362000b39565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000bf87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bbb565b62000c04868362000bbb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000c4562000c3f62000c3984620007af565b62000c1c565b620007af565b9050919050565b5f819050919050565b62000c608362000c25565b62000c7862000c6f8262000c4c565b84845462000bc7565b825550505050565b5f90565b62000c8e62000c80565b62000c9b81848462000c55565b505050565b5b8181101562000cc25762000cb65f8262000c84565b60018101905062000ca1565b5050565b601f82111562000d115762000cdb8162000b9a565b62000ce68462000bac565b8101602085101562000cf6578190505b62000d0e62000d058562000bac565b83018262000ca0565b50505b505050565b5f82821c905092915050565b5f62000d335f198460080262000d16565b1980831691505092915050565b5f62000d4d838362000d22565b9150826002028217905092915050565b62000d688262000b2f565b67ffffffffffffffff81111562000d845762000d83620008bc565b5b62000d90825462000b66565b62000d9d82828562000cc6565b5f60209050601f83116001811462000dd3575f841562000dbe578287015190505b62000dca858262000d40565b86555062000e39565b601f19841662000de38662000b9a565b5f5b8281101562000e0c5784890151825560018201915060208501945060208101905062000de5565b8683101562000e2c578489015162000e28601f89168262000d22565b8355505b6001600288020188555050505b505050505050565b5f8160011c9050919050565b5f808291508390505b600185111562000e9e5780860481111562000e765762000e75620007b8565b5b600185161562000e865780820291505b808102905062000e968562000e41565b945062000e56565b94509492505050565b5f8262000eb8576001905062000f8a565b8162000ec7575f905062000f8a565b816001811462000ee0576002811462000eeb5762000f21565b600191505062000f8a565b60ff84111562000f005762000eff620007b8565b5b8360020a91508482111562000f1a5762000f19620007b8565b5b5062000f8a565b5060208310610133831016604e8410600b841016171562000f5b5782820a90508381111562000f555762000f54620007b8565b5b62000f8a565b62000f6a848484600162000e4d565b9250905081840481111562000f845762000f83620007b8565b5b81810290505b9392505050565b5f62000f9d82620007af565b915062000faa83620007af565b925062000fd97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ea7565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200100c8262000fe1565b9050919050565b6200101e8162001000565b811462001029575f80fd5b50565b5f815190506200103c8162001013565b92915050565b5f602082840312156200105a57620010596200089c565b5b5f62001069848285016200102c565b91505092915050565b6200107d8162001000565b82525050565b5f604082019050620010985f83018562001072565b620010a7602083018462001072565b9392505050565b620010b981620007af565b82525050565b5f602082019050620010d45f830184620010ae565b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f62001146602183620010da565b91506200115382620010ea565b604082019050919050565b5f6020820190508181035f830152620011778162001138565b9050919050565b613118806200118c5f395ff3fe6080604052600436106101fc575f3560e01c80636ddd17131161010c578063dd62ed3e1161009f578063f887ea401161006e578063f887ea4014610725578063fe634ad01461074f578063fe9fbb8014610779578063fed0d2a1146107b5578063ffb54a99146107df57610203565b8063dd62ed3e14610671578063df20fd49146106ad578063e01bb688146106d5578063f2fde38b146106fd57610203565b806395d89b41116100db57806395d89b41146105cb578063a8aa1b31146105f5578063a9059cbb1461061f578063c191c9261461065b57610203565b80636ddd17131461051157806370a082311461053b578063893d20e814610577578063925fcc72146105a157610203565b80632b112e491161018f57806344a33fd21161015e57806344a33fd2146104335780634a2a16631461045b57806355465e1f14610483578063571ac8b0146104ad578063658d4b7f146104e957610203565b80632b112e491461037b5780632f54bf6e146103a5578063313ce567146103e15780633d18678e1461040b57610203565b8063180b0d7e116101cb578063180b0d7e146102c157806318160ddd146102eb5780631df4ccfc1461031557806323b872dd1461033f57610203565b80630445b6671461020757806306fdde0314610231578063095ea7b31461025b57806313d2957c1461029757610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061021b610809565b604051610228919061246f565b60405180910390f35b34801561023c575f80fd5b5061024561080f565b6040516102529190612512565b60405180910390f35b348015610266575f80fd5b50610281600480360381019061027c91906125ba565b61089f565b60405161028e9190612612565b60405180910390f35b3480156102a2575f80fd5b506102ab61098c565b6040516102b8919061263a565b60405180910390f35b3480156102cc575f80fd5b506102d56109b1565b6040516102e2919061246f565b60405180910390f35b3480156102f6575f80fd5b506102ff6109b7565b60405161030c919061246f565b60405180910390f35b348015610320575f80fd5b506103296109c0565b604051610336919061246f565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190612653565b6109c6565b6040516103729190612612565b60405180910390f35b348015610386575f80fd5b5061038f610bb9565b60405161039c919061246f565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c691906126a3565b610c38565b6040516103d89190612612565b60405180910390f35b3480156103ec575f80fd5b506103f5610c8f565b60405161040291906126e9565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190612702565b610ca4565b005b34801561043e575f80fd5b5061045960048036038101906104549190612702565b610d4e565b005b348015610466575f80fd5b50610481600480360381019061047c91906126a3565b610e18565b005b34801561048e575f80fd5b50610497610fed565b6040516104a4919061246f565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce91906126a3565b610ff3565b6040516104e09190612612565b60405180910390f35b3480156104f4575f80fd5b5061050f600480360381019061050a9190612757565b611025565b005b34801561051c575f80fd5b506105256110c5565b6040516105329190612612565b60405180910390f35b348015610546575f80fd5b50610561600480360381019061055c91906126a3565b6110d8565b60405161056e919061246f565b60405180910390f35b348015610582575f80fd5b5061058b61111e565b604051610598919061263a565b60405180910390f35b3480156105ac575f80fd5b506105b5611145565b6040516105c291906127f0565b60405180910390f35b3480156105d6575f80fd5b506105df61116a565b6040516105ec9190612512565b60405180910390f35b348015610600575f80fd5b506106096111fa565b604051610616919061263a565b60405180910390f35b34801561062a575f80fd5b50610645600480360381019061064091906125ba565b61121f565b6040516106529190612612565b60405180910390f35b348015610666575f80fd5b5061066f611233565b005b34801561067c575f80fd5b5061069760048036038101906106929190612809565b6112fe565b6040516106a4919061246f565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612847565b611380565b005b3480156106e0575f80fd5b506106fb60048036038101906106f691906126a3565b6113ed565b005b348015610708575f80fd5b50610723600480360381019061071e91906128c0565b611478565b005b348015610730575f80fd5b5061073961158d565b604051610746919061290b565b60405180910390f35b34801561075a575f80fd5b506107636115b2565b6040516107709190612612565b60405180910390f35b348015610784575f80fd5b5061079f600480360381019061079a91906126a3565b6115c4565b6040516107ac9190612612565b60405180910390f35b3480156107c0575f80fd5b506107c9611616565b6040516107d6919061246f565b60405180910390f35b3480156107ea575f80fd5b506107f361161c565b6040516108009190612612565b60405180910390f35b60155481565b60606005805461081e90612951565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90612951565b80156108955780601f1061086c57610100808354040283529160200191610895565b820191905f5260205f20905b81548152906001019060200180831161087857829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097a919061246f565b60405180910390a36001905092915050565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b5f600854905090565b600e5481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610ba557610b28826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461162d9092919063ffffffff16565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610bb084848461168f565b90509392505050565b5f610c33610be760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110d8565b610c25610c1460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110d8565b6008546119fa90919063ffffffff16565b6119fa90919063ffffffff16565b905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60075f9054906101000a900460ff16905090565b610cad336115c4565b610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce3906129cb565b60405180910390fd5b80600d819055506103e8600f81905550600d54600e819055506032600d541115610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290612a33565b60405180910390fd5b50565b610d5733610c38565b610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90612a9b565b60405180910390fd5b5f4790505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60648484610de19190612ae6565b610deb9190612b54565b90811502906040515f60405180830381858888f19350505050158015610e13573d5f803e3d5ffd5b505050565b610e2133610c38565b610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5790612a9b565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590612bce565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f0c919061263a565b602060405180830381865afa158015610f27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4b9190612c00565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa7929190612c2b565b6020604051808303815f875af1158015610fc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe79190612c66565b50505050565b600d5481565b5f61101e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61089f565b9050919050565b61102e336115c4565b61106d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611064906129cb565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601460159054906101000a900460ff1681565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606006805461117990612951565b80601f01602080910402602001604051908101604052809291908181526020018280546111a590612951565b80156111f05780601f106111c7576101008083540402835291602001916111f0565b820191905f5260205f20905b8154815290600101906020018083116111d357829003601f168201915b5050505050905090565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61122b33848461168f565b905092915050565b61123c33610c38565b61127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612a9b565b60405180910390fd5b600c5f9054906101000a900460ff166112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090612cdb565b60405180910390fd5b60016014806101000a81548160ff0219169083151502179055505f600c5f6101000a81548160ff021916908315150217905550565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611389336115c4565b6113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf906129cb565b60405180910390fd5b81601460156101000a81548160ff021916908315150217905550806015819055505050565b6113f6336115c4565b611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906129cb565b60405180910390fd5b8060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61148133610c38565b6114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790612a9b565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115829190612d19565b60405180910390a150565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b60148054906101000a900460ff1681565b5f838311158290611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9190612512565b60405180910390fd5b505f83856116829190612d32565b9050809150509392505050565b5f60165f9054906101000a900460ff16156116b6576116af848484611a43565b90506119f3565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611754575060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156117a75760148054906101000a900460ff166117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90612daf565b60405180910390fd5b5b6117af611c0d565b156117bd576117bc611cdf565b5b611844826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461162d9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f61189085856120bb565b61189a57826118f5565b6118f4858460145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612167565b5b90506119478160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d990919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e5919061246f565b60405180910390a360019150505b9392505050565b5f611a3b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061162d565b905092915050565b5f611acb826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461162d9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611b5c8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d990919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bfa919061246f565b60405180910390a3600190509392505050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611c77575060165f9054906101000a900460ff16155b8015611c8f5750601460159054906101000a900460ff165b8015611cda575060155460095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b600160165f6101000a81548160ff0219169083151502179055505f60155490505f4790505f600267ffffffffffffffff811115611d1f57611d1e612dcd565b5b604051908082528060200260200182016040528015611d4d5781602001602082028036833780820191505090505b50905030815f81518110611d6457611d63612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611dd457611dd3612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401611e70959493929190612f17565b5f604051808303815f87803b158015611e87575f80fd5b505af1158015611e99573d5f803e3d5ffd5b505050505f611eb183476119fa90919063ffffffff16565b90505f7302dcdd04e3f455d838cd1249292c58f3b79e3c3c90505f600267ffffffffffffffff811115611ee757611ee6612dcd565b5b604051908082528060200260200182016040528015611f155781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110611f4d57611f4c612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110611f9c57611f9b612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b5c7a8184855f8560115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b81526004016120589493929190612f6f565b60206040518083038185885af1158015612074573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120999190612c00565b505050505050505f60165f6101000a81548160ff021916908315150217905550565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612113575f9050612161565b600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161590505b92915050565b5f8082612175576064612179565b6010545b90505f6121c36064600f5461218e9190612ae6565b6121b5846121a7600e548a61233690919063ffffffff16565b61233690919063ffffffff16565b6123ad90919063ffffffff16565b90506122158160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d990919063ffffffff16565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122b3919061246f565b60405180910390a36122ce81866119fa90919063ffffffff16565b925050509392505050565b5f8082846122e79190612fb9565b90508381101561232c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232390613036565b60405180910390fd5b8091505092915050565b5f808303612346575f90506123a7565b5f82846123539190612ae6565b90508284826123629190612b54565b146123a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612399906130c4565b60405180910390fd5b809150505b92915050565b5f6123ee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123f6565b905092915050565b5f808311829061243c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124339190612512565b60405180910390fd5b505f838561244a9190612b54565b9050809150509392505050565b5f819050919050565b61246981612457565b82525050565b5f6020820190506124825f830184612460565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124bf5780820151818401526020810190506124a4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124e482612488565b6124ee8185612492565b93506124fe8185602086016124a2565b612507816124ca565b840191505092915050565b5f6020820190508181035f83015261252a81846124da565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61255f82612536565b9050919050565b61256f81612555565b8114612579575f80fd5b50565b5f8135905061258a81612566565b92915050565b61259981612457565b81146125a3575f80fd5b50565b5f813590506125b481612590565b92915050565b5f80604083850312156125d0576125cf612532565b5b5f6125dd8582860161257c565b92505060206125ee858286016125a6565b9150509250929050565b5f8115159050919050565b61260c816125f8565b82525050565b5f6020820190506126255f830184612603565b92915050565b61263481612555565b82525050565b5f60208201905061264d5f83018461262b565b92915050565b5f805f6060848603121561266a57612669612532565b5b5f6126778682870161257c565b93505060206126888682870161257c565b9250506040612699868287016125a6565b9150509250925092565b5f602082840312156126b8576126b7612532565b5b5f6126c58482850161257c565b91505092915050565b5f60ff82169050919050565b6126e3816126ce565b82525050565b5f6020820190506126fc5f8301846126da565b92915050565b5f6020828403121561271757612716612532565b5b5f612724848285016125a6565b91505092915050565b612736816125f8565b8114612740575f80fd5b50565b5f813590506127518161272d565b92915050565b5f806040838503121561276d5761276c612532565b5b5f61277a8582860161257c565b925050602061278b85828601612743565b9150509250929050565b5f819050919050565b5f6127b86127b36127ae84612536565b612795565b612536565b9050919050565b5f6127c98261279e565b9050919050565b5f6127da826127bf565b9050919050565b6127ea816127d0565b82525050565b5f6020820190506128035f8301846127e1565b92915050565b5f806040838503121561281f5761281e612532565b5b5f61282c8582860161257c565b925050602061283d8582860161257c565b9150509250929050565b5f806040838503121561285d5761285c612532565b5b5f61286a85828601612743565b925050602061287b858286016125a6565b9150509250929050565b5f61288f82612536565b9050919050565b61289f81612885565b81146128a9575f80fd5b50565b5f813590506128ba81612896565b92915050565b5f602082840312156128d5576128d4612532565b5b5f6128e2848285016128ac565b91505092915050565b5f6128f5826127bf565b9050919050565b612905816128eb565b82525050565b5f60208201905061291e5f8301846128fc565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061296857607f821691505b60208210810361297b5761297a612924565b5b50919050565b7f21415554484f52495a45440000000000000000000000000000000000000000005f82015250565b5f6129b5600b83612492565b91506129c082612981565b602082019050919050565b5f6020820190508181035f8301526129e2816129a9565b9050919050565b7f466565732063616e6e6f74206265206d6f7265207468616e20352500000000005f82015250565b5f612a1d601b83612492565b9150612a28826129e9565b602082019050919050565b5f6020820190508181035f830152612a4a81612a11565b9050919050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f612a85600683612492565b9150612a9082612a51565b602082019050919050565b5f6020820190508181035f830152612ab281612a79565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612af082612457565b9150612afb83612457565b9250828202612b0981612457565b91508282048414831517612b2057612b1f612ab9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612b5e82612457565b9150612b6983612457565b925082612b7957612b78612b27565b5b828204905092915050565b7f43616e6e6f7420776974686472617720546f6b656e20697473656c662e0000005f82015250565b5f612bb8601d83612492565b9150612bc382612b84565b602082019050919050565b5f6020820190508181035f830152612be581612bac565b9050919050565b5f81519050612bfa81612590565b92915050565b5f60208284031215612c1557612c14612532565b5b5f612c2284828501612bec565b91505092915050565b5f604082019050612c3e5f83018561262b565b612c4b6020830184612460565b9392505050565b5f81519050612c608161272d565b92915050565b5f60208284031215612c7b57612c7a612532565b5b5f612c8884828501612c52565b91505092915050565b7f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000005f82015250565b5f612cc5601983612492565b9150612cd082612c91565b602082019050919050565b5f6020820190508181035f830152612cf281612cb9565b9050919050565b5f612d03826127bf565b9050919050565b612d1381612cf9565b82525050565b5f602082019050612d2c5f830184612d0a565b92915050565b5f612d3c82612457565b9150612d4783612457565b9250828203905081811115612d5f57612d5e612ab9565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f612d99601483612492565b9150612da482612d65565b602082019050919050565b5f6020820190508181035f830152612dc681612d8d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f612e4a612e45612e4084612e27565b612795565b612457565b9050919050565b612e5a81612e30565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e9281612555565b82525050565b5f612ea38383612e89565b60208301905092915050565b5f602082019050919050565b5f612ec582612e60565b612ecf8185612e6a565b9350612eda83612e7a565b805f5b83811015612f0a578151612ef18882612e98565b9750612efc83612eaf565b925050600181019050612edd565b5085935050505092915050565b5f60a082019050612f2a5f830188612460565b612f376020830187612e51565b8181036040830152612f498186612ebb565b9050612f58606083018561262b565b612f656080830184612460565b9695505050505050565b5f608082019050612f825f830187612460565b612f8f6020830186612e51565b8181036040830152612fa18185612ebb565b9050612fb0606083018461262b565b95945050505050565b5f612fc382612457565b9150612fce83612457565b9250828201905080821115612fe657612fe5612ab9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613020601b83612492565b915061302b82612fec565b602082019050919050565b5f6020820190508181035f83015261304d81613014565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130ae602183612492565b91506130b982613054565b604082019050919050565b5f6020820190508181035f8301526130db816130a2565b905091905056fea2646970667358221220e16a48c456492dcf146e591b8a23c5a42917dccc2c184ce21fb05e75eb24eb2864736f6c63430008140033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000174876e80000000000000000000000000000000000000000000000000000000000000000036f6e65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013100000000000000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x6080604052600436106101fc575f3560e01c80636ddd17131161010c578063dd62ed3e1161009f578063f887ea401161006e578063f887ea4014610725578063fe634ad01461074f578063fe9fbb8014610779578063fed0d2a1146107b5578063ffb54a99146107df57610203565b8063dd62ed3e14610671578063df20fd49146106ad578063e01bb688146106d5578063f2fde38b146106fd57610203565b806395d89b41116100db57806395d89b41146105cb578063a8aa1b31146105f5578063a9059cbb1461061f578063c191c9261461065b57610203565b80636ddd17131461051157806370a082311461053b578063893d20e814610577578063925fcc72146105a157610203565b80632b112e491161018f57806344a33fd21161015e57806344a33fd2146104335780634a2a16631461045b57806355465e1f14610483578063571ac8b0146104ad578063658d4b7f146104e957610203565b80632b112e491461037b5780632f54bf6e146103a5578063313ce567146103e15780633d18678e1461040b57610203565b8063180b0d7e116101cb578063180b0d7e146102c157806318160ddd146102eb5780631df4ccfc1461031557806323b872dd1461033f57610203565b80630445b6671461020757806306fdde0314610231578063095ea7b31461025b57806313d2957c1461029757610203565b3661020357005b5f80fd5b348015610212575f80fd5b5061021b610809565b604051610228919061246f565b60405180910390f35b34801561023c575f80fd5b5061024561080f565b6040516102529190612512565b60405180910390f35b348015610266575f80fd5b50610281600480360381019061027c91906125ba565b61089f565b60405161028e9190612612565b60405180910390f35b3480156102a2575f80fd5b506102ab61098c565b6040516102b8919061263a565b60405180910390f35b3480156102cc575f80fd5b506102d56109b1565b6040516102e2919061246f565b60405180910390f35b3480156102f6575f80fd5b506102ff6109b7565b60405161030c919061246f565b60405180910390f35b348015610320575f80fd5b506103296109c0565b604051610336919061246f565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190612653565b6109c6565b6040516103729190612612565b60405180910390f35b348015610386575f80fd5b5061038f610bb9565b60405161039c919061246f565b60405180910390f35b3480156103b0575f80fd5b506103cb60048036038101906103c691906126a3565b610c38565b6040516103d89190612612565b60405180910390f35b3480156103ec575f80fd5b506103f5610c8f565b60405161040291906126e9565b60405180910390f35b348015610416575f80fd5b50610431600480360381019061042c9190612702565b610ca4565b005b34801561043e575f80fd5b5061045960048036038101906104549190612702565b610d4e565b005b348015610466575f80fd5b50610481600480360381019061047c91906126a3565b610e18565b005b34801561048e575f80fd5b50610497610fed565b6040516104a4919061246f565b60405180910390f35b3480156104b8575f80fd5b506104d360048036038101906104ce91906126a3565b610ff3565b6040516104e09190612612565b60405180910390f35b3480156104f4575f80fd5b5061050f600480360381019061050a9190612757565b611025565b005b34801561051c575f80fd5b506105256110c5565b6040516105329190612612565b60405180910390f35b348015610546575f80fd5b50610561600480360381019061055c91906126a3565b6110d8565b60405161056e919061246f565b60405180910390f35b348015610582575f80fd5b5061058b61111e565b604051610598919061263a565b60405180910390f35b3480156105ac575f80fd5b506105b5611145565b6040516105c291906127f0565b60405180910390f35b3480156105d6575f80fd5b506105df61116a565b6040516105ec9190612512565b60405180910390f35b348015610600575f80fd5b506106096111fa565b604051610616919061263a565b60405180910390f35b34801561062a575f80fd5b50610645600480360381019061064091906125ba565b61121f565b6040516106529190612612565b60405180910390f35b348015610666575f80fd5b5061066f611233565b005b34801561067c575f80fd5b5061069760048036038101906106929190612809565b6112fe565b6040516106a4919061246f565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612847565b611380565b005b3480156106e0575f80fd5b506106fb60048036038101906106f691906126a3565b6113ed565b005b348015610708575f80fd5b50610723600480360381019061071e91906128c0565b611478565b005b348015610730575f80fd5b5061073961158d565b604051610746919061290b565b60405180910390f35b34801561075a575f80fd5b506107636115b2565b6040516107709190612612565b60405180910390f35b348015610784575f80fd5b5061079f600480360381019061079a91906126a3565b6115c4565b6040516107ac9190612612565b60405180910390f35b3480156107c0575f80fd5b506107c9611616565b6040516107d6919061246f565b60405180910390f35b3480156107ea575f80fd5b506107f361161c565b6040516108009190612612565b60405180910390f35b60155481565b60606005805461081e90612951565b80601f016020809104026020016040519081016040528092919081815260200182805461084a90612951565b80156108955780601f1061086c57610100808354040283529160200191610895565b820191905f5260205f20905b81548152906001019060200180831161087857829003601f168201915b5050505050905090565b5f81600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161097a919061246f565b60405180910390a36001905092915050565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b5f600854905090565b600e5481565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610ba557610b28826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461162d9092919063ffffffff16565b600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610bb084848461168f565b90509392505050565b5f610c33610be760045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110d8565b610c25610c1460035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166110d8565b6008546119fa90919063ffffffff16565b6119fa90919063ffffffff16565b905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f60075f9054906101000a900460ff16905090565b610cad336115c4565b610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce3906129cb565b60405180910390fd5b80600d819055506103e8600f81905550600d54600e819055506032600d541115610d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4290612a33565b60405180910390fd5b50565b610d5733610c38565b610d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8d90612a9b565b60405180910390fd5b5f4790505f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc60648484610de19190612ae6565b610deb9190612b54565b90811502906040515f60405180830381858888f19350505050158015610e13573d5f803e3d5ffd5b505050565b610e2133610c38565b610e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5790612a9b565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ece576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec590612bce565b60405180910390fd5b5f8190505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f0c919061263a565b602060405180830381865afa158015610f27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4b9190612c00565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610fa7929190612c2b565b6020604051808303815f875af1158015610fc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fe79190612c66565b50505050565b600d5481565b5f61101e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61089f565b9050919050565b61102e336115c4565b61106d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611064906129cb565b60405180910390fd5b80600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601460159054906101000a900460ff1681565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606006805461117990612951565b80601f01602080910402602001604051908101604052809291908181526020018280546111a590612951565b80156111f05780601f106111c7576101008083540402835291602001916111f0565b820191905f5260205f20905b8154815290600101906020018083116111d357829003601f168201915b5050505050905090565b60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61122b33848461168f565b905092915050565b61123c33610c38565b61127b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127290612a9b565b60405180910390fd5b600c5f9054906101000a900460ff166112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090612cdb565b60405180910390fd5b60016014806101000a81548160ff0219169083151502179055505f600c5f6101000a81548160ff021916908315150217905550565b5f600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611389336115c4565b6113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf906129cb565b60405180910390fd5b81601460156101000a81548160ff021916908315150217905550806015819055505050565b6113f6336115c4565b611435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142c906129cb565b60405180910390fd5b8060115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61148133610c38565b6114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790612a9b565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115829190612d19565b60405180910390a150565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5f9054906101000a900460ff1681565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60105481565b60148054906101000a900460ff1681565b5f838311158290611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9190612512565b60405180910390fd5b505f83856116829190612d32565b9050809150509392505050565b5f60165f9054906101000a900460ff16156116b6576116af848484611a43565b90506119f3565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611754575060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156117a75760148054906101000a900460ff166117a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179d90612daf565b60405180910390fd5b5b6117af611c0d565b156117bd576117bc611cdf565b5b611844826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461162d9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f61189085856120bb565b61189a57826118f5565b6118f4858460145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614612167565b5b90506119478160095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d990919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119e5919061246f565b60405180910390a360019150505b9392505050565b5f611a3b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061162d565b905092915050565b5f611acb826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461162d9092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611b5c8260095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d990919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bfa919061246f565b60405180910390a3600190509392505050565b5f60145f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611c77575060165f9054906101000a900460ff16155b8015611c8f5750601460159054906101000a900460ff165b8015611cda575060155460095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b600160165f6101000a81548160ff0219169083151502179055505f60155490505f4790505f600267ffffffffffffffff811115611d1f57611d1e612dcd565b5b604051908082528060200260200182016040528015611d4d5781602001602082028036833780820191505090505b50905030815f81518110611d6457611d63612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611dd457611dd3612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b8152600401611e70959493929190612f17565b5f604051808303815f87803b158015611e87575f80fd5b505af1158015611e99573d5f803e3d5ffd5b505050505f611eb183476119fa90919063ffffffff16565b90505f7302dcdd04e3f455d838cd1249292c58f3b79e3c3c90505f600267ffffffffffffffff811115611ee757611ee6612dcd565b5b604051908082528060200260200182016040528015611f155781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f81518110611f4d57611f4c612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508181600181518110611f9c57611f9b612dfa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639b5c7a8184855f8560115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b81526004016120589493929190612f6f565b60206040518083038185885af1158015612074573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120999190612c00565b505050505050505f60165f6101000a81548160ff021916908315150217905550565b5f600b5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612113575f9050612161565b600b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161590505b92915050565b5f8082612175576064612179565b6010545b90505f6121c36064600f5461218e9190612ae6565b6121b5846121a7600e548a61233690919063ffffffff16565b61233690919063ffffffff16565b6123ad90919063ffffffff16565b90506122158160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546122d990919063ffffffff16565b60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516122b3919061246f565b60405180910390a36122ce81866119fa90919063ffffffff16565b925050509392505050565b5f8082846122e79190612fb9565b90508381101561232c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232390613036565b60405180910390fd5b8091505092915050565b5f808303612346575f90506123a7565b5f82846123539190612ae6565b90508284826123629190612b54565b146123a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612399906130c4565b60405180910390fd5b809150505b92915050565b5f6123ee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123f6565b905092915050565b5f808311829061243c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124339190612512565b60405180910390fd5b505f838561244a9190612b54565b9050809150509392505050565b5f819050919050565b61246981612457565b82525050565b5f6020820190506124825f830184612460565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124bf5780820151818401526020810190506124a4565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6124e482612488565b6124ee8185612492565b93506124fe8185602086016124a2565b612507816124ca565b840191505092915050565b5f6020820190508181035f83015261252a81846124da565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61255f82612536565b9050919050565b61256f81612555565b8114612579575f80fd5b50565b5f8135905061258a81612566565b92915050565b61259981612457565b81146125a3575f80fd5b50565b5f813590506125b481612590565b92915050565b5f80604083850312156125d0576125cf612532565b5b5f6125dd8582860161257c565b92505060206125ee858286016125a6565b9150509250929050565b5f8115159050919050565b61260c816125f8565b82525050565b5f6020820190506126255f830184612603565b92915050565b61263481612555565b82525050565b5f60208201905061264d5f83018461262b565b92915050565b5f805f6060848603121561266a57612669612532565b5b5f6126778682870161257c565b93505060206126888682870161257c565b9250506040612699868287016125a6565b9150509250925092565b5f602082840312156126b8576126b7612532565b5b5f6126c58482850161257c565b91505092915050565b5f60ff82169050919050565b6126e3816126ce565b82525050565b5f6020820190506126fc5f8301846126da565b92915050565b5f6020828403121561271757612716612532565b5b5f612724848285016125a6565b91505092915050565b612736816125f8565b8114612740575f80fd5b50565b5f813590506127518161272d565b92915050565b5f806040838503121561276d5761276c612532565b5b5f61277a8582860161257c565b925050602061278b85828601612743565b9150509250929050565b5f819050919050565b5f6127b86127b36127ae84612536565b612795565b612536565b9050919050565b5f6127c98261279e565b9050919050565b5f6127da826127bf565b9050919050565b6127ea816127d0565b82525050565b5f6020820190506128035f8301846127e1565b92915050565b5f806040838503121561281f5761281e612532565b5b5f61282c8582860161257c565b925050602061283d8582860161257c565b9150509250929050565b5f806040838503121561285d5761285c612532565b5b5f61286a85828601612743565b925050602061287b858286016125a6565b9150509250929050565b5f61288f82612536565b9050919050565b61289f81612885565b81146128a9575f80fd5b50565b5f813590506128ba81612896565b92915050565b5f602082840312156128d5576128d4612532565b5b5f6128e2848285016128ac565b91505092915050565b5f6128f5826127bf565b9050919050565b612905816128eb565b82525050565b5f60208201905061291e5f8301846128fc565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061296857607f821691505b60208210810361297b5761297a612924565b5b50919050565b7f21415554484f52495a45440000000000000000000000000000000000000000005f82015250565b5f6129b5600b83612492565b91506129c082612981565b602082019050919050565b5f6020820190508181035f8301526129e2816129a9565b9050919050565b7f466565732063616e6e6f74206265206d6f7265207468616e20352500000000005f82015250565b5f612a1d601b83612492565b9150612a28826129e9565b602082019050919050565b5f6020820190508181035f830152612a4a81612a11565b9050919050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f612a85600683612492565b9150612a9082612a51565b602082019050919050565b5f6020820190508181035f830152612ab281612a79565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612af082612457565b9150612afb83612457565b9250828202612b0981612457565b91508282048414831517612b2057612b1f612ab9565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612b5e82612457565b9150612b6983612457565b925082612b7957612b78612b27565b5b828204905092915050565b7f43616e6e6f7420776974686472617720546f6b656e20697473656c662e0000005f82015250565b5f612bb8601d83612492565b9150612bc382612b84565b602082019050919050565b5f6020820190508181035f830152612be581612bac565b9050919050565b5f81519050612bfa81612590565b92915050565b5f60208284031215612c1557612c14612532565b5b5f612c2284828501612bec565b91505092915050565b5f604082019050612c3e5f83018561262b565b612c4b6020830184612460565b9392505050565b5f81519050612c608161272d565b92915050565b5f60208284031215612c7b57612c7a612532565b5b5f612c8884828501612c52565b91505092915050565b7f4d6f6f6e206d697373696f6e20616c7265616479206120676f000000000000005f82015250565b5f612cc5601983612492565b9150612cd082612c91565b602082019050919050565b5f6020820190508181035f830152612cf281612cb9565b9050919050565b5f612d03826127bf565b9050919050565b612d1381612cf9565b82525050565b5f602082019050612d2c5f830184612d0a565b92915050565b5f612d3c82612457565b9150612d4783612457565b9250828203905081811115612d5f57612d5e612ab9565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f612d99601483612492565b9150612da482612d65565b602082019050919050565b5f6020820190508181035f830152612dc681612d8d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f612e4a612e45612e4084612e27565b612795565b612457565b9050919050565b612e5a81612e30565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612e9281612555565b82525050565b5f612ea38383612e89565b60208301905092915050565b5f602082019050919050565b5f612ec582612e60565b612ecf8185612e6a565b9350612eda83612e7a565b805f5b83811015612f0a578151612ef18882612e98565b9750612efc83612eaf565b925050600181019050612edd565b5085935050505092915050565b5f60a082019050612f2a5f830188612460565b612f376020830187612e51565b8181036040830152612f498186612ebb565b9050612f58606083018561262b565b612f656080830184612460565b9695505050505050565b5f608082019050612f825f830187612460565b612f8f6020830186612e51565b8181036040830152612fa18185612ebb565b9050612fb0606083018461262b565b95945050505050565b5f612fc382612457565b9150612fce83612457565b9250828201905080821115612fe657612fe5612ab9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613020601b83612492565b915061302b82612fec565b602082019050919050565b5f6020820190508181035f83015261304d81613014565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130ae602183612492565b91506130b982613054565b604082019050919050565b5f6020820190508181035f8301526130db816130a2565b905091905056fea2646970667358221220e16a48c456492dcf146e591b8a23c5a42917dccc2c184ce21fb05e75eb24eb2864736f6c63430008140033