false
true
0

Contract Address Details

0xaA8330FB2B4D5D07ABFE7A72262752a8505C6B37

Token
Polka City (POLC)
Creator
0xad3345–ba613f at 0x958157–e9cb1c
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
57,266 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25964711
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
This contract has been verified via Sourcify. View contract in Sourcify repository
Contract name:
POLCToken




Optimization enabled
true
Compiler version
v0.8.0+commit.c7dfd78e




Optimization runs
200
EVM Version
istanbul




Verified at
2024-08-20T00:43:03.550800Z

browser/POLCToken-V1.4.sol

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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;
    }
        
}

interface ItokenRecipient { 
    function receiveApproval(address _from, uint256 _value, address _token, bytes calldata _extraData) external returns (bool); 
}

interface IERC20Token {
    function totalSupply() external view returns (uint256 supply);
    function transfer(address _to, uint256 _value) external  returns (bool success);
    function transferFrom(address _from, address _to, uint256 _value) external returns (bool success);
    function balanceOf(address _owner) external view returns (uint256 balance);
    function approve(address _spender, uint256 _value) external returns (bool success);
    function allowance(address _owner, address _spender) external view returns (uint256 remaining);
}

contract Ownable {

    address private owner;
    
    event OwnerSet(address indexed oldOwner, address indexed newOwner);
    
    modifier onlyOwner() {
        require(msg.sender == owner, "Caller is not owner");
        _;
    }

    constructor() {
        owner = msg.sender; // 'msg.sender' is sender of current call, contract deployer for a constructor
        emit OwnerSet(address(0), owner);
    }


    function changeOwner(address newOwner) public onlyOwner {
        emit OwnerSet(owner, newOwner);
        owner = newOwner;
    }

    function getOwner() external view returns (address) {
        return owner;
    }
}

contract StandardToken is IERC20Token {
    
    using SafeMath for uint256;
    mapping (address => uint256) public balances;
    mapping (address => mapping (address => uint256)) public allowed;
    uint256 public _totalSupply;
    
    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
    
    function totalSupply() override public view returns (uint256 supply) {
        return _totalSupply;
    }

    function transfer(address _to, uint256 _value) override virtual public returns (bool success) {
        require(_to != address(0x0), "Use burn function instead");                              
		require(_value >= 0, "Invalid amount"); 
		require(balances[msg.sender] >= _value, "Not enough balance");
		balances[msg.sender] = balances[msg.sender].sub(_value);
		balances[_to] = balances[_to].add(_value);
		emit Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) override virtual public returns (bool success) {
        require(_to != address(0x0), "Use burn function instead");                               
		require(_value >= 0, "Invalid amount"); 
		require(balances[_from] >= _value, "Not enough balance");
		require(allowed[_from][msg.sender] >= _value, "You need to increase allowance");
		balances[_from] = balances[_from].sub(_value);
		balances[_to] = balances[_to].add(_value);
		emit Transfer(_from, _to, _value);
        return true;
    }

    function balanceOf(address _owner) override public view returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) override public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) override public view returns (uint256 remaining) {
        return allowed[_owner][_spender];
    }
    
}

