Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 58 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Create Lite Sig | 10735720 | 2029 days ago | IN | 0 ETH | 0.08365486 | ||||
| Create Lite Sig | 10731689 | 2030 days ago | IN | 0 ETH | 0.08365407 | ||||
| Create Lite Sig | 10731126 | 2030 days ago | IN | 0 ETH | 0.21192365 | ||||
| Create Lite Sig | 10730769 | 2030 days ago | IN | 0 ETH | 0.16730973 | ||||
| Create Lite Sig | 10730334 | 2030 days ago | IN | 0 ETH | 0.15615575 | ||||
| Create Lite Sig | 10684076 | 2037 days ago | IN | 0 ETH | 0.17846371 | ||||
| Create Lite Sig | 10677220 | 2038 days ago | IN | 0 ETH | 0.13705455 | ||||
| Create Lite Sig | 10657898 | 2041 days ago | IN | 0 ETH | 0.26351283 | ||||
| Create Lite Sig | 10640168 | 2044 days ago | IN | 0 ETH | 0.10884259 | ||||
| Create Lite Sig | 10615949 | 2048 days ago | IN | 0 ETH | 0.06274115 | ||||
| Create Lite Sig | 10610159 | 2048 days ago | IN | 0 ETH | 0.06413539 | ||||
| Create Lite Sig | 10601838 | 2050 days ago | IN | 0 ETH | 0.04447608 | ||||
| Create Lite Sig | 10596031 | 2051 days ago | IN | 0 ETH | 0.04461592 | ||||
| Create Lite Sig | 10542445 | 2059 days ago | IN | 0 ETH | 0.18125221 | ||||
| Create Lite Sig | 10528782 | 2061 days ago | IN | 0 ETH | 0.09202035 | ||||
| Create Lite Sig | 10518443 | 2063 days ago | IN | 0 ETH | 0.05576991 | ||||
| Create Lite Sig | 10515766 | 2063 days ago | IN | 0 ETH | 0.08783761 | ||||
| Create Lite Sig | 10510269 | 2064 days ago | IN | 0 ETH | 0.1169495 | ||||
| Create Lite Sig | 10484790 | 2068 days ago | IN | 0 ETH | 0.09621612 | ||||
| Create Lite Sig | 10453764 | 2073 days ago | IN | 0 ETH | 0.03764433 | ||||
| Create Lite Sig | 10452116 | 2073 days ago | IN | 0 ETH | 0.10596283 | ||||
| Create Lite Sig | 10447057 | 2074 days ago | IN | 0 ETH | 0.02788495 | ||||
| Create Lite Sig | 10434339 | 2076 days ago | IN | 0 ETH | 0.02509646 | ||||
| Create Lite Sig | 10421941 | 2078 days ago | IN | 0 ETH | 0.03764469 | ||||
| Create Lite Sig | 10420725 | 2078 days ago | IN | 0 ETH | 0.04601017 |
Latest 25 internal transactions (View All)
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
LiteSigFactory
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity)
/**
*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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.