ETH Price: $2,063.72 (+5.72%)
 

Overview

ETH Balance

10 wei

Eth Value

Less Than $0.01 (@ $2,063.72/ETH)

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711152019-08-02 11:50:052406 days ago1564746605IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer82711122019-08-02 11:49:502406 days ago1564746590IN
0x310526b4...1f3b77CB1
1 wei0.000021041
Transfer Ownersh...71108232019-01-22 21:57:502597 days ago1548194270IN
0x310526b4...1f3b77CB1
0 ETH0.000091283

Latest 2 internal transactions

Advanced mode:
Parent Transaction Hash Method Block
From
To
-78960032019-06-05 0:21:472464 days ago1559694107
0x310526b4...1f3b77CB1
1 ETH
-78960032019-06-05 0:21:472464 days ago1559694107
0x310526b4...1f3b77CB1
1 ETH
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GladiatorBattleSpectators

Compiler Version
v0.4.25+commit.59dbf8f1

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2019-01-22
*/

pragma solidity 0.4.25;

library SafeMath256 {

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

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

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

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

    function pow(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        if (b == 0) return 1;

        uint256 c = a ** b;
        assert(c / (a ** (b - 1)) == a);
        return c;
    }
}

contract Ownable {
    address public owner;

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

    function _validateAddress(address _addr) internal pure {
        require(_addr != address(0), "invalid address");
    }

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "not a contract owner");
        _;
    }

    function transferOwnership(address newOwner) public onlyOwner {
        _validateAddress(newOwner);
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }

}

contract Pausable is Ownable {
    event Pause();
    event Unpause();

    bool public paused = false;

    modifier whenNotPaused() {
        require(!paused, "contract is paused");
        _;
    }

    modifier whenPaused() {
        require(paused, "contract is not paused");
        _;
    }

    function pause() public onlyOwner whenNotPaused {
        paused = true;
        emit Pause();
    }

    function unpause() public onlyOwner whenPaused {
        paused = false;
        emit Unpause();
    }
}

contract Controllable is Ownable {
    mapping(address => bool) controllers;

    modifier onlyController {
        require(_isController(msg.sender), "no controller rights");
        _;
    }

    function _isController(address _controller) internal view returns (bool) {
        return controllers[_controller];
    }

    function _setControllers(address[] _controllers) internal {
        for (uint256 i = 0; i < _controllers.length; i++) {
            _validateAddress(_controllers[i]);
            controllers[_controllers[i]] = true;
        }
    }
}

contract Upgradable is Controllable {
    address[] internalDependencies;
    address[] externalDependencies;

    function getInternalDependencies() public view returns(address[]) {
        return internalDependencies;
    }

    function getExternalDependencies() public view returns(address[]) {
        return externalDependencies;
    }

    function setInternalDependencies(address[] _newDependencies) public onlyOwner {
        for (uint256 i = 0; i < _newDependencies.length; i++) {
            _validateAddress(_newDependencies[i]);
        }
        internalDependencies = _newDependencies;
    }

    function setExternalDependencies(address[] _newDependencies) public onlyOwner {
        externalDependencies = _newDependencies;
        _setControllers(_newDependencies);
    }
}

contract Gold {
    function remoteTransfer(address _to, uint256 _value) external;
}

contract GladiatorBattleStorage {
    function challengesAmount() external view returns (uint256);
    function battleOccurred(uint256) external view returns (bool);
    function challenges(uint256) external view returns (bool, uint256, uint256);
    function battleBlockNumber(uint256) external view returns (uint256);
    function creator(uint256) external view returns (address, uint256);
    function opponent(uint256) external view returns (address, uint256);
    function winner(uint256) external view returns (address, uint256);
}

contract GladiatorBattleSpectatorsStorage {
    function challengeBetsValue(uint256, bool) external view returns (uint256);
    function challengeBalance(uint256) external view returns (uint256);
    function challengeBetsAmount(uint256, bool) external view returns (uint256);
    function betsAmount() external view returns (uint256);
    function allBets(uint256) external view returns (address, uint256, bool, uint256, bool);
    function payOut(address, bool, uint256) external;
    function setChallengeBalance(uint256, uint256) external;
    function setChallengeBetsAmount(uint256, bool, uint256) external;
    function setChallengeBetsValue(uint256, bool, uint256) external;
    function addBet(address, uint256, bool, uint256) external returns (uint256);
    function deactivateBet(uint256) external;
    function addChallengeBet(uint256, uint256) external;
    function removeChallengeBet(uint256, uint256) external;
    function addUserChallenge(address, uint256, uint256) external;
    function removeUserChallenge(address, uint256) external;
    function userChallengeBetId(address, uint256) external view returns (uint256);
    function challengeWinningBetsAmount(uint256) external view returns (uint256);
    function setChallengeWinningBetsAmount(uint256, uint256) external;
    function getUserBet(address, uint256) external view returns (uint256, bool, uint256, bool);
}