contract POLCToken is Ownable, StandardToken {

    using SafeMath for uint256;
    string public name = "Polka City";
    uint8 public decimals = 18;
    string public symbol = "POLC";

    // Time lock for progressive release of team, marketing and platform balances
    struct TimeLock {
        uint256 totalAmount;
        uint256 lockedBalance;
        uint128 baseDate;
        uint64 step;
        uint64 tokensStep;
    }
    mapping (address => TimeLock) public timeLocks; 

    // Prevent Bots - If true, limits transactions to 1 transfer per block (whitelisted can execute multiple transactions)
    bool public limitTransactions;
    mapping (address => bool) public contractsWhiteList;
    mapping (address => uint) public lastTXBlock;
    event Burn(address indexed from, uint256 value);

// token sale

    // Wallet for the tokens to be sold, and receive ETH
    address payable public salesWallet;
    uint256 public soldOnCSale;
    uint256 public constant CROWDSALE_START = 1613926800;
    uint256 public constant CROWDSALE_END = 1614556740;
    uint256 public constant CSALE_WEI_FACTOR = 15000;
    uint256 public constant CSALE_HARDCAP = 7500000 ether;
    
    constructor() {
        _totalSupply = 250000000 ether;
        
        // Base date to calculate team, marketing and platform tokens lock
        uint256 lockStartDate = 1613494800;
        
        // Team wallet - 10000000 tokens
        // 0 tokens free, 10000000 tokens locked - progressive release of 5% every 30 days (after 180 days of waiting period)
        address team = 0x4ef5B3d10fD217AC7ddE4DDee5bF319c5c356723;
        balances[team] = 10000000 ether;
        timeLocks[team] = TimeLock(10000000 ether, 10000000 ether, uint128(lockStartDate + (180 days)), 30 days, 500000);
        emit Transfer(address(0x0), team, balances[team]);

        // Marketing wallet - 5000000 tokens
        // 1000000 tokens free, 4000000 tokens locked - progressive release of 5% every 30 days
        address marketingWallet = 0x056F878d4Ac07E66C9a46a8db4918E827c6fD71c;
        balances[marketingWallet] = 5000000 ether;
        timeLocks[marketingWallet] = TimeLock(4000000 ether, 4000000 ether, uint128(lockStartDate), 30 days, 200000);
        emit Transfer(address(0x0), marketingWallet, balances[marketingWallet]);
        
        // Private sale wallet - 2500000 tokens
        address privateWallet = 0xED854fCF86efD8473F174d6dE60c8A5EBDdCc37A;
        balances[privateWallet] = 2500000 ether;
        emit Transfer(address(0x0), privateWallet, balances[privateWallet]);
        
        // Sales wallet, holds Pre-Sale balance - 7500000 tokens
        salesWallet = payable(0x4bb74E94c1EB133a6868C53aA4f6BD437F99c347);
        balances[salesWallet] = 7500000 ether;
        emit Transfer(address(0x0), salesWallet, balances[salesWallet]);
        
        // Exchanges - 25000000 tokens
        address exchanges = 0xE50d4358425a93702988eCd8B66c2EAD8b41CE5d;  
        balances[exchanges] = 25000000 ether;
        emit Transfer(address(0x0), exchanges, balances[exchanges]);
        
        // Platform wallet - 200000000 tokens
        // 50000000 tokens free, 150000000 tokens locked - progressive release of 25000000 every 90 days
        address platformWallet = 0xAD334543437EF71642Ee59285bAf2F4DAcBA613F;
        balances[platformWallet] = 200000000 ether;
        timeLocks[platformWallet] = TimeLock(150000000 ether, 150000000 ether, uint128(lockStartDate), 90 days, 25000000);
        emit Transfer(address(0x0), platformWallet, balances[platformWallet]);
        


    }
    
    function transfer(address _to, uint256 _value) override public returns (bool success) {
        require(checkTransferLimit(), "Transfers are limited to 1 per block");
        require(_value <= (balances[msg.sender] - timeLocks[msg.sender].lockedBalance));
        return super.transfer(_to, _value);
    }
    
    function transferFrom(address _from, address _to, uint256 _value) override public returns (bool success) {
        require(checkTransferLimit(), "Transfers are limited to 1 per block");
        require(_value <= (balances[_from] - timeLocks[_from].lockedBalance));
        return super.transferFrom(_from, _to, _value);
    }
    
    function burn(uint256 _value) public returns (bool success) {
        require(balances[msg.sender] >= _value, "Not enough balance");
		require(_value >= 0, "Invalid amount"); 
        balances[msg.sender] = balances[msg.sender].sub(_value);
        _totalSupply = _totalSupply.sub(_value);
        emit Burn(msg.sender, _value);
        return true;
    }
    
    function approveAndCall(address _spender, uint256 _value, bytes memory _extraData) public returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        emit Approval(msg.sender, _spender, _value);
        ItokenRecipient recipient = ItokenRecipient(_spender);
        require(recipient.receiveApproval(msg.sender, _value, address(this), _extraData));
        return true;
    }
    

    function releaseTokens(address _account) public {
        uint256 timeDiff = block.timestamp - uint256(timeLocks[_account].baseDate);
        require(timeDiff > uint256(timeLocks[_account].step), "Unlock point not reached yet");
        uint256 steps = (timeDiff / uint256(timeLocks[_account].step));
        uint256 unlockableAmount = ((uint256(timeLocks[_account].tokensStep) * 1 ether) * steps);
        if (unlockableAmount >=  timeLocks[_account].totalAmount) {
            timeLocks[_account].lockedBalance = 0;
        } else {
            timeLocks[_account].lockedBalance = timeLocks[_account].totalAmount - unlockableAmount;
        }
    }
       
    function checkTransferLimit() internal returns (bool txAllowed) {
        address _caller = msg.sender;
        if (limitTransactions == true && contractsWhiteList[_caller] != true) {
            if (lastTXBlock[_caller] == block.number) {
                return false;
            } else {
                lastTXBlock[_caller] = block.number;
                return true;
            }
        } else {
            return true;
        }
    }
    
    function enableTXLimit() public onlyOwner {
        limitTransactions = true;
    }
    
    function disableTXLimit() public onlyOwner {
        limitTransactions = false;
    }
    
    function includeWhiteList(address _contractAddress) public onlyOwner {
        contractsWhiteList[_contractAddress] = true;
    }
    
    function removeWhiteList(address _contractAddress) public onlyOwner {
        contractsWhiteList[_contractAddress] = false;
    }
    
    function getLockedBalance(address _wallet) public view returns (uint256 lockedBalance) {
        return timeLocks[_wallet].lockedBalance;
    }
    
    function buy() public payable {
        require((block.timestamp > CROWDSALE_START) && (block.timestamp < CROWDSALE_END), "Contract is not selling tokens");
        uint weiValue = msg.value;
        require(weiValue >= (5 * (10 ** 16)), "Minimum amount is 0.05 eth");
        require(weiValue <= (20 ether), "Maximum amount is 20 eth");
        uint amount = CSALE_WEI_FACTOR * weiValue;
        require((soldOnCSale) <= (CSALE_HARDCAP), "That quantity is not available");
        soldOnCSale += amount;
        balances[salesWallet] = balances[salesWallet].sub(amount);
        balances[msg.sender] = balances[msg.sender].add(amount);
        require(salesWallet.send(weiValue));
        emit Transfer(salesWallet, msg.sender, amount);

    }
    
    function burnUnsold() public onlyOwner {
        require(block.timestamp > CROWDSALE_END);
        uint currentBalance = balances[salesWallet];
        balances[salesWallet] = 0;
        _totalSupply = _totalSupply.sub(currentBalance);
        emit Burn(salesWallet, currentBalance);
    }
}
        

