ETH Price: $2,326.09 (-1.49%)

Contract

0xaA4f62da5BC621BbD2B59A9aF598Bc2dA71e6414
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Lite Sig107357202020-08-26 11:11:152029 days ago1598440275IN
0xaA4f62da...dA71e6414
0 ETH0.0836548666
Create Lite Sig107316892020-08-25 20:11:242030 days ago1598386284IN
0xaA4f62da...dA71e6414
0 ETH0.0836540766
Create Lite Sig107311262020-08-25 18:10:232030 days ago1598379023IN
0xaA4f62da...dA71e6414
0 ETH0.21192365167.2
Create Lite Sig107307692020-08-25 16:53:392030 days ago1598374419IN
0xaA4f62da...dA71e6414
0 ETH0.16730973132
Create Lite Sig107303342020-08-25 15:16:332030 days ago1598368593IN
0xaA4f62da...dA71e6414
0 ETH0.15615575123.2
Create Lite Sig106840762020-08-18 12:49:262037 days ago1597754966IN
0xaA4f62da...dA71e6414
0 ETH0.17846371140.8
Create Lite Sig106772202020-08-17 11:12:052038 days ago1597662725IN
0xaA4f62da...dA71e6414
0 ETH0.13705455108.13
Create Lite Sig106578982020-08-14 11:41:442041 days ago1597405304IN
0xaA4f62da...dA71e6414
0 ETH0.26351283207.9
Create Lite Sig106401682020-08-11 18:11:362044 days ago1597169496IN
0xaA4f62da...dA71e6414
0 ETH0.1088425985.87281934
Create Lite Sig106159492020-08-08 0:28:412048 days ago1596846521IN
0xaA4f62da...dA71e6414
0 ETH0.0627411549.5
Create Lite Sig106101592020-08-07 3:03:012048 days ago1596769381IN
0xaA4f62da...dA71e6414
0 ETH0.0641353950.6
Create Lite Sig106018382020-08-05 20:12:372050 days ago1596658357IN
0xaA4f62da...dA71e6414
0 ETH0.0444760835.09
Create Lite Sig105960312020-08-04 22:42:332051 days ago1596580953IN
0xaA4f62da...dA71e6414
0 ETH0.0446159235.1999979
Create Lite Sig105424452020-07-27 15:48:152059 days ago1595864895IN
0xaA4f62da...dA71e6414
0 ETH0.18125221143.0000016
Create Lite Sig105287822020-07-25 13:11:412061 days ago1595682701IN
0xaA4f62da...dA71e6414
0 ETH0.0920203572.6
Create Lite Sig105184432020-07-23 22:38:432063 days ago1595543923IN
0xaA4f62da...dA71e6414
0 ETH0.0557699144
Create Lite Sig105157662020-07-23 12:47:182063 days ago1595508438IN
0xaA4f62da...dA71e6414
0 ETH0.0878376169.3
Create Lite Sig105102692020-07-22 16:32:072064 days ago1595435527IN
0xaA4f62da...dA71e6414
0 ETH0.116949592.268
Create Lite Sig104847902020-07-18 17:29:062068 days ago1595093346IN
0xaA4f62da...dA71e6414
0 ETH0.0962161275.911
Create Lite Sig104537642020-07-13 21:56:012073 days ago1594677361IN
0xaA4f62da...dA71e6414
0 ETH0.0376443329.7
Create Lite Sig104521162020-07-13 15:49:262073 days ago1594655366IN
0xaA4f62da...dA71e6414
0 ETH0.1059628383.6
Create Lite Sig104470572020-07-12 21:10:052074 days ago1594588205IN
0xaA4f62da...dA71e6414
0 ETH0.0278849522
Create Lite Sig104343392020-07-10 22:17:412076 days ago1594419461IN
0xaA4f62da...dA71e6414
0 ETH0.0250964619.8
Create Lite Sig104219412020-07-08 23:50:462078 days ago1594252246IN
0xaA4f62da...dA71e6414
0 ETH0.0376446929.7
Create Lite Sig104207252020-07-08 19:22:472078 days ago1594236167IN
0xaA4f62da...dA71e6414
0 ETH0.0460101736.3
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-107357202020-08-26 11:11:152029 days ago1598440275
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-107316892020-08-25 20:11:242030 days ago1598386284
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-107311262020-08-25 18:10:232030 days ago1598379023
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-107307692020-08-25 16:53:392030 days ago1598374419
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-107303342020-08-25 15:16:332030 days ago1598368593
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-106840762020-08-18 12:49:262037 days ago1597754966
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-106772202020-08-17 11:12:052038 days ago1597662725
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-106578982020-08-14 11:41:442041 days ago1597405304
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-106401682020-08-11 18:11:362044 days ago1597169496
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-106159492020-08-08 0:28:412048 days ago1596846521
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-106101592020-08-07 3:03:012048 days ago1596769381
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-106018382020-08-05 20:12:372050 days ago1596658357
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-105960312020-08-04 22:42:332051 days ago1596580953
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-105424452020-07-27 15:48:152059 days ago1595864895
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-105287822020-07-25 13:11:412061 days ago1595682701
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-105184432020-07-23 22:38:432063 days ago1595543923
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-105157662020-07-23 12:47:182063 days ago1595508438
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-105102692020-07-22 16:32:072064 days ago1595435527
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-104847902020-07-18 17:29:062068 days ago1595093346
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-104537642020-07-13 21:56:012073 days ago1594677361
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-104521162020-07-13 15:49:262073 days ago1594655366
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-104470572020-07-12 21:10:052074 days ago1594588205
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-104343392020-07-10 22:17:412076 days ago1594419461
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-104219412020-07-08 23:50:462078 days ago1594252246
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
-104207252020-07-08 19:22:472078 days ago1594236167
0xaA4f62da...dA71e6414
 Contract Creation0 ETH