contract GladiatorBattleSpectators is Upgradable {
    using SafeMath256 for uint256;

    Gold goldTokens;
    GladiatorBattleSpectatorsStorage _storage_;
    GladiatorBattleStorage battleStorage;

    uint256 constant MULTIPLIER = 10**6; // for more accurate calculations

    function _safeSub(uint256 a, uint256 b) internal pure returns (uint256) {
        return b > a ? 0 : a.sub(b);
    }

    function _validateChallengeId(uint256 _challengeId) internal view {
        require(
            _challengeId > 0 &&
            _challengeId < battleStorage.challengesAmount(),
            "wrong challenge id"
        );
    }

    function _validateBetId(uint256 _betId) internal view {
        require(
            _betId > 0 &&
            _betId < _storage_.betsAmount(),
            "wrong bet id"
        );
        ( , , , , bool _active) = _storage_.allBets(_betId);
        require(_active, "the bet is not active");
    }

    function _getChallengeCurrency(
        uint256 _challengeId
    ) internal view returns (bool isGold) {
        (isGold, , ) = battleStorage.challenges(_challengeId);
    }

    function _getChallengeBetsAmount(
        uint256 _challengeId,
        bool _willCreatorWin
    ) internal view returns (uint256) {
        return _storage_.challengeBetsAmount(_challengeId, _willCreatorWin);
    }

    function _getChallengeBetsValue(
        uint256 _challengeId,
        bool _willCreatorWin
    ) internal view returns (uint256) {
        return _storage_.challengeBetsValue(_challengeId, _willCreatorWin);
    }

    function _getChallengeBalance(
        uint256 _challengeId
    ) internal view returns (uint256) {
        return _storage_.challengeBalance(_challengeId);
    }

    function _setChallengeBetsAmount(
        uint256 _challengeId,
        bool _willCreatorWin,
        uint256 _value
    ) internal {
        _storage_.setChallengeBetsAmount(_challengeId, _willCreatorWin, _value);
    }

    function _setChallengeBetsValue(
        uint256 _challengeId,
        bool _willCreatorWin,
        uint256 _value
    ) internal {
        _storage_.setChallengeBetsValue(_challengeId, _willCreatorWin, _value);
    }

    function _setChallengeBalance(
        uint256 _challengeId,
        uint256 _value
    ) internal {
        _storage_.setChallengeBalance(_challengeId, _value);
    }

    function _updateBetsValues(
        uint256 _challengeId,
        bool _willCreatorWin,
        uint256 _value,
        bool _increase // or decrease
    ) internal {
        uint256 _betsAmount = _getChallengeBetsAmount(_challengeId, _willCreatorWin);
        uint256 _betsValue = _getChallengeBetsValue(_challengeId, _willCreatorWin);
        uint256 _betsTotalValue = _getChallengeBalance(_challengeId);

        if (_increase) {
            _betsAmount = _betsAmount.add(1);
            _betsValue = _betsValue.add(_value);
            _betsTotalValue = _betsTotalValue.add(_value);
        } else {
            _betsAmount = _betsAmount.sub(1);
            _betsValue = _betsValue.sub(_value);
            _betsTotalValue = _betsTotalValue.sub(_value);
        }

        _setChallengeBetsAmount(_challengeId, _willCreatorWin, _betsAmount);
        _setChallengeBetsValue(_challengeId, _willCreatorWin, _betsValue);
        _setChallengeBalance(_challengeId, _betsTotalValue);
    }

    function _checkThatOpponentIsSelected(
        uint256 _challengeId
    ) internal view returns (bool) {
        ( , uint256 _dragonId) = battleStorage.opponent(_challengeId);
        require(_dragonId != 0, "the opponent is not selected");
    }

    function _hasBattleOccurred(uint256 _challengeId) internal view returns (bool) {
        return battleStorage.battleOccurred(_challengeId);
    }

    function _checkThatBattleHasNotOccurred(
        uint256 _challengeId
    ) internal view {
        require(!_hasBattleOccurred(_challengeId), "the battle has already occurred");
    }

    function _checkThatBattleHasOccurred(
        uint256 _challengeId
    ) internal view {
        require(_hasBattleOccurred(_challengeId), "the battle has not yet occurred");
    }

    function _checkThatWeDoNotKnowTheResult(
        uint256 _challengeId
    ) internal view {
        uint256 _blockNumber = battleStorage.battleBlockNumber(_challengeId);
        require(
            _blockNumber > block.number || _blockNumber < _safeSub(block.number, 256),
            "we already know the result"
        );
    }

    function _isWinningBet(
        uint256 _challengeId,
        bool _willCreatorWin
    ) internal view returns (bool) {
        (address _winner, ) = battleStorage.winner(_challengeId);
        (address _creator, ) = battleStorage.creator(_challengeId);
        bool _isCreatorWinner = _winner == _creator;
        return _isCreatorWinner == _willCreatorWin;
    }

    function _checkWinner(
        uint256 _challengeId,
        bool _willCreatorWin
    ) internal view {
        require(_isWinningBet(_challengeId, _willCreatorWin), "you did not win the bet");
    }

    function _checkThatBetIsActive(bool _active) internal pure {
        require(_active, "bet is not active");
    }

    function _payForBet(
        uint256 _value,
        bool _isGold,
        uint256 _bet
    ) internal {
        if (_isGold) {
            require(_value == 0, "specify isGold as false to send eth");
            goldTokens.remoteTransfer(address(_storage_), _bet);
        } else {
            require(_value == _bet, "wrong eth amount");
            address(_storage_).transfer(_value);
        }
    }

    function() external payable {}

    function _create(
        address _user,
        uint256 _challengeId,
        bool _willCreatorWin,
        uint256 _value
    ) internal {
        uint256 _betId = _storage_.addBet(_user, _challengeId, _willCreatorWin, _value);
        _storage_.addChallengeBet(_challengeId, _betId);
        _storage_.addUserChallenge(_user, _challengeId, _betId);
    }

    function placeBet(
        address _user,
        uint256 _challengeId,
        bool _willCreatorWin,
        uint256 _value,
        uint256 _ethValue
    ) external onlyController returns (bool isGold) {
        _validateChallengeId(_challengeId);
        _checkThatOpponentIsSelected(_challengeId);
        _checkThatBattleHasNotOccurred(_challengeId);
        _checkThatWeDoNotKnowTheResult(_challengeId);
        require(_value > 0, "a bet must be more than 0");

        isGold = _getChallengeCurrency(_challengeId);
        _payForBet(_ethValue, isGold, _value);

        uint256 _existingBetId = _storage_.userChallengeBetId(_user, _challengeId);
        require(_existingBetId == 0, "you have already placed a bet");

        _create(_user, _challengeId, _willCreatorWin, _value);

        _updateBetsValues(_challengeId, _willCreatorWin, _value, true);
    }

    function _remove(
        address _user,
        uint256 _challengeId,
        uint256 _betId
    ) internal {
        _storage_.deactivateBet(_betId);
        _storage_.removeChallengeBet(_challengeId, _betId);
        _storage_.removeUserChallenge(_user, _challengeId);
    }

    function removeBet(
        address _user,
        uint256 _challengeId
    ) external onlyController {
        _validateChallengeId(_challengeId);

        uint256 _betId = _storage_.userChallengeBetId(_user, _challengeId);
        (
            address _realUser,
            uint256 _realChallengeId,
            bool _willCreatorWin,
            uint256 _value,
            bool _active
        ) = _storage_.allBets(_betId);

        require(_realUser == _user, "not your bet");
        require(_realChallengeId == _challengeId, "wrong challenge");
        _checkThatBetIsActive(_active);

        if (_hasBattleOccurred(_challengeId)) {
            require(!_isWinningBet(_challengeId, _willCreatorWin), "request a reward instead");
            uint256 _opponentBetsAmount = _getChallengeBetsAmount(_challengeId, !_willCreatorWin);
            require(_opponentBetsAmount == 0, "your bet lost");
        } else {
            _checkThatWeDoNotKnowTheResult(_challengeId);
        }

        _remove(_user, _challengeId, _betId);

        bool _isGold = _getChallengeCurrency(_challengeId);
        _storage_.payOut(_user, _isGold, _value);

        _updateBetsValues(_challengeId, _willCreatorWin, _value, false);
    }

    function _updateWinningBetsAmount(
        uint256 _challengeId,
        bool _willCreatorWin
    ) internal returns (bool) {
        uint256 _betsAmount = _getChallengeBetsAmount(_challengeId, _willCreatorWin);
        uint256 _existingWinningBetsAmount = _storage_.challengeWinningBetsAmount(_challengeId);
        uint256 _winningBetsAmount = _existingWinningBetsAmount == 0 ? _betsAmount : _existingWinningBetsAmount;
        _winningBetsAmount = _winningBetsAmount.sub(1);
        _storage_.setChallengeWinningBetsAmount(_challengeId, _winningBetsAmount);
        return _winningBetsAmount == 0;
    }

    function requestReward(
        address _user,
        uint256 _challengeId
    ) external onlyController returns (uint256 reward, bool isGold) {
        _validateChallengeId(_challengeId);
        _checkThatBattleHasOccurred(_challengeId);
        (
            uint256 _betId,
            bool _willCreatorWin,
            uint256 _value,
            bool _active
        ) = _storage_.getUserBet(_user, _challengeId);
        _checkThatBetIsActive(_active);

        _checkWinner(_challengeId, _willCreatorWin);

        bool _isLast = _updateWinningBetsAmount(_challengeId, _willCreatorWin);

        uint256 _betsValue = _getChallengeBetsValue(_challengeId, _willCreatorWin);
        uint256 _opponentBetsValue = _getChallengeBetsValue(_challengeId, !_willCreatorWin);

        uint256 _percentage = _value.mul(MULTIPLIER).div(_betsValue);
        reward = _opponentBetsValue.mul(85).div(100).mul(_percentage).div(MULTIPLIER); // 15% to winner in the battle
        reward = reward.add(_value);

        uint256 _challengeBalance = _getChallengeBalance(_challengeId);
        require(_challengeBalance >= reward, "not enough coins, something went wrong");

        reward = _isLast ? _challengeBalance : reward; // get rid of inaccuracies of calculations

        isGold = _getChallengeCurrency(_challengeId);
        _storage_.payOut(_user, isGold, reward);

        _setChallengeBalance(_challengeId, _challengeBalance.sub(reward));
        _storage_.deactivateBet(_betId);
    }


    // UPDATE CONTRACT

    function setInternalDependencies(address[] _newDependencies) public onlyOwner {
        super.setInternalDependencies(_newDependencies);

        goldTokens = Gold(_newDependencies[0]);
        _storage_ = GladiatorBattleSpectatorsStorage(_newDependencies[1]);
        battleStorage = GladiatorBattleStorage(_newDependencies[2]);
    }
}