Compiler Settings

{"remappings":[],"optimizer":{"runs":200,"enabled":true},"metadata":{"bytecodeHash":"ipfs"},"libraries":{},"evmVersion":"istanbul","compilationTarget":{"browser/POLCToken-V1.4.sol":"POLCToken"}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"_owner","internalType":"address","indexed":true},{"type":"address","name":"_spender","internalType":"address","indexed":true},{"type":"uint256","name":"_value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerSet","inputs":[{"type":"address","name":"oldOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"_from","internalType":"address","indexed":true},{"type":"address","name":"_to","internalType":"address","indexed":true},{"type":"uint256","name":"_value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"CROWDSALE_END","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"CROWDSALE_START","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"CSALE_HARDCAP","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"CSALE_WEI_FACTOR","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_totalSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"remaining","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"_owner","internalType":"address"},{"type":"address","name":"_spender","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowed","inputs":[{"type":"address","name":"","internalType":"address"},{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"approveAndCall","inputs":[{"type":"address","name":"_spender","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"},{"type":"bytes","name":"_extraData","internalType":"bytes"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"balance","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"_owner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balances","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"burn","inputs":[{"type":"uint256","name":"_value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"burnUnsold","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"buy","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"changeOwner","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"contractsWhiteList","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"disableTXLimit","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"enableTXLimit","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"lockedBalance","internalType":"uint256"}],"name":"getLockedBalance","inputs":[{"type":"address","name":"_wallet","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"includeWhiteList","inputs":[{"type":"address","name":"_contractAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"lastTXBlock","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"limitTransactions","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"releaseTokens","inputs":[{"type":"address","name":"_account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeWhiteList","inputs":[{"type":"address","name":"_contractAddress","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address payable"}],"name":"salesWallet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"soldOnCSale","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"totalAmount","internalType":"uint256"},{"type":"uint256","name":"lockedBalance","internalType":"uint256"},{"type":"uint128","name":"baseDate","internalType":"uint128"},{"type":"uint64","name":"step","internalType":"uint64"},{"type":"uint64","name":"tokensStep","internalType":"uint64"}],"name":"timeLocks","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"supply","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","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":"success","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"_from","internalType":"address"},{"type":"address","name":"_to","internalType":"address"},{"type":"uint256","name":"_value","internalType":"uint256"}]}]
              

Contract Creation Code