View All Internal Transactions
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:
LiteSigFactory

Compiler Version
v0.5.8+commit.23d335f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2020-04-14
*/

// File: contracts/LiteSig.sol

pragma solidity 0.5.8;

/**
 * LiteSig is a lighter weight multisig based on https://github.com/christianlundkvist/simple-multisig
 * Owners aggregate signatures offline and then broadcast a transaction with the required number of signatures.
 * Unlike other multisigs, this is meant to have minimal administration functions and other features in order
 * to reduce the footprint and attack surface.
 */
contract LiteSig {

    //  Events triggered for incoming and outgoing transactions
    event Deposit(address indexed source, uint value);
    event Execution(uint indexed transactionId, address indexed destination, uint value, bytes data);
    event ExecutionFailure(uint indexed transactionId, address indexed destination, uint value, bytes data);

    // List of owner addresses - for external readers convenience only
    address[] public owners;

    // Mapping of owner address to keep track for lookups
    mapping(address => bool) ownersMap;

    // Nonce increments by one on each broadcast transaction to prevent replays
    uint public nonce = 0;

    // Number of required signatures from the list of owners
    uint public requiredSignatures = 0;

    // EIP712 Precomputed hashes:
    // keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)")
    bytes32 constant EIP712DOMAINTYPE_HASH = 0xd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472;

    // keccak256("LiteSig")
    bytes32 constant NAME_HASH = 0x3308695f49e3f28122810c848e1569a04488ca4f6a11835568450d7a38a86120;

    // keccak256("1")
    bytes32 constant VERSION_HASH = 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6;

    // keccak256("MultiSigTransaction(address destination,uint256 value,bytes data,uint256 nonce,address txOrigin)")
    bytes32 constant TXTYPE_HASH = 0x81336c6b66e18c614f29c0c96edcbcbc5f8e9221f35377412f0ea5d6f428918e;

    // keccak256("TOKENSOFT")
    bytes32 constant SALT = 0x9c360831104e550f13ec032699c5f1d7f17190a31cdaf5c83945a04dfd319eea;

    // Hash for EIP712, computed from data and contract address - ensures it can't be replayed against
    // other contracts or chains
    bytes32 public DOMAIN_SEPARATOR;

    // Track init state
    bool initialized = false;

    // The init function inputs a list of owners and the number of signatures that
    //   are required before a transaction is executed.
    // Owners list must be in ascending address order.
    // Required sigs must be greater than 0 and less than or equal to number of owners.
    // Chain ID prevents replay across chains
    // This function can only be run one time
    function init(address[] memory _owners, uint _requiredSignatures, uint chainId) public {
        // Verify it can't be initialized again
        require(!initialized, "Init function can only be run once");
        initialized = true;

        // Verify the lengths of values being passed in
        require(_owners.length > 0 && _owners.length <= 10, "Owners List min is 1 and max is 10");
        require(
            _requiredSignatures > 0 && _requiredSignatures <= _owners.length,
            "Required signatures must be in the proper range"
        );

        // Verify the owners list is valid and in order
        // No 0 addresses or duplicates
        address lastAdd = address(0);
        for (uint i = 0; i < _owners.length; i++) {
            require(_owners[i] > lastAdd, "Owner addresses must be unique and in order");
            ownersMap[_owners[i]] = true;
            lastAdd = _owners[i];
        }

        // Save off owner list and required sig.
        owners = _owners;
        requiredSignatures = _requiredSignatures;

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(EIP712DOMAINTYPE_HASH,
            NAME_HASH,
            VERSION_HASH,
            chainId,
            address(this),
            SALT)
        );
    }

    /**
     * This function is adapted from the OpenZeppelin libarary but instead of passing in bytes
     * array, it already has the sig fields broken down.
     *
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * (.note) This call _does not revert_ if the signature is invalid, or
     * if the signer is otherwise unable to be retrieved. In those scenarios,
     * the zero address is returned.
     *
     * (.warning) `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise)
     * be too long), and then calling `toEthSignedMessageHash` on it.
     */
    function safeRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return address(0);
        }

        if (v != 27 && v != 28) {
            return address(0);
        }

        // If the signature is valid (and not malleable), return the signer address
        return ecrecover(hash, v, r, s);
    }

    /**
     * Once the owners of the multisig have signed across the payload, they can submit it to this function.
     * This will verify enough signatures were aggregated and then broadcast the transaction.
     * It can be used to send ETH or trigger a function call against another address (or both).
     *
     * Signatures must be in the correct ascending order (according to associated addresses)
     */
    function submit(
        uint8[] memory sigV,
        bytes32[] memory sigR,
        bytes32[] memory sigS,
        address destination,
        uint value,
        bytes memory data
    ) public returns (bool)
    {
        // Verify initialized
        require(initialized, "Initialization must be complete");

        // Verify signature lengths
        require(sigR.length == sigS.length && sigR.length == sigV.length, "Sig arrays not the same lengths");
        require(sigR.length == requiredSignatures, "Signatures list is not the expected length");

        // EIP712 scheme: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md
        // Note that the nonce is always included from the contract state to prevent replay attacks
        // Note that tx.origin is included to ensure only a predetermined account can broadcast
        bytes32 txInputHash = keccak256(abi.encode(TXTYPE_HASH, destination, value, keccak256(data), nonce, tx.origin));
        bytes32 totalHash = keccak256(abi.encodePacked("\x19\x01", DOMAIN_SEPARATOR, txInputHash));

        // Add in the ETH specific prefix
        bytes memory prefix = "\x19Ethereum Signed Message:\n32";
        bytes32 prefixedHash = keccak256(abi.encodePacked(prefix, totalHash));

        // Iterate and verify signatures are from owners
        address lastAdd = address(0); // cannot have address(0) as an owner
        for (uint i = 0; i < requiredSignatures; i++) {

            // Recover the address from the signature - if anything is wrong, this will return 0
            address recovered = safeRecover(prefixedHash, sigV[i], sigR[i], sigS[i]);

            // Ensure the signature is from an owner address and there are no duplicates
            // Also verifies error of 0 returned
            require(ownersMap[recovered], "Signature must be from an owner");
            require(recovered > lastAdd, "Signature must be unique");
            lastAdd = recovered;
        }

        // Increment the nonce before making external call
        nonce = nonce + 1;
        (bool success, ) = address(destination).call.value(value)(data);
        if(success) {
            emit Execution(nonce, destination, value, data);
        } else {
            emit ExecutionFailure(nonce, destination, value, data);
        }

        return success;
    }

    // Allow ETH to be sent to this contract
    function () external payable {
        emit Deposit(msg.sender, msg.value);
    }

}