Contract Security Audit

Contract ABI

API
[{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_challengeId","type":"uint256"},{"name":"_willCreatorWin","type":"bool"},{"name":"_value","type":"uint256"},{"name":"_ethValue","type":"uint256"}],"name":"placeBet","outputs":[{"name":"isGold","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setExternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newDependencies","type":"address[]"}],"name":"setInternalDependencies","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getExternalDependencies","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_challengeId","type":"uint256"}],"name":"removeBet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_user","type":"address"},{"name":"_challengeId","type":"uint256"}],"name":"requestReward","outputs":[{"name":"reward","type":"uint256"},{"name":"isGold","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613492806100536000396000f300608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063519168c61461009b57806365fc12531461012057806369c0ad93146101865780638da5cb5b146101ec578063b75c4f8014610243578063e6458f6e146102af578063eb2138a51461031b578063f2fde38b14610368578063f8f5ca3a146103ab575b005b3480156100a757600080fd5b50610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291908035906020019092919080359060200190929190505050610417565b604051808215151515815260200191505060405180910390f35b34801561012c57600080fd5b50610184600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506106e7565b005b34801561019257600080fd5b506101ea600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506107ce565b005b3480156101f857600080fd5b506102016109a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561024f57600080fd5b506102586109ce565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561029b578082015181840152602081019050610280565b505050509050019250505060405180910390f35b3480156102bb57600080fd5b506102c4610a5c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103075780820151818401526020810190506102ec565b505050509050019250505060405180910390f35b34801561032757600080fd5b50610366600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610aea565b005b34801561037457600080fd5b506103a9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110d8565b005b3480156103b757600080fd5b506103f6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b60405180838152602001821515151581526020019250505060405180910390f35b60008061042333611771565b1515610497576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b6104a0866117c7565b6104a98661190d565b506104b386611a67565b6104bc86611ae8565b600084111515610534576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6120626574206d757374206265206d6f7265207468616e20300000000000000081525060200191505060405180910390fd5b61053d86611c47565b915061054a838386611d35565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636deee6fa88886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b505050506040513d602081101561063957600080fd5b810190808051906020019092919050505090506000811415156106c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f796f75206861766520616c726561647920706c6163656420612062657400000081525060200191505060405180910390fd5b6106d087878787611fc3565b6106dd8686866001612278565b5095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600390805190602001906107c1929190613399565b506107cb81612355565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61089b81612403565b8060008151811015156108aa57fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600181518110151561090357fe5b90602001906020020151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281518110151561095c57fe5b90602001906020020151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610a5257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a08575b5050505050905090565b60606003805480602002602001604051908101604052809291908181526020018280548015610ae057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a96575b5050505050905090565b600080600080600080600080610aff33611771565b1515610b73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b610b7c896117c7565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636deee6fa8b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c4157600080fd5b505af1158015610c55573d6000803e3d6000fd5b505050506040513d6020811015610c6b57600080fd5b81019080805190602001909291905050509750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e0ced0e1896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b505050506040513d60a0811015610d3957600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050965096509650965096508973ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515610e1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f7420796f757220626574000000000000000000000000000000000000000081525060200191505060405180910390fd5b8886141515610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f77726f6e67206368616c6c656e6765000000000000000000000000000000000081525060200191505060405180910390fd5b610e9f8361251f565b610ea889612597565b15610fb657610eb7898661266c565b151515610f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f7265717565737420612072657761726420696e7374656164000000000000000081525060200191505060405180910390fd5b610f37898615612865565b9150600082141515610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f796f757220626574206c6f73740000000000000000000000000000000000000081525060200191505060405180910390fd5b610fc0565b610fbf89611ae8565b5b610fcb8a8a8a612947565b610fd489611c47565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632da2dd1b8b83876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018281526020019350505050600060405180830381600087803b1580156110a757600080fd5b505af11580156110bb573d6000803e3d6000fd5b505050506110cc8986866000612278565b50505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b6111a581612b83565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080600080600061127d33611771565b15156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b6112fa8c6117c7565b6113038c612c2b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de87b07d8e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050608060405180830381600087803b1580156113c857600080fd5b505af11580156113dc573d6000803e3d6000fd5b505050506040513d60808110156113f257600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505098509850985098506114328661251f565b61143c8c89612cab565b6114468c89612d2d565b94506114528c89612ef5565b935061145f8c8915612ef5565b92506114898461147b620f42408a612fd790919063ffffffff16565b61301290919063ffffffff16565b91506114d9620f42406114cb846114bd60646114af60558a612fd790919063ffffffff16565b61301290919063ffffffff16565b612fd790919063ffffffff16565b61301290919063ffffffff16565b9a506114ee878c61302890919063ffffffff16565b9a506114f98c613046565b90508a8110151515611599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6e6f7420656e6f75676820636f696e732c20736f6d657468696e672077656e7481526020017f2077726f6e67000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b846115a4578a6115a6565b805b9a506115b18c611c47565b9950600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632da2dd1b8e8c8e6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018281526020019350505050600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050506116b88c6116b38d8461311b90919063ffffffff16565b613134565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633adfb5488a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b505050505050505050505050509250929050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000811180156118965750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce9a47206040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561185857600080fd5b505af115801561186c573d6000803e3d6000fd5b505050506040513d602081101561188257600080fd5b810190808051906020019092919050505081105b151561190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77726f6e67206368616c6c656e6765206964000000000000000000000000000081525060200191505060405180910390fd5b50565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc1d755a846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156119a057600080fd5b505af11580156119b4573d6000803e3d6000fd5b505050506040513d60408110156119ca57600080fd5b81019080805190602001909291908051906020019092919050505091505060008114151515611a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f746865206f70706f6e656e74206973206e6f742073656c65637465640000000081525060200191505060405180910390fd5b50919050565b611a7081612597565b151515611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f74686520626174746c652068617320616c7265616479206f636375727265640081525060200191505060405180910390fd5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16626f9c57836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015611b7a57600080fd5b505af1158015611b8e573d6000803e3d6000fd5b505050506040513d6020811015611ba457600080fd5b8101908080519060200190929190505050905043811180611bcf5750611bcc436101006131e9565b81105b1515611c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f776520616c7265616479206b6e6f772074686520726573756c7400000000000081525060200191505060405180910390fd5b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f1d3776836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b158015611cda57600080fd5b505af1158015611cee573d6000803e3d6000fd5b505050506040513d6060811015611d0457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505090505080915050919050565b8115611edd57600083141515611dd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f73706563696679206973476f6c642061732066616c736520746f2073656e642081526020017f657468000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab05b844600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ec057600080fd5b505af1158015611ed4573d6000803e3d6000fd5b50505050611fbe565b8083141515611f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f77726f6e672065746820616d6f756e740000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611fbc573d6000803e3d6000fd5b505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632dbc9a81868686866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828152602001945050505050602060405180830381600087803b15801561209e57600080fd5b505af11580156120b2573d6000803e3d6000fd5b505050506040513d60208110156120c857600080fd5b81019080805190602001909291905050509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f4a691185836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166372c89ff38686846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561225957600080fd5b505af115801561226d573d6000803e3d6000fd5b505050505050505050565b60008060006122878787612865565b92506122938787612ef5565b915061229e87613046565b905083156122eb576122ba60018461302890919063ffffffff16565b92506122cf858361302890919063ffffffff16565b91506122e4858261302890919063ffffffff16565b905061232c565b6122ff60018461311b90919063ffffffff16565b9250612314858361311b90919063ffffffff16565b9150612329858261311b90919063ffffffff16565b90505b612337878785613215565b6123428787846132d7565b61234c8782613134565b50505050505050565b60008090505b81518110156123ff57612384828281518110151561237557fe5b90602001906020020151612b83565b6001806000848481518110151561239757fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061235b565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b8151811015612504576124f782828151811015156124e857fe5b90602001906020020151612b83565b80806001019150506124ce565b816002908051906020019061251a929190613399565b505050565b801515612594576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f626574206973206e6f742061637469766500000000000000000000000000000081525060200191505060405180910390fd5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c73bcff9836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b505050506040513d602081101561265457600080fd5b81019080805190602001909291905050509050919050565b600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cbeae5e876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b15801561270257600080fd5b505af1158015612716573d6000803e3d6000fd5b505050506040513d604081101561272c57600080fd5b810190808051906020019092919080519060200190929190505050509250600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663510b5158876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b505050506040513d604081101561280457600080fd5b8101908080519060200190929190805190602001909291905050505091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905084151581151514935050505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639cb26d1684846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018215151515815260200192505050602060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b505050506040513d602081101561292e57600080fd5b8101908080519060200190929190505050905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633adfb548826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156129d857600080fd5b505af11580156129ec573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc1560b683836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b158015612a8957600080fd5b505af1158015612a9d573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6c98fc084846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612b6657600080fd5b505af1158015612b7a573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b612c3481612597565b1515612ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f74686520626174746c6520686173206e6f7420796574206f636375727265640081525060200191505060405180910390fd5b50565b612cb5828261266c565b1515612d29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646964206e6f742077696e207468652062657400000000000000000081525060200191505060405180910390fd5b5050565b600080600080612d3d8686612865565b9250600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369276826876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b8101908080519060200190929190505050915060008214612e1b5781612e1d565b825b9050612e3360018261311b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b91992187836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b5050505060008114935050505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d32853084846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018215151515815260200192505050602060405180830381600087803b158015612f9457600080fd5b505af1158015612fa8573d6000803e3d6000fd5b505050506040513d6020811015612fbe57600080fd5b8101908080519060200190929190505050905092915050565b6000806000841415612fec576000915061300b565b8284029050828482811515612ffd57fe5b0414151561300757fe5b8091505b5092915050565b6000818381151561301f57fe5b04905092915050565b600080828401905083811015151561303c57fe5b8091505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d45a54f836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156130d957600080fd5b505af11580156130ed573d6000803e3d6000fd5b505050506040513d602081101561310357600080fd5b81019080805190602001909291905050509050919050565b600082821115151561312957fe5b818303905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166307ff4cc883836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1580156131cd57600080fd5b505af11580156131e1573d6000803e3d6000fd5b505050505050565b600082821161320a57613205828461311b90919063ffffffff16565b61320d565b60005b905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b1454748484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180848152602001831515151581526020018281526020019350505050600060405180830381600087803b1580156132ba57600080fd5b505af11580156132ce573d6000803e3d6000fd5b50505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b58129be8484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180848152602001831515151581526020018281526020019350505050600060405180830381600087803b15801561337c57600080fd5b505af1158015613390573d6000803e3d6000fd5b50505050505050565b828054828255906000526020600020908101928215613412579160200282015b828111156134115782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906133b9565b5b50905061341f9190613423565b5090565b61346391905b8082111561345f57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613429565b5090565b905600a165627a7a72305820393151178f4ff42a99ffdb8bcbc2ffa0654618575d9846540b30022064216f710029

Deployed Bytecode

0x608060405260043610610099576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063519168c61461009b57806365fc12531461012057806369c0ad93146101865780638da5cb5b146101ec578063b75c4f8014610243578063e6458f6e146102af578063eb2138a51461031b578063f2fde38b14610368578063f8f5ca3a146103ab575b005b3480156100a757600080fd5b50610106600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035151590602001909291908035906020019092919080359060200190929190505050610417565b604051808215151515815260200191505060405180910390f35b34801561012c57600080fd5b50610184600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506106e7565b005b34801561019257600080fd5b506101ea600480360381019080803590602001908201803590602001908080602002602001604051908101604052809392919081815260200183836020028082843782019150505050505091929192905050506107ce565b005b3480156101f857600080fd5b506102016109a9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561024f57600080fd5b506102586109ce565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b8381101561029b578082015181840152602081019050610280565b505050509050019250505060405180910390f35b3480156102bb57600080fd5b506102c4610a5c565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156103075780820151818401526020810190506102ec565b505050509050019250505060405180910390f35b34801561032757600080fd5b50610366600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610aea565b005b34801561037457600080fd5b506103a9600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110d8565b005b3480156103b757600080fd5b506103f6600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611263565b60405180838152602001821515151581526020019250505060405180910390f35b60008061042333611771565b1515610497576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b6104a0866117c7565b6104a98661190d565b506104b386611a67565b6104bc86611ae8565b600084111515610534576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f6120626574206d757374206265206d6f7265207468616e20300000000000000081525060200191505060405180910390fd5b61053d86611c47565b915061054a838386611d35565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636deee6fa88886040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561060f57600080fd5b505af1158015610623573d6000803e3d6000fd5b505050506040513d602081101561063957600080fd5b810190808051906020019092919050505090506000811415156106c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f796f75206861766520616c726561647920706c6163656420612062657400000081525060200191505060405180910390fd5b6106d087878787611fc3565b6106dd8686866001612278565b5095945050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b80600390805190602001906107c1929190613399565b506107cb81612355565b50565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610892576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b61089b81612403565b8060008151811015156108aa57fe5b90602001906020020151600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600181518110151561090357fe5b90602001906020020151600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600281518110151561095c57fe5b90602001906020020151600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606002805480602002602001604051908101604052809291908181526020018280548015610a5257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a08575b5050505050905090565b60606003805480602002602001604051908101604052809291908181526020018280548015610ae057602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610a96575b5050505050905090565b600080600080600080600080610aff33611771565b1515610b73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b610b7c896117c7565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636deee6fa8b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610c4157600080fd5b505af1158015610c55573d6000803e3d6000fd5b505050506040513d6020811015610c6b57600080fd5b81019080805190602001909291905050509750600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e0ced0e1896040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b158015610d0f57600080fd5b505af1158015610d23573d6000803e3d6000fd5b505050506040513d60a0811015610d3957600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050965096509650965096508973ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515610e1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f6e6f7420796f757220626574000000000000000000000000000000000000000081525060200191505060405180910390fd5b8886141515610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f77726f6e67206368616c6c656e6765000000000000000000000000000000000081525060200191505060405180910390fd5b610e9f8361251f565b610ea889612597565b15610fb657610eb7898661266c565b151515610f2c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f7265717565737420612072657761726420696e7374656164000000000000000081525060200191505060405180910390fd5b610f37898615612865565b9150600082141515610fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f796f757220626574206c6f73740000000000000000000000000000000000000081525060200191505060405180910390fd5b610fc0565b610fbf89611ae8565b5b610fcb8a8a8a612947565b610fd489611c47565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632da2dd1b8b83876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018281526020019350505050600060405180830381600087803b1580156110a757600080fd5b505af11580156110bb573d6000803e3d6000fd5b505050506110cc8986866000612278565b50505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b6111a581612b83565b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600080600080600080600061127d33611771565b15156112f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f20636f6e74726f6c6c65722072696768747300000000000000000000000081525060200191505060405180910390fd5b6112fa8c6117c7565b6113038c612c2b565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663de87b07d8e8e6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050608060405180830381600087803b1580156113c857600080fd5b505af11580156113dc573d6000803e3d6000fd5b505050506040513d60808110156113f257600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505098509850985098506114328661251f565b61143c8c89612cab565b6114468c89612d2d565b94506114528c89612ef5565b935061145f8c8915612ef5565b92506114898461147b620f42408a612fd790919063ffffffff16565b61301290919063ffffffff16565b91506114d9620f42406114cb846114bd60646114af60558a612fd790919063ffffffff16565b61301290919063ffffffff16565b612fd790919063ffffffff16565b61301290919063ffffffff16565b9a506114ee878c61302890919063ffffffff16565b9a506114f98c613046565b90508a8110151515611599576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001807f6e6f7420656e6f75676820636f696e732c20736f6d657468696e672077656e7481526020017f2077726f6e67000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b846115a4578a6115a6565b805b9a506115b18c611c47565b9950600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632da2dd1b8e8c8e6040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001831515151581526020018281526020019350505050600060405180830381600087803b15801561168457600080fd5b505af1158015611698573d6000803e3d6000fd5b505050506116b88c6116b38d8461311b90919063ffffffff16565b613134565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633adfb5488a6040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561174957600080fd5b505af115801561175d573d6000803e3d6000fd5b505050505050505050505050509250929050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000811180156118965750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ce9a47206040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561185857600080fd5b505af115801561186c573d6000803e3d6000fd5b505050506040513d602081101561188257600080fd5b810190808051906020019092919050505081105b151561190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f77726f6e67206368616c6c656e6765206964000000000000000000000000000081525060200191505060405180910390fd5b50565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc1d755a846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156119a057600080fd5b505af11580156119b4573d6000803e3d6000fd5b505050506040513d60408110156119ca57600080fd5b81019080805190602001909291908051906020019092919050505091505060008114151515611a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f746865206f70706f6e656e74206973206e6f742073656c65637465640000000081525060200191505060405180910390fd5b50919050565b611a7081612597565b151515611ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f74686520626174746c652068617320616c7265616479206f636375727265640081525060200191505060405180910390fd5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16626f9c57836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015611b7a57600080fd5b505af1158015611b8e573d6000803e3d6000fd5b505050506040513d6020811015611ba457600080fd5b8101908080519060200190929190505050905043811180611bcf5750611bcc436101006131e9565b81105b1515611c43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f776520616c7265616479206b6e6f772074686520726573756c7400000000000081525060200191505060405180910390fd5b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638f1d3776836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b158015611cda57600080fd5b505af1158015611cee573d6000803e3d6000fd5b505050506040513d6060811015611d0457600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505090505080915050919050565b8115611edd57600083141515611dd9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001807f73706563696679206973476f6c642061732066616c736520746f2073656e642081526020017f657468000000000000000000000000000000000000000000000000000000000081525060400191505060405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab05b844600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ec057600080fd5b505af1158015611ed4573d6000803e3d6000fd5b50505050611fbe565b8083141515611f54576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f77726f6e672065746820616d6f756e740000000000000000000000000000000081525060200191505060405180910390fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015611fbc573d6000803e3d6000fd5b505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632dbc9a81868686866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183151515158152602001828152602001945050505050602060405180830381600087803b15801561209e57600080fd5b505af11580156120b2573d6000803e3d6000fd5b505050506040513d60208110156120c857600080fd5b81019080805190602001909291905050509050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f4a691185836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b15801561217457600080fd5b505af1158015612188573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166372c89ff38686846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019350505050600060405180830381600087803b15801561225957600080fd5b505af115801561226d573d6000803e3d6000fd5b505050505050505050565b60008060006122878787612865565b92506122938787612ef5565b915061229e87613046565b905083156122eb576122ba60018461302890919063ffffffff16565b92506122cf858361302890919063ffffffff16565b91506122e4858261302890919063ffffffff16565b905061232c565b6122ff60018461311b90919063ffffffff16565b9250612314858361311b90919063ffffffff16565b9150612329858261311b90919063ffffffff16565b90505b612337878785613215565b6123428787846132d7565b61234c8782613134565b50505050505050565b60008090505b81518110156123ff57612384828281518110151561237557fe5b90602001906020020151612b83565b6001806000848481518110151561239757fe5b9060200190602002015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808060010191505061235b565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156124c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f6e6f74206120636f6e7472616374206f776e657200000000000000000000000081525060200191505060405180910390fd5b600090505b8151811015612504576124f782828151811015156124e857fe5b90602001906020020151612b83565b80806001019150506124ce565b816002908051906020019061251a929190613399565b505050565b801515612594576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f626574206973206e6f742061637469766500000000000000000000000000000081525060200191505060405180910390fd5b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c73bcff9836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561262a57600080fd5b505af115801561263e573d6000803e3d6000fd5b505050506040513d602081101561265457600080fd5b81019080805190602001909291905050509050919050565b600080600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cbeae5e876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b15801561270257600080fd5b505af1158015612716573d6000803e3d6000fd5b505050506040513d604081101561272c57600080fd5b810190808051906020019092919080519060200190929190505050509250600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663510b5158876040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b1580156127da57600080fd5b505af11580156127ee573d6000803e3d6000fd5b505050506040513d604081101561280457600080fd5b8101908080519060200190929190805190602001909291905050505091508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614905084151581151514935050505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639cb26d1684846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018215151515815260200192505050602060405180830381600087803b15801561290457600080fd5b505af1158015612918573d6000803e3d6000fd5b505050506040513d602081101561292e57600080fd5b8101908080519060200190929190505050905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633adfb548826040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b1580156129d857600080fd5b505af11580156129ec573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bc1560b683836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b158015612a8957600080fd5b505af1158015612a9d573d6000803e3d6000fd5b50505050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6c98fc084846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015612b6657600080fd5b505af1158015612b7a573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612c28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f696e76616c69642061646472657373000000000000000000000000000000000081525060200191505060405180910390fd5b50565b612c3481612597565b1515612ca8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f74686520626174746c6520686173206e6f7420796574206f636375727265640081525060200191505060405180910390fd5b50565b612cb5828261266c565b1515612d29576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f796f7520646964206e6f742077696e207468652062657400000000000000000081525060200191505060405180910390fd5b5050565b600080600080612d3d8686612865565b9250600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166369276826876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015612dd057600080fd5b505af1158015612de4573d6000803e3d6000fd5b505050506040513d6020811015612dfa57600080fd5b8101908080519060200190929190505050915060008214612e1b5781612e1d565b825b9050612e3360018261311b90919063ffffffff16565b9050600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637b91992187836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b158015612ece57600080fd5b505af1158015612ee2573d6000803e3d6000fd5b5050505060008114935050505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631d32853084846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018215151515815260200192505050602060405180830381600087803b158015612f9457600080fd5b505af1158015612fa8573d6000803e3d6000fd5b505050506040513d6020811015612fbe57600080fd5b8101908080519060200190929190505050905092915050565b6000806000841415612fec576000915061300b565b8284029050828482811515612ffd57fe5b0414151561300757fe5b8091505b5092915050565b6000818381151561301f57fe5b04905092915050565b600080828401905083811015151561303c57fe5b8091505092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633d45a54f836040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b1580156130d957600080fd5b505af11580156130ed573d6000803e3d6000fd5b505050506040513d602081101561310357600080fd5b81019080805190602001909291905050509050919050565b600082821115151561312957fe5b818303905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166307ff4cc883836040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083815260200182815260200192505050600060405180830381600087803b1580156131cd57600080fd5b505af11580156131e1573d6000803e3d6000fd5b505050505050565b600082821161320a57613205828461311b90919063ffffffff16565b61320d565b60005b905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635b1454748484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180848152602001831515151581526020018281526020019350505050600060405180830381600087803b1580156132ba57600080fd5b505af11580156132ce573d6000803e3d6000fd5b50505050505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b58129be8484846040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180848152602001831515151581526020018281526020019350505050600060405180830381600087803b15801561337c57600080fd5b505af1158015613390573d6000803e3d6000fd5b50505050505050565b828054828255906000526020600020908101928215613412579160200282015b828111156134115782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906133b9565b5b50905061341f9190613423565b5090565b61346391905b8082111561345f57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101613429565b5090565b905600a165627a7a72305820393151178f4ff42a99ffdb8bcbc2ffa0654618575d9846540b30022064216f710029

Swarm Source

bzzr://393151178f4ff42a99ffdb8bcbc2ffa0654618575d9846540b30022064216f71

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.