Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 186 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Execute | 24498304 | 43 hrs ago | IN | 0 ETH | 0.00000808 | ||||
| Execute | 24493077 | 2 days ago | IN | 0 ETH | 0.00000656 | ||||
| Execute | 24420695 | 12 days ago | IN | 0 ETH | 0.00002691 | ||||
| Execute | 24420536 | 12 days ago | IN | 0 ETH | 0.00005907 | ||||
| Execute | 24392430 | 16 days ago | IN | 0 ETH | 0.00028797 | ||||
| Execute | 24392216 | 16 days ago | IN | 0 ETH | 0.00110532 | ||||
| Execute | 24377346 | 18 days ago | IN | 0 ETH | 0.00003495 | ||||
| Execute | 24372043 | 19 days ago | IN | 0 ETH | 0.00001551 | ||||
| Execute | 24341720 | 23 days ago | IN | 0 ETH | 0.00017724 | ||||
| Execute | 24320438 | 26 days ago | IN | 0 ETH | 0.00001408 | ||||
| Execute | 24298976 | 29 days ago | IN | 0 ETH | 0.00001636 | ||||
| Execute | 24249028 | 36 days ago | IN | 0 ETH | 0.00001085 | ||||
| Execute | 24223834 | 40 days ago | IN | 0 ETH | 0.00000278 | ||||
| Execute | 24149597 | 50 days ago | IN | 0 ETH | 0.00000672 | ||||
| Execute | 24049664 | 64 days ago | IN | 0 ETH | 0.00000231 | ||||
| Execute | 24048758 | 64 days ago | IN | 0 ETH | 0.00000342 | ||||
| Execute | 23991170 | 72 days ago | IN | 0 ETH | 0.000011 | ||||
| Execute | 23977533 | 74 days ago | IN | 0 ETH | 0.00001892 | ||||
| Execute | 23949528 | 78 days ago | IN | 0 ETH | 0.00000189 | ||||
| Execute | 23948549 | 78 days ago | IN | 0 ETH | 0.00000333 | ||||
| Execute | 23935567 | 80 days ago | IN | 0 ETH | 0.00000301 | ||||
| Execute | 23885059 | 87 days ago | IN | 0 ETH | 0.00000556 | ||||
| Execute | 23871912 | 89 days ago | IN | 0 ETH | 0.00000865 | ||||
| Execute | 23871837 | 89 days ago | IN | 0 ETH | 0.00000718 | ||||
| Execute | 23849054 | 92 days ago | IN | 0 ETH | 0.00006145 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x863c8754...1A355CE6C The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
MultiSign
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.26;
import {ECDSA} from 'openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol';
/**
* @dev This is an implementation of an on-chain multi-sign. On-chain multi-sign ensures that a quorum of signatures
* needs to be submitted before the transaction is passed on to the ERC20 contract(in our case). To verify signatures
* and hash data in a particular way, we use the EIP712.sol scheme: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-712.md.
*
* @custom:security-contact bugs@ripple.com
*/
contract MultiSign {
//keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract,bytes32 salt)")
bytes32 constant public EIP712DOMAIN_TYPEHASH = 0xd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac56472;
//keccak256("MultiSignTransaction(address destination,bytes data,uint256 nonce,address executor,uint256 gasLimit)")
bytes32 constant public MULTISIGN_TYPEHASH = 0xb8dc02dde922989f2f9c331431088d8b7e24696ed816c001c5b82192a1c91a8f;
//randomly generated salt
bytes32 constant public SALT = 0x55c2a1c584c6a7013cb797a4622f427c630274bf9e8d9ec26ab9015ddaabcb33;
//keccak256("MultiSign")
bytes32 constant public NAME_HASH = 0xa2743967920baf970a18574423a5e903484167f01ff6c1b931ebc9e87d7792b9;
// keccak256("1")
bytes32 constant public VERSION_HASH = 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6;
bytes32 private immutable DOMAIN_SEPARATOR;
/**
* A state variable to store the total weight of all signatures required to successfully finish
* execution of the `execute` method.
*/
uint256 public quorum;
/**
* Every transaction submitted to this contract should have a nonce associated to it just like
* any other EOA or Contract Account. This state variable holds that value.
*/
uint256 public nonce;
address[] private signersArr;
mapping (address => bool) private isSigner;
mapping (address => uint8) private weights;
/**
* @dev Event emitted when the state of the contract changes.
*
* @param account The contract for which the signer information was updated, which is this.
* @param signers The new array of signer address.
* @param weights The new array of weights of the signers.
* @param quorum The cumulative weight of all signatures should exceed or match this value.
*/
event SignersChanged(address account, address[] signers, uint8[] weights, uint256 quorum);
/**
* @dev Event emitted when the destination contract is called with the provided calldata.
*
* @param destination The contract being called with the provided calldata.
* @param data The encoded bytes that will lead to execution of a method and change state of the destination
* contract.
* @param gasLimit The maximum amount of gas that can be consumed by the destination contract to execute the
* calldata.
*/
event DestinationCalled(address destination, bytes data, uint256 gasLimit);
/**
* Default constructor to initialize the MultiSign contract.
* Signer addresses submitted to the contract should be ordered by their string values.
**/
constructor (address[] memory _signers, uint8[] memory _weights, uint256 _quorum) {
DOMAIN_SEPARATOR = keccak256(abi.encode(
EIP712DOMAIN_TYPEHASH,
NAME_HASH,
VERSION_HASH,
block.chainid,
address(this),
SALT
));
setSigners_(_signers, _weights, _quorum);
emit SignersChanged(address(this), _signers, _weights, _quorum);
}
/**
* @dev Returns the list of signer addresses in an array.
*/
function signers() external view returns (address[] memory) {
return signersArr;
}
/**
* @dev Given an address of a signer, return the weight of it's signature that gets counted
* for this account.
*/
function signerWeight(address signer) external view returns (uint8) {
return weights[signer];
}
// Note that signers_ must be strictly increasing, in order to prevent duplicates
function setSigners_(address[] memory _signers, uint8[] memory _weights, uint256 _quorum) private {
require(_signers.length <= 32, "Contract allows adding up to 32 signers only.");
require(_quorum > 0, "Quorum cannot be 0.");
// remove old signers from map and set weights to 0
uint256 existingSignerArrLength = signersArr.length;
for (uint256 i = 0; i < existingSignerArrLength; ++i) {
isSigner[signersArr[i]] = false;
weights[signersArr[i]] = 0;
}
// add new signers to map
uint256 signatureWeights = 0;
address lastAdd = address(0);
uint256 newSignerArrLength = _signers.length;
for (uint256 i = 0; i < newSignerArrLength; ++i) {
require(_signers[i] > lastAdd, "Addresses should be sorted");
isSigner[_signers[i]] = true;
weights[_signers[i]] = _weights[i];
signatureWeights += _weights[i];
lastAdd = _signers[i];
}
require(_quorum <= signatureWeights, "Quorum must be less than or equal to sum of all signer weights");
// set signers array and quorum
signersArr = _signers;
quorum = _quorum;
}
/**
* @dev This method facilitates changing the signer addresses, their weights and quorum. Since
* this method changes the state of the contract, it emits the `SignersChanged` event at the
* end of successful execution.
* This method can be called by this contract only in order to verify that the signatures are
* from existing signers with privilege to do so.
*/
function setSigners(address[] memory _signers, uint8[] memory _weights, uint256 _quorum) external {
require(msg.sender == address(this), "Only this contract can set signers after signature verification");
setSigners_(_signers, _weights, _quorum);
emit SignersChanged(address(this), _signers, _weights, _quorum);
}
/**
* @dev This method is called by an EOA/funding account with the correct set of signatures to eventually
* make a call to the `destination` with provided call data.
* Example, calls to the ERC20 contract are made from this method for all MultiSign accounts.
*/
function execute(
uint8[] memory sigV, bytes32[] memory sigR, bytes32[] memory sigS, address executor, address destination,
uint256 gasLimit, bytes calldata data
) external {
require(sigR.length == sigS.length && sigR.length == sigV.length, "Length of signature arrays dont match.");
require(executor == msg.sender, "Executor has to be the sender");
bytes32 digest = keccak256(abi.encodePacked(
"\x19\x01",
DOMAIN_SEPARATOR,
keccak256(abi.encode(
MULTISIGN_TYPEHASH,
destination,
keccak256(data),
nonce,
executor,
gasLimit
))
));
uint256 signatureWeights = 0;
address lastAdd = address(0); // cannot have address(0) as an owner
uint256 signaturesLength = sigV.length;
for (uint256 i = 0; i < signaturesLength; ++i) {
address recovered = ECDSA.recover(digest, sigV[i], sigR[i], sigS[i]);
require(recovered > lastAdd, "Signatures are out of order.");
require(isSigner[recovered], "Address recovered from signature is not a signer.");
lastAdd = recovered;
signatureWeights += weights[recovered];
}
require(signatureWeights >= quorum, "Signature weights don't add up to the required quorum");
// If we make it here all signatures are accounted for.
nonce = nonce + 1;
require(destination.code.length > 0, "Destination address should be a contract address");
bool success = false;
(success,) = destination.call{gas: gasLimit}(data);
emit DestinationCalled(destination, data, gasLimit);
require(success, "Submission to destination failed");
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.20;
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS
}
/**
* @dev The signature derives the `address(0)`.
*/
error ECDSAInvalidSignature();
/**
* @dev The signature has an invalid length.
*/
error ECDSAInvalidSignatureLength(uint256 length);
/**
* @dev The signature has an S value that is in the upper half order.
*/
error ECDSAInvalidSignatureS(bytes32 s);
/**
* @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not
* return address(0) without also returning an error description. Errors are documented using an enum (error type)
* and a bytes32 providing additional information about the error.
*
* If no error is returned, then the address can be used for verification purposes.
*
* The `ecrecover` EVM precompile 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.
*
* IMPORTANT: `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 {MessageHashUtils-toEthSignedMessageHash} on it.
*
* Documentation for signature generation:
* - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]
* - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]
*/
function tryRecover(
bytes32 hash,
bytes memory signature
) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
if (signature.length == 65) {
bytes32 r;
bytes32 s;
uint8 v;
// ecrecover takes the signature parameters, and the only way to get them
// currently is to use assembly.
assembly ("memory-safe") {
r := mload(add(signature, 0x20))
s := mload(add(signature, 0x40))
v := byte(0, mload(add(signature, 0x60)))
}
return tryRecover(hash, v, r, s);
} else {
return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));
}
}
/**
* @dev Returns the address that signed a hashed message (`hash`) with
* `signature`. This address can then be used for verification purposes.
*
* The `ecrecover` EVM precompile 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.
*
* IMPORTANT: `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 {MessageHashUtils-toEthSignedMessageHash} on it.
*/
function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.
*
* See https://eips.ethereum.org/EIPS/eip-2098[ERC-2098 short signatures]
*/
function tryRecover(
bytes32 hash,
bytes32 r,
bytes32 vs
) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
unchecked {
bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
// We do not check for an overflow here since the shift operation results in 0 or 1.
uint8 v = uint8((uint256(vs) >> 255) + 27);
return tryRecover(hash, v, r, s);
}
}
/**
* @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.
*/
function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Overload of {ECDSA-tryRecover} that receives the `v`,
* `r` and `s` signature fields separately.
*/
function tryRecover(
bytes32 hash,
uint8 v,
bytes32 r,
bytes32 s
) internal pure returns (address recovered, RecoverError err, bytes32 errArg) {
// 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 (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): 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), RecoverError.InvalidSignatureS, s);
}
// If the signature is valid (and not malleable), return the signer address
address signer = ecrecover(hash, v, r, s);
if (signer == address(0)) {
return (address(0), RecoverError.InvalidSignature, bytes32(0));
}
return (signer, RecoverError.NoError, bytes32(0));
}
/**
* @dev Overload of {ECDSA-recover} that receives the `v`,
* `r` and `s` signature fields separately.
*/
function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
(address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);
_throwError(error, errorArg);
return recovered;
}
/**
* @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.
*/
function _throwError(RecoverError error, bytes32 errorArg) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
revert ECDSAInvalidSignature();
} else if (error == RecoverError.InvalidSignatureLength) {
revert ECDSAInvalidSignatureLength(uint256(errorArg));
} else if (error == RecoverError.InvalidSignatureS) {
revert ECDSAInvalidSignatureS(errorArg);
}
}
}{
"remappings": [
"forge-std/=lib/forge-std/src/",
"aave-address-book/=lib/aave-address-book/src/",
"cl-synchronicity-price-adapter/=lib/cl-synchronicity-price-adapter/src/",
"aave-helpers/=lib/aave-helpers/src/",
"solidity-utils/=lib/aave-address-book/lib/aave-v3-origin/lib/solidity-utils/src/",
"aave-v3-origin/=lib/aave-address-book/lib/aave-v3-origin/src/",
"@openzeppelin/contracts-upgradeable/=lib/aave-address-book/lib/aave-v3-origin/lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/aave-address-book/lib/aave-v3-origin/lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
"aave-v3-origin-tests/=lib/aave-helpers/lib/aave-address-book/lib/aave-v3-origin/tests/",
"ds-test/=lib/cl-synchronicity-price-adapter/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/aave-address-book/lib/aave-v3-origin/lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"halmos-cheatcodes/=lib/aave-address-book/lib/aave-v3-origin/lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts-upgradeable/=lib/aave-address-book/lib/aave-v3-origin/lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/aave-address-book/lib/aave-v3-origin/lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"uint8[]","name":"_weights","type":"uint8[]"},{"internalType":"uint256","name":"_quorum","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"destination","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"uint256","name":"gasLimit","type":"uint256"}],"name":"DestinationCalled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address[]","name":"signers","type":"address[]"},{"indexed":false,"internalType":"uint8[]","name":"weights","type":"uint8[]"},{"indexed":false,"internalType":"uint256","name":"quorum","type":"uint256"}],"name":"SignersChanged","type":"event"},{"inputs":[],"name":"EIP712DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MULTISIGN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NAME_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALT","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION_HASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"sigV","type":"uint8[]"},{"internalType":"bytes32[]","name":"sigR","type":"bytes32[]"},{"internalType":"bytes32[]","name":"sigS","type":"bytes32[]"},{"internalType":"address","name":"executor","type":"address"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"gasLimit","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"uint8[]","name":"_weights","type":"uint8[]"},{"internalType":"uint256","name":"_quorum","type":"uint256"}],"name":"setSigners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"signerWeight","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"signers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"}]Contract Creation Code
0x60a060405234801561000f575f80fd5b50604051611b24380380611b2483398101604081905261002e9161063b565b604080517fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647260208201527fa2743967920baf970a18574423a5e903484167f01ff6c1b931ebc9e87d7792b9918101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a08201527f55c2a1c584c6a7013cb797a4622f427c630274bf9e8d9ec26ab9015ddaabcb3360c082015260e00160408051601f198184030181529190528051602090910120608052610101838383610146565b7fe2c7cc05d6a250c8fb4d739ae5f31172a68a7d6c959f49711fee51c7099c8015308484846040516101369493929190610716565b60405180910390a15050506107f3565b6020835111156101b35760405162461bcd60e51b815260206004820152602d60248201527f436f6e747261637420616c6c6f777320616464696e6720757020746f2033322060448201526c39b4b3b732b9399037b7363c9760991b60648201526084015b60405180910390fd5b5f81116102025760405162461bcd60e51b815260206004820152601360248201527f51756f72756d2063616e6e6f7420626520302e0000000000000000000000000060448201526064016101aa565b6002545f5b818110156102b1575f60035f60028481548110610226576102266107ba565b5f918252602080832091909101546001600160a01b031683528201929092526040018120805460ff19169215159290921790915560028054600491839185908110610273576102736107ba565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191660ff92909216919091179055600101610207565b5083515f908190815b8181101561044e57826001600160a01b03168882815181106102de576102de6107ba565b60200260200101516001600160a01b03161161033c5760405162461bcd60e51b815260206004820152601a60248201527f4164647265737365732073686f756c6420626520736f7274656400000000000060448201526064016101aa565b600160035f8a8481518110610353576103536107ba565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff0219169083151502179055508681815181106103a2576103a26107ba565b602002602001015160045f8a84815181106103bf576103bf6107ba565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908360ff16021790555086818151811061040f5761040f6107ba565b602002602001015160ff168461042591906107ce565b9350878181518110610439576104396107ba565b602002602001015192508060010190506102ba565b50828511156104c55760405162461bcd60e51b815260206004820152603e60248201527f51756f72756d206d757374206265206c657373207468616e206f72206571756160448201527f6c20746f2073756d206f6620616c6c207369676e65722077656967687473000060648201526084016101aa565b86516104d89060029060208a01906104e6565b5050505f9290925550505050565b828054828255905f5260205f20908101928215610539579160200282015b8281111561053957825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610504565b50610545929150610549565b5090565b5b80821115610545575f815560010161054a565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156105995761059961055d565b604052919050565b5f6001600160401b038211156105b9576105b961055d565b5060051b60200190565b5f82601f8301126105d2575f80fd5b81516105e56105e0826105a1565b610571565b8082825260208201915060208360051b860101925085831115610606575f80fd5b602085015b8381101561063157805160ff81168114610623575f80fd5b83526020928301920161060b565b5095945050505050565b5f805f6060848603121561064d575f80fd5b83516001600160401b03811115610662575f80fd5b8401601f81018613610672575f80fd5b80516106806105e0826105a1565b8082825260208201915060208360051b8501019250888311156106a1575f80fd5b6020840193505b828410156106d75783516001600160a01b03811681146106c6575f80fd5b8252602093840193909101906106a8565b6020880151909650925050506001600160401b038111156106f6575f80fd5b610702868287016105c3565b604095909501519396949550929392505050565b6001600160a01b03851681526080602080830182905285519183018290525f919086019060a0840190835b818110156107685783516001600160a01b0316835260209384019390920191600101610741565b50508381036040850152855180825260209182019250908601905f5b818110156107a557825160ff16845260209384019390920191600101610784565b50505060609290920192909252949350505050565b634e487b7160e01b5f52603260045260245ffd5b808201808211156107ed57634e487b7160e01b5f52601160045260245ffd5b92915050565b60805161131961080b5f395f6102d801526113195ff3fe608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80635b61be2b1161006e5780635b61be2b146101535780637460837f1461017a5780639e4e73181461018d578063affed0e0146101b4578063ba9a91a5146101bd578063c49f91d3146101e4575f80fd5b806304622c2e146100aa57806311858c7a146100e45780631703a018146100f95780632a9a3cca1461010157806346f0975a1461013e575b5f80fd5b6100d17fa2743967920baf970a18574423a5e903484167f01ff6c1b931ebc9e87d7792b981565b6040519081526020015b60405180910390f35b6100f76100f2366004610fa6565b61020b565b005b6100d15f5481565b61012c61010f36600461108e565b6001600160a01b03165f9081526004602052604090205460ff1690565b60405160ff90911681526020016100db565b610146610731565b6040516100db91906110f1565b6100d17fb8dc02dde922989f2f9c331431088d8b7e24696ed816c001c5b82192a1c91a8f81565b6100f7610188366004611103565b610791565b6100d17fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6100d160015481565b6100d17f55c2a1c584c6a7013cb797a4622f427c630274bf9e8d9ec26ab9015ddaabcb3381565b6100d17fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647281565b8551875114801561021d575087518751145b61027d5760405162461bcd60e51b815260206004820152602660248201527f4c656e677468206f66207369676e61747572652061727261797320646f6e742060448201526536b0ba31b41760d11b60648201526084015b60405180910390fd5b6001600160a01b03851633146102d55760405162461bcd60e51b815260206004820152601d60248201527f4578656375746f722068617320746f206265207468652073656e6465720000006044820152606401610274565b5f7f00000000000000000000000000000000000000000000000000000000000000007fb8dc02dde922989f2f9c331431088d8b7e24696ed816c001c5b82192a1c91a8f5f1b86858560405161032b9291906111cf565b6040805191829003822060015460208401959095526001600160a01b039384169183019190915260608201526080810192909252881660a082015260c0810186905260e001604051602081830303815290604052805190602001206040516020016103ad92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f805f8b5190505f5b81811015610547575f61042e868f84815181106103ed576103ed6111de565b60200260200101518f8581518110610407576104076111de565b60200260200101518f8681518110610421576104216111de565b6020026020010151610853565b9050836001600160a01b0316816001600160a01b0316116104915760405162461bcd60e51b815260206004820152601c60248201527f5369676e61747572657320617265206f7574206f66206f726465722e000000006044820152606401610274565b6001600160a01b0381165f9081526003602052604090205460ff166105125760405162461bcd60e51b815260206004820152603160248201527f41646472657373207265636f76657265642066726f6d207369676e61747572656044820152701034b9903737ba10309039b4b3b732b91760791b6064820152608401610274565b6001600160a01b0381165f90815260046020526040902054909350839061053c9060ff16866111f2565b9450506001016103ce565b505f548310156105b75760405162461bcd60e51b815260206004820152603560248201527f5369676e6174757265207765696768747320646f6e27742061646420757020746044820152746f207468652072657175697265642071756f72756d60581b6064820152608401610274565b600180546105c4916111f2565b6001556001600160a01b0388163b6106375760405162461bcd60e51b815260206004820152603060248201527f44657374696e6174696f6e20616464726573732073686f756c6420626520612060448201526f636f6e7472616374206164647265737360801b6064820152608401610274565b5f886001600160a01b03168888886040516106539291906111cf565b5f604051808303815f8787f1925050503d805f811461068d576040519150601f19603f3d011682016040523d82523d5f602084013e610692565b606091505b5050809150507f12755f149014f092798e7a1dcebf8826377f7885d03bd09cba554d56703788f78988888b6040516106cd9493929190611217565b60405180910390a1806107225760405162461bcd60e51b815260206004820181905260248201527f5375626d697373696f6e20746f2064657374696e6174696f6e206661696c65646044820152606401610274565b50505050505050505050505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561078757602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610769575b5050505050905090565b3330146108065760405162461bcd60e51b815260206004820152603f60248201527f4f6e6c79207468697320636f6e74726163742063616e20736574207369676e6560448201527f7273206166746572207369676e617475726520766572696669636174696f6e006064820152608401610274565b61081183838361087f565b7fe2c7cc05d6a250c8fb4d739ae5f31172a68a7d6c959f49711fee51c7099c801530848484604051610846949392919061125f565b60405180910390a1505050565b5f805f8061086388888888610c10565b9250925092506108738282610cd8565b50909695505050505050565b6020835111156108e75760405162461bcd60e51b815260206004820152602d60248201527f436f6e747261637420616c6c6f777320616464696e6720757020746f2033322060448201526c39b4b3b732b9399037b7363c9760991b6064820152608401610274565b5f811161092c5760405162461bcd60e51b815260206004820152601360248201527228bab7b93ab69031b0b73737ba10313290181760691b6044820152606401610274565b6002545f5b818110156109db575f60035f60028481548110610950576109506111de565b5f918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556002805460049183918590811061099d5761099d6111de565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191660ff92909216919091179055600101610931565b5083515f908190815b81811015610b7857826001600160a01b0316888281518110610a0857610a086111de565b60200260200101516001600160a01b031611610a665760405162461bcd60e51b815260206004820152601a60248201527f4164647265737365732073686f756c6420626520736f727465640000000000006044820152606401610274565b600160035f8a8481518110610a7d57610a7d6111de565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908315150217905550868181518110610acc57610acc6111de565b602002602001015160045f8a8481518110610ae957610ae96111de565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908360ff160217905550868181518110610b3957610b396111de565b602002602001015160ff1684610b4f91906111f2565b9350878181518110610b6357610b636111de565b602002602001015192508060010190506109e4565b5082851115610bef5760405162461bcd60e51b815260206004820152603e60248201527f51756f72756d206d757374206265206c657373207468616e206f72206571756160448201527f6c20746f2073756d206f6620616c6c207369676e6572207765696768747300006064820152608401610274565b8651610c029060029060208a0190610d94565b5050505f9290925550505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c4957505f91506003905082610cce565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c9a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cc557505f925060019150829050610cce565b92505f91508190505b9450945094915050565b5f826003811115610ceb57610ceb6112cf565b03610cf4575050565b6001826003811115610d0857610d086112cf565b03610d265760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d3a57610d3a6112cf565b03610d5b5760405163fce698f760e01b815260048101829052602401610274565b6003826003811115610d6f57610d6f6112cf565b03610d90576040516335e2f38360e21b815260048101829052602401610274565b5050565b828054828255905f5260205f20908101928215610de7579160200282015b82811115610de757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610db2565b50610df3929150610df7565b5090565b5b80821115610df3575f8155600101610df8565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e4857610e48610e0b565b604052919050565b5f67ffffffffffffffff821115610e6957610e69610e0b565b5060051b60200190565b5f82601f830112610e82575f80fd5b8135610e95610e9082610e50565b610e1f565b8082825260208201915060208360051b860101925085831115610eb6575f80fd5b602085015b83811015610ee157803560ff81168114610ed3575f80fd5b835260209283019201610ebb565b5095945050505050565b5f82601f830112610efa575f80fd5b8135610f08610e9082610e50565b8082825260208201915060208360051b860101925085831115610f29575f80fd5b602085015b83811015610ee1578035835260209283019201610f2e565b80356001600160a01b0381168114610f5c575f80fd5b919050565b5f8083601f840112610f71575f80fd5b50813567ffffffffffffffff811115610f88575f80fd5b602083019150836020828501011115610f9f575f80fd5b9250929050565b5f805f805f805f8060e0898b031215610fbd575f80fd5b883567ffffffffffffffff811115610fd3575f80fd5b610fdf8b828c01610e73565b985050602089013567ffffffffffffffff811115610ffb575f80fd5b6110078b828c01610eeb565b975050604089013567ffffffffffffffff811115611023575f80fd5b61102f8b828c01610eeb565b96505061103e60608a01610f46565b945061104c60808a01610f46565b935060a0890135925060c089013567ffffffffffffffff81111561106e575f80fd5b61107a8b828c01610f61565b999c989b5096995094979396929594505050565b5f6020828403121561109e575f80fd5b6110a782610f46565b9392505050565b5f8151808452602084019350602083015f5b828110156110e75781516001600160a01b03168652602095860195909101906001016110c0565b5093949350505050565b602081525f6110a760208301846110ae565b5f805f60608486031215611115575f80fd5b833567ffffffffffffffff81111561112b575f80fd5b8401601f8101861361113b575f80fd5b8035611149610e9082610e50565b8082825260208201915060208360051b85010192508883111561116a575f80fd5b6020840193505b828410156111935761118284610f46565b825260209384019390910190611171565b9550505050602084013567ffffffffffffffff8111156111b1575f80fd5b6111bd86828701610e73565b93969395505050506040919091013590565b818382375f9101908152919050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561121157634e487b7160e01b5f52601160045260245ffd5b92915050565b6001600160a01b03851681526060602082018190528101839052828460808301375f608084830101525f6080601f19601f860116830101905082604083015295945050505050565b6001600160a01b03851681526080602082018190525f90611282908301866110ae565b8281036040840152845180825260208087019201905f5b818110156112ba57835160ff16835260209384019390920191600101611299565b50506060939093019390935250949350505050565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212208a2211d33b6a3e2525a613c20565b9768042c2f970e559b309fdde158d647c3964736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000380000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000000000000000000000000000000000000000000180000000000000000000000000531c42c697e82bf7b7dccebdf9f54ddbbd728660000000000000000000000000ca0acf822faa6269458dbf46be1d29d264b815200000000000000000000000011c9bfd153ddd223eadac5e6d579d8834780ccc9000000000000000000000000174bb48dd625d75a3f6de72e7e8cc9790f741b430000000000000000000000002de370ae3ae8f287a1fe5c965bd3f166694fddbf0000000000000000000000002eb17005fa381d0eac55e43acadf276a7f93e187000000000000000000000000422a428af79dafc0203869604ef247b23cef2f8400000000000000000000000043fd5eb060d399e6e7a65e7487b91d59de7858ec00000000000000000000000046eb68d9ea5f69cd56b062898ae0b393fc4ccaf60000000000000000000000005ddbd1ad1c1d8a2e9d398a1e5949f9ba77fdff840000000000000000000000005fd2bcc6c8dc4df9fd3d1eb4dd4e3d3bc1a4dcc4000000000000000000000000747465a91ce092d161f15f4f704319676fd8280100000000000000000000000076634e26dde2d01962c3857aad89650e58fb2bcf0000000000000000000000008287885371490eb013b4cd257ffc0cfbbac56c0d0000000000000000000000008f5d996736d898ea87c474be007ad2ffd8d9ec26000000000000000000000000ac7d50a18b0b5a542b30c6136387eb70e3faba64000000000000000000000000bdec898ac86ffd50d883616cad02a7ad46eefa39000000000000000000000000c5874b1d64aa243e6f833b7544f4f88482b736b7000000000000000000000000c94275165b5dba95f43f14faf822604c652aa1aa000000000000000000000000db7bc288effd3bc3d3d45ff09b94a3ef554e7c3d000000000000000000000000de8adb41ffbbfad6c748d4f8be587de4b500e9fe000000000000000000000000e1548a14498125bfb4c012eaf88802f7d83b8bc5000000000000000000000000ea23cc32e2eb009a0623c5faf8070bb32445fdc9000000000000000000000000ff12cc1bb828a191b0686e1d8332f41510604ad90000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000d
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100a6575f3560e01c80635b61be2b1161006e5780635b61be2b146101535780637460837f1461017a5780639e4e73181461018d578063affed0e0146101b4578063ba9a91a5146101bd578063c49f91d3146101e4575f80fd5b806304622c2e146100aa57806311858c7a146100e45780631703a018146100f95780632a9a3cca1461010157806346f0975a1461013e575b5f80fd5b6100d17fa2743967920baf970a18574423a5e903484167f01ff6c1b931ebc9e87d7792b981565b6040519081526020015b60405180910390f35b6100f76100f2366004610fa6565b61020b565b005b6100d15f5481565b61012c61010f36600461108e565b6001600160a01b03165f9081526004602052604090205460ff1690565b60405160ff90911681526020016100db565b610146610731565b6040516100db91906110f1565b6100d17fb8dc02dde922989f2f9c331431088d8b7e24696ed816c001c5b82192a1c91a8f81565b6100f7610188366004611103565b610791565b6100d17fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b6100d160015481565b6100d17f55c2a1c584c6a7013cb797a4622f427c630274bf9e8d9ec26ab9015ddaabcb3381565b6100d17fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647281565b8551875114801561021d575087518751145b61027d5760405162461bcd60e51b815260206004820152602660248201527f4c656e677468206f66207369676e61747572652061727261797320646f6e742060448201526536b0ba31b41760d11b60648201526084015b60405180910390fd5b6001600160a01b03851633146102d55760405162461bcd60e51b815260206004820152601d60248201527f4578656375746f722068617320746f206265207468652073656e6465720000006044820152606401610274565b5f7f73c9ac6b68bb026b889b027ac9ea6b4de59d02da7a19055f51b327177aa4a9957fb8dc02dde922989f2f9c331431088d8b7e24696ed816c001c5b82192a1c91a8f5f1b86858560405161032b9291906111cf565b6040805191829003822060015460208401959095526001600160a01b039384169183019190915260608201526080810192909252881660a082015260c0810186905260e001604051602081830303815290604052805190602001206040516020016103ad92919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f805f8b5190505f5b81811015610547575f61042e868f84815181106103ed576103ed6111de565b60200260200101518f8581518110610407576104076111de565b60200260200101518f8681518110610421576104216111de565b6020026020010151610853565b9050836001600160a01b0316816001600160a01b0316116104915760405162461bcd60e51b815260206004820152601c60248201527f5369676e61747572657320617265206f7574206f66206f726465722e000000006044820152606401610274565b6001600160a01b0381165f9081526003602052604090205460ff166105125760405162461bcd60e51b815260206004820152603160248201527f41646472657373207265636f76657265642066726f6d207369676e61747572656044820152701034b9903737ba10309039b4b3b732b91760791b6064820152608401610274565b6001600160a01b0381165f90815260046020526040902054909350839061053c9060ff16866111f2565b9450506001016103ce565b505f548310156105b75760405162461bcd60e51b815260206004820152603560248201527f5369676e6174757265207765696768747320646f6e27742061646420757020746044820152746f207468652072657175697265642071756f72756d60581b6064820152608401610274565b600180546105c4916111f2565b6001556001600160a01b0388163b6106375760405162461bcd60e51b815260206004820152603060248201527f44657374696e6174696f6e20616464726573732073686f756c6420626520612060448201526f636f6e7472616374206164647265737360801b6064820152608401610274565b5f886001600160a01b03168888886040516106539291906111cf565b5f604051808303815f8787f1925050503d805f811461068d576040519150601f19603f3d011682016040523d82523d5f602084013e610692565b606091505b5050809150507f12755f149014f092798e7a1dcebf8826377f7885d03bd09cba554d56703788f78988888b6040516106cd9493929190611217565b60405180910390a1806107225760405162461bcd60e51b815260206004820181905260248201527f5375626d697373696f6e20746f2064657374696e6174696f6e206661696c65646044820152606401610274565b50505050505050505050505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561078757602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610769575b5050505050905090565b3330146108065760405162461bcd60e51b815260206004820152603f60248201527f4f6e6c79207468697320636f6e74726163742063616e20736574207369676e6560448201527f7273206166746572207369676e617475726520766572696669636174696f6e006064820152608401610274565b61081183838361087f565b7fe2c7cc05d6a250c8fb4d739ae5f31172a68a7d6c959f49711fee51c7099c801530848484604051610846949392919061125f565b60405180910390a1505050565b5f805f8061086388888888610c10565b9250925092506108738282610cd8565b50909695505050505050565b6020835111156108e75760405162461bcd60e51b815260206004820152602d60248201527f436f6e747261637420616c6c6f777320616464696e6720757020746f2033322060448201526c39b4b3b732b9399037b7363c9760991b6064820152608401610274565b5f811161092c5760405162461bcd60e51b815260206004820152601360248201527228bab7b93ab69031b0b73737ba10313290181760691b6044820152606401610274565b6002545f5b818110156109db575f60035f60028481548110610950576109506111de565b5f918252602080832091909101546001600160a01b031683528201929092526040018120805460ff1916921515929092179091556002805460049183918590811061099d5761099d6111de565b5f918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191660ff92909216919091179055600101610931565b5083515f908190815b81811015610b7857826001600160a01b0316888281518110610a0857610a086111de565b60200260200101516001600160a01b031611610a665760405162461bcd60e51b815260206004820152601a60248201527f4164647265737365732073686f756c6420626520736f727465640000000000006044820152606401610274565b600160035f8a8481518110610a7d57610a7d6111de565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908315150217905550868181518110610acc57610acc6111de565b602002602001015160045f8a8481518110610ae957610ae96111de565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908360ff160217905550868181518110610b3957610b396111de565b602002602001015160ff1684610b4f91906111f2565b9350878181518110610b6357610b636111de565b602002602001015192508060010190506109e4565b5082851115610bef5760405162461bcd60e51b815260206004820152603e60248201527f51756f72756d206d757374206265206c657373207468616e206f72206571756160448201527f6c20746f2073756d206f6620616c6c207369676e6572207765696768747300006064820152608401610274565b8651610c029060029060208a0190610d94565b5050505f9290925550505050565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610c4957505f91506003905082610cce565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610c9a573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b038116610cc557505f925060019150829050610cce565b92505f91508190505b9450945094915050565b5f826003811115610ceb57610ceb6112cf565b03610cf4575050565b6001826003811115610d0857610d086112cf565b03610d265760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d3a57610d3a6112cf565b03610d5b5760405163fce698f760e01b815260048101829052602401610274565b6003826003811115610d6f57610d6f6112cf565b03610d90576040516335e2f38360e21b815260048101829052602401610274565b5050565b828054828255905f5260205f20908101928215610de7579160200282015b82811115610de757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190610db2565b50610df3929150610df7565b5090565b5b80821115610df3575f8155600101610df8565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e4857610e48610e0b565b604052919050565b5f67ffffffffffffffff821115610e6957610e69610e0b565b5060051b60200190565b5f82601f830112610e82575f80fd5b8135610e95610e9082610e50565b610e1f565b8082825260208201915060208360051b860101925085831115610eb6575f80fd5b602085015b83811015610ee157803560ff81168114610ed3575f80fd5b835260209283019201610ebb565b5095945050505050565b5f82601f830112610efa575f80fd5b8135610f08610e9082610e50565b8082825260208201915060208360051b860101925085831115610f29575f80fd5b602085015b83811015610ee1578035835260209283019201610f2e565b80356001600160a01b0381168114610f5c575f80fd5b919050565b5f8083601f840112610f71575f80fd5b50813567ffffffffffffffff811115610f88575f80fd5b602083019150836020828501011115610f9f575f80fd5b9250929050565b5f805f805f805f8060e0898b031215610fbd575f80fd5b883567ffffffffffffffff811115610fd3575f80fd5b610fdf8b828c01610e73565b985050602089013567ffffffffffffffff811115610ffb575f80fd5b6110078b828c01610eeb565b975050604089013567ffffffffffffffff811115611023575f80fd5b61102f8b828c01610eeb565b96505061103e60608a01610f46565b945061104c60808a01610f46565b935060a0890135925060c089013567ffffffffffffffff81111561106e575f80fd5b61107a8b828c01610f61565b999c989b5096995094979396929594505050565b5f6020828403121561109e575f80fd5b6110a782610f46565b9392505050565b5f8151808452602084019350602083015f5b828110156110e75781516001600160a01b03168652602095860195909101906001016110c0565b5093949350505050565b602081525f6110a760208301846110ae565b5f805f60608486031215611115575f80fd5b833567ffffffffffffffff81111561112b575f80fd5b8401601f8101861361113b575f80fd5b8035611149610e9082610e50565b8082825260208201915060208360051b85010192508883111561116a575f80fd5b6020840193505b828410156111935761118284610f46565b825260209384019390910190611171565b9550505050602084013567ffffffffffffffff8111156111b1575f80fd5b6111bd86828701610e73565b93969395505050506040919091013590565b818382375f9101908152919050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561121157634e487b7160e01b5f52601160045260245ffd5b92915050565b6001600160a01b03851681526060602082018190528101839052828460808301375f608084830101525f6080601f19601f860116830101905082604083015295945050505050565b6001600160a01b03851681526080602082018190525f90611282908301866110ae565b8281036040840152845180825260208087019201905f5b818110156112ba57835160ff16835260209384019390920191600101611299565b50506060939093019390935250949350505050565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212208a2211d33b6a3e2525a613c20565b9768042c2f970e559b309fdde158d647c3964736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.