// File: openzeppelin-solidity/contracts/ownership/Ownable.sol

pragma solidity ^0.5.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * > Note: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/Administratable.sol

pragma solidity 0.5.8;


/**
This contract allows a list of administrators to be tracked.  This list can then be enforced
on functions with administrative permissions.  Only the owner of the contract should be allowed
to modify the administrator list.
 */
contract Administratable is Ownable {

    // The mapping to track administrator accounts - true is reserved for admin addresses.
    mapping (address => bool) public administrators;

    // Events to allow tracking add/remove.
    event AdminAdded(address indexed addedAdmin, address indexed addedBy);
    event AdminRemoved(address indexed removedAdmin, address indexed removedBy);

    /**
    Function modifier to enforce administrative permissions.
     */
    modifier onlyAdministrator() {
        require(isAdministrator(msg.sender), "Calling account is not an administrator.");
        _;
    }

    /**
    Determine if the message sender is in the administrators list.
     */
    function isAdministrator(address addressToTest) public view returns (bool) {
        return administrators[addressToTest];
    }

    /**
    Add an admin to the list.  This should only be callable by the owner of the contract.
     */
    function addAdmin(address adminToAdd) public onlyOwner {
        // Verify the account is not already an admin
        require(administrators[adminToAdd] == false, "Account to be added to admin list is already an admin");

        // Set the address mapping to true to indicate it is an administrator account.
        administrators[adminToAdd] = true;

        // Emit the event for any watchers.
        emit AdminAdded(adminToAdd, msg.sender);
    }

    /**
    Remove an admin from the list.  This should only be callable by the owner of the contract.
     */
    function removeAdmin(address adminToRemove) public onlyOwner {
        // Verify the account is an admin
        require(administrators[adminToRemove] == true, "Account to be removed from admin list is not already an admin");

        // Set the address mapping to false to indicate it is NOT an administrator account.
        administrators[adminToRemove] = false;

        // Emit the event for any watchers.
        emit AdminRemoved(adminToRemove, msg.sender);
    }
}

