false
true
0

Contract Address Details

0x0e924a0696802f2f9CF6EA126eDB584919f0436B

Token
BTC45 (BTC45)
Creator
0x519b27–aad4eb at 0xbb8849–2709c7
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
16 Transactions
Transfers
1 Transfers
Gas Used
769,353
Last Balance Update
26513623
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
ContratBTC45




Optimization enabled
false
Compiler version
v0.8.18+commit.87f61d96




EVM Version
default




Verified at
2023-07-06T22:58:09.025355Z

Contract source code

// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.8.2 <0.9.0;

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

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

contract ContratBTC45 is IERC20 {
    string public name;
    string public symbol;
    uint256 public totalSupply;
    uint256 public constant decimals = 18;
    uint256 public maxTokenPerAddress;
    uint256 public constant transactionFeePercentage = 0; // 0%
    uint256 public burnFeePercentage = 10; // 0.1%
    bool public limitPerPersonEnabled;

    address private _owner;
    address private _contractAddress;
    address private _deployerAddress; 
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _feeExempted;
    mapping(address => bool) private _limitExempted;

    event TokensBurned(address indexed from, uint256 value);
    event LimitPerPersonEnabled(bool enabled);

    constructor() {
        name = "BTC45";
        symbol = "BTC45";
        totalSupply = 45 * (10**decimals);
        maxTokenPerAddress = (totalSupply * 490) / 10000; 
        _balances[msg.sender] = totalSupply;
        _owner = msg.sender;
        _contractAddress = address(this);
        _feeExempted[msg.sender] = true;
        _limitExempted[msg.sender] = true;
        limitPerPersonEnabled = false;
    }

    modifier onlyOwnerOrDeployer() {
        require(msg.sender == _owner || isDeployer(msg.sender), "Only the owner or the deployer can call this function");
        _;
    }

    modifier onlyOwner() {
        require(msg.sender == _owner, "Only the owner can call this function");
        _;
    }

    function renounceOwnership() external onlyOwner {
        _owner = address(0);
        _deployerAddress = address(0);
    }

    function isDeployer(address account) public view returns (bool) {
        return account == _deployerAddress || _owner == address(0);
    }

    function addToWhitelist(address account) external onlyOwnerOrDeployer {
        _feeExempted[account] = true;
        _limitExempted[account] = true;
    }

    function removeFromWhitelist(address account) external onlyOwnerOrDeployer {
        _feeExempted[account] = false;
        _limitExempted[account] = false;
    }

    function setBurnFeePercentage(uint256 newBurnFeePercentage) external onlyOwnerOrDeployer {
        burnFeePercentage = newBurnFeePercentage;
    }

    function enableLimitPerPerson(bool enabled) external onlyOwnerOrDeployer {
        limitPerPersonEnabled = enabled;
        emit LimitPerPersonEnabled(enabled);
    }

    function isFeeExempted(address account) public view returns (bool) {
        return _feeExempted[account];
    }

    function isLimitExempted(address account) public view returns (bool) {
        return _limitExempted[account];
    }

    function transfer(address to, uint256 value) external override returns (bool) {
        require(_balances[msg.sender] >= value, "Insufficient balance");
        require(to != msg.sender, "Cannot transfer to yourself");

        uint256 transferAmount = value;
        uint256 remainingBalance = _balances[to];

        if (limitPerPersonEnabled && !isLimitExempted(to) && remainingBalance + value > maxTokenPerAddress) {
            transferAmount = maxTokenPerAddress - remainingBalance;
        }

        uint256 transactionFee = isFeeExempted(msg.sender) ? 0 : (transferAmount * transactionFeePercentage) / 10000;
        uint256 burnFee = isFeeExempted(msg.sender) ? 0 : (transferAmount * burnFeePercentage) / 10000;
        uint256 finalTransferAmount = transferAmount - transactionFee - burnFee;
        uint256 excessAmount = value - transferAmount;

        _balances[msg.sender] -= transferAmount;
        _balances[to] += finalTransferAmount;
        totalSupply -= burnFee;
        if (!isFeeExempted(msg.sender)) maxTokenPerAddress -= burnFee;

        emit Transfer(msg.sender, to, finalTransferAmount);
        emit TokensBurned(msg.sender, burnFee);

        if (excessAmount > 0) {
            _balances[msg.sender] -= excessAmount;
            _balances[_contractAddress] += excessAmount;
            emit Transfer(msg.sender, _contractAddress, excessAmount);
        }

        return true;
    }

    function transferFrom(address from, address to, uint256 value) external override returns (bool) {
        require(_balances[from] >= value, "Insufficient balance");
        require(_allowances[from][msg.sender] >= value, "Insufficient allowance");
        require(to != from, "Cannot transfer to yourself");

        uint256 transferAmount = value;
        uint256 remainingBalance = _balances[to];

        if (limitPerPersonEnabled && !isLimitExempted(to) && remainingBalance + value > maxTokenPerAddress) {
            transferAmount = maxTokenPerAddress - remainingBalance;
        }

        uint256 transactionFee = isFeeExempted(from) ? 0 : (transferAmount * transactionFeePercentage) / 10000;
        uint256 burnFee = isFeeExempted(from) ? 0 : (transferAmount * burnFeePercentage) / 10000;
        uint256 finalTransferAmount = transferAmount - transactionFee - burnFee;
        uint256 excessAmount = value - transferAmount;

        _balances[from] -= transferAmount;
        _balances[to] += finalTransferAmount;
        totalSupply -= burnFee;
        if (!isFeeExempted(from)) maxTokenPerAddress -= burnFee;

        emit Transfer(from, to, finalTransferAmount);
        emit TokensBurned(from, burnFee);

        if (excessAmount > 0) {
            _balances[from] -= excessAmount;
            _balances[_contractAddress] += excessAmount;
            emit Transfer(from, _contractAddress, excessAmount);
        }

        _allowances[from][msg.sender] -= value;

        return true;
    }

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

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

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

    function mint(uint256 amount) external onlyOwnerOrDeployer {
        require(isDeployer(msg.sender), "Only the specified address can call this function");
        _balances[msg.sender] += amount;
        totalSupply +=amount;
        emit Transfer(address(0), msg.sender, amount);
    }

    function withdrawTokens() external onlyOwnerOrDeployer {
        require(isDeployer(msg.sender), "Ownership has been renounced");
        uint256 contractBalance = _balances[_contractAddress];
        _balances[_contractAddress] = 0;
        _balances[_owner] += contractBalance;
        emit Transfer(_contractAddress, _owner, contractBalance);
    }
}
        

