Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 4731515 | 138 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TimelockController
Compiler Version
v0.8.21+commit.d9974bed
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (governance/TimelockController.sol)
pragma solidity ^0.8.20;
import {AccessControl} from "../access/AccessControl.sol";
import {ERC721Holder} from "../token/ERC721/utils/ERC721Holder.sol";
import {ERC1155Holder} from "../token/ERC1155/utils/ERC1155Holder.sol";
import {Address} from "../utils/Address.sol";
/**
* @dev Contract module which acts as a timelocked controller. When set as the
* owner of an `Ownable` smart contract, it enforces a timelock on all
* `onlyOwner` maintenance operations. This gives time for users of the
* controlled contract to exit before a potentially dangerous maintenance
* operation is applied.
*
* By default, this contract is self administered, meaning administration tasks
* have to go through the timelock process. The proposer (resp executor) role
* is in charge of proposing (resp executing) operations. A common use case is
* to position this {TimelockController} as the owner of a smart contract, with
* a multisig or a DAO as the sole proposer.
*/
contract TimelockController is AccessControl, ERC721Holder, ERC1155Holder {
bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE");
bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE");
bytes32 public constant CANCELLER_ROLE = keccak256("CANCELLER_ROLE");
uint256 internal constant _DONE_TIMESTAMP = uint256(1);
mapping(bytes32 id => uint256) private _timestamps;
uint256 private _minDelay;
enum OperationState {
Unset,
Waiting,
Ready,
Done
}
/**
* @dev Mismatch between the parameters length for an operation call.
*/
error TimelockInvalidOperationLength(uint256 targets, uint256 payloads, uint256 values);
/**
* @dev The schedule operation doesn't meet the minimum delay.
*/
error TimelockInsufficientDelay(uint256 delay, uint256 minDelay);
/**
* @dev The current state of an operation is not as required.
* The `expectedStates` is a bitmap with the bits enabled for each OperationState enum position
* counting from right to left.
*
* See {_encodeStateBitmap}.
*/
error TimelockUnexpectedOperationState(bytes32 operationId, bytes32 expectedStates);
/**
* @dev The predecessor to an operation not yet done.
*/
error TimelockUnexecutedPredecessor(bytes32 predecessorId);
/**
* @dev The caller account is not authorized.
*/
error TimelockUnauthorizedCaller(address caller);
/**
* @dev Emitted when a call is scheduled as part of operation `id`.
*/
event CallScheduled(
bytes32 indexed id,
uint256 indexed index,
address target,
uint256 value,
bytes data,
bytes32 predecessor,
uint256 delay
);
/**
* @dev Emitted when a call is performed as part of operation `id`.
*/
event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data);
/**
* @dev Emitted when new proposal is scheduled with non-zero salt.
*/
event CallSalt(bytes32 indexed id, bytes32 salt);
/**
* @dev Emitted when operation `id` is cancelled.
*/
event Cancelled(bytes32 indexed id);
/**
* @dev Emitted when the minimum delay for future operations is modified.
*/
event MinDelayChange(uint256 oldDuration, uint256 newDuration);
/**
* @dev Initializes the contract with the following parameters:
*
* - `minDelay`: initial minimum delay in seconds for operations
* - `proposers`: accounts to be granted proposer and canceller roles
* - `executors`: accounts to be granted executor role
* - `admin`: optional account to be granted admin role; disable with zero address
*
* IMPORTANT: The optional admin can aid with initial configuration of roles after deployment
* without being subject to delay, but this role should be subsequently renounced in favor of
* administration through timelocked proposals. Previous versions of this contract would assign
* this admin to the deployer automatically and should be renounced as well.
*/
constructor(uint256 minDelay, address[] memory proposers, address[] memory executors, address admin) {
// self administration
_grantRole(DEFAULT_ADMIN_ROLE, address(this));
// optional admin
if (admin != address(0)) {
_grantRole(DEFAULT_ADMIN_ROLE, admin);
}
// register proposers and cancellers
for (uint256 i = 0; i < proposers.length; ++i) {
_grantRole(PROPOSER_ROLE, proposers[i]);
_grantRole(CANCELLER_ROLE, proposers[i]);
}
// register executors
for (uint256 i = 0; i < executors.length; ++i) {
_grantRole(EXECUTOR_ROLE, executors[i]);
}
_minDelay = minDelay;
emit MinDelayChange(0, minDelay);
}
/**
* @dev Modifier to make a function callable only by a certain role. In
* addition to checking the sender's role, `address(0)` 's role is also
* considered. Granting a role to `address(0)` is equivalent to enabling
* this role for everyone.
*/
modifier onlyRoleOrOpenRole(bytes32 role) {
if (!hasRole(role, address(0))) {
_checkRole(role, _msgSender());
}
_;
}
/**
* @dev Contract might receive/hold ETH as part of the maintenance process.
*/
receive() external payable {}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(
bytes4 interfaceId
) public view virtual override(AccessControl, ERC1155Holder) returns (bool) {
return super.supportsInterface(interfaceId);
}
/**
* @dev Returns whether an id corresponds to a registered operation. This
* includes both Waiting, Ready, and Done operations.
*/
function isOperation(bytes32 id) public view returns (bool) {
return getOperationState(id) != OperationState.Unset;
}
/**
* @dev Returns whether an operation is pending or not. Note that a "pending" operation may also be "ready".
*/
function isOperationPending(bytes32 id) public view returns (bool) {
OperationState state = getOperationState(id);
return state == OperationState.Waiting || state == OperationState.Ready;
}
/**
* @dev Returns whether an operation is ready for execution. Note that a "ready" operation is also "pending".
*/
function isOperationReady(bytes32 id) public view returns (bool) {
return getOperationState(id) == OperationState.Ready;
}
/**
* @dev Returns whether an operation is done or not.
*/
function isOperationDone(bytes32 id) public view returns (bool) {
return getOperationState(id) == OperationState.Done;
}
/**
* @dev Returns the timestamp at which an operation becomes ready (0 for
* unset operations, 1 for done operations).
*/
function getTimestamp(bytes32 id) public view virtual returns (uint256) {
return _timestamps[id];
}
/**
* @dev Returns operation state.
*/
function getOperationState(bytes32 id) public view virtual returns (OperationState) {
uint256 timestamp = getTimestamp(id);
if (timestamp == 0) {
return OperationState.Unset;
} else if (timestamp == _DONE_TIMESTAMP) {
return OperationState.Done;
} else if (timestamp > block.timestamp) {
return OperationState.Waiting;
} else {
return OperationState.Ready;
}
}
/**
* @dev Returns the minimum delay in seconds for an operation to become valid.
*
* This value can be changed by executing an operation that calls `updateDelay`.
*/
function getMinDelay() public view virtual returns (uint256) {
return _minDelay;
}
/**
* @dev Returns the identifier of an operation containing a single
* transaction.
*/
function hashOperation(
address target,
uint256 value,
bytes calldata data,
bytes32 predecessor,
bytes32 salt
) public pure virtual returns (bytes32) {
return keccak256(abi.encode(target, value, data, predecessor, salt));
}
/**
* @dev Returns the identifier of an operation containing a batch of
* transactions.
*/
function hashOperationBatch(
address[] calldata targets,
uint256[] calldata values,
bytes[] calldata payloads,
bytes32 predecessor,
bytes32 salt
) public pure virtual returns (bytes32) {
return keccak256(abi.encode(targets, values, payloads, predecessor, salt));
}
/**
* @dev Schedule an operation containing a single transaction.
*
* Emits {CallSalt} if salt is nonzero, and {CallScheduled}.
*
* Requirements:
*
* - the caller must have the 'proposer' role.
*/
function schedule(
address target,
uint256 value,
bytes calldata data,
bytes32 predecessor,
bytes32 salt,
uint256 delay
) public virtual onlyRole(PROPOSER_ROLE) {
bytes32 id = hashOperation(target, value, data, predecessor, salt);
_schedule(id, delay);
emit CallScheduled(id, 0, target, value, data, predecessor, delay);
if (salt != bytes32(0)) {
emit CallSalt(id, salt);
}
}
/**
* @dev Schedule an operation containing a batch of transactions.
*
* Emits {CallSalt} if salt is nonzero, and one {CallScheduled} event per transaction in the batch.
*
* Requirements:
*
* - the caller must have the 'proposer' role.
*/
function scheduleBatch(
address[] calldata targets,
uint256[] calldata values,
bytes[] calldata payloads,
bytes32 predecessor,
bytes32 salt,
uint256 delay
) public virtual onlyRole(PROPOSER_ROLE) {
if (targets.length != values.length || targets.length != payloads.length) {
revert TimelockInvalidOperationLength(targets.length, payloads.length, values.length);
}
bytes32 id = hashOperationBatch(targets, values, payloads, predecessor, salt);
_schedule(id, delay);
for (uint256 i = 0; i < targets.length; ++i) {
emit CallScheduled(id, i, targets[i], values[i], payloads[i], predecessor, delay);
}
if (salt != bytes32(0)) {
emit CallSalt(id, salt);
}
}
/**
* @dev Schedule an operation that is to become valid after a given delay.
*/
function _schedule(bytes32 id, uint256 delay) private {
if (isOperation(id)) {
revert TimelockUnexpectedOperationState(id, _encodeStateBitmap(OperationState.Unset));
}
uint256 minDelay = getMinDelay();
if (delay < minDelay) {
revert TimelockInsufficientDelay(delay, minDelay);
}
_timestamps[id] = block.timestamp + delay;
}
/**
* @dev Cancel an operation.
*
* Requirements:
*
* - the caller must have the 'canceller' role.
*/
function cancel(bytes32 id) public virtual onlyRole(CANCELLER_ROLE) {
if (!isOperationPending(id)) {
revert TimelockUnexpectedOperationState(
id,
_encodeStateBitmap(OperationState.Waiting) | _encodeStateBitmap(OperationState.Ready)
);
}
delete _timestamps[id];
emit Cancelled(id);
}
/**
* @dev Execute an (ready) operation containing a single transaction.
*
* Emits a {CallExecuted} event.
*
* Requirements:
*
* - the caller must have the 'executor' role.
*/
// This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending,
// thus any modifications to the operation during reentrancy should be caught.
// slither-disable-next-line reentrancy-eth
function execute(
address target,
uint256 value,
bytes calldata payload,
bytes32 predecessor,
bytes32 salt
) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
bytes32 id = hashOperation(target, value, payload, predecessor, salt);
_beforeCall(id, predecessor);
_execute(target, value, payload);
emit CallExecuted(id, 0, target, value, payload);
_afterCall(id);
}
/**
* @dev Execute an (ready) operation containing a batch of transactions.
*
* Emits one {CallExecuted} event per transaction in the batch.
*
* Requirements:
*
* - the caller must have the 'executor' role.
*/
// This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending,
// thus any modifications to the operation during reentrancy should be caught.
// slither-disable-next-line reentrancy-eth
function executeBatch(
address[] calldata targets,
uint256[] calldata values,
bytes[] calldata payloads,
bytes32 predecessor,
bytes32 salt
) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
if (targets.length != values.length || targets.length != payloads.length) {
revert TimelockInvalidOperationLength(targets.length, payloads.length, values.length);
}
bytes32 id = hashOperationBatch(targets, values, payloads, predecessor, salt);
_beforeCall(id, predecessor);
for (uint256 i = 0; i < targets.length; ++i) {
address target = targets[i];
uint256 value = values[i];
bytes calldata payload = payloads[i];
_execute(target, value, payload);
emit CallExecuted(id, i, target, value, payload);
}
_afterCall(id);
}
/**
* @dev Execute an operation's call.
*/
function _execute(address target, uint256 value, bytes calldata data) internal virtual {
(bool success, bytes memory returndata) = target.call{value: value}(data);
Address.verifyCallResult(success, returndata);
}
/**
* @dev Checks before execution of an operation's calls.
*/
function _beforeCall(bytes32 id, bytes32 predecessor) private view {
if (!isOperationReady(id)) {
revert TimelockUnexpectedOperationState(id, _encodeStateBitmap(OperationState.Ready));
}
if (predecessor != bytes32(0) && !isOperationDone(predecessor)) {
revert TimelockUnexecutedPredecessor(predecessor);
}
}
/**
* @dev Checks after execution of an operation's calls.
*/
function _afterCall(bytes32 id) private {
if (!isOperationReady(id)) {
revert TimelockUnexpectedOperationState(id, _encodeStateBitmap(OperationState.Ready));
}
_timestamps[id] = _DONE_TIMESTAMP;
}
/**
* @dev Changes the minimum timelock duration for future operations.
*
* Emits a {MinDelayChange} event.
*
* Requirements:
*
* - the caller must be the timelock itself. This can only be achieved by scheduling and later executing
* an operation where the timelock is the target and the data is the ABI-encoded call to this function.
*/
function updateDelay(uint256 newDelay) external virtual {
address sender = _msgSender();
if (sender != address(this)) {
revert TimelockUnauthorizedCaller(sender);
}
emit MinDelayChange(_minDelay, newDelay);
_minDelay = newDelay;
}
/**
* @dev Encodes a `OperationState` into a `bytes32` representation where each bit enabled corresponds to
* the underlying position in the `OperationState` enum. For example:
*
* 0x000...1000
* ^^^^^^----- ...
* ^---- Done
* ^--- Ready
* ^-- Waiting
* ^- Unset
*/
function _encodeStateBitmap(OperationState operationState) internal pure returns (bytes32) {
return bytes32(1 << uint8(operationState));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
import {IAccessControl} from "./IAccessControl.sol";
import {Context} from "../utils/Context.sol";
import {ERC165} from "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```solidity
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```solidity
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
* to enforce additional security measures for this role.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address account => bool) hasRole;
bytes32 adminRole;
}
mapping(bytes32 role => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with an {AccessControlUnauthorizedAccount} error including the required role.
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual returns (bool) {
return _roles[role].hasRole[account];
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
* is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
* is missing `role`.
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address callerConfirmation) public virtual {
if (callerConfirmation != _msgSender()) {
revert AccessControlBadConfirmation();
}
_revokeRole(role, callerConfirmation);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
if (!hasRole(role, account)) {
_roles[role].hasRole[account] = true;
emit RoleGranted(role, account, _msgSender());
return true;
} else {
return false;
}
}
/**
* @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
if (hasRole(role, account)) {
_roles[role].hasRole[account] = false;
emit RoleRevoked(role, account, _msgSender());
return true;
} else {
return false;
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev The `account` is missing a role.
*/
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
/**
* @dev The caller of a function is not the expected one.
*
* NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
*/
error AccessControlBadConfirmation();
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*/
function renounceRole(bytes32 role, address callerConfirmation) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/IERC1155Receiver.sol)
pragma solidity ^0.8.20;
import {IERC165} from "../../utils/introspection/IERC165.sol";
/**
* @dev Interface that must be implemented by smart contracts in order to receive
* ERC-1155 token transfers.
*/
interface IERC1155Receiver is IERC165 {
/**
* @dev Handles the receipt of a single ERC1155 token type. This function is
* called at the end of a `safeTransferFrom` after the balance has been updated.
*
* NOTE: To accept the transfer, this must return
* `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
* (i.e. 0xf23a6e61, or its own function selector).
*
* @param operator The address which initiated the transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param id The ID of the token being transferred
* @param value The amount of tokens being transferred
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
*/
function onERC1155Received(
address operator,
address from,
uint256 id,
uint256 value,
bytes calldata data
) external returns (bytes4);
/**
* @dev Handles the receipt of a multiple ERC1155 token types. This function
* is called at the end of a `safeBatchTransferFrom` after the balances have
* been updated.
*
* NOTE: To accept the transfer(s), this must return
* `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
* (i.e. 0xbc197c81, or its own function selector).
*
* @param operator The address which initiated the batch transfer (i.e. msg.sender)
* @param from The address which previously owned the token
* @param ids An array containing ids of each token being transferred (order and length must match values array)
* @param values An array containing amounts of each token being transferred (order and length must match ids array)
* @param data Additional data with no specified format
* @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
*/
function onERC1155BatchReceived(
address operator,
address from,
uint256[] calldata ids,
uint256[] calldata values,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC1155/utils/ERC1155Holder.sol)
pragma solidity ^0.8.20;
import {IERC165, ERC165} from "../../../utils/introspection/ERC165.sol";
import {IERC1155Receiver} from "../IERC1155Receiver.sol";
/**
* @dev Simple implementation of `IERC1155Receiver` that will allow a contract to hold ERC1155 tokens.
*
* IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
* stuck.
*/
abstract contract ERC1155Holder is ERC165, IERC1155Receiver {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
}
function onERC1155Received(
address,
address,
uint256,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155Received.selector;
}
function onERC1155BatchReceived(
address,
address,
uint256[] memory,
uint256[] memory,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155BatchReceived.selector;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.20;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be
* reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol)
pragma solidity ^0.8.20;
import {IERC721Receiver} from "../IERC721Receiver.sol";
/**
* @dev Implementation of the {IERC721Receiver} interface.
*
* Accepts all token transfers.
* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or
* {IERC721-setApprovalForAll}.
*/
abstract contract ERC721Holder is IERC721Receiver {
/**
* @dev See {IERC721Receiver-onERC721Received}.
*
* Always returns `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) {
return this.onERC721Received.selector;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {FailedInnerCall} error.
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
* unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {FailedInnerCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
import {IERC165} from "./IERC165.sol";
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}{
"evmVersion": "shanghai",
"metadata": {
"appendCBOR": true,
"bytecodeHash": "ipfs",
"useLiteralContent": false
},
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"remappings": [
"@solmate/=lib/solmate/src/",
"@forge-std/=lib/forge-std/src/",
"@ds-test/=lib/forge-std/lib/ds-test/src/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@ccip/=lib/ccip/",
"@oapp-auth/=lib/OAppAuth/src/",
"@devtools-oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/contracts/oapp/",
"@layerzerolabs/lz-evm-messagelib-v2/=lib/OAppAuth/node_modules/@layerzerolabs/lz-evm-messagelib-v2/",
"@layerzerolabs/lz-evm-protocol-v2/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/protocol/",
"@layerzerolabs/oapp-evm/=lib/OAppAuth/lib/devtools/packages/oapp-evm/",
"@lz-oapp-evm/=lib/OAppAuth/lib/LayerZero-V2/packages/layerzero-v2/evm/oapp/contracts/oapp/",
"@sbu/=lib/OAppAuth/lib/solidity-bytes-utils/",
"LayerZero-V2/=lib/OAppAuth/lib/",
"OAppAuth/=lib/OAppAuth/",
"ccip/=lib/ccip/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/OAppAuth/lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"solidity-bytes-utils/=lib/OAppAuth/node_modules/solidity-bytes-utils/",
"solmate/=lib/solmate/src/"
],
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"minDelay","type":"uint256"},{"internalType":"address[]","name":"proposers","type":"address[]"},{"internalType":"address[]","name":"executors","type":"address[]"},{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"minDelay","type":"uint256"}],"name":"TimelockInsufficientDelay","type":"error"},{"inputs":[{"internalType":"uint256","name":"targets","type":"uint256"},{"internalType":"uint256","name":"payloads","type":"uint256"},{"internalType":"uint256","name":"values","type":"uint256"}],"name":"TimelockInvalidOperationLength","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"TimelockUnauthorizedCaller","type":"error"},{"inputs":[{"internalType":"bytes32","name":"predecessorId","type":"bytes32"}],"name":"TimelockUnexecutedPredecessor","type":"error"},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32"},{"internalType":"bytes32","name":"expectedStates","type":"bytes32"}],"name":"TimelockUnexpectedOperationState","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"CallExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"CallSalt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"CallScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"MinDelayChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"CANCELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"executeBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMinDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getOperationState","outputs":[{"internalType":"enum TimelockController.OperationState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperation","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperationBatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"scheduleBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801562000010575f80fd5b5060405162001dab38038062001dab833981016040819052620000339162000331565b6200003f5f30620001ab565b506001600160a01b038116156200005e576200005c5f82620001ab565b505b5f5b83518110156200010757620000b87fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1858381518110620000a457620000a4620003b3565b6020026020010151620001ab60201b60201c565b50620000f37ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783858381518110620000a457620000a4620003b3565b50620000ff81620003c7565b905062000060565b505f5b825181101562000162576200014e7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63848381518110620000a457620000a4620003b3565b506200015a81620003c7565b90506200010a565b506002849055604080515f8152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050620003ec565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166200024e575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620002053390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000251565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b038116811462000282575f80fd5b919050565b5f82601f83011262000297575f80fd5b815160206001600160401b0380831115620002b657620002b662000257565b8260051b604051601f19603f83011681018181108482111715620002de57620002de62000257565b604052938452858101830193838101925087851115620002fc575f80fd5b83870191505b84821015620003265762000316826200026b565b8352918301919083019062000302565b979650505050505050565b5f805f806080858703121562000345575f80fd5b845160208601519094506001600160401b038082111562000364575f80fd5b620003728883890162000287565b9450604087015191508082111562000388575f80fd5b50620003978782880162000287565b925050620003a8606086016200026b565b905092959194509250565b634e487b7160e01b5f52603260045260245ffd5b5f60018201620003e557634e487b7160e01b5f52601160045260245ffd5b5060010190565b6119b180620003fa5f395ff3fe6080604052600436106101b2575f3560e01c80638065657f116100e7578063bc197c8111610087578063d547741f11610062578063d547741f14610546578063e38335e514610565578063f23a6e6114610578578063f27a0c92146105a3575f80fd5b8063bc197c81146104d1578063c4d252f5146104fc578063d45c44351461051b575f80fd5b806391d14854116100c257806391d148541461044d578063a217fddf1461046c578063b08e51c01461047f578063b1c5f427146104b2575f80fd5b80638065657f146103dc5780638f2a0bb0146103fb5780638f61f4f51461041a575f80fd5b80632ab0f5291161015257806336568abe1161012d57806336568abe14610353578063584b153e1461037257806364d62353146103915780637958004c146103b0575f80fd5b80632ab0f529146102f65780632f2ff15d1461031557806331d5075014610334575f80fd5b8063134008d31161018d578063134008d31461025357806313bc9f2014610266578063150b7a0214610285578063248a9ca3146102c8575f80fd5b806301d5062a146101bd57806301ffc9a7146101de57806307bd026514610212575f80fd5b366101b957005b5f80fd5b3480156101c8575f80fd5b506101dc6101d7366004611171565b6105b7565b005b3480156101e9575f80fd5b506101fd6101f83660046111df565b61068b565b60405190151581526020015b60405180910390f35b34801561021d575f80fd5b506102457fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610209565b6101dc610261366004611206565b61069b565b348015610271575f80fd5b506101fd61028036600461126c565b61074d565b348015610290575f80fd5b506102af61029f366004611332565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610209565b3480156102d3575f80fd5b506102456102e236600461126c565b5f9081526020819052604090206001015490565b348015610301575f80fd5b506101fd61031036600461126c565b610772565b348015610320575f80fd5b506101dc61032f366004611395565b61077a565b34801561033f575f80fd5b506101fd61034e36600461126c565b6107a4565b34801561035e575f80fd5b506101dc61036d366004611395565b6107c8565b34801561037d575f80fd5b506101fd61038c36600461126c565b610800565b34801561039c575f80fd5b506101dc6103ab36600461126c565b610845565b3480156103bb575f80fd5b506103cf6103ca36600461126c565b6108b8565b60405161020991906113d3565b3480156103e7575f80fd5b506102456103f6366004611206565b610900565b348015610406575f80fd5b506101dc610415366004611439565b61093e565b348015610425575f80fd5b506102457fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b348015610458575f80fd5b506101fd610467366004611395565b610ad2565b348015610477575f80fd5b506102455f81565b34801561048a575f80fd5b506102457ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104bd575f80fd5b506102456104cc3660046114e1565b610afa565b3480156104dc575f80fd5b506102af6104eb3660046115fd565b63bc197c8160e01b95945050505050565b348015610507575f80fd5b506101dc61051636600461126c565b610b3e565b348015610526575f80fd5b5061024561053536600461126c565b5f9081526001602052604090205490565b348015610551575f80fd5b506101dc610560366004611395565b610be8565b6101dc6105733660046114e1565b610c0c565b348015610583575f80fd5b506102af61059236600461169f565b63f23a6e6160e01b95945050505050565b3480156105ae575f80fd5b50600254610245565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc16105e181610d93565b5f6105f0898989898989610900565b90506105fc8184610da0565b5f817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161063796959493929190611726565b60405180910390a3831561068057807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161067791815260200190565b60405180910390a25b505050505050505050565b5f61069582610e31565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106c6815f610ad2565b6106d4576106d48133610e55565b5f6106e3888888888888610900565b90506106ef8185610e92565b6106fb88888888610ee0565b5f817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516107329493929190611762565b60405180910390a361074381610f54565b5050505050505050565b5f60025b61075a836108b8565b600381111561076b5761076b6113bf565b1492915050565b5f6003610751565b5f8281526020819052604090206001015461079481610d93565b61079e8383610f7f565b50505050565b5f806107af836108b8565b60038111156107c0576107c06113bf565b141592915050565b6001600160a01b03811633146107f15760405163334bd91960e11b815260040160405180910390fd5b6107fb828261100e565b505050565b5f8061080b836108b8565b90506001816003811115610821576108216113bf565b148061083e5750600281600381111561083c5761083c6113bf565b145b9392505050565b333081146108765760405163e2850c5960e01b81526001600160a01b03821660048201526024015b60405180910390fd5b60025460408051918252602082018490527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150600255565b5f81815260016020526040812054805f036108d557505f92915050565b600181036108e65750600392915050565b428111156108f75750600192915050565b50600292915050565b5f86868686868660405160200161091c96959493929190611726565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161096881610d93565b88871415806109775750888514155b156109a9576040516001624fcdef60e01b03198152600481018a9052602481018690526044810188905260640161086d565b5f6109ba8b8b8b8b8b8b8b8b610afa565b90506109c68184610da0565b5f5b8a811015610a835780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a0557610a05611793565b9050602002016020810190610a1a91906117a7565b8d8d86818110610a2c57610a2c611793565b905060200201358c8c87818110610a4557610a45611793565b9050602002810190610a5791906117c0565b8c8b604051610a6b96959493929190611726565b60405180910390a3610a7c81611816565b90506109c8565b508315610ac557807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610abc91815260200190565b60405180910390a25b5050505050505050505050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8888888888888888604051602001610b1a9897969594939291906118ba565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b6881610d93565b610b7182610800565b610bad5781610b806002611077565b610b8a6001611077565b604051635ead8eb560e01b8152600481019390935217602482015260440161086d565b5f828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b5f82815260208190526040902060010154610c0281610d93565b61079e838361100e565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c37815f610ad2565b610c4557610c458133610e55565b8786141580610c545750878414155b15610c86576040516001624fcdef60e01b0319815260048101899052602481018590526044810187905260640161086d565b5f610c978a8a8a8a8a8a8a8a610afa565b9050610ca38185610e92565b5f5b89811015610d7d575f8b8b83818110610cc057610cc0611793565b9050602002016020810190610cd591906117a7565b90505f8a8a84818110610cea57610cea611793565b905060200201359050365f8a8a86818110610d0757610d07611793565b9050602002810190610d1991906117c0565b91509150610d2984848484610ee0565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d609493929190611762565b60405180910390a35050505080610d7690611816565b9050610ca5565b50610d8781610f54565b50505050505050505050565b610d9d8133610e55565b50565b610da9826107a4565b15610dda5781610db85f611077565b604051635ead8eb560e01b81526004810192909252602482015260440161086d565b5f610de460025490565b905080821015610e1157604051635433660960e01b8152600481018390526024810182905260440161086d565b610e1b8242611959565b5f93845260016020526040909320929092555050565b5f6001600160e01b03198216630271189760e51b1480610695575061069582611099565b610e5f8282610ad2565b610e8e5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161086d565b5050565b610e9b8261074d565b610eaa5781610db86002611077565b8015801590610ebf5750610ebd81610772565b155b15610e8e5760405163121534c360e31b81526004810182905260240161086d565b5f80856001600160a01b0316858585604051610efd92919061196c565b5f6040518083038185875af1925050503d805f8114610f37576040519150601f19603f3d011682016040523d82523d5f602084013e610f3c565b606091505b5091509150610f4b82826110cd565b50505050505050565b610f5d8161074d565b610f6c5780610db86002611077565b5f90815260016020819052604090912055565b5f610f8a8383610ad2565b611007575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610fbf3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610695565b505f610695565b5f6110198383610ad2565b15611007575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610695565b5f81600381111561108a5761108a6113bf565b600160ff919091161b92915050565b5f6001600160e01b03198216637965db0b60e01b148061069557506301ffc9a760e01b6001600160e01b0319831614610695565b6060826110e2576110dd826110e9565b610695565b5080610695565b8051156110f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114611128575f80fd5b919050565b5f8083601f84011261113d575f80fd5b5081356001600160401b03811115611153575f80fd5b60208301915083602082850101111561116a575f80fd5b9250929050565b5f805f805f805f60c0888a031215611187575f80fd5b61119088611112565b96506020880135955060408801356001600160401b038111156111b1575f80fd5b6111bd8a828b0161112d565b989b979a50986060810135976080820135975060a09091013595509350505050565b5f602082840312156111ef575f80fd5b81356001600160e01b03198116811461083e575f80fd5b5f805f805f8060a0878903121561121b575f80fd5b61122487611112565b95506020870135945060408701356001600160401b03811115611245575f80fd5b61125189828a0161112d565b979a9699509760608101359660809091013595509350505050565b5f6020828403121561127c575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156112bf576112bf611283565b604052919050565b5f82601f8301126112d6575f80fd5b81356001600160401b038111156112ef576112ef611283565b611302601f8201601f1916602001611297565b818152846020838601011115611316575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611345575f80fd5b61134e85611112565b935061135c60208601611112565b92506040850135915060608501356001600160401b0381111561137d575f80fd5b611389878288016112c7565b91505092959194509250565b5f80604083850312156113a6575f80fd5b823591506113b660208401611112565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106113f357634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8083601f840112611409575f80fd5b5081356001600160401b0381111561141f575f80fd5b6020830191508360208260051b850101111561116a575f80fd5b5f805f805f805f805f60c08a8c031215611451575f80fd5b89356001600160401b0380821115611467575f80fd5b6114738d838e016113f9565b909b50995060208c013591508082111561148b575f80fd5b6114978d838e016113f9565b909950975060408c01359150808211156114af575f80fd5b506114bc8c828d016113f9565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b5f805f805f805f8060a0898b0312156114f8575f80fd5b88356001600160401b038082111561150e575f80fd5b61151a8c838d016113f9565b909a50985060208b0135915080821115611532575f80fd5b61153e8c838d016113f9565b909850965060408b0135915080821115611556575f80fd5b506115638b828c016113f9565b999c989b509699959896976060870135966080013595509350505050565b5f82601f830112611590575f80fd5b813560206001600160401b038211156115ab576115ab611283565b8160051b6115ba828201611297565b92835284810182019282810190878511156115d3575f80fd5b83870192505b848310156115f2578235825291830191908301906115d9565b979650505050505050565b5f805f805f60a08688031215611611575f80fd5b61161a86611112565b945061162860208701611112565b935060408601356001600160401b0380821115611643575f80fd5b61164f89838a01611581565b94506060880135915080821115611664575f80fd5b61167089838a01611581565b93506080880135915080821115611685575f80fd5b50611692888289016112c7565b9150509295509295909350565b5f805f805f60a086880312156116b3575f80fd5b6116bc86611112565b94506116ca60208701611112565b9350604086013592506060860135915060808601356001600160401b038111156116f2575f80fd5b611692888289016112c7565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a060408201525f61174d60a0830186886116fe565b60608301949094525060800152949350505050565b60018060a01b0385168152836020820152606060408201525f6117896060830184866116fe565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156117b7575f80fd5b61083e82611112565b5f808335601e198436030181126117d5575f80fd5b8301803591506001600160401b038211156117ee575f80fd5b60200191503681900382131561116a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161182757611827611802565b5060010190565b8183525f6020808501808196508560051b81019150845f5b878110156118ad5782840389528135601e19883603018112611866575f80fd5b870185810190356001600160401b03811115611880575f80fd5b80360382131561188e575f80fd5b6118998682846116fe565b9a87019a9550505090840190600101611846565b5091979650505050505050565b60a080825281018890525f8960c08301825b8b8110156118fa576001600160a01b036118e584611112565b168252602092830192909101906001016118cc565b5083810360208501528881526001600160fb1b03891115611919575f80fd5b8860051b9150818a60208301370182810360209081016040850152611941908201878961182e565b60608401959095525050608001529695505050505050565b8082018082111561069557610695611802565b818382375f910190815291905056fea2646970667358221220289ac0b7b9e1af8d68dac4b8b066733061a7925595a742577f206d041a8c582164736f6c634300081500330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e
Deployed Bytecode
0x6080604052600436106101b2575f3560e01c80638065657f116100e7578063bc197c8111610087578063d547741f11610062578063d547741f14610546578063e38335e514610565578063f23a6e6114610578578063f27a0c92146105a3575f80fd5b8063bc197c81146104d1578063c4d252f5146104fc578063d45c44351461051b575f80fd5b806391d14854116100c257806391d148541461044d578063a217fddf1461046c578063b08e51c01461047f578063b1c5f427146104b2575f80fd5b80638065657f146103dc5780638f2a0bb0146103fb5780638f61f4f51461041a575f80fd5b80632ab0f5291161015257806336568abe1161012d57806336568abe14610353578063584b153e1461037257806364d62353146103915780637958004c146103b0575f80fd5b80632ab0f529146102f65780632f2ff15d1461031557806331d5075014610334575f80fd5b8063134008d31161018d578063134008d31461025357806313bc9f2014610266578063150b7a0214610285578063248a9ca3146102c8575f80fd5b806301d5062a146101bd57806301ffc9a7146101de57806307bd026514610212575f80fd5b366101b957005b5f80fd5b3480156101c8575f80fd5b506101dc6101d7366004611171565b6105b7565b005b3480156101e9575f80fd5b506101fd6101f83660046111df565b61068b565b60405190151581526020015b60405180910390f35b34801561021d575f80fd5b506102457fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610209565b6101dc610261366004611206565b61069b565b348015610271575f80fd5b506101fd61028036600461126c565b61074d565b348015610290575f80fd5b506102af61029f366004611332565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610209565b3480156102d3575f80fd5b506102456102e236600461126c565b5f9081526020819052604090206001015490565b348015610301575f80fd5b506101fd61031036600461126c565b610772565b348015610320575f80fd5b506101dc61032f366004611395565b61077a565b34801561033f575f80fd5b506101fd61034e36600461126c565b6107a4565b34801561035e575f80fd5b506101dc61036d366004611395565b6107c8565b34801561037d575f80fd5b506101fd61038c36600461126c565b610800565b34801561039c575f80fd5b506101dc6103ab36600461126c565b610845565b3480156103bb575f80fd5b506103cf6103ca36600461126c565b6108b8565b60405161020991906113d3565b3480156103e7575f80fd5b506102456103f6366004611206565b610900565b348015610406575f80fd5b506101dc610415366004611439565b61093e565b348015610425575f80fd5b506102457fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b348015610458575f80fd5b506101fd610467366004611395565b610ad2565b348015610477575f80fd5b506102455f81565b34801561048a575f80fd5b506102457ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104bd575f80fd5b506102456104cc3660046114e1565b610afa565b3480156104dc575f80fd5b506102af6104eb3660046115fd565b63bc197c8160e01b95945050505050565b348015610507575f80fd5b506101dc61051636600461126c565b610b3e565b348015610526575f80fd5b5061024561053536600461126c565b5f9081526001602052604090205490565b348015610551575f80fd5b506101dc610560366004611395565b610be8565b6101dc6105733660046114e1565b610c0c565b348015610583575f80fd5b506102af61059236600461169f565b63f23a6e6160e01b95945050505050565b3480156105ae575f80fd5b50600254610245565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc16105e181610d93565b5f6105f0898989898989610900565b90506105fc8184610da0565b5f817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161063796959493929190611726565b60405180910390a3831561068057807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161067791815260200190565b60405180910390a25b505050505050505050565b5f61069582610e31565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106c6815f610ad2565b6106d4576106d48133610e55565b5f6106e3888888888888610900565b90506106ef8185610e92565b6106fb88888888610ee0565b5f817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516107329493929190611762565b60405180910390a361074381610f54565b5050505050505050565b5f60025b61075a836108b8565b600381111561076b5761076b6113bf565b1492915050565b5f6003610751565b5f8281526020819052604090206001015461079481610d93565b61079e8383610f7f565b50505050565b5f806107af836108b8565b60038111156107c0576107c06113bf565b141592915050565b6001600160a01b03811633146107f15760405163334bd91960e11b815260040160405180910390fd5b6107fb828261100e565b505050565b5f8061080b836108b8565b90506001816003811115610821576108216113bf565b148061083e5750600281600381111561083c5761083c6113bf565b145b9392505050565b333081146108765760405163e2850c5960e01b81526001600160a01b03821660048201526024015b60405180910390fd5b60025460408051918252602082018490527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150600255565b5f81815260016020526040812054805f036108d557505f92915050565b600181036108e65750600392915050565b428111156108f75750600192915050565b50600292915050565b5f86868686868660405160200161091c96959493929190611726565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161096881610d93565b88871415806109775750888514155b156109a9576040516001624fcdef60e01b03198152600481018a9052602481018690526044810188905260640161086d565b5f6109ba8b8b8b8b8b8b8b8b610afa565b90506109c68184610da0565b5f5b8a811015610a835780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a0557610a05611793565b9050602002016020810190610a1a91906117a7565b8d8d86818110610a2c57610a2c611793565b905060200201358c8c87818110610a4557610a45611793565b9050602002810190610a5791906117c0565b8c8b604051610a6b96959493929190611726565b60405180910390a3610a7c81611816565b90506109c8565b508315610ac557807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610abc91815260200190565b60405180910390a25b5050505050505050505050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8888888888888888604051602001610b1a9897969594939291906118ba565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b6881610d93565b610b7182610800565b610bad5781610b806002611077565b610b8a6001611077565b604051635ead8eb560e01b8152600481019390935217602482015260440161086d565b5f828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b5f82815260208190526040902060010154610c0281610d93565b61079e838361100e565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c37815f610ad2565b610c4557610c458133610e55565b8786141580610c545750878414155b15610c86576040516001624fcdef60e01b0319815260048101899052602481018590526044810187905260640161086d565b5f610c978a8a8a8a8a8a8a8a610afa565b9050610ca38185610e92565b5f5b89811015610d7d575f8b8b83818110610cc057610cc0611793565b9050602002016020810190610cd591906117a7565b90505f8a8a84818110610cea57610cea611793565b905060200201359050365f8a8a86818110610d0757610d07611793565b9050602002810190610d1991906117c0565b91509150610d2984848484610ee0565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d609493929190611762565b60405180910390a35050505080610d7690611816565b9050610ca5565b50610d8781610f54565b50505050505050505050565b610d9d8133610e55565b50565b610da9826107a4565b15610dda5781610db85f611077565b604051635ead8eb560e01b81526004810192909252602482015260440161086d565b5f610de460025490565b905080821015610e1157604051635433660960e01b8152600481018390526024810182905260440161086d565b610e1b8242611959565b5f93845260016020526040909320929092555050565b5f6001600160e01b03198216630271189760e51b1480610695575061069582611099565b610e5f8282610ad2565b610e8e5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161086d565b5050565b610e9b8261074d565b610eaa5781610db86002611077565b8015801590610ebf5750610ebd81610772565b155b15610e8e5760405163121534c360e31b81526004810182905260240161086d565b5f80856001600160a01b0316858585604051610efd92919061196c565b5f6040518083038185875af1925050503d805f8114610f37576040519150601f19603f3d011682016040523d82523d5f602084013e610f3c565b606091505b5091509150610f4b82826110cd565b50505050505050565b610f5d8161074d565b610f6c5780610db86002611077565b5f90815260016020819052604090912055565b5f610f8a8383610ad2565b611007575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610fbf3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610695565b505f610695565b5f6110198383610ad2565b15611007575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610695565b5f81600381111561108a5761108a6113bf565b600160ff919091161b92915050565b5f6001600160e01b03198216637965db0b60e01b148061069557506301ffc9a760e01b6001600160e01b0319831614610695565b6060826110e2576110dd826110e9565b610695565b5080610695565b8051156110f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114611128575f80fd5b919050565b5f8083601f84011261113d575f80fd5b5081356001600160401b03811115611153575f80fd5b60208301915083602082850101111561116a575f80fd5b9250929050565b5f805f805f805f60c0888a031215611187575f80fd5b61119088611112565b96506020880135955060408801356001600160401b038111156111b1575f80fd5b6111bd8a828b0161112d565b989b979a50986060810135976080820135975060a09091013595509350505050565b5f602082840312156111ef575f80fd5b81356001600160e01b03198116811461083e575f80fd5b5f805f805f8060a0878903121561121b575f80fd5b61122487611112565b95506020870135945060408701356001600160401b03811115611245575f80fd5b61125189828a0161112d565b979a9699509760608101359660809091013595509350505050565b5f6020828403121561127c575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156112bf576112bf611283565b604052919050565b5f82601f8301126112d6575f80fd5b81356001600160401b038111156112ef576112ef611283565b611302601f8201601f1916602001611297565b818152846020838601011115611316575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f8060808587031215611345575f80fd5b61134e85611112565b935061135c60208601611112565b92506040850135915060608501356001600160401b0381111561137d575f80fd5b611389878288016112c7565b91505092959194509250565b5f80604083850312156113a6575f80fd5b823591506113b660208401611112565b90509250929050565b634e487b7160e01b5f52602160045260245ffd5b60208101600483106113f357634e487b7160e01b5f52602160045260245ffd5b91905290565b5f8083601f840112611409575f80fd5b5081356001600160401b0381111561141f575f80fd5b6020830191508360208260051b850101111561116a575f80fd5b5f805f805f805f805f60c08a8c031215611451575f80fd5b89356001600160401b0380821115611467575f80fd5b6114738d838e016113f9565b909b50995060208c013591508082111561148b575f80fd5b6114978d838e016113f9565b909950975060408c01359150808211156114af575f80fd5b506114bc8c828d016113f9565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b5f805f805f805f8060a0898b0312156114f8575f80fd5b88356001600160401b038082111561150e575f80fd5b61151a8c838d016113f9565b909a50985060208b0135915080821115611532575f80fd5b61153e8c838d016113f9565b909850965060408b0135915080821115611556575f80fd5b506115638b828c016113f9565b999c989b509699959896976060870135966080013595509350505050565b5f82601f830112611590575f80fd5b813560206001600160401b038211156115ab576115ab611283565b8160051b6115ba828201611297565b92835284810182019282810190878511156115d3575f80fd5b83870192505b848310156115f2578235825291830191908301906115d9565b979650505050505050565b5f805f805f60a08688031215611611575f80fd5b61161a86611112565b945061162860208701611112565b935060408601356001600160401b0380821115611643575f80fd5b61164f89838a01611581565b94506060880135915080821115611664575f80fd5b61167089838a01611581565b93506080880135915080821115611685575f80fd5b50611692888289016112c7565b9150509295509295909350565b5f805f805f60a086880312156116b3575f80fd5b6116bc86611112565b94506116ca60208701611112565b9350604086013592506060860135915060808601356001600160401b038111156116f2575f80fd5b611692888289016112c7565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a060408201525f61174d60a0830186886116fe565b60608301949094525060800152949350505050565b60018060a01b0385168152836020820152606060408201525f6117896060830184866116fe565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156117b7575f80fd5b61083e82611112565b5f808335601e198436030181126117d5575f80fd5b8301803591506001600160401b038211156117ee575f80fd5b60200191503681900382131561116a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161182757611827611802565b5060010190565b8183525f6020808501808196508560051b81019150845f5b878110156118ad5782840389528135601e19883603018112611866575f80fd5b870185810190356001600160401b03811115611880575f80fd5b80360382131561188e575f80fd5b6118998682846116fe565b9a87019a9550505090840190600101611846565b5091979650505050505050565b60a080825281018890525f8960c08301825b8b8110156118fa576001600160a01b036118e584611112565b168252602092830192909101906001016118cc565b5083810360208501528881526001600160fb1b03891115611919575f80fd5b8860051b9150818a60208301370182810360209081016040850152611941908201878961182e565b60608401959095525050608001529695505050505050565b8082018082111561069557610695611802565b818382375f910190815291905056fea2646970667358221220289ac0b7b9e1af8d68dac4b8b066733061a7925595a742577f206d041a8c582164736f6c63430008150033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e
-----Decoded View---------------
Arg [0] : minDelay (uint256): 0
Arg [1] : proposers (address[]): 0xf8553c8552f906C19286F21711721E206EE4909E
Arg [2] : executors (address[]): 0xf8553c8552f906C19286F21711721E206EE4909E
Arg [3] : admin (address): 0x0000000000000000000000000000000000000000
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 000000000000000000000000f8553c8552f906c19286f21711721e206ee4909e
Deployed Bytecode Sourcemap
1084:15205:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9096:483;;;;;;;;;;-1:-1:-1;9096:483:2;;;;;:::i;:::-;;:::i;:::-;;5645:195;;;;;;;;;;-1:-1:-1;5645:195:2;;;;;:::i;:::-;;:::i;:::-;;;1763:14:11;;1756:22;1738:41;;1726:2;1711:18;5645:195:2;;;;;;;;1236:66;;;;;;;;;;;;1276:26;1236:66;;;;;1936:25:11;;;1924:2;1909:18;1236:66:2;1790:177:11;12166:459:2;;;;;;:::i;:::-;;:::i;6607:134::-;;;;;;;;;;-1:-1:-1;6607:134:2;;;;;:::i;:::-;;:::i;639:153:6:-;;;;;;;;;;-1:-1:-1;639:153:6;;;;;:::i;:::-;-1:-1:-1;;;639:153:6;;;;;;;;;;-1:-1:-1;;;;;;4502:33:11;;;4484:52;;4472:2;4457:18;639:153:6;4340:202:11;3810:120:0;;;;;;;;;;-1:-1:-1;3810:120:0;;;;;:::i;:::-;3875:7;3901:12;;;;;;;;;;:22;;;;3810:120;6820:132:2;;;;;;;;;;-1:-1:-1;6820:132:2;;;;;:::i;:::-;;:::i;4226:136:0:-;;;;;;;;;;-1:-1:-1;4226:136:0;;;;;:::i;:::-;;:::i;5998:129:2:-;;;;;;;;;;-1:-1:-1;5998:129:2;;;;;:::i;:::-;;:::i;5328:245:0:-;;;;;;;;;;-1:-1:-1;5328:245:0;;;;;:::i;:::-;;:::i;6262:209:2:-;;;;;;;;;;-1:-1:-1;6262:209:2;;;;;:::i;:::-;;:::i;15485:286::-;;;;;;;;;;-1:-1:-1;15485:286:2;;;;;:::i;:::-;;:::i;7270:460::-;;;;;;;;;;-1:-1:-1;7270:460:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8134:279::-;;;;;;;;;;-1:-1:-1;8134:279:2;;;;;:::i;:::-;;:::i;9868:807::-;;;;;;;;;;-1:-1:-1;9868:807:2;;;;;:::i;:::-;;:::i;1164:66::-;;;;;;;;;;;;1204:26;1164:66;;2854:136:0;;;;;;;;;;-1:-1:-1;2854:136:0;;;;;:::i;:::-;;:::i;2187:49::-;;;;;;;;;;-1:-1:-1;2187:49:0;2232:4;2187:49;;1308:68:2;;;;;;;;;;;;1349:27;1308:68;;8529:320;;;;;;;;;;-1:-1:-1;8529:320:2;;;;;:::i;:::-;;:::i;1101:247:4:-;;;;;;;;;;-1:-1:-1;1101:247:4;;;;;:::i;:::-;-1:-1:-1;;;1101:247:4;;;;;;;;11317:375:2;;;;;;;;;;-1:-1:-1;11317:375:2;;;;;:::i;:::-;;:::i;7100:111::-;;;;;;;;;;-1:-1:-1;7100:111:2;;;;;:::i;:::-;7163:7;7189:15;;;:11;:15;;;;;;;7100:111;4642:138:0;;;;;;;;;;-1:-1:-1;4642:138:0;;;;;:::i;:::-;;:::i;13133:896:2:-;;;;;;:::i;:::-;;:::i;876:219:4:-;;;;;;;;;;-1:-1:-1;876:219:4;;;;;:::i;:::-;-1:-1:-1;;;876:219:4;;;;;;;;7927:94:2;;;;;;;;;;-1:-1:-1;8005:9:2;;7927:94;;9096:483;1204:26;2464:16:0;2475:4;2464:10;:16::i;:::-;9319:10:2::1;9332:53;9346:6;9354:5;9361:4;;9367:11;9380:4;9332:13;:53::i;:::-;9319:66;;9395:20;9405:2;9409:5;9395:9;:20::i;:::-;9448:1;9444:2;9430:61;9451:6;9459:5;9466:4;;9472:11;9485:5;9430:61;;;;;;;;;;;:::i;:::-;;;;;;;;9505:18:::0;;9501:72:::1;;9553:2;9544:18;9557:4;9544:18;;;;1936:25:11::0;;1924:2;1909:18;;1790:177;9544:18:2::1;;;;;;;;9501:72;9309:270;9096:483:::0;;;;;;;;:::o;5645:195::-;5774:4;5797:36;5821:11;5797:23;:36::i;:::-;5790:43;5645:195;-1:-1:-1;;5645:195:2:o;12166:459::-;1276:26;5348:25;5356:4;5370:1;5348:7;:25::i;:::-;5343:87;;5389:30;5400:4;735:10:8;5389::2;:30::i;:::-;12386:10:::1;12399:56;12413:6;12421:5;12428:7;;12437:11;12450:4;12399:13;:56::i;:::-;12386:69;;12466:28;12478:2;12482:11;12466;:28::i;:::-;12504:32;12513:6;12521:5;12528:7;;12504:8;:32::i;:::-;12568:1;12564:2;12551:43;12571:6;12579:5;12586:7;;12551:43;;;;;;;;;:::i;:::-;;;;;;;;12604:14;12615:2;12604:10;:14::i;:::-;12376:249;12166:459:::0;;;;;;;:::o;6607:134::-;6666:4;6714:20;6689:45;:21;6707:2;6689:17;:21::i;:::-;:45;;;;;;;;:::i;:::-;;;6607:134;-1:-1:-1;;6607:134:2:o;6820:132::-;6878:4;6926:19;6901:44;;4226:136:0;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4330:25:::1;4341:4;4347:7;4330:10;:25::i;:::-;;4226:136:::0;;;:::o;5998:129:2:-;6052:4;;6075:21;6093:2;6075:17;:21::i;:::-;:45;;;;;;;;:::i;:::-;;;;5998:129;-1:-1:-1;;5998:129:2:o;5328:245:0:-;-1:-1:-1;;;;;5421:34:0;;735:10:8;5421:34:0;5417:102;;5478:30;;-1:-1:-1;;;5478:30:0;;;;;;;;;;;5417:102;5529:37;5541:4;5547:18;5529:11;:37::i;:::-;;5328:245;;:::o;6262:209:2:-;6323:4;6339:20;6362:21;6380:2;6362:17;:21::i;:::-;6339:44;-1:-1:-1;6409:22:2;6400:5;:31;;;;;;;;:::i;:::-;;:64;;;-1:-1:-1;6444:20:2;6435:5;:29;;;;;;;;:::i;:::-;;6400:64;6393:71;6262:209;-1:-1:-1;;;6262:209:2:o;15485:286::-;735:10:8;15612:4:2;15594:23;;15590:95;;15640:34;;-1:-1:-1;;;15640:34:2;;-1:-1:-1;;;;;12271:32:11;;15640:34:2;;;12253:51:11;12226:18;;15640:34:2;;;;;;;;15590:95;15714:9;;15699:35;;;12489:25:11;;;12545:2;12530:18;;12523:34;;;15699:35:2;;12462:18:11;15699:35:2;;;;;;;-1:-1:-1;15744:9:2;:20;15485:286::o;7270:460::-;7338:14;7189:15;;;:11;:15;;;;;;7414:9;7427:1;7414:14;7410:314;;-1:-1:-1;7451:20:2;;7270:460;-1:-1:-1;;7270:460:2:o;7410:314::-;1434:1;7492:9;:28;7488:236;;-1:-1:-1;7543:19:2;;7270:460;-1:-1:-1;;7270:460:2:o;7488:236::-;7595:15;7583:9;:27;7579:145;;;-1:-1:-1;7633:22:2;;7270:460;-1:-1:-1;;7270:460:2:o;7579:145::-;-1:-1:-1;7693:20:2;;7270:460;-1:-1:-1;;7270:460:2:o;8134:279::-;8319:7;8366:6;8374:5;8381:4;;8387:11;8400:4;8355:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8345:61;;;;;;8338:68;;8134:279;;;;;;;;:::o;9868:807::-;1204:26;2464:16:0;2475:4;2464:10;:16::i;:::-;10130:31:2;;::::1;;::::0;:68:::1;;-1:-1:-1::0;10165:33:2;;::::1;;10130:68;10126:184;;;10221:78;::::0;-1:-1:-1;;;;;;10221:78:2;;::::1;::::0;::::1;13332:25:11::0;;;13373:18;;;13366:34;;;13416:18;;;13409:34;;;13305:18;;10221:78:2::1;13130:319:11::0;10126:184:2::1;10320:10;10333:64;10352:7;;10361:6;;10369:8;;10379:11;10392:4;10333:18;:64::i;:::-;10320:77;;10407:20;10417:2;10421:5;10407:9;:20::i;:::-;10442:9;10437:151;10457:18:::0;;::::1;10437:151;;;10519:1;10515:2;10501:76;10522:7;;10530:1;10522:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;10534:6;;10541:1;10534:9;;;;;;;:::i;:::-;;;;;;;10545:8;;10554:1;10545:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;10558;10571:5;10501:76;;;;;;;;;;;:::i;:::-;;;;;;;;10477:3;::::0;::::1;:::i;:::-;;;10437:151;;;-1:-1:-1::0;10601:18:2;;10597:72:::1;;10649:2;10640:18;10653:4;10640:18;;;;1936:25:11::0;;1924:2;1909:18;;1790:177;10640:18:2::1;;;;;;;;10597:72;10116:559;9868:807:::0;;;;;;;;;;:::o;2854:136:0:-;2931:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:0;;;;;;;;;;;;;;;2854:136::o;8529:320:2:-;8749:7;8796;;8805:6;;8813:8;;8823:11;8836:4;8785:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8775:67;;;;;;8768:74;;8529:320;;;;;;;;;;:::o;11317:375::-;1349:27;2464:16:0;2475:4;2464:10;:16::i;:::-;11400:22:2::1;11419:2;11400:18;:22::i;:::-;11395:230;;11495:2;11560:40;11579:20;11560:18;:40::i;:::-;11515:42;11534:22;11515:18;:42::i;:::-;11445:169;::::0;-1:-1:-1;;;11445:169:2;;::::1;::::0;::::1;12489:25:11::0;;;;11515:85:2::1;12530:18:11::0;;;12523:34;12462:18;;11445:169:2::1;12315:248:11::0;11395:230:2::1;11641:15;::::0;;;:11:::1;:15;::::0;;;;;11634:22;;;11672:13;11653:2;;11672:13:::1;::::0;::::1;11317:375:::0;;:::o;4642:138:0:-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4747:26:::1;4759:4;4765:7;4747:11;:26::i;13133:896:2:-:0;1276:26;5348:25;5356:4;5370:1;5348:7;:25::i;:::-;5343:87;;5389:30;5400:4;735:10:8;5389::2;:30::i;:::-;13389:31;;::::1;;::::0;:68:::1;;-1:-1:-1::0;13424:33:2;;::::1;;13389:68;13385:184;;;13480:78;::::0;-1:-1:-1;;;;;;13480:78:2;;::::1;::::0;::::1;13332:25:11::0;;;13373:18;;;13366:34;;;13416:18;;;13409:34;;;13305:18;;13480:78:2::1;13130:319:11::0;13385:184:2::1;13579:10;13592:64;13611:7;;13620:6;;13628:8;;13638:11;13651:4;13592:18;:64::i;:::-;13579:77;;13667:28;13679:2;13683:11;13667;:28::i;:::-;13710:9;13705:294;13725:18:::0;;::::1;13705:294;;;13764:14;13781:7;;13789:1;13781:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13764:27;;13805:13;13821:6;;13828:1;13821:9;;;;;;;:::i;:::-;;;;;;;13805:25;;13844:22;;13869:8;;13878:1;13869:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;13844:36;;;;13894:32;13903:6;13911:5;13918:7;;13894:8;:32::i;:::-;13962:1;13958:2;13945:43;13965:6;13973:5;13980:7;;13945:43;;;;;;;;;:::i;:::-;;;;;;;;13750:249;;;;13745:3;;;;:::i;:::-;;;13705:294;;;;14008:14;14019:2;14008:10;:14::i;:::-;13375:654;13133:896:::0;;;;;;;;;:::o;3199:103:0:-;3265:30;3276:4;735:10:8;5389::2;:30::i;3265::0:-;3199:103;:::o;10776:399:2:-;10844:15;10856:2;10844:11;:15::i;:::-;10840:131;;;10915:2;10919:40;10938:20;10919:18;:40::i;:::-;10882:78;;-1:-1:-1;;;10882:78:2;;;;;12489:25:11;;;;12530:18;;;12523:34;12462:18;;10882:78:2;12315:248:11;10840:131:2;10980:16;10999:13;8005:9;;;7927:94;10999:13;10980:32;;11034:8;11026:5;:16;11022:96;;;11065:42;;-1:-1:-1;;;11065:42:2;;;;;12489:25:11;;;12530:18;;;12523:34;;;12462:18;;11065:42:2;12315:248:11;11022:96:2;11145:23;11163:5;11145:15;:23;:::i;:::-;11127:15;;;;:11;:15;;;;;;:41;;;;-1:-1:-1;;10776:399:2:o;649:221:4:-;751:4;-1:-1:-1;;;;;;774:49:4;;-1:-1:-1;;;774:49:4;;:89;;;827:36;851:11;827:23;:36::i;3432:197:0:-;3520:22;3528:4;3534:7;3520;:22::i;:::-;3515:108;;3565:47;;-1:-1:-1;;;3565:47:0;;-1:-1:-1;;;;;17620:32:11;;3565:47:0;;;17602:51:11;17669:18;;;17662:34;;;17575:18;;3565:47:0;17428:274:11;3515:108:0;3432:197;;:::o;14407:367:2:-;14489:20;14506:2;14489:16;:20::i;:::-;14484:137;;14565:2;14569:40;14588:20;14569:18;:40::i;14484:137::-;14634:25;;;;;:58;;;14664:28;14680:11;14664:15;:28::i;:::-;14663:29;14634:58;14630:138;;;14715:42;;-1:-1:-1;;;14715:42:2;;;;;1936:25:11;;;1909:18;;14715:42:2;1790:177:11;14092:232:2;14190:12;14204:23;14231:6;-1:-1:-1;;;;;14231:11:2;14250:5;14257:4;;14231:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14189:73;;;;14272:45;14297:7;14306:10;14272:24;:45::i;:::-;;14179:145;;14092:232;;;;:::o;14856:236::-;14911:20;14928:2;14911:16;:20::i;:::-;14906:137;;14987:2;14991:40;15010:20;14991:18;:40::i;14906:137::-;15052:15;;;;1434:1;15052:15;;;;;;;;:33;14856:236::o;6179:316:0:-;6256:4;6277:22;6285:4;6291:7;6277;:22::i;:::-;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:0;;;;;;;;;:36;;-1:-1:-1;;6315:36:0;6347:4;6315:36;;;6397:12;735:10:8;;656:96;6397:12:0;-1:-1:-1;;;;;6370:40:0;6388:7;-1:-1:-1;;;;;6370:40:0;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:0;6424:11;;6272:217;-1:-1:-1;6473:5:0;6466:12;;6730:317;6808:4;6828:22;6836:4;6842:7;6828;:22::i;:::-;6824:217;;;6898:5;6866:12;;;;;;;;;;;-1:-1:-1;;;;;6866:29:0;;;;;;;;;;:37;;-1:-1:-1;;6866:37:0;;;6922:40;735:10:8;;6866:12:0;;6922:40;;6898:5;6922:40;-1:-1:-1;6983:4:0;6976:11;;16137:150:2;16219:7;16264:14;16258:21;;;;;;;;:::i;:::-;16253:1;:26;;;;;;;16137:150;-1:-1:-1;;16137:150:2:o;2565:202:0:-;2650:4;-1:-1:-1;;;;;;2673:47:0;;-1:-1:-1;;;2673:47:0;;:87;;-1:-1:-1;;;;;;;;;;861:40:9;;;2724:36:0;762:146:9;5407:224:7;5495:12;5524:7;5519:106;;5547:19;5555:10;5547:7;:19::i;:::-;5519:106;;;-1:-1:-1;5604:10:7;5597:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:7;;;;;;;;;;;14:173:11;82:20;;-1:-1:-1;;;;;131:31:11;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:347::-;243:8;253:6;307:3;300:4;292:6;288:17;284:27;274:55;;325:1;322;315:12;274:55;-1:-1:-1;348:20:11;;-1:-1:-1;;;;;380:30:11;;377:50;;;423:1;420;413:12;377:50;460:4;452:6;448:17;436:29;;512:3;505:4;496:6;488;484:19;480:30;477:39;474:59;;;529:1;526;519:12;474:59;192:347;;;;;:::o;544:758::-;659:6;667;675;683;691;699;707;760:3;748:9;739:7;735:23;731:33;728:53;;;777:1;774;767:12;728:53;800:29;819:9;800:29;:::i;:::-;790:39;;876:2;865:9;861:18;848:32;838:42;;931:2;920:9;916:18;903:32;-1:-1:-1;;;;;950:6:11;947:30;944:50;;;990:1;987;980:12;944:50;1029:58;1079:7;1070:6;1059:9;1055:22;1029:58;:::i;:::-;544:758;;;;-1:-1:-1;1106:8:11;1188:2;1173:18;;1160:32;;1239:3;1224:19;;1211:33;;-1:-1:-1;1291:3:11;1276:19;;;1263:33;;-1:-1:-1;544:758:11;-1:-1:-1;;;;544:758:11:o;1307:286::-;1365:6;1418:2;1406:9;1397:7;1393:23;1389:32;1386:52;;;1434:1;1431;1424:12;1386:52;1460:23;;-1:-1:-1;;;;;;1512:32:11;;1502:43;;1492:71;;1559:1;1556;1549:12;1972:689;2078:6;2086;2094;2102;2110;2118;2171:3;2159:9;2150:7;2146:23;2142:33;2139:53;;;2188:1;2185;2178:12;2139:53;2211:29;2230:9;2211:29;:::i;:::-;2201:39;;2287:2;2276:9;2272:18;2259:32;2249:42;;2342:2;2331:9;2327:18;2314:32;-1:-1:-1;;;;;2361:6:11;2358:30;2355:50;;;2401:1;2398;2391:12;2355:50;2440:58;2490:7;2481:6;2470:9;2466:22;2440:58;:::i;:::-;1972:689;;;;-1:-1:-1;2517:8:11;2599:2;2584:18;;2571:32;;2650:3;2635:19;;;2622:33;;-1:-1:-1;1972:689:11;-1:-1:-1;;;;1972:689:11:o;2666:180::-;2725:6;2778:2;2766:9;2757:7;2753:23;2749:32;2746:52;;;2794:1;2791;2784:12;2746:52;-1:-1:-1;2817:23:11;;2666:180;-1:-1:-1;2666:180:11:o;2851:127::-;2912:10;2907:3;2903:20;2900:1;2893:31;2943:4;2940:1;2933:15;2967:4;2964:1;2957:15;2983:275;3054:2;3048:9;3119:2;3100:13;;-1:-1:-1;;3096:27:11;3084:40;;-1:-1:-1;;;;;3139:34:11;;3175:22;;;3136:62;3133:88;;;3201:18;;:::i;:::-;3237:2;3230:22;2983:275;;-1:-1:-1;2983:275:11:o;3263:530::-;3305:5;3358:3;3351:4;3343:6;3339:17;3335:27;3325:55;;3376:1;3373;3366:12;3325:55;3412:6;3399:20;-1:-1:-1;;;;;3434:2:11;3431:26;3428:52;;;3460:18;;:::i;:::-;3504:55;3547:2;3528:13;;-1:-1:-1;;3524:27:11;3553:4;3520:38;3504:55;:::i;:::-;3584:2;3575:7;3568:19;3630:3;3623:4;3618:2;3610:6;3606:15;3602:26;3599:35;3596:55;;;3647:1;3644;3637:12;3596:55;3712:2;3705:4;3697:6;3693:17;3686:4;3677:7;3673:18;3660:55;3760:1;3735:16;;;3753:4;3731:27;3724:38;;;;3739:7;3263:530;-1:-1:-1;;;3263:530:11:o;3798:537::-;3893:6;3901;3909;3917;3970:3;3958:9;3949:7;3945:23;3941:33;3938:53;;;3987:1;3984;3977:12;3938:53;4010:29;4029:9;4010:29;:::i;:::-;4000:39;;4058:38;4092:2;4081:9;4077:18;4058:38;:::i;:::-;4048:48;;4143:2;4132:9;4128:18;4115:32;4105:42;;4198:2;4187:9;4183:18;4170:32;-1:-1:-1;;;;;4217:6:11;4214:30;4211:50;;;4257:1;4254;4247:12;4211:50;4280:49;4321:7;4312:6;4301:9;4297:22;4280:49;:::i;:::-;4270:59;;;3798:537;;;;;;;:::o;4547:254::-;4615:6;4623;4676:2;4664:9;4655:7;4651:23;4647:32;4644:52;;;4692:1;4689;4682:12;4644:52;4728:9;4715:23;4705:33;;4757:38;4791:2;4780:9;4776:18;4757:38;:::i;:::-;4747:48;;4547:254;;;;;:::o;4991:127::-;5052:10;5047:3;5043:20;5040:1;5033:31;5083:4;5080:1;5073:15;5107:4;5104:1;5097:15;5123:346;5273:2;5258:18;;5306:1;5295:13;;5285:144;;5351:10;5346:3;5342:20;5339:1;5332:31;5386:4;5383:1;5376:15;5414:4;5411:1;5404:15;5285:144;5438:25;;;5123:346;:::o;5474:367::-;5537:8;5547:6;5601:3;5594:4;5586:6;5582:17;5578:27;5568:55;;5619:1;5616;5609:12;5568:55;-1:-1:-1;5642:20:11;;-1:-1:-1;;;;;5674:30:11;;5671:50;;;5717:1;5714;5707:12;5671:50;5754:4;5746:6;5742:17;5730:29;;5814:3;5807:4;5797:6;5794:1;5790:14;5782:6;5778:27;5774:38;5771:47;5768:67;;;5831:1;5828;5821:12;5846:1306;6042:6;6050;6058;6066;6074;6082;6090;6098;6106;6159:3;6147:9;6138:7;6134:23;6130:33;6127:53;;;6176:1;6173;6166:12;6127:53;6216:9;6203:23;-1:-1:-1;;;;;6286:2:11;6278:6;6275:14;6272:34;;;6302:1;6299;6292:12;6272:34;6341:70;6403:7;6394:6;6383:9;6379:22;6341:70;:::i;:::-;6430:8;;-1:-1:-1;6315:96:11;-1:-1:-1;6518:2:11;6503:18;;6490:32;;-1:-1:-1;6534:16:11;;;6531:36;;;6563:1;6560;6553:12;6531:36;6602:72;6666:7;6655:8;6644:9;6640:24;6602:72;:::i;:::-;6693:8;;-1:-1:-1;6576:98:11;-1:-1:-1;6781:2:11;6766:18;;6753:32;;-1:-1:-1;6797:16:11;;;6794:36;;;6826:1;6823;6816:12;6794:36;;6865:72;6929:7;6918:8;6907:9;6903:24;6865:72;:::i;:::-;5846:1306;;;;-1:-1:-1;5846:1306:11;;;;6956:8;;7038:2;7023:18;;7010:32;;7089:3;7074:19;;7061:33;;-1:-1:-1;7141:3:11;7126:19;7113:33;;-1:-1:-1;5846:1306:11;-1:-1:-1;;;;5846:1306:11:o;7157:1237::-;7344:6;7352;7360;7368;7376;7384;7392;7400;7453:3;7441:9;7432:7;7428:23;7424:33;7421:53;;;7470:1;7467;7460:12;7421:53;7510:9;7497:23;-1:-1:-1;;;;;7580:2:11;7572:6;7569:14;7566:34;;;7596:1;7593;7586:12;7566:34;7635:70;7697:7;7688:6;7677:9;7673:22;7635:70;:::i;:::-;7724:8;;-1:-1:-1;7609:96:11;-1:-1:-1;7812:2:11;7797:18;;7784:32;;-1:-1:-1;7828:16:11;;;7825:36;;;7857:1;7854;7847:12;7825:36;7896:72;7960:7;7949:8;7938:9;7934:24;7896:72;:::i;:::-;7987:8;;-1:-1:-1;7870:98:11;-1:-1:-1;8075:2:11;8060:18;;8047:32;;-1:-1:-1;8091:16:11;;;8088:36;;;8120:1;8117;8110:12;8088:36;;8159:72;8223:7;8212:8;8201:9;8197:24;8159:72;:::i;:::-;7157:1237;;;;-1:-1:-1;7157:1237:11;;;;8250:8;;8332:2;8317:18;;8304:32;;8383:3;8368:19;8355:33;;-1:-1:-1;7157:1237:11;-1:-1:-1;;;;7157:1237:11:o;8399:712::-;8453:5;8506:3;8499:4;8491:6;8487:17;8483:27;8473:55;;8524:1;8521;8514:12;8473:55;8560:6;8547:20;8586:4;-1:-1:-1;;;;;8605:2:11;8602:26;8599:52;;;8631:18;;:::i;:::-;8677:2;8674:1;8670:10;8700:28;8724:2;8720;8716:11;8700:28;:::i;:::-;8762:15;;;8832;;;8828:24;;;8793:12;;;;8864:15;;;8861:35;;;8892:1;8889;8882:12;8861:35;8928:2;8920:6;8916:15;8905:26;;8940:142;8956:6;8951:3;8948:15;8940:142;;;9022:17;;9010:30;;8973:12;;;;9060;;;;8940:142;;;9100:5;8399:712;-1:-1:-1;;;;;;;8399:712:11:o;9116:943::-;9270:6;9278;9286;9294;9302;9355:3;9343:9;9334:7;9330:23;9326:33;9323:53;;;9372:1;9369;9362:12;9323:53;9395:29;9414:9;9395:29;:::i;:::-;9385:39;;9443:38;9477:2;9466:9;9462:18;9443:38;:::i;:::-;9433:48;;9532:2;9521:9;9517:18;9504:32;-1:-1:-1;;;;;9596:2:11;9588:6;9585:14;9582:34;;;9612:1;9609;9602:12;9582:34;9635:61;9688:7;9679:6;9668:9;9664:22;9635:61;:::i;:::-;9625:71;;9749:2;9738:9;9734:18;9721:32;9705:48;;9778:2;9768:8;9765:16;9762:36;;;9794:1;9791;9784:12;9762:36;9817:63;9872:7;9861:8;9850:9;9846:24;9817:63;:::i;:::-;9807:73;;9933:3;9922:9;9918:19;9905:33;9889:49;;9963:2;9953:8;9950:16;9947:36;;;9979:1;9976;9969:12;9947:36;;10002:51;10045:7;10034:8;10023:9;10019:24;10002:51;:::i;:::-;9992:61;;;9116:943;;;;;;;;:::o;10246:606::-;10350:6;10358;10366;10374;10382;10435:3;10423:9;10414:7;10410:23;10406:33;10403:53;;;10452:1;10449;10442:12;10403:53;10475:29;10494:9;10475:29;:::i;:::-;10465:39;;10523:38;10557:2;10546:9;10542:18;10523:38;:::i;:::-;10513:48;;10608:2;10597:9;10593:18;10580:32;10570:42;;10659:2;10648:9;10644:18;10631:32;10621:42;;10714:3;10703:9;10699:19;10686:33;-1:-1:-1;;;;;10734:6:11;10731:30;10728:50;;;10774:1;10771;10764:12;10728:50;10797:49;10838:7;10829:6;10818:9;10814:22;10797:49;:::i;10857:266::-;10945:6;10940:3;10933:19;10997:6;10990:5;10983:4;10978:3;10974:14;10961:43;-1:-1:-1;11049:1:11;11024:16;;;11042:4;11020:27;;;11013:38;;;;11105:2;11084:15;;;-1:-1:-1;;11080:29:11;11071:39;;;11067:50;;10857:266::o;11128:557::-;11426:1;11422;11417:3;11413:11;11409:19;11401:6;11397:32;11386:9;11379:51;11466:6;11461:2;11450:9;11446:18;11439:34;11509:3;11504:2;11493:9;11489:18;11482:31;11360:4;11530:62;11587:3;11576:9;11572:19;11564:6;11556;11530:62;:::i;:::-;11623:2;11608:18;;11601:34;;;;-1:-1:-1;11666:3:11;11651:19;11644:35;11522:70;11128:557;-1:-1:-1;;;;11128:557:11:o;11690:412::-;11932:1;11928;11923:3;11919:11;11915:19;11907:6;11903:32;11892:9;11885:51;11972:6;11967:2;11956:9;11952:18;11945:34;12015:2;12010;11999:9;11995:18;11988:30;11866:4;12035:61;12092:2;12081:9;12077:18;12069:6;12061;12035:61;:::i;:::-;12027:69;11690:412;-1:-1:-1;;;;;;11690:412:11:o;13454:127::-;13515:10;13510:3;13506:20;13503:1;13496:31;13546:4;13543:1;13536:15;13570:4;13567:1;13560:15;13586:186;13645:6;13698:2;13686:9;13677:7;13673:23;13669:32;13666:52;;;13714:1;13711;13704:12;13666:52;13737:29;13756:9;13737:29;:::i;13777:521::-;13854:4;13860:6;13920:11;13907:25;14014:2;14010:7;13999:8;13983:14;13979:29;13975:43;13955:18;13951:68;13941:96;;14033:1;14030;14023:12;13941:96;14060:33;;14112:20;;;-1:-1:-1;;;;;;14144:30:11;;14141:50;;;14187:1;14184;14177:12;14141:50;14220:4;14208:17;;-1:-1:-1;14251:14:11;14247:27;;;14237:38;;14234:58;;;14288:1;14285;14278:12;14303:127;14364:10;14359:3;14355:20;14352:1;14345:31;14395:4;14392:1;14385:15;14419:4;14416:1;14409:15;14435:135;14474:3;14495:17;;;14492:43;;14515:18;;:::i;:::-;-1:-1:-1;14562:1:11;14551:13;;14435:135::o;14575:1067::-;14682:6;14677:3;14670:19;14652:3;14708:4;14749:2;14744:3;14740:12;14774:11;14801;14794:18;;14851:6;14848:1;14844:14;14837:5;14833:26;14821:38;;14882:5;14905:1;14915:701;14929:6;14926:1;14923:13;14915:701;;;15000:5;14994:4;14990:16;14985:3;14978:29;15059:6;15046:20;15149:2;15145:7;15137:5;15121:14;15117:26;15113:40;15093:18;15089:65;15079:93;;15168:1;15165;15158:12;15079:93;15200:30;;15308:16;;;;15259:21;-1:-1:-1;;;;;15340:32:11;;15337:52;;;15385:1;15382;15375:12;15337:52;15438:8;15422:14;15418:29;15409:7;15405:43;15402:63;;;15461:1;15458;15451:12;15402:63;15486:50;15531:4;15521:8;15512:7;15486:50;:::i;:::-;15594:12;;;;15478:58;-1:-1:-1;;;15559:15:11;;;;14951:1;14944:9;14915:701;;;-1:-1:-1;15632:4:11;;14575:1067;-1:-1:-1;;;;;;;14575:1067:11:o;15647:1393::-;16099:3;16112:22;;;16084:19;;16169:22;;;16051:4;16249:6;16222:3;16207:19;;16051:4;16283:235;16297:6;16294:1;16291:13;16283:235;;;-1:-1:-1;;;;;16362:26:11;16381:6;16362:26;:::i;:::-;16358:52;16346:65;;16434:4;16493:15;;;;16458:12;;;;16319:1;16312:9;16283:235;;;-1:-1:-1;16556:19:11;;;16549:4;16534:20;;16527:49;16585:19;;;-1:-1:-1;;;;;16616:31:11;;16613:51;;;16660:1;16657;16650:12;16613:51;16694:6;16691:1;16687:14;16673:28;;16747:6;16739;16732:4;16727:3;16723:14;16710:44;16773:16;16829:18;;;16849:4;16825:29;;;16820:2;16805:18;;16798:57;16872:75;;16933:13;;16925:6;16917;16872:75;:::i;:::-;16978:2;16963:18;;16956:34;;;;-1:-1:-1;;17021:3:11;17006:19;16999:35;16864:83;15647:1393;-1:-1:-1;;;;;;15647:1393:11:o;17298:125::-;17363:9;;;17384:10;;;17381:36;;;17397:18;;:::i;17707:271::-;17890:6;17882;17877:3;17864:33;17846:3;17916:16;;17941:13;;;17916:16;17707:271;-1:-1:-1;17707:271:11:o
Swarm Source
ipfs://289ac0b7b9e1af8d68dac4b8b066733061a7925595a742577f206d041a8c5821
Loading...
Loading
Loading...
Loading
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.