// File: contracts/LiteSigFactory.sol

pragma solidity 0.5.8;



/**
 * LiteSig Factory creates new instances of the multisig contract and triggers an event
 * for listeners to see the new contract.
 */
contract LiteSigFactory is Administratable {

  // Event to track deployments
  event Deployed(address indexed deployedAddress);

  // Constructor for the factory
  constructor() public {
    // Add the deployer as an admin by default
    Administratable.addAdmin(msg.sender);
  }

  /**
   * Function called by external addresses to create a new multisig contract
   * Caller must be whitelisted as an admin - this is to prevent someone from sniping the address
   * (the standard approach to locking in the sender addr into the salt was not chosen in case a long time
   * passes before the contract is created and a new deployment account is required for some unknown reason)
   */
  function createLiteSig(bytes32 salt, address[] memory _owners, uint _requiredSignatures, uint chainId)
    public onlyAdministrator returns (address) {
    // Track the address for the new contract
    address payable deployedAddress;

    // Get the creation code from the payment handler
    bytes memory code = type(LiteSig).creationCode;

    // Drop into assembly to deploy with create2
    assembly {
      deployedAddress := create2(0, add(code, 0x20), mload(code), salt)
      if iszero(extcodesize(deployedAddress)) { revert(0, 0) }
    }

    // Initialize the contract with this master's address
    LiteSig(deployedAddress).init(_owners, _requiredSignatures, chainId);

    // Trigger the event for any listeners
    emit Deployed(deployedAddress);

    // Return address back to caller if applicable
    return deployedAddress;
  }
}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[{"name":"addressToTest","type":"address"}],"name":"isAdministrator","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"adminToRemove","type":"address"}],"name":"removeAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"salt","type":"bytes32"},{"name":"_owners","type":"address[]"},{"name":"_requiredSignatures","type":"uint256"},{"name":"chainId","type":"uint256"}],"name":"createLiteSig","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"adminToAdd","type":"address"}],"name":"addAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"administrators","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"deployedAddress","type":"address"}],"name":"Deployed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"addedAdmin","type":"address"},{"indexed":true,"name":"addedBy","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"removedAdmin","type":"address"},{"indexed":true,"name":"removedBy","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36100e0336100e560201b6107831760201c565b610319565b6100f36102c260201b60201c565b610165576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461020e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806124b86035913960400191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b60405160405180910390a350565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b612190806103286000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a61461029257806376be15851461029c5780638da5cb5b146102f85780638f32d59b14610342578063f2fde38b1461036457610093565b80630a2eb301146100985780631785f53c146100f45780633d4b5a4814610138578063704802751461024e575b600080fd5b6100da600480360360208110156100ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103a8565b604051808215151515815260200191505060405180910390f35b6101366004803603602081101561010a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103fe565b005b61020c6004803603608081101561014e57600080fd5b81019080803590602001909291908035906020019064010000000081111561017557600080fd5b82018360208201111561018757600080fd5b803590602001918460208302840111640100000000831117156101a957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291905050506105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102906004803603602081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610783565b005b61029a61095a565b005b6102de600480360360208110156102b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a93565b604051808215151515815260200191505060405180910390f35b610300610ab3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61034a610adc565b604051808215151515815260200191505060405180910390f35b6103a66004803603602081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b33565b005b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610406610adc565b610478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806120cb603d913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce60405160405180910390a350565b60006105e1336103a8565b610636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806121086028913960400191505060405180910390fd5b600060606040518060200161064a90610cfd565b6020820181038252601f19601f820116604052509050868151602083016000f59150813b61067757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663ce7e8fcf8787876040518463ffffffff1660e01b81526004018080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156106f45780820151818401526020810190506106d9565b50505050905001945050505050600060405180830381600087803b15801561071b57600080fd5b505af115801561072f573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff167ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e60405160405180910390a28192505050949350505050565b61078b610adc565b6107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146108a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806121306035913960400191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b60405160405180910390a350565b610962610adc565b6109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b610b3b610adc565b610bad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610bb681610bb9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806120a56026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61139a80610d0b8339019056fe6080604052600060025560006003556000600560006101000a81548160ff02191690831515021790555034801561003557600080fd5b50611355806100456000396000f3fe6080604052600436106100555760003560e01c8063025e7c27146100a557806316636745146101205780633644e515146103e65780638d06804314610411578063affed0e01461043c578063ce7e8fcf14610467575b3373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2005b3480156100b157600080fd5b506100de600480360360208110156100c857600080fd5b8101908080359060200190929190505050610540565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561012c57600080fd5b506103cc600480360360c081101561014357600080fd5b810190808035906020019064010000000081111561016057600080fd5b82018360208201111561017257600080fd5b8035906020019184602083028401116401000000008311171561019457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156101f457600080fd5b82018360208201111561020657600080fd5b8035906020019184602083028401116401000000008311171561022857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561028857600080fd5b82018360208201111561029a57600080fd5b803590602001918460208302840111640100000000831117156102bc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561034657600080fd5b82018360208201111561035857600080fd5b8035906020019184600183028401116401000000008311171561037a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061057c565b604051808215151515815260200191505060405180910390f35b3480156103f257600080fd5b506103fb610cfb565b6040518082815260200191505060405180910390f35b34801561041d57600080fd5b50610426610d01565b6040518082815260200191505060405180910390f35b34801561044857600080fd5b50610451610d07565b6040518082815260200191505060405180910390f35b34801561047357600080fd5b5061053e6004803603606081101561048a57600080fd5b81019080803590602001906401000000008111156104a757600080fd5b8201836020820111156104b957600080fd5b803590602001918460208302840111640100000000831117156104db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050610d0d565b005b6000818154811061054d57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900460ff16610600576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e697469616c697a6174696f6e206d75737420626520636f6d706c6574650081525060200191505060405180910390fd5b84518651148015610612575086518651145b610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53696720617272617973206e6f74207468652073616d65206c656e677468730081525060200191505060405180910390fd5b6003548651146106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611262602a913960400191505060405180910390fd5b60007f81336c6b66e18c614f29c0c96edcbcbc5f8e9221f35377412f0ea5d6f428918e60001b8585858051906020012060025432604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405160208183030381529060405280519060200120905060006004548260405160200180807f19010000000000000000000000000000000000000000000000000000000000008152506002018381526020018281526020019250505060405160208183030381529060405280519060200120905060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081836040516020018083805190602001908083835b602083106108875780518252602082019150602081019050602083039250610864565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200192505050604051602081830303815290604052805190602001209050600080905060008090505b600354811015610a9a576000610927848f84815181106108f257fe5b60200260200101518f858151811061090657fe5b60200260200101518f868151811061091a57fe5b60200260200101516110c6565b9050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5369676e6174757265206d7573742062652066726f6d20616e206f776e65720081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611610a89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5369676e6174757265206d75737420626520756e69717565000000000000000081525060200191505060405180910390fd5b8092505080806001019150506108d6565b5060016002540160028190555060008973ffffffffffffffffffffffffffffffffffffffff1689896040518082805190602001908083835b60208310610af55780518252602082019150602081019050602083039250610ad2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b57576040519150601f19603f3d011682016040523d82523d6000602084013e610b5c565b606091505b505090508015610c29578973ffffffffffffffffffffffffffffffffffffffff166002547fedde58bc1eda2dcabe4c2ecfa4fc29862b663603e92d813f4fef217f0dd3597c8b8b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610be9578082015181840152602081019050610bce565b50505050905090810190601f168015610c165780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3610ce8565b8973ffffffffffffffffffffffffffffffffffffffff166002547f87a63d04721a887e5a9303fb7950409e32f976f0e09bda2790353b5846a28d358b8b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610cac578082015181840152602081019050610c91565b50505050905090810190601f168015610cd95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35b8096505050505050509695505050505050565b60045481565b60035481565b60025481565b600560009054906101000a900460ff1615610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061128c6022913960400191505060405180910390fd5b6001600560006101000a81548160ff02191690831515021790555060008351118015610da15750600a835111155b610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112d96022913960400191505060405180910390fd5b600082118015610e07575082518211155b610e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806112fb602f913960400191505060405180910390fd5b600080905060008090505b8451811015610f94578173ffffffffffffffffffffffffffffffffffffffff16858281518110610e9357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1611610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806112ae602b913960400191505060405180910390fd5b6001806000878481518110610f1857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550848181518110610f7d57fe5b602002602001015191508080600101915050610e67565b508360009080519060200190610fab929190611194565b50826003819055507fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260001b7f3308695f49e3f28122810c848e1569a04488ca4f6a11835568450d7a38a8612060001b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660001b84307f9c360831104e550f13ec032699c5f1d7f17190a31cdaf5c83945a04dfd319eea60001b604051602001808781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506040516020818303038152906040528051906020012060048190555050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c11156110fc576000905061118c565b601b8460ff16141580156111145750601c8460ff1614155b15611122576000905061118c565b60018585858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561117f573d6000803e3d6000fd5b5050506020604051035190505b949350505050565b82805482825590600052602060002090810192821561120d579160200282015b8281111561120c5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906111b4565b5b50905061121a919061121e565b5090565b61125e91905b8082111561125a57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101611224565b5090565b9056fe5369676e617475726573206c697374206973206e6f7420746865206578706563746564206c656e677468496e69742066756e6374696f6e2063616e206f6e6c792062652072756e206f6e63654f776e657220616464726573736573206d75737420626520756e6971756520616e6420696e206f726465724f776e657273204c697374206d696e206973203120616e64206d61782069732031305265717569726564207369676e617475726573206d75737420626520696e207468652070726f7065722072616e6765a165627a7a723058201dc9db561df1f3ab0b2e463a6bc7a7af57f4e8d50aa13f711f9142ebe392327a00294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734163636f756e7420746f2062652072656d6f7665642066726f6d2061646d696e206c697374206973206e6f7420616c726561647920616e2061646d696e43616c6c696e67206163636f756e74206973206e6f7420616e2061646d696e6973747261746f722e4163636f756e7420746f20626520616464656420746f2061646d696e206c69737420697320616c726561647920616e2061646d696ea165627a7a72305820214af8fa564165917ad7c5fd97aa4a26d94abd0de2a21f225b948da3d2f87b3000294163636f756e7420746f20626520616464656420746f2061646d696e206c69737420697320616c726561647920616e2061646d696e

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a61461029257806376be15851461029c5780638da5cb5b146102f85780638f32d59b14610342578063f2fde38b1461036457610093565b80630a2eb301146100985780631785f53c146100f45780633d4b5a4814610138578063704802751461024e575b600080fd5b6100da600480360360208110156100ae57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103a8565b604051808215151515815260200191505060405180910390f35b6101366004803603602081101561010a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103fe565b005b61020c6004803603608081101561014e57600080fd5b81019080803590602001909291908035906020019064010000000081111561017557600080fd5b82018360208201111561018757600080fd5b803590602001918460208302840111640100000000831117156101a957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803590602001909291905050506105d6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102906004803603602081101561026457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610783565b005b61029a61095a565b005b6102de600480360360208110156102b257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a93565b604051808215151515815260200191505060405180910390f35b610300610ab3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61034a610adc565b604051808215151515815260200191505060405180910390f35b6103a66004803603602081101561037a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b33565b005b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610406610adc565b610478576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60011515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610521576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d8152602001806120cb603d913960400191505060405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce60405160405180910390a350565b60006105e1336103a8565b610636576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806121086028913960400191505060405180910390fd5b600060606040518060200161064a90610cfd565b6020820181038252601f19601f820116604052509050868151602083016000f59150813b61067757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff1663ce7e8fcf8787876040518463ffffffff1660e01b81526004018080602001848152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156106f45780820151818401526020810190506106d9565b50505050905001945050505050600060405180830381600087803b15801561071b57600080fd5b505af115801561072f573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff167ff40fcec21964ffb566044d083b4073f29f7f7929110ea19e1b3ebe375d89055e60405160405180910390a28192505050949350505050565b61078b610adc565b6107fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60001515600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146108a6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806121306035913960400191505060405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fbf3f493c772c8c283fd124432c2d0f539ab343faa04258fe88e52912d36b102b60405160405180910390a350565b610962610adc565b6109d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60016020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b610b3b610adc565b610bad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b610bb681610bb9565b50565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c3f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806120a56026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61139a80610d0b8339019056fe6080604052600060025560006003556000600560006101000a81548160ff02191690831515021790555034801561003557600080fd5b50611355806100456000396000f3fe6080604052600436106100555760003560e01c8063025e7c27146100a557806316636745146101205780633644e515146103e65780638d06804314610411578063affed0e01461043c578063ce7e8fcf14610467575b3373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c346040518082815260200191505060405180910390a2005b3480156100b157600080fd5b506100de600480360360208110156100c857600080fd5b8101908080359060200190929190505050610540565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561012c57600080fd5b506103cc600480360360c081101561014357600080fd5b810190808035906020019064010000000081111561016057600080fd5b82018360208201111561017257600080fd5b8035906020019184602083028401116401000000008311171561019457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156101f457600080fd5b82018360208201111561020657600080fd5b8035906020019184602083028401116401000000008311171561022857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561028857600080fd5b82018360208201111561029a57600080fd5b803590602001918460208302840111640100000000831117156102bc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561034657600080fd5b82018360208201111561035857600080fd5b8035906020019184600183028401116401000000008311171561037a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061057c565b604051808215151515815260200191505060405180910390f35b3480156103f257600080fd5b506103fb610cfb565b6040518082815260200191505060405180910390f35b34801561041d57600080fd5b50610426610d01565b6040518082815260200191505060405180910390f35b34801561044857600080fd5b50610451610d07565b6040518082815260200191505060405180910390f35b34801561047357600080fd5b5061053e6004803603606081101561048a57600080fd5b81019080803590602001906401000000008111156104a757600080fd5b8201836020820111156104b957600080fd5b803590602001918460208302840111640100000000831117156104db57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019092919080359060200190929190505050610d0d565b005b6000818154811061054d57fe5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900460ff16610600576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f496e697469616c697a6174696f6e206d75737420626520636f6d706c6574650081525060200191505060405180910390fd5b84518651148015610612575086518651145b610684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f53696720617272617973206e6f74207468652073616d65206c656e677468730081525060200191505060405180910390fd5b6003548651146106df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180611262602a913960400191505060405180910390fd5b60007f81336c6b66e18c614f29c0c96edcbcbc5f8e9221f35377412f0ea5d6f428918e60001b8585858051906020012060025432604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001965050505050505060405160208183030381529060405280519060200120905060006004548260405160200180807f19010000000000000000000000000000000000000000000000000000000000008152506002018381526020018281526020019250505060405160208183030381529060405280519060200120905060606040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a3332000000008152509050600081836040516020018083805190602001908083835b602083106108875780518252602082019150602081019050602083039250610864565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200192505050604051602081830303815290604052805190602001209050600080905060008090505b600354811015610a9a576000610927848f84815181106108f257fe5b60200260200101518f858151811061090657fe5b60200260200101518f868151811061091a57fe5b60200260200101516110c6565b9050600160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166109e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5369676e6174757265206d7573742062652066726f6d20616e206f776e65720081525060200191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1611610a89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f5369676e6174757265206d75737420626520756e69717565000000000000000081525060200191505060405180910390fd5b8092505080806001019150506108d6565b5060016002540160028190555060008973ffffffffffffffffffffffffffffffffffffffff1689896040518082805190602001908083835b60208310610af55780518252602082019150602081019050602083039250610ad2565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610b57576040519150601f19603f3d011682016040523d82523d6000602084013e610b5c565b606091505b505090508015610c29578973ffffffffffffffffffffffffffffffffffffffff166002547fedde58bc1eda2dcabe4c2ecfa4fc29862b663603e92d813f4fef217f0dd3597c8b8b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610be9578082015181840152602081019050610bce565b50505050905090810190601f168015610c165780820380516001836020036101000a031916815260200191505b50935050505060405180910390a3610ce8565b8973ffffffffffffffffffffffffffffffffffffffff166002547f87a63d04721a887e5a9303fb7950409e32f976f0e09bda2790353b5846a28d358b8b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610cac578082015181840152602081019050610c91565b50505050905090810190601f168015610cd95780820380516001836020036101000a031916815260200191505b50935050505060405180910390a35b8096505050505050509695505050505050565b60045481565b60035481565b60025481565b600560009054906101000a900460ff1615610d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061128c6022913960400191505060405180910390fd5b6001600560006101000a81548160ff02191690831515021790555060008351118015610da15750600a835111155b610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806112d96022913960400191505060405180910390fd5b600082118015610e07575082518211155b610e5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f8152602001806112fb602f913960400191505060405180910390fd5b600080905060008090505b8451811015610f94578173ffffffffffffffffffffffffffffffffffffffff16858281518110610e9357fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1611610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806112ae602b913960400191505060405180910390fd5b6001806000878481518110610f1857fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550848181518110610f7d57fe5b602002602001015191508080600101915050610e67565b508360009080519060200190610fab929190611194565b50826003819055507fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260001b7f3308695f49e3f28122810c848e1569a04488ca4f6a11835568450d7a38a8612060001b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660001b84307f9c360831104e550f13ec032699c5f1d7f17190a31cdaf5c83945a04dfd319eea60001b604051602001808781526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506040516020818303038152906040528051906020012060048190555050505050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c11156110fc576000905061118c565b601b8460ff16141580156111145750601c8460ff1614155b15611122576000905061118c565b60018585858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561117f573d6000803e3d6000fd5b5050506020604051035190505b949350505050565b82805482825590600052602060002090810192821561120d579160200282015b8281111561120c5782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906111b4565b5b50905061121a919061121e565b5090565b61125e91905b8082111561125a57600081816101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600101611224565b5090565b9056fe5369676e617475726573206c697374206973206e6f7420746865206578706563746564206c656e677468496e69742066756e6374696f6e2063616e206f6e6c792062652072756e206f6e63654f776e657220616464726573736573206d75737420626520756e6971756520616e6420696e206f726465724f776e657273204c697374206d696e206973203120616e64206d61782069732031305265717569726564207369676e617475726573206d75737420626520696e207468652070726f7065722072616e6765a165627a7a723058201dc9db561df1f3ab0b2e463a6bc7a7af57f4e8d50aa13f711f9142ebe392327a00294f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734163636f756e7420746f2062652072656d6f7665642066726f6d2061646d696e206c697374206973206e6f7420616c726561647920616e2061646d696e43616c6c696e67206163636f756e74206973206e6f7420616e2061646d696e6973747261746f722e4163636f756e7420746f20626520616464656420746f2061646d696e206c69737420697320616c726561647920616e2061646d696ea165627a7a72305820214af8fa564165917ad7c5fd97aa4a26d94abd0de2a21f225b948da3d2f87b300029

Deployed Bytecode Sourcemap

14490:1573:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14490:1573:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12961:130;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12961:130:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13791:479;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13791:479:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;15194:866;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;15194:866:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;15194:866:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15194:866:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;15194:866:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;15194:866:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13208:461;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13208:461:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;11197:140;;;:::i;:::-;;12386:47;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12386:47:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10386:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10752:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11492:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11492:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;12961:130;13030:4;13054:14;:29;13069:13;13054:29;;;;;;;;;;;;;;;;;;;;;;;;;13047:36;;12961:130;;;:::o;13791:479::-;10598:9;:7;:9::i;:::-;10590:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13947:4;13914:37;;:14;:29;13929:13;13914:29;;;;;;;;;;;;;;;;;;;;;;;;;:37;;;13906:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14155:5;14123:14;:29;14138:13;14123:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;14251:10;14223:39;;14236:13;14223:39;;;;;;;;;;;;13791:479;:::o;15194:866::-;15336:7;12775:27;12791:10;12775:15;:27::i;:::-;12767:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15399:31;15494:17;15514:26;;;;;;;;:::i;:::-;41:4:-1;34:5;30:16;25:3;21:26;14:5;7:41;87:2;83:7;78:2;73:3;69:12;65:26;61:2;54:38;15514:26:0;15494:46;;15677:4;15670;15664:11;15657:4;15651;15647:15;15644:1;15636:46;15617:65;;15712:15;15700:28;15690:2;;15742:1;15739;15732:12;15690:2;15828:15;15820:29;;;15850:7;15859:19;15880:7;15820:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;15820:68:0;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15820:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15820:68:0;;;;15955:15;15946:25;;;;;;;;;;;;16039:15;16032:22;;;;15194:866;;;;;;:::o;13208:461::-;10598:9;:7;:9::i;:::-;10590:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13367:5;13337:35;;:14;:26;13352:10;13337:26;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;13329:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13560:4;13531:14;:26;13546:10;13531:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;13650:10;13627:34;;13638:10;13627:34;;;;;;;;;;;;13208:461;:::o;11197:140::-;10598:9;:7;:9::i;:::-;10590:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11296:1;11259:40;;11280:6;;;;;;;;;;;11259:40;;;;;;;;;;;;11327:1;11310:6;;:19;;;;;;;;;;;;;;;;;;11197:140::o;12386:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;10386:79::-;10424:7;10451:6;;;;;;;;;;;10444:13;;10386:79;:::o;10752:92::-;10792:4;10830:6;;;;;;;;;;;10816:20;;:10;:20;;;10809:27;;10752:92;:::o;11492:109::-;10598:9;:7;:9::i;:::-;10590:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11565:28;11584:8;11565:18;:28::i;:::-;11492:109;:::o;11707:229::-;11801:1;11781:22;;:8;:22;;;;11773:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11891:8;11862:38;;11883:6;;;;;;;;;;;11862:38;;;;;;;;;;;;11920:8;11911:6;;:17;;;;;;;;;;;;;;;;;;11707:229;:::o;14490:1573::-;;;;;;;;:::o

Swarm Source

bzzr://214af8fa564165917ad7c5fd97aa4a26d94abd0de2a21f225b948da3d2f87b30

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.