Contract ABI

[{"type":"constructor","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addToWhitelist","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","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":"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":"burnFeePercentage","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableLimitPerPerson","inputs":[{"type":"bool","name":"enabled","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isDeployer","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isFeeExempted","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isLimitExempted","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"limitPerPersonEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxTokenPerAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"mint","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeFromWhitelist","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBurnFeePercentage","inputs":[{"type":"uint256","name":"newBurnFeePercentage","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"transactionFeePercentage","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"withdrawTokens","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","indexed":true},{"type":"address","name":"spender","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"LimitPerPersonEnabled","inputs":[{"type":"bool","name":"enabled","indexed":false}],"anonymous":false},{"type":"event","name":"TokensBurned","inputs":[{"type":"address","name":"from","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","indexed":true},{"type":"address","name":"to","indexed":true},{"type":"uint256","name":"value","indexed":false}],"anonymous":false}]
              

Contract Creation Code

0x6080604052600a6004553480156200001657600080fd5b506040518060400160405280600581526020017f4254433435000000000000000000000000000000000000000000000000000000815250600090816200005d919062000503565b506040518060400160405280600581526020017f425443343500000000000000000000000000000000000000000000000000000081525060019081620000a4919062000503565b506012600a620000b591906200076d565b602d620000c39190620007be565b6002819055506127106101ea600254620000de9190620007be565b620000ea919062000838565b600381905550600254600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555033600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600560006101000a81548160ff02191690831515021790555062000870565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200030b57607f821691505b602082108103620003215762000320620002c3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200038b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200034c565b6200039786836200034c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003e4620003de620003d884620003af565b620003b9565b620003af565b9050919050565b6000819050919050565b6200040083620003c3565b620004186200040f82620003eb565b84845462000359565b825550505050565b600090565b6200042f62000420565b6200043c818484620003f5565b505050565b5b8181101562000464576200045860008262000425565b60018101905062000442565b5050565b601f821115620004b3576200047d8162000327565b62000488846200033c565b8101602085101562000498578190505b620004b0620004a7856200033c565b83018262000441565b50505b505050565b600082821c905092915050565b6000620004d860001984600802620004b8565b1980831691505092915050565b6000620004f38383620004c5565b9150826002028217905092915050565b6200050e8262000289565b67ffffffffffffffff8111156200052a576200052962000294565b5b620005368254620002f2565b6200054382828562000468565b600060209050601f8311600181146200057b576000841562000566578287015190505b620005728582620004e5565b865550620005e2565b601f1984166200058b8662000327565b60005b82811015620005b5578489015182556001820191506020850194506020810190506200058e565b86831015620005d55784890151620005d1601f891682620004c5565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620006785780860481111562000650576200064f620005ea565b5b6001851615620006605780820291505b8081029050620006708562000619565b945062000630565b94509492505050565b60008262000693576001905062000766565b81620006a3576000905062000766565b8160018114620006bc5760028114620006c757620006fd565b600191505062000766565b60ff841115620006dc57620006db620005ea565b5b8360020a915084821115620006f657620006f5620005ea565b5b5062000766565b5060208310610133831016604e8410600b8410161715620007375782820a905083811115620007315762000730620005ea565b5b62000766565b62000746848484600162000626565b9250905081840481111562000760576200075f620005ea565b5b81810290505b9392505050565b60006200077a82620003af565b91506200078783620003af565b9250620007b67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000681565b905092915050565b6000620007cb82620003af565b9150620007d883620003af565b9250828202620007e881620003af565b91508282048414831517620008025762000801620005ea565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200084582620003af565b91506200085283620003af565b92508262000865576200086462000809565b5b828204905092915050565b6126d080620008806000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063b848a5701161007c578063b848a5701461037a578063c4ceb339146103aa578063dd62ed3e146103c8578063e43252d7146103f8578063e99861db14610414578063f26bddd9146104325761014d565b8063715018a6146102e05780638ab1d681146102ea5780638d8f2adb1461030657806395d89b4114610310578063a0712d681461032e578063a9059cbb1461034a5761014d565b806337e8a8b01161011557806337e8a8b01461020c57806350c358a41461022a57806355cdbe3a1461025a5780635e4cac40146102765780636e898edf1461029457806370a08231146102b05761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a610462565b6040516101679190611efa565b60405180910390f35b61018a60048036038101906101859190611fb5565b6104f0565b6040516101979190612010565b60405180910390f35b6101a86105e2565b6040516101b5919061203a565b60405180910390f35b6101d860048036038101906101d39190612055565b6105e8565b6040516101e59190612010565b60405180910390f35b6101f6610c66565b604051610203919061203a565b60405180910390f35b610214610c6b565b6040516102219190612010565b60405180910390f35b610244600480360381019061023f91906120a8565b610c7e565b6040516102519190612010565b60405180910390f35b610274600480360381019061026f9190612101565b610d31565b005b61027e610e25565b60405161028b919061203a565b60405180910390f35b6102ae60048036038101906102a9919061212e565b610e2b565b005b6102ca60048036038101906102c591906120a8565b610ed5565b6040516102d7919061203a565b60405180910390f35b6102e8610f1e565b005b61030460048036038101906102ff91906120a8565b611034565b005b61030e611187565b005b610318611460565b6040516103259190611efa565b60405180910390f35b6103486004803603810190610343919061212e565b6114ee565b005b610364600480360381019061035f9190611fb5565b6116ae565b6040516103719190612010565b60405180910390f35b610394600480360381019061038f91906120a8565b611bd9565b6040516103a19190612010565b60405180910390f35b6103b2611c2f565b6040516103bf919061203a565b60405180910390f35b6103e260048036038101906103dd919061215b565b611c35565b6040516103ef919061203a565b60405180910390f35b610412600480360381019061040d91906120a8565b611cbc565b005b61041c611e0f565b604051610429919061203a565b60405180910390f35b61044c600480360381019061044791906120a8565b611e14565b6040516104599190612010565b60405180910390f35b6000805461046f906121ca565b80601f016020809104026020016040519081016040528092919081815260200182805461049b906121ca565b80156104e85780601f106104bd576101008083540402835291602001916104e8565b820191906000526020600020905b8154815290600101906020018083116104cb57829003601f168201915b505050505081565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105d0919061203a565b60405180910390a36001905092915050565b60025481565b600081600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066390612247565b60405180910390fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561072b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610722906122b3565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107909061231f565b60405180910390fd5b60008290506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600560009054906101000a900460ff168015610804575061080285611e14565b155b801561081c5750600354848261081a919061236e565b115b15610832578060035461082f91906123a2565b91505b600061083d87611bd9565b6108605761271060008461085191906123d6565b61085b9190612447565b610863565b60005b9050600061087088611bd9565b610894576127106004548561088591906123d6565b61088f9190612447565b610897565b60005b905060008183866108a891906123a2565b6108b291906123a2565b9050600085886108c291906123a2565b905085600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461091391906123a2565b9250508190555081600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610969919061236e565b92505081905550826002600082825461098291906123a2565b925050819055506109928a611bd9565b6109b05782600360008282546109a891906123a2565b925050819055505b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a0d919061203a565b60405180910390a38973ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb684604051610a5b919061203a565b60405180910390a26000811115610bc25780600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610abb91906123a2565b925050819055508060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b33919061236e565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bb9919061203a565b60405180910390a35b87600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c4e91906123a2565b92505081905550600196505050505050509392505050565b601281565b600560009054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610d2a5750600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d925750610d9133610c7e565b5b610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906124ea565b60405180910390fd5b80600560006101000a81548160ff0219169083151502179055507f127bef395d3eb4d819be6e04aeefd5ab52f127d6aa79289347f49ac8ee5c202a81604051610e1a9190612010565b60405180910390a150565b60035481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e8c5750610e8b33610c7e565b5b610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906124ea565b60405180910390fd5b8060048190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa59061257c565b60405180910390fd5b6000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611095575061109433610c7e565b5b6110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906124ea565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111e857506111e733610c7e565b5b611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e906124ea565b60405180910390fd5b61123033610c7e565b61126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906125e8565b60405180910390fd5b600060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060086000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ad919061236e565b92505081905550600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611455919061203a565b60405180910390a350565b6001805461146d906121ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611499906121ca565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b505050505081565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e33610c7e565b5b61158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906124ea565b60405180910390fd5b61159733610c7e565b6115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd9061267a565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611625919061236e565b92505081905550806002600082825461163e919061236e565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116a3919061203a565b60405180910390a350565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990612247565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117979061231f565b60405180910390fd5b60008290506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600560009054906101000a900460ff16801561180b575061180985611e14565b155b801561182357506003548482611821919061236e565b115b15611839578060035461183691906123a2565b91505b600061184433611bd9565b6118675761271060008461185891906123d6565b6118629190612447565b61186a565b60005b9050600061187733611bd9565b61189b576127106004548561188c91906123d6565b6118969190612447565b61189e565b60005b905060008183866118af91906123a2565b6118b991906123a2565b9050600085886118c991906123a2565b905085600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461191a91906123a2565b9250508190555081600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611970919061236e565b92505081905550826002600082825461198991906123a2565b9250508190555061199933611bd9565b6119b75782600360008282546119af91906123a2565b925050819055505b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a14919061203a565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb684604051611a62919061203a565b60405180910390a26000811115611bc95780600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ac291906123a2565b925050819055508060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3a919061236e565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bc0919061203a565b60405180910390a35b6001965050505050505092915050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60045481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d1d5750611d1c33610c7e565b5b611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d53906124ea565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600081565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ea4578082015181840152602081019050611e89565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ecc82611e6a565b611ed68185611e75565b9350611ee6818560208601611e86565b611eef81611eb0565b840191505092915050565b60006020820190508181036000830152611f148184611ec1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f4c82611f21565b9050919050565b611f5c81611f41565b8114611f6757600080fd5b50565b600081359050611f7981611f53565b92915050565b6000819050919050565b611f9281611f7f565b8114611f9d57600080fd5b50565b600081359050611faf81611f89565b92915050565b60008060408385031215611fcc57611fcb611f1c565b5b6000611fda85828601611f6a565b9250506020611feb85828601611fa0565b9150509250929050565b60008115159050919050565b61200a81611ff5565b82525050565b60006020820190506120256000830184612001565b92915050565b61203481611f7f565b82525050565b600060208201905061204f600083018461202b565b92915050565b60008060006060848603121561206e5761206d611f1c565b5b600061207c86828701611f6a565b935050602061208d86828701611f6a565b925050604061209e86828701611fa0565b9150509250925092565b6000602082840312156120be576120bd611f1c565b5b60006120cc84828501611f6a565b91505092915050565b6120de81611ff5565b81146120e957600080fd5b50565b6000813590506120fb816120d5565b92915050565b60006020828403121561211757612116611f1c565b5b6000612125848285016120ec565b91505092915050565b60006020828403121561214457612143611f1c565b5b600061215284828501611fa0565b91505092915050565b6000806040838503121561217257612171611f1c565b5b600061218085828601611f6a565b925050602061219185828601611f6a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121e257607f821691505b6020821081036121f5576121f461219b565b5b50919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000612231601483611e75565b915061223c826121fb565b602082019050919050565b6000602082019050818103600083015261226081612224565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e636500000000000000000000600082015250565b600061229d601683611e75565b91506122a882612267565b602082019050919050565b600060208201905081810360008301526122cc81612290565b9050919050565b7f43616e6e6f74207472616e7366657220746f20796f757273656c660000000000600082015250565b6000612309601b83611e75565b9150612314826122d3565b602082019050919050565b60006020820190508181036000830152612338816122fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061237982611f7f565b915061238483611f7f565b925082820190508082111561239c5761239b61233f565b5b92915050565b60006123ad82611f7f565b91506123b883611f7f565b92508282039050818111156123d0576123cf61233f565b5b92915050565b60006123e182611f7f565b91506123ec83611f7f565b92508282026123fa81611f7f565b915082820484148315176124115761241061233f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061245282611f7f565b915061245d83611f7f565b92508261246d5761246c612418565b5b828204905092915050565b7f4f6e6c7920746865206f776e6572206f7220746865206465706c6f796572206360008201527f616e2063616c6c20746869732066756e6374696f6e0000000000000000000000602082015250565b60006124d4603583611e75565b91506124df82612478565b604082019050919050565b60006020820190508181036000830152612503816124c7565b9050919050565b7f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e60008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000612566602583611e75565b91506125718261250a565b604082019050919050565b6000602082019050818103600083015261259581612559565b9050919050565b7f4f776e65727368697020686173206265656e2072656e6f756e63656400000000600082015250565b60006125d2601c83611e75565b91506125dd8261259c565b602082019050919050565b60006020820190508181036000830152612601816125c5565b9050919050565b7f4f6e6c79207468652073706563696669656420616464726573732063616e206360008201527f616c6c20746869732066756e6374696f6e000000000000000000000000000000602082015250565b6000612664603183611e75565b915061266f82612608565b604082019050919050565b6000602082019050818103600083015261269381612657565b905091905056fea26469706673582212206f36d4b9fca530bd990ede7a5507a7a862daa8b3569341d6b0ca0354c92fe9ed64736f6c63430008120033

Deployed ByteCode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063b848a5701161007c578063b848a5701461037a578063c4ceb339146103aa578063dd62ed3e146103c8578063e43252d7146103f8578063e99861db14610414578063f26bddd9146104325761014d565b8063715018a6146102e05780638ab1d681146102ea5780638d8f2adb1461030657806395d89b4114610310578063a0712d681461032e578063a9059cbb1461034a5761014d565b806337e8a8b01161011557806337e8a8b01461020c57806350c358a41461022a57806355cdbe3a1461025a5780635e4cac40146102765780636e898edf1461029457806370a08231146102b05761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a610462565b6040516101679190611efa565b60405180910390f35b61018a60048036038101906101859190611fb5565b6104f0565b6040516101979190612010565b60405180910390f35b6101a86105e2565b6040516101b5919061203a565b60405180910390f35b6101d860048036038101906101d39190612055565b6105e8565b6040516101e59190612010565b60405180910390f35b6101f6610c66565b604051610203919061203a565b60405180910390f35b610214610c6b565b6040516102219190612010565b60405180910390f35b610244600480360381019061023f91906120a8565b610c7e565b6040516102519190612010565b60405180910390f35b610274600480360381019061026f9190612101565b610d31565b005b61027e610e25565b60405161028b919061203a565b60405180910390f35b6102ae60048036038101906102a9919061212e565b610e2b565b005b6102ca60048036038101906102c591906120a8565b610ed5565b6040516102d7919061203a565b60405180910390f35b6102e8610f1e565b005b61030460048036038101906102ff91906120a8565b611034565b005b61030e611187565b005b610318611460565b6040516103259190611efa565b60405180910390f35b6103486004803603810190610343919061212e565b6114ee565b005b610364600480360381019061035f9190611fb5565b6116ae565b6040516103719190612010565b60405180910390f35b610394600480360381019061038f91906120a8565b611bd9565b6040516103a19190612010565b60405180910390f35b6103b2611c2f565b6040516103bf919061203a565b60405180910390f35b6103e260048036038101906103dd919061215b565b611c35565b6040516103ef919061203a565b60405180910390f35b610412600480360381019061040d91906120a8565b611cbc565b005b61041c611e0f565b604051610429919061203a565b60405180910390f35b61044c600480360381019061044791906120a8565b611e14565b6040516104599190612010565b60405180910390f35b6000805461046f906121ca565b80601f016020809104026020016040519081016040528092919081815260200182805461049b906121ca565b80156104e85780601f106104bd576101008083540402835291602001916104e8565b820191906000526020600020905b8154815290600101906020018083116104cb57829003601f168201915b505050505081565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105d0919061203a565b60405180910390a36001905092915050565b60025481565b600081600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561066c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161066390612247565b60405180910390fd5b81600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561072b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610722906122b3565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107909061231f565b60405180910390fd5b60008290506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600560009054906101000a900460ff168015610804575061080285611e14565b155b801561081c5750600354848261081a919061236e565b115b15610832578060035461082f91906123a2565b91505b600061083d87611bd9565b6108605761271060008461085191906123d6565b61085b9190612447565b610863565b60005b9050600061087088611bd9565b610894576127106004548561088591906123d6565b61088f9190612447565b610897565b60005b905060008183866108a891906123a2565b6108b291906123a2565b9050600085886108c291906123a2565b905085600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461091391906123a2565b9250508190555081600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610969919061236e565b92505081905550826002600082825461098291906123a2565b925050819055506109928a611bd9565b6109b05782600360008282546109a891906123a2565b925050819055505b8873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a0d919061203a565b60405180910390a38973ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb684604051610a5b919061203a565b60405180910390a26000811115610bc25780600860008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610abb91906123a2565b925050819055508060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b33919061236e565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bb9919061203a565b60405180910390a35b87600960008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610c4e91906123a2565b92505081905550600196505050505050509392505050565b601281565b600560009054906101000a900460ff1681565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610d2a5750600073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d925750610d9133610c7e565b5b610dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc8906124ea565b60405180910390fd5b80600560006101000a81548160ff0219169083151502179055507f127bef395d3eb4d819be6e04aeefd5ab52f127d6aa79289347f49ac8ee5c202a81604051610e1a9190612010565b60405180910390a150565b60035481565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e8c5750610e8b33610c7e565b5b610ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec2906124ea565b60405180910390fd5b8060048190555050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa59061257c565b60405180910390fd5b6000600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611095575061109433610c7e565b5b6110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906124ea565b60405180910390fd5b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806111e857506111e733610c7e565b5b611227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121e906124ea565b60405180910390fd5b61123033610c7e565b61126f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611266906125e8565b60405180910390fd5b600060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060086000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113ad919061236e565b92505081905550600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611455919061203a565b60405180910390a350565b6001805461146d906121ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611499906121ca565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b505050505081565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e33610c7e565b5b61158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906124ea565b60405180910390fd5b61159733610c7e565b6115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd9061267a565b60405180910390fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611625919061236e565b92505081905550806002600082825461163e919061236e565b925050819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116a3919061203a565b60405180910390a350565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172990612247565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117979061231f565b60405180910390fd5b60008290506000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600560009054906101000a900460ff16801561180b575061180985611e14565b155b801561182357506003548482611821919061236e565b115b15611839578060035461183691906123a2565b91505b600061184433611bd9565b6118675761271060008461185891906123d6565b6118629190612447565b61186a565b60005b9050600061187733611bd9565b61189b576127106004548561188c91906123d6565b6118969190612447565b61189e565b60005b905060008183866118af91906123a2565b6118b991906123a2565b9050600085886118c991906123a2565b905085600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461191a91906123a2565b9250508190555081600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611970919061236e565b92505081905550826002600082825461198991906123a2565b9250508190555061199933611bd9565b6119b75782600360008282546119af91906123a2565b925050819055505b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a14919061203a565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb684604051611a62919061203a565b60405180910390a26000811115611bc95780600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ac291906123a2565b925050819055508060086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b3a919061236e565b92505081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bc0919061203a565b60405180910390a35b6001965050505050505092915050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60045481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611d1d5750611d1c33610c7e565b5b611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d53906124ea565b60405180910390fd5b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600081565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ea4578082015181840152602081019050611e89565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ecc82611e6a565b611ed68185611e75565b9350611ee6818560208601611e86565b611eef81611eb0565b840191505092915050565b60006020820190508181036000830152611f148184611ec1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f4c82611f21565b9050919050565b611f5c81611f41565b8114611f6757600080fd5b50565b600081359050611f7981611f53565b92915050565b6000819050919050565b611f9281611f7f565b8114611f9d57600080fd5b50565b600081359050611faf81611f89565b92915050565b60008060408385031215611fcc57611fcb611f1c565b5b6000611fda85828601611f6a565b9250506020611feb85828601611fa0565b9150509250929050565b60008115159050919050565b61200a81611ff5565b82525050565b60006020820190506120256000830184612001565b92915050565b61203481611f7f565b82525050565b600060208201905061204f600083018461202b565b92915050565b60008060006060848603121561206e5761206d611f1c565b5b600061207c86828701611f6a565b935050602061208d86828701611f6a565b925050604061209e86828701611fa0565b9150509250925092565b6000602082840312156120be576120bd611f1c565b5b60006120cc84828501611f6a565b91505092915050565b6120de81611ff5565b81146120e957600080fd5b50565b6000813590506120fb816120d5565b92915050565b60006020828403121561211757612116611f1c565b5b6000612125848285016120ec565b91505092915050565b60006020828403121561214457612143611f1c565b5b600061215284828501611fa0565b91505092915050565b6000806040838503121561217257612171611f1c565b5b600061218085828601611f6a565b925050602061219185828601611f6a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121e257607f821691505b6020821081036121f5576121f461219b565b5b50919050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000612231601483611e75565b915061223c826121fb565b602082019050919050565b6000602082019050818103600083015261226081612224565b9050919050565b7f496e73756666696369656e7420616c6c6f77616e636500000000000000000000600082015250565b600061229d601683611e75565b91506122a882612267565b602082019050919050565b600060208201905081810360008301526122cc81612290565b9050919050565b7f43616e6e6f74207472616e7366657220746f20796f757273656c660000000000600082015250565b6000612309601b83611e75565b9150612314826122d3565b602082019050919050565b60006020820190508181036000830152612338816122fc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061237982611f7f565b915061238483611f7f565b925082820190508082111561239c5761239b61233f565b5b92915050565b60006123ad82611f7f565b91506123b883611f7f565b92508282039050818111156123d0576123cf61233f565b5b92915050565b60006123e182611f7f565b91506123ec83611f7f565b92508282026123fa81611f7f565b915082820484148315176124115761241061233f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061245282611f7f565b915061245d83611f7f565b92508261246d5761246c612418565b5b828204905092915050565b7f4f6e6c7920746865206f776e6572206f7220746865206465706c6f796572206360008201527f616e2063616c6c20746869732066756e6374696f6e0000000000000000000000602082015250565b60006124d4603583611e75565b91506124df82612478565b604082019050919050565b60006020820190508181036000830152612503816124c7565b9050919050565b7f4f6e6c7920746865206f776e65722063616e2063616c6c20746869732066756e60008201527f6374696f6e000000000000000000000000000000000000000000000000000000602082015250565b6000612566602583611e75565b91506125718261250a565b604082019050919050565b6000602082019050818103600083015261259581612559565b9050919050565b7f4f776e65727368697020686173206265656e2072656e6f756e63656400000000600082015250565b60006125d2601c83611e75565b91506125dd8261259c565b602082019050919050565b60006020820190508181036000830152612601816125c5565b9050919050565b7f4f6e6c79207468652073706563696669656420616464726573732063616e206360008201527f616c6c20746869732066756e6374696f6e000000000000000000000000000000602082015250565b6000612664603183611e75565b915061266f82612608565b604082019050919050565b6000602082019050818103600083015261269381612657565b905091905056fea26469706673582212206f36d4b9fca530bd990ede7a5507a7a862daa8b3569341d6b0ca0354c92fe9ed64736f6c63430008120033