0x60c0604052600a608081905269506f6c6b61204369747960b01b60a09081526200002d9160049190620006af565b506005805460ff1916601217905560408051808201909152600480825263504f4c4360e01b60209092019182526200006891600691620006af565b503480156200007657600080fd5b50600080546001600160a01b03191633178082556040516001600160a01b039190911691907f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a735908290a36acecb8f27f4200f3a000000600355734ef5b3d10fd217ac7dde4ddee5bf319c5c3567236000819052600160209081526a084595161401484a0000007fe3a3b53db6946945c15787106d388def8bafaab9263a29ba26d66bd0056ae9038190556040805160a0810182528281529283019190915263602bfa1092919081016200014d8462ed4e006200075e565b6001600160801b03908116825262278d006020808401919091526207a1206040938401526001600160a01b0385166000818152600783528481208651815586840151600180830191909155878701516002909201805460608a01516080909a01516001600160801b03199091169390971692909217600160801b600160c01b031916600160801b6001600160401b03998a1602176001600160c01b0316600160c01b9890961697909702949094179093559390528181205491519091600080516020620021d38339815191529162000226919062000755565b60405180910390a36a0422ca8b0a00a4250000007fefb8b26ec39b89fca60683fbc305afb94fb89588de85774b43df604186b01aeb8190556040805160a0810182526a034f086f3b33b68400000080825260208083019182526001600160801b0387811684860190815262278d006060860190815262030d406080870190815273056f878d4ac07e66c9a46a8db4918e827c6fd71c60008181526007875297517fd11d8628b78e89bdcb005ba69e9de2c9f384aa8ef43f471981742ac626da3fd35595517fd11d8628b78e89bdcb005ba69e9de2c9f384aa8ef43f471981742ac626da3fd45591517fd11d8628b78e89bdcb005ba69e9de2c9f384aa8ef43f471981742ac626da3fd58054925193516001600160801b03199093169190941617600160801b600160c01b031916600160801b6001600160401b0393841602176001600160c01b0316600160c01b929091169190910217905560019052915191928392600080516020620021d383398151915291620003a49162000755565b60405180910390a373ed854fcf86efd8473f174d6de60c8a5ebddcc37a600081815260016020526a02116545850052128000007f5fdfe6a6977b29bcf7c766194890e2917319311f35e3af23d45e7fe2ea4c7fb5819055604051839291600080516020620021d3833981519152916200041e919062000755565b60405180910390a3600b80546001600160a01b031916734bb74e94c1eb133a6868c53aa4f6bd437f99c347178082556001600160a01b039081166000908152600160205260408082206a06342fd08f00f637800000905592549091168082528282205492519092600080516020620021d383398151915291620004a2919062000755565b60405180910390a373e50d4358425a93702988ecd8b66c2ead8b41ce5d600081815260016020526a14adf4b7320334b90000007fa75e359665b6151eb5fea21fc21b149f4b1f144988b99b9e97a6019ff27f17b2819055604051839291600080516020620021d3833981519152916200051c919062000755565b60405180910390a36aa56fa5b99019a5c80000007f88d2b281dcf096e7dcc266492b7cd0a6d78188430ca5f231b7b070aa757e8e6d8190556040805160a0810182526a7c13bc4b2c133c5600000080825260208083019182526001600160801b038a81168486019081526276a7006060860190815263017d78406080870190815273ad334543437ef71642ee59285baf2f4dacba613f60008181526007875297517f397f1f5bd559bd56797890e3be703af232831f98761a40823167c1fba9cec3855595517f397f1f5bd559bd56797890e3be703af232831f98761a40823167c1fba9cec3865591517f397f1f5bd559bd56797890e3be703af232831f98761a40823167c1fba9cec3878054925193516001600160801b03199093169190941617600160801b600160c01b031916600160801b6001600160401b0393841602176001600160c01b0316600160c01b929091169190910217905560019052915191928392600080516020620021d3833981519152916200069b9162000755565b60405180910390a3505050505050620007c0565b828054620006bd9062000783565b90600052602060002090601f016020900481019282620006e157600085556200072c565b82601f10620006fc57805160ff19168380011785556200072c565b828001600101855582156200072c579182015b828111156200072c5782518255916020019190600101906200070f565b506200073a9291506200073e565b5090565b5b808211156200073a57600081556001016200073f565b90815260200190565b600082198211156200077e57634e487b7160e01b81526011600452602481fd5b500190565b6002810460018216806200079857607f821691505b60208210811415620007ba57634e487b7160e01b600052602260045260246000fd5b50919050565b611a0380620007d06000396000f3fe6080604052600436106101f95760003560e01c8063893d20e81161010d578063a7411c92116100a0578063c40868931161006f578063c408689314610549578063cae9ca5114610569578063dd62ed3e14610589578063df878f0b146105a9578063edf4d847146105be576101f9565b8063a7411c92146104df578063a9059cbb146104ff578063b52a58511461051f578063bdb97e8914610534576101f9565b806395d89b41116100dc57806395d89b4114610482578063a4b99ea814610497578063a6f2ae3a146104b7578063a6f9dae1146104bf576101f9565b8063893d20e8146104215780638b811719146104435780638e762ff914610458578063930d85e31461046d576101f9565b806337150140116101905780635c6581651161015f5780635c6581651461037b57806370a082311461039b5780637f76b223146103bb57806382870e30146103ec57806387b0be4814610401576101f9565b806337150140146103115780633eaaf86b1461032657806342966c681461033b5780634412d5521461035b576101f9565b80632042e5c2116101cc5780632042e5c21461028d57806323b872dd146102af57806327e235e3146102cf578063313ce567146102ef576101f9565b806306fdde03146101fe578063095ea7b31461022957806313ddb69a1461025657806318160ddd14610278575b600080fd5b34801561020a57600080fd5b506102136105d3565b6040516102209190611640565b60405180910390f35b34801561023557600080fd5b5061024961024436600461147b565b610661565b6040516102209190611635565b34801561026257600080fd5b5061026b6106cb565b60405161022091906118a8565b34801561028457600080fd5b5061026b6106d3565b34801561029957600080fd5b506102ad6102a83660046113f4565b6106da565b005b3480156102bb57600080fd5b506102496102ca366004611440565b61072e565b3480156102db57600080fd5b5061026b6102ea3660046113f4565b6107a4565b3480156102fb57600080fd5b506103046107b6565b60405161022091906118ea565b34801561031d57600080fd5b5061026b6107bf565b34801561033257600080fd5b5061026b6107c7565b34801561034757600080fd5b50610249610356366004611581565b6107cd565b34801561036757600080fd5b506102ad6103763660046113f4565b610879565b34801561038757600080fd5b5061026b61039636600461140e565b6108c7565b3480156103a757600080fd5b5061026b6103b63660046113f4565b6108e4565b3480156103c757600080fd5b506103db6103d63660046113f4565b6108ff565b6040516102209594939291906118b1565b3480156103f857600080fd5b506102ad610946565b34801561040d57600080fd5b506102ad61041c3660046113f4565b61097c565b34801561042d57600080fd5b50610436610b09565b60405161022091906115e4565b34801561044f57600080fd5b50610249610b18565b34801561046457600080fd5b5061026b610b21565b34801561047957600080fd5b506102ad610b27565b34801561048e57600080fd5b50610213610b60565b3480156104a357600080fd5b506102496104b23660046113f4565b610b6d565b6102ad610b82565b3480156104cb57600080fd5b506102ad6104da3660046113f4565b610d3b565b3480156104eb57600080fd5b5061026b6104fa3660046113f4565b610dc0565b34801561050b57600080fd5b5061024961051a36600461147b565b610dd2565b34801561052b57600080fd5b506102ad610e3d565b34801561054057600080fd5b5061026b610ef0565b34801561055557600080fd5b5061026b6105643660046113f4565b610ef6565b34801561057557600080fd5b506102496105843660046114a4565b610f14565b34801561059557600080fd5b5061026b6105a436600461140e565b61100f565b3480156105b557600080fd5b5061026b61103a565b3480156105ca57600080fd5b50610436611049565b600480546105e090611966565b80601f016020809104026020016040519081016040528092919081815260200182805461060c90611966565b80156106595780601f1061062e57610100808354040283529160200191610659565b820191906000526020600020905b81548152906001019060200180831161063c57829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106ba9086906118a8565b60405180910390a350600192915050565b636032919081565b6003545b90565b6000546001600160a01b0316331461070d5760405162461bcd60e51b8152600401610704906116c1565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000610738611058565b6107545760405162461bcd60e51b8152600401610704906117bf565b6001600160a01b0384166000908152600760209081526040808320600190810154925290912054610785919061194f565b82111561079157600080fd5b61079c8484846110ed565b949350505050565b60016020526000908152604090205481565b60055460ff1681565b63603c2e4481565b60035481565b336000908152600160205260408120548211156107fc5760405162461bcd60e51b81526004016107049061175c565b336000908152600160205260409020546108169083611246565b336000908152600160205260409020556003546108339083611246565b60035560405133907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5906108689085906118a8565b60405180910390a25060015b919050565b6000546001600160a01b031633146108a35760405162461bcd60e51b8152600401610704906116c1565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600260209081526000928352604080842090915290825290205481565b6001600160a01b031660009081526001602052604090205490565b6007602052600090815260409020805460018201546002909201549091906001600160801b0381169067ffffffffffffffff600160801b8204811691600160c01b90041685565b6000546001600160a01b031633146109705760405162461bcd60e51b8152600401610704906116c1565b6008805460ff19169055565b6001600160a01b0381166000908152600760205260408120600201546109ab906001600160801b03164261194f565b6001600160a01b038316600090815260076020526040902060020154909150600160801b900467ffffffffffffffff1681116109f95760405162461bcd60e51b815260040161070490611788565b6001600160a01b038216600090815260076020526040812060020154610a3090600160801b900467ffffffffffffffff1683611910565b6001600160a01b038416600090815260076020526040812060020154919250908290610a7590600160c01b900467ffffffffffffffff16670de0b6b3a7640000611930565b610a7f9190611930565b6001600160a01b0385166000908152600760205260409020549091508110610ac2576001600160a01b038416600090815260076020526040812060010155610b03565b6001600160a01b038416600090815260076020526040902054610ae690829061194f565b6001600160a01b0385166000908152600760205260409020600101555b50505050565b6000546001600160a01b031690565b60085460ff1681565b600c5481565b6000546001600160a01b03163314610b515760405162461bcd60e51b8152600401610704906116c1565b6008805460ff19166001179055565b600680546105e090611966565b60096020526000908152604090205460ff1681565b636032919042118015610b98575063603c2e4442105b610bb45760405162461bcd60e51b8152600401610704906116ee565b3466b1a2bc2ec50000811015610bdc5760405162461bcd60e51b815260040161070490611803565b6801158e460913d00000811115610c055760405162461bcd60e51b815260040161070490611653565b6000610c1382613a98611930565b90506a06342fd08f00f637800000600c541115610c425760405162461bcd60e51b815260040161070490611871565b80600c6000828254610c5491906118f8565b9091555050600b546001600160a01b0316600090815260016020526040902054610c7e9082611246565b600b546001600160a01b0316600090815260016020526040808220929092553381522054610cac9082611288565b3360009081526001602052604080822092909255600b5491516001600160a01b03909216916108fc85150291859190818181858888f19350505050610cf057600080fd5b600b5460405133916001600160a01b0316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d2f9085906118a8565b60405180910390a35050565b6000546001600160a01b03163314610d655760405162461bcd60e51b8152600401610704906116c1565b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020526000908152604090205481565b6000610ddc611058565b610df85760405162461bcd60e51b8152600401610704906117bf565b336000908152600760209081526040808320600190810154925290912054610e20919061194f565b821115610e2c57600080fd5b610e3683836112b7565b9392505050565b6000546001600160a01b03163314610e675760405162461bcd60e51b8152600401610704906116c1565b63603c2e444211610e7757600080fd5b600b546001600160a01b031660009081526001602052604081208054919055600354610ea39082611246565b600355600b546040516001600160a01b03909116907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca590610ee59084906118a8565b60405180910390a250565b613a9881565b6001600160a01b031660009081526007602052604090206001015490565b3360008181526002602090815260408083206001600160a01b038816808552925280832086905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f6d9087906118a8565b60405180910390a3604051638f4ffcb160e01b815284906001600160a01b03821690638f4ffcb190610fa99033908890309089906004016115f8565b602060405180830381600087803b158015610fc357600080fd5b505af1158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611561565b61100457600080fd5b506001949350505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6a06342fd08f00f63780000081565b600b546001600160a01b031681565b600854600090339060ff161515600114801561109257506001600160a01b03811660009081526009602052604090205460ff161515600114155b156110e3576001600160a01b0381166000908152600a60205260409020544314156110c15760009150506106d7565b6001600160a01b03166000908152600a602052604090204390555060016106d7565b60019150506106d7565b60006001600160a01b0383166111155760405162461bcd60e51b81526004016107049061183a565b6001600160a01b03841660009081526001602052604090205482111561114d5760405162461bcd60e51b81526004016107049061175c565b6001600160a01b03841660009081526002602090815260408083203384529091529020548211156111905760405162461bcd60e51b81526004016107049061168a565b6001600160a01b0384166000908152600160205260409020546111b39083611246565b6001600160a01b0380861660009081526001602052604080822093909355908516815220546111e29083611288565b6001600160a01b0380851660008181526001602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112349086906118a8565b60405180910390a35060019392505050565b6000610e3683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113a3565b60008061129583856118f8565b905083811015610e365760405162461bcd60e51b815260040161070490611725565b60006001600160a01b0383166112df5760405162461bcd60e51b81526004016107049061183a565b3360009081526001602052604090205482111561130e5760405162461bcd60e51b81526004016107049061175c565b336000908152600160205260409020546113289083611246565b33600090815260016020526040808220929092556001600160a01b038516815220546113549083611288565b6001600160a01b0384166000818152600160205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106ba9086906118a8565b600081848411156113c75760405162461bcd60e51b81526004016107049190611640565b5060006113d4848661194f565b95945050505050565b80356001600160a01b038116811461087457600080fd5b600060208284031215611405578081fd5b610e36826113dd565b60008060408385031215611420578081fd5b611429836113dd565b9150611437602084016113dd565b90509250929050565b600080600060608486031215611454578081fd5b61145d846113dd565b925061146b602085016113dd565b9150604084013590509250925092565b6000806040838503121561148d578182fd5b611496836113dd565b946020939093013593505050565b6000806000606084860312156114b8578283fd5b6114c1846113dd565b92506020808501359250604085013567ffffffffffffffff808211156114e5578384fd5b818701915087601f8301126114f8578384fd5b81358181111561150a5761150a6119b7565b604051601f8201601f191681018501838111828210171561152d5761152d6119b7565b60405281815283820185018a1015611543578586fd5b81858501868301378585838301015280955050505050509250925092565b600060208284031215611572578081fd5b81518015158114610e36578182fd5b600060208284031215611592578081fd5b5035919050565b60008151808452815b818110156115be576020818501810151868301820152016115a2565b818111156115cf5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252602082018590528316604082015260806060820181905260009061162b90830184611599565b9695505050505050565b901515815260200190565b600060208252610e366020830184611599565b60208082526018908201527f4d6178696d756d20616d6f756e74206973203230206574680000000000000000604082015260600190565b6020808252601e908201527f596f75206e65656420746f20696e63726561736520616c6c6f77616e63650000604082015260600190565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b6020808252601e908201527f436f6e7472616374206973206e6f742073656c6c696e6720746f6b656e730000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601290820152714e6f7420656e6f7567682062616c616e636560701b604082015260600190565b6020808252601c908201527f556e6c6f636b20706f696e74206e6f7420726561636865642079657400000000604082015260600190565b60208082526024908201527f5472616e736665727320617265206c696d6974656420746f20312070657220626040820152636c6f636b60e01b606082015260800190565b6020808252601a908201527f4d696e696d756d20616d6f756e7420697320302e303520657468000000000000604082015260600190565b60208082526019908201527f557365206275726e2066756e6374696f6e20696e737465616400000000000000604082015260600190565b6020808252601e908201527f54686174207175616e74697479206973206e6f7420617661696c61626c650000604082015260600190565b90815260200190565b94855260208501939093526001600160801b0391909116604084015267ffffffffffffffff908116606084015216608082015260a00190565b60ff91909116815260200190565b6000821982111561190b5761190b6119a1565b500190565b60008261192b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561194a5761194a6119a1565b500290565b600082821015611961576119616119a1565b500390565b60028104600182168061197a57607f821691505b6020821081141561199b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dd947106799feaceea59aed3ae5ee7e8531996e244d9846141e7975a7d9bdeb564736f6c63430008000033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef

Deployed ByteCode

0x6080604052600436106101f95760003560e01c8063893d20e81161010d578063a7411c92116100a0578063c40868931161006f578063c408689314610549578063cae9ca5114610569578063dd62ed3e14610589578063df878f0b146105a9578063edf4d847146105be576101f9565b8063a7411c92146104df578063a9059cbb146104ff578063b52a58511461051f578063bdb97e8914610534576101f9565b806395d89b41116100dc57806395d89b4114610482578063a4b99ea814610497578063a6f2ae3a146104b7578063a6f9dae1146104bf576101f9565b8063893d20e8146104215780638b811719146104435780638e762ff914610458578063930d85e31461046d576101f9565b806337150140116101905780635c6581651161015f5780635c6581651461037b57806370a082311461039b5780637f76b223146103bb57806382870e30146103ec57806387b0be4814610401576101f9565b806337150140146103115780633eaaf86b1461032657806342966c681461033b5780634412d5521461035b576101f9565b80632042e5c2116101cc5780632042e5c21461028d57806323b872dd146102af57806327e235e3146102cf578063313ce567146102ef576101f9565b806306fdde03146101fe578063095ea7b31461022957806313ddb69a1461025657806318160ddd14610278575b600080fd5b34801561020a57600080fd5b506102136105d3565b6040516102209190611640565b60405180910390f35b34801561023557600080fd5b5061024961024436600461147b565b610661565b6040516102209190611635565b34801561026257600080fd5b5061026b6106cb565b60405161022091906118a8565b34801561028457600080fd5b5061026b6106d3565b34801561029957600080fd5b506102ad6102a83660046113f4565b6106da565b005b3480156102bb57600080fd5b506102496102ca366004611440565b61072e565b3480156102db57600080fd5b5061026b6102ea3660046113f4565b6107a4565b3480156102fb57600080fd5b506103046107b6565b60405161022091906118ea565b34801561031d57600080fd5b5061026b6107bf565b34801561033257600080fd5b5061026b6107c7565b34801561034757600080fd5b50610249610356366004611581565b6107cd565b34801561036757600080fd5b506102ad6103763660046113f4565b610879565b34801561038757600080fd5b5061026b61039636600461140e565b6108c7565b3480156103a757600080fd5b5061026b6103b63660046113f4565b6108e4565b3480156103c757600080fd5b506103db6103d63660046113f4565b6108ff565b6040516102209594939291906118b1565b3480156103f857600080fd5b506102ad610946565b34801561040d57600080fd5b506102ad61041c3660046113f4565b61097c565b34801561042d57600080fd5b50610436610b09565b60405161022091906115e4565b34801561044f57600080fd5b50610249610b18565b34801561046457600080fd5b5061026b610b21565b34801561047957600080fd5b506102ad610b27565b34801561048e57600080fd5b50610213610b60565b3480156104a357600080fd5b506102496104b23660046113f4565b610b6d565b6102ad610b82565b3480156104cb57600080fd5b506102ad6104da3660046113f4565b610d3b565b3480156104eb57600080fd5b5061026b6104fa3660046113f4565b610dc0565b34801561050b57600080fd5b5061024961051a36600461147b565b610dd2565b34801561052b57600080fd5b506102ad610e3d565b34801561054057600080fd5b5061026b610ef0565b34801561055557600080fd5b5061026b6105643660046113f4565b610ef6565b34801561057557600080fd5b506102496105843660046114a4565b610f14565b34801561059557600080fd5b5061026b6105a436600461140e565b61100f565b3480156105b557600080fd5b5061026b61103a565b3480156105ca57600080fd5b50610436611049565b600480546105e090611966565b80601f016020809104026020016040519081016040528092919081815260200182805461060c90611966565b80156106595780601f1061062e57610100808354040283529160200191610659565b820191906000526020600020905b81548152906001019060200180831161063c57829003601f168201915b505050505081565b3360008181526002602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106ba9086906118a8565b60405180910390a350600192915050565b636032919081565b6003545b90565b6000546001600160a01b0316331461070d5760405162461bcd60e51b8152600401610704906116c1565b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000610738611058565b6107545760405162461bcd60e51b8152600401610704906117bf565b6001600160a01b0384166000908152600760209081526040808320600190810154925290912054610785919061194f565b82111561079157600080fd5b61079c8484846110ed565b949350505050565b60016020526000908152604090205481565b60055460ff1681565b63603c2e4481565b60035481565b336000908152600160205260408120548211156107fc5760405162461bcd60e51b81526004016107049061175c565b336000908152600160205260409020546108169083611246565b336000908152600160205260409020556003546108339083611246565b60035560405133907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5906108689085906118a8565b60405180910390a25060015b919050565b6000546001600160a01b031633146108a35760405162461bcd60e51b8152600401610704906116c1565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b600260209081526000928352604080842090915290825290205481565b6001600160a01b031660009081526001602052604090205490565b6007602052600090815260409020805460018201546002909201549091906001600160801b0381169067ffffffffffffffff600160801b8204811691600160c01b90041685565b6000546001600160a01b031633146109705760405162461bcd60e51b8152600401610704906116c1565b6008805460ff19169055565b6001600160a01b0381166000908152600760205260408120600201546109ab906001600160801b03164261194f565b6001600160a01b038316600090815260076020526040902060020154909150600160801b900467ffffffffffffffff1681116109f95760405162461bcd60e51b815260040161070490611788565b6001600160a01b038216600090815260076020526040812060020154610a3090600160801b900467ffffffffffffffff1683611910565b6001600160a01b038416600090815260076020526040812060020154919250908290610a7590600160c01b900467ffffffffffffffff16670de0b6b3a7640000611930565b610a7f9190611930565b6001600160a01b0385166000908152600760205260409020549091508110610ac2576001600160a01b038416600090815260076020526040812060010155610b03565b6001600160a01b038416600090815260076020526040902054610ae690829061194f565b6001600160a01b0385166000908152600760205260409020600101555b50505050565b6000546001600160a01b031690565b60085460ff1681565b600c5481565b6000546001600160a01b03163314610b515760405162461bcd60e51b8152600401610704906116c1565b6008805460ff19166001179055565b600680546105e090611966565b60096020526000908152604090205460ff1681565b636032919042118015610b98575063603c2e4442105b610bb45760405162461bcd60e51b8152600401610704906116ee565b3466b1a2bc2ec50000811015610bdc5760405162461bcd60e51b815260040161070490611803565b6801158e460913d00000811115610c055760405162461bcd60e51b815260040161070490611653565b6000610c1382613a98611930565b90506a06342fd08f00f637800000600c541115610c425760405162461bcd60e51b815260040161070490611871565b80600c6000828254610c5491906118f8565b9091555050600b546001600160a01b0316600090815260016020526040902054610c7e9082611246565b600b546001600160a01b0316600090815260016020526040808220929092553381522054610cac9082611288565b3360009081526001602052604080822092909255600b5491516001600160a01b03909216916108fc85150291859190818181858888f19350505050610cf057600080fd5b600b5460405133916001600160a01b0316907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610d2f9085906118a8565b60405180910390a35050565b6000546001600160a01b03163314610d655760405162461bcd60e51b8152600401610704906116c1565b600080546040516001600160a01b03808516939216917f342827c97908e5e2f71151c08502a66d44b6f758e3ac2f1de95f02eb95f0a73591a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600a6020526000908152604090205481565b6000610ddc611058565b610df85760405162461bcd60e51b8152600401610704906117bf565b336000908152600760209081526040808320600190810154925290912054610e20919061194f565b821115610e2c57600080fd5b610e3683836112b7565b9392505050565b6000546001600160a01b03163314610e675760405162461bcd60e51b8152600401610704906116c1565b63603c2e444211610e7757600080fd5b600b546001600160a01b031660009081526001602052604081208054919055600354610ea39082611246565b600355600b546040516001600160a01b03909116907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca590610ee59084906118a8565b60405180910390a250565b613a9881565b6001600160a01b031660009081526007602052604090206001015490565b3360008181526002602090815260408083206001600160a01b038816808552925280832086905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f6d9087906118a8565b60405180910390a3604051638f4ffcb160e01b815284906001600160a01b03821690638f4ffcb190610fa99033908890309089906004016115f8565b602060405180830381600087803b158015610fc357600080fd5b505af1158015610fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffb9190611561565b61100457600080fd5b506001949350505050565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6a06342fd08f00f63780000081565b600b546001600160a01b031681565b600854600090339060ff161515600114801561109257506001600160a01b03811660009081526009602052604090205460ff161515600114155b156110e3576001600160a01b0381166000908152600a60205260409020544314156110c15760009150506106d7565b6001600160a01b03166000908152600a602052604090204390555060016106d7565b60019150506106d7565b60006001600160a01b0383166111155760405162461bcd60e51b81526004016107049061183a565b6001600160a01b03841660009081526001602052604090205482111561114d5760405162461bcd60e51b81526004016107049061175c565b6001600160a01b03841660009081526002602090815260408083203384529091529020548211156111905760405162461bcd60e51b81526004016107049061168a565b6001600160a01b0384166000908152600160205260409020546111b39083611246565b6001600160a01b0380861660009081526001602052604080822093909355908516815220546111e29083611288565b6001600160a01b0380851660008181526001602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112349086906118a8565b60405180910390a35060019392505050565b6000610e3683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506113a3565b60008061129583856118f8565b905083811015610e365760405162461bcd60e51b815260040161070490611725565b60006001600160a01b0383166112df5760405162461bcd60e51b81526004016107049061183a565b3360009081526001602052604090205482111561130e5760405162461bcd60e51b81526004016107049061175c565b336000908152600160205260409020546113289083611246565b33600090815260016020526040808220929092556001600160a01b038516815220546113549083611288565b6001600160a01b0384166000818152600160205260409081902092909255905133907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906106ba9086906118a8565b600081848411156113c75760405162461bcd60e51b81526004016107049190611640565b5060006113d4848661194f565b95945050505050565b80356001600160a01b038116811461087457600080fd5b600060208284031215611405578081fd5b610e36826113dd565b60008060408385031215611420578081fd5b611429836113dd565b9150611437602084016113dd565b90509250929050565b600080600060608486031215611454578081fd5b61145d846113dd565b925061146b602085016113dd565b9150604084013590509250925092565b6000806040838503121561148d578182fd5b611496836113dd565b946020939093013593505050565b6000806000606084860312156114b8578283fd5b6114c1846113dd565b92506020808501359250604085013567ffffffffffffffff808211156114e5578384fd5b818701915087601f8301126114f8578384fd5b81358181111561150a5761150a6119b7565b604051601f8201601f191681018501838111828210171561152d5761152d6119b7565b60405281815283820185018a1015611543578586fd5b81858501868301378585838301015280955050505050509250925092565b600060208284031215611572578081fd5b81518015158114610e36578182fd5b600060208284031215611592578081fd5b5035919050565b60008151808452815b818110156115be576020818501810151868301820152016115a2565b818111156115cf5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b038581168252602082018590528316604082015260806060820181905260009061162b90830184611599565b9695505050505050565b901515815260200190565b600060208252610e366020830184611599565b60208082526018908201527f4d6178696d756d20616d6f756e74206973203230206574680000000000000000604082015260600190565b6020808252601e908201527f596f75206e65656420746f20696e63726561736520616c6c6f77616e63650000604082015260600190565b60208082526013908201527221b0b63632b91034b9903737ba1037bbb732b960691b604082015260600190565b6020808252601e908201527f436f6e7472616374206973206e6f742073656c6c696e6720746f6b656e730000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601290820152714e6f7420656e6f7567682062616c616e636560701b604082015260600190565b6020808252601c908201527f556e6c6f636b20706f696e74206e6f7420726561636865642079657400000000604082015260600190565b60208082526024908201527f5472616e736665727320617265206c696d6974656420746f20312070657220626040820152636c6f636b60e01b606082015260800190565b6020808252601a908201527f4d696e696d756d20616d6f756e7420697320302e303520657468000000000000604082015260600190565b60208082526019908201527f557365206275726e2066756e6374696f6e20696e737465616400000000000000604082015260600190565b6020808252601e908201527f54686174207175616e74697479206973206e6f7420617661696c61626c650000604082015260600190565b90815260200190565b94855260208501939093526001600160801b0391909116604084015267ffffffffffffffff908116606084015216608082015260a00190565b60ff91909116815260200190565b6000821982111561190b5761190b6119a1565b500190565b60008261192b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561194a5761194a6119a1565b500290565b600082821015611961576119616119a1565b500390565b60028104600182168061197a57607f821691505b6020821081141561199b57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea2646970667358221220dd947106799feaceea59aed3ae5ee7e8531996e244d9846141e7975a7d9bdeb564736f6c63430008000033