Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 30 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute | 21070913 | 87 days ago | IN | 0 ETH | 0.00040697 | ||||
Execute | 20870250 | 115 days ago | IN | 0 ETH | 0.00488703 | ||||
Execute | 20569310 | 157 days ago | IN | 0 ETH | 0.00043313 | ||||
Execute | 20532393 | 162 days ago | IN | 0 ETH | 0.00173584 | ||||
Execute | 20188489 | 210 days ago | IN | 0 ETH | 0.00226517 | ||||
Execute | 19982594 | 239 days ago | IN | 0 ETH | 0.00774289 | ||||
Execute Batch | 19937870 | 245 days ago | IN | 0 ETH | 0.05557322 | ||||
Execute | 19831381 | 260 days ago | IN | 0 ETH | 0.00534224 | ||||
Execute | 19795387 | 265 days ago | IN | 0 ETH | 0.00160655 | ||||
Execute Batch | 19795385 | 265 days ago | IN | 0 ETH | 0.00324456 | ||||
Execute Batch | 19795368 | 265 days ago | IN | 0 ETH | 0.0048434 | ||||
Execute | 19309799 | 333 days ago | IN | 0 ETH | 0.02417179 | ||||
Execute Batch | 19225316 | 345 days ago | IN | 0 ETH | 0.02680222 | ||||
Execute | 19195658 | 349 days ago | IN | 0 ETH | 0.03507083 | ||||
Execute Batch | 18924752 | 387 days ago | IN | 0 ETH | 0.00334866 | ||||
Execute | 18839940 | 399 days ago | IN | 0 ETH | 0.00226659 | ||||
Execute | 18812807 | 403 days ago | IN | 0 ETH | 0.0399622 | ||||
Execute Batch | 18576454 | 436 days ago | IN | 0 ETH | 0.00260901 | ||||
Execute | 18576448 | 436 days ago | IN | 0 ETH | 0.00549113 | ||||
Execute Batch | 18507411 | 446 days ago | IN | 0 ETH | 0.00198552 | ||||
Execute | 18428631 | 457 days ago | IN | 0 ETH | 0.00439994 | ||||
Execute Batch | 18419505 | 458 days ago | IN | 0 ETH | 0.01960075 | ||||
Execute | 17861568 | 536 days ago | IN | 0 ETH | 0.00220002 | ||||
Execute Batch | 17861562 | 536 days ago | IN | 0 ETH | 0.07134726 | ||||
Execute Batch | 17861552 | 536 days ago | IN | 0 ETH | 0.07590248 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
TimelockController
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-28 */ // SPDX-License-Identifier: MIT // File: @openzeppelin-4/contracts/access/IAccessControl.sol // OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol) pragma solidity ^0.8.0; /** * @dev External interface of AccessControl declared to support ERC165 detection. */ interface IAccessControl { /** * @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. * * _Available since v3.1._ */ 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 `account`. */ function renounceRole(bytes32 role, address account) external; } // File: @openzeppelin-4/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } } // File: @openzeppelin-4/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // File: @openzeppelin-4/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin-4/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @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); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin-4/contracts/access/AccessControl.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/AccessControl.sol) pragma solidity ^0.8.0; /** * @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: * * ``` * 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}: * * ``` * 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. */ abstract contract AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address => bool) members; bytes32 adminRole; } mapping(bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @dev Modifier that checks that an account has a specific role. Reverts * with a standardized message including the required role. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ * * _Available since v4.1._ */ 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 override returns (bool) { return _roles[role].members[account]; } /** * @dev Revert with a standard message if `_msgSender()` is missing `role`. * Overriding this function changes the behavior of the {onlyRole} modifier. * * Format of the revert message is described in {_checkRole}. * * _Available since v4.6._ */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Revert with a standard message if `account` is missing `role`. * * The format of the revert reason is given by the following regular expression: * * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/ */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert( string( abi.encodePacked( "AccessControl: account ", Strings.toHexString(uint160(account), 20), " is missing role ", Strings.toHexString(uint256(role), 32) ) ) ); } } /** * @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 override 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 override 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 override 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 `account`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address account) public virtual override { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * May emit a {RoleGranted} event. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== * * NOTE: This function is deprecated in favor of {_grantRole}. */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @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 Grants `role` to `account`. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual { if (!hasRole(role, account)) { _roles[role].members[account] = true; emit RoleGranted(role, account, _msgSender()); } } /** * @dev Revokes `role` from `account`. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual { if (hasRole(role, account)) { _roles[role].members[account] = false; emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin-4/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @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); } // File: @openzeppelin-4/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ 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); } // File: @openzeppelin-4/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @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://diligence.consensys.net/posts/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.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @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, it is bubbled up by this * function (like regular Solidity function calls). * * 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. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @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`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // 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(errorMessage); } } } } // File: @openzeppelin-4/contracts/governance/TimelockController.sol // OpenZeppelin Contracts (last updated v4.7.0) (governance/TimelockController.sol) pragma solidity ^0.8.0; /** * @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. * * _Available since v3.3._ */ contract TimelockController is AccessControl, IERC721Receiver, IERC1155Receiver { bytes32 public constant TIMELOCK_ADMIN_ROLE = keccak256("TIMELOCK_ADMIN_ROLE"); 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 => uint256) private _timestamps; uint256 private _minDelay; /** * @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 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 a given `minDelay`, and a list of * initial proposers and executors. The proposers receive both the * proposer and the canceller role (for backward compatibility). The * executors receive the executor role. * * NOTE: At construction, both the deployer and the timelock itself are * administrators. This helps further configuration of the timelock by the * deployer. After configuration is done, it is recommended that the * deployer renounces its admin position and relies on timelocked * operations to perform future maintenance. */ constructor( uint256 minDelay, address[] memory proposers, address[] memory executors ) { _setRoleAdmin(TIMELOCK_ADMIN_ROLE, TIMELOCK_ADMIN_ROLE); _setRoleAdmin(PROPOSER_ROLE, TIMELOCK_ADMIN_ROLE); _setRoleAdmin(EXECUTOR_ROLE, TIMELOCK_ADMIN_ROLE); _setRoleAdmin(CANCELLER_ROLE, TIMELOCK_ADMIN_ROLE); // deployer + self administration _setupRole(TIMELOCK_ADMIN_ROLE, _msgSender()); _setupRole(TIMELOCK_ADMIN_ROLE, address(this)); // register proposers and cancellers for (uint256 i = 0; i < proposers.length; ++i) { _setupRole(PROPOSER_ROLE, proposers[i]); _setupRole(CANCELLER_ROLE, proposers[i]); } // register executors for (uint256 i = 0; i < executors.length; ++i) { _setupRole(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(IERC165, AccessControl) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } /** * @dev Returns whether an id correspond to a registered operation. This * includes both Pending, Ready and Done operations. */ function isOperation(bytes32 id) public view virtual returns (bool registered) { return getTimestamp(id) > 0; } /** * @dev Returns whether an operation is pending or not. */ function isOperationPending(bytes32 id) public view virtual returns (bool pending) { return getTimestamp(id) > _DONE_TIMESTAMP; } /** * @dev Returns whether an operation is ready or not. */ function isOperationReady(bytes32 id) public view virtual returns (bool ready) { uint256 timestamp = getTimestamp(id); return timestamp > _DONE_TIMESTAMP && timestamp <= block.timestamp; } /** * @dev Returns whether an operation is done or not. */ function isOperationDone(bytes32 id) public view virtual returns (bool done) { return getTimestamp(id) == _DONE_TIMESTAMP; } /** * @dev Returns the timestamp at with an operation becomes ready (0 for * unset operations, 1 for done operations). */ function getTimestamp(bytes32 id) public view virtual returns (uint256 timestamp) { return _timestamps[id]; } /** * @dev Returns the minimum delay 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 duration) { 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 hash) { 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 hash) { return keccak256(abi.encode(targets, values, payloads, predecessor, salt)); } /** * @dev Schedule an operation containing a single transaction. * * Emits a {CallScheduled} event. * * 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); } /** * @dev Schedule an operation containing a batch of transactions. * * Emits 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) { require(targets.length == values.length, "TimelockController: length mismatch"); require(targets.length == payloads.length, "TimelockController: length mismatch"); 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); } } /** * @dev Schedule an operation that is to becomes valid after a given delay. */ function _schedule(bytes32 id, uint256 delay) private { require(!isOperation(id), "TimelockController: operation already scheduled"); require(delay >= getMinDelay(), "TimelockController: insufficient delay"); _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) { require(isOperationPending(id), "TimelockController: operation cannot be cancelled"); 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. */ function executeBatch( address[] calldata targets, uint256[] calldata values, bytes[] calldata payloads, bytes32 predecessor, bytes32 salt ) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) { require(targets.length == values.length, "TimelockController: length mismatch"); require(targets.length == payloads.length, "TimelockController: length mismatch"); 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, ) = target.call{value: value}(data); require(success, "TimelockController: underlying transaction reverted"); } /** * @dev Checks before execution of an operation's calls. */ function _beforeCall(bytes32 id, bytes32 predecessor) private view { require(isOperationReady(id), "TimelockController: operation is not ready"); require(predecessor == bytes32(0) || isOperationDone(predecessor), "TimelockController: missing dependency"); } /** * @dev Checks after execution of an operation's calls. */ function _afterCall(bytes32 id) private { require(isOperationReady(id), "TimelockController: operation is not 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 { require(msg.sender == address(this), "TimelockController: caller must be timelock"); emit MinDelayChange(_minDelay, newDelay); _minDelay = newDelay; } /** * @dev See {IERC721Receiver-onERC721Received}. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } /** * @dev See {IERC1155Receiver-onERC1155Received}. */ function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } /** * @dev See {IERC1155Receiver-onERC1155BatchReceived}. */ function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"minDelay","type":"uint256"},{"internalType":"address[]","name":"proposers","type":"address[]"},{"internalType":"address[]","name":"executors","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"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":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":[],"name":"TIMELOCK_ADMIN_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":"duration","type":"uint256"}],"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":"timestamp","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":"hash","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":"hash","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperation","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationDone","outputs":[{"internalType":"bool","name":"done","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationPending","outputs":[{"internalType":"bool","name":"pending","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationReady","outputs":[{"internalType":"bool","name":"ready","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":"account","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
60806040523480156200001157600080fd5b50604051620022f8380380620022f88339810160408190526200003491620003f7565b6200004f60008051602062002278833981519152806200021c565b6200007960008051602062002298833981519152600080516020620022788339815191526200021c565b620000a3600080516020620022b8833981519152600080516020620022788339815191526200021c565b620000cd600080516020620022d8833981519152600080516020620022788339815191526200021c565b620000e8600080516020620022788339815191523362000267565b62000103600080516020620022788339815191523062000267565b60005b825181101562000189576200014d600080516020620022988339815191528483815181106200013957620001396200046b565b60200260200101516200026760201b60201c565b62000176600080516020620022d88339815191528483815181106200013957620001396200046b565b620001818162000481565b905062000106565b5060005b8151811015620001d357620001c0600080516020620022b88339815191528383815181106200013957620001396200046b565b620001cb8162000481565b90506200018d565b5060028390556040805160008152602081018590527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1505050620004a9565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b62000273828262000277565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000273576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002d33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200034557600080fd5b919050565b600082601f8301126200035c57600080fd5b815160206001600160401b03808311156200037b576200037b62000317565b8260051b604051601f19603f83011681018181108482111715620003a357620003a362000317565b604052938452858101830193838101925087851115620003c257600080fd5b83870191505b84821015620003ec57620003dc826200032d565b83529183019190830190620003c8565b979650505050505050565b6000806000606084860312156200040d57600080fd5b835160208501519093506001600160401b03808211156200042d57600080fd5b6200043b878388016200034a565b935060408601519150808211156200045257600080fd5b5062000461868287016200034a565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201620004a257634e487b7160e01b600052601160045260246000fd5b5060010190565b611dbf80620004b96000396000f3fe6080604052600436106101bb5760003560e01c80638065657f116100ec578063bc197c811161008a578063d547741f11610064578063d547741f14610582578063e38335e5146105a2578063f23a6e61146105b5578063f27a0c92146105e157600080fd5b8063bc197c8114610509578063c4d252f514610535578063d45c44351461055557600080fd5b806391d14854116100c657806391d1485414610480578063a217fddf146104a0578063b08e51c0146104b5578063b1c5f427146104e957600080fd5b80638065657f1461040c5780638f2a0bb01461042c5780638f61f4f51461044c57600080fd5b8063248a9ca31161015957806331d507501161013357806331d507501461038c57806336568abe146103ac578063584b153e146103cc57806364d62353146103ec57600080fd5b8063248a9ca31461030b5780632ab0f5291461033b5780632f2ff15d1461036c57600080fd5b80630d3cf6fc116101955780630d3cf6fc14610260578063134008d31461029457806313bc9f20146102a7578063150b7a02146102c757600080fd5b806301d5062a146101c757806301ffc9a7146101e957806307bd02651461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e23660046113b9565b6105f6565b005b3480156101f557600080fd5b5061020961020436600461142d565b61068b565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b506102527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610215565b34801561026c57600080fd5b506102527f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101e76102a2366004611457565b6106b6565b3480156102b357600080fd5b506102096102c23660046114c2565b61076b565b3480156102d357600080fd5b506102f26102e2366004611590565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610215565b34801561031757600080fd5b506102526103263660046114c2565b60009081526020819052604090206001015490565b34801561034757600080fd5b506102096103563660046114c2565b6000908152600160208190526040909120541490565b34801561037857600080fd5b506101e76103873660046115f7565b610791565b34801561039857600080fd5b506102096103a73660046114c2565b6107bb565b3480156103b857600080fd5b506101e76103c73660046115f7565b6107d4565b3480156103d857600080fd5b506102096103e73660046114c2565b610857565b3480156103f857600080fd5b506101e76104073660046114c2565b61086d565b34801561041857600080fd5b50610252610427366004611457565b610911565b34801561043857600080fd5b506101e7610447366004611667565b610950565b34801561045857600080fd5b506102527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561048c57600080fd5b5061020961049b3660046115f7565b610aa2565b3480156104ac57600080fd5b50610252600081565b3480156104c157600080fd5b506102527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104f557600080fd5b50610252610504366004611718565b610acb565b34801561051557600080fd5b506102f261052436600461183f565b63bc197c8160e01b95945050505050565b34801561054157600080fd5b506101e76105503660046114c2565b610b10565b34801561056157600080fd5b506102526105703660046114c2565b60009081526001602052604090205490565b34801561058e57600080fd5b506101e761059d3660046115f7565b610be5565b6101e76105b0366004611718565b610c0a565b3480156105c157600080fd5b506102f26105d03660046118e8565b63f23a6e6160e01b95945050505050565b3480156105ed57600080fd5b50600254610252565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161062081610d94565b6000610630898989898989610911565b905061063c8184610da1565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161067896959493929190611975565b60405180910390a3505050505050505050565b60006001600160e01b03198216630271189760e51b14806106b057506106b082610e90565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106e2816000610aa2565b6106f0576106f08133610ec5565b6000610700888888888888610911565b905061070c8185610f29565b61071888888888610fc5565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161075094939291906119b2565b60405180910390a361076181611098565b5050505050505050565b60008181526001602052604081205460018111801561078a5750428111155b9392505050565b6000828152602081905260409020600101546107ac81610d94565b6107b683836110d1565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146108495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108538282611155565b5050565b60008181526001602081905260408220546107cd565b3330146108d05760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b6064820152608401610840565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b600086868686868660405160200161092e96959493929190611975565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161097a81610d94565b8887146109995760405162461bcd60e51b8152600401610840906119e4565b8885146109b85760405162461bcd60e51b8152600401610840906119e4565b60006109ca8b8b8b8b8b8b8b8b610acb565b90506109d68184610da1565b60005b8a811015610a945780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a1657610a16611a27565b9050602002016020810190610a2b9190611a3d565b8d8d86818110610a3d57610a3d611a27565b905060200201358c8c87818110610a5657610a56611a27565b9050602002810190610a689190611a58565b8c8b604051610a7c96959493929190611975565b60405180910390a3610a8d81611ab4565b90506109d9565b505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610aec989796959493929190611b5e565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b3a81610d94565b610b4382610857565b610ba95760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b6064820152608401610840565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610c0081610d94565b6107b68383611155565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c36816000610aa2565b610c4457610c448133610ec5565b878614610c635760405162461bcd60e51b8152600401610840906119e4565b878414610c825760405162461bcd60e51b8152600401610840906119e4565b6000610c948a8a8a8a8a8a8a8a610acb565b9050610ca08185610f29565b60005b89811015610d7e5760008b8b83818110610cbf57610cbf611a27565b9050602002016020810190610cd49190611a3d565b905060008a8a84818110610cea57610cea611a27565b9050602002013590503660008a8a86818110610d0857610d08611a27565b9050602002810190610d1a9190611a58565b91509150610d2a84848484610fc5565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d6194939291906119b2565b60405180910390a35050505080610d7790611ab4565b9050610ca3565b50610d8881611098565b50505050505050505050565b610d9e8133610ec5565b50565b610daa826107bb565b15610e0f5760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b6064820152608401610840565b600254811015610e705760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b6064820152608401610840565b610e7a8142611c09565b6000928352600160205260409092209190915550565b60006001600160e01b03198216637965db0b60e01b14806106b057506301ffc9a760e01b6001600160e01b03198316146106b0565b610ecf8282610aa2565b61085357610ee7816001600160a01b031660146111ba565b610ef28360206111ba565b604051602001610f03929190611c51565b60408051601f198184030181529082905262461bcd60e51b825261084091600401611cc6565b610f328261076b565b610f4e5760405162461bcd60e51b815260040161084090611cf9565b801580610f6a5750600081815260016020819052604090912054145b6108535760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b6064820152608401610840565b6000846001600160a01b0316848484604051610fe2929190611d43565b60006040518083038185875af1925050503d806000811461101f576040519150601f19603f3d011682016040523d82523d6000602084013e611024565b606091505b50509050806110915760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b6064820152608401610840565b5050505050565b6110a18161076b565b6110bd5760405162461bcd60e51b815260040161084090611cf9565b600090815260016020819052604090912055565b6110db8282610aa2565b610853576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111113390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61115f8282610aa2565b15610853576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606060006111c9836002611d53565b6111d4906002611c09565b6001600160401b038111156111eb576111eb6114db565b6040519080825280601f01601f191660200182016040528015611215576020820181803683370190505b509050600360fc1b8160008151811061123057611230611a27565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061125f5761125f611a27565b60200101906001600160f81b031916908160001a9053506000611283846002611d53565b61128e906001611c09565b90505b6001811115611306576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106112c2576112c2611a27565b1a60f81b8282815181106112d8576112d8611a27565b60200101906001600160f81b031916908160001a90535060049490941c936112ff81611d72565b9050611291565b50831561078a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610840565b80356001600160a01b038116811461136c57600080fd5b919050565b60008083601f84011261138357600080fd5b5081356001600160401b0381111561139a57600080fd5b6020830191508360208285010111156113b257600080fd5b9250929050565b600080600080600080600060c0888a0312156113d457600080fd5b6113dd88611355565b96506020880135955060408801356001600160401b038111156113ff57600080fd5b61140b8a828b01611371565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561143f57600080fd5b81356001600160e01b03198116811461078a57600080fd5b60008060008060008060a0878903121561147057600080fd5b61147987611355565b95506020870135945060408701356001600160401b0381111561149b57600080fd5b6114a789828a01611371565b979a9699509760608101359660809091013595509350505050565b6000602082840312156114d457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611519576115196114db565b604052919050565b600082601f83011261153257600080fd5b81356001600160401b0381111561154b5761154b6114db565b61155e601f8201601f19166020016114f1565b81815284602083860101111561157357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156115a657600080fd5b6115af85611355565b93506115bd60208601611355565b92506040850135915060608501356001600160401b038111156115df57600080fd5b6115eb87828801611521565b91505092959194509250565b6000806040838503121561160a57600080fd5b8235915061161a60208401611355565b90509250929050565b60008083601f84011261163557600080fd5b5081356001600160401b0381111561164c57600080fd5b6020830191508360208260051b85010111156113b257600080fd5b600080600080600080600080600060c08a8c03121561168557600080fd5b89356001600160401b038082111561169c57600080fd5b6116a88d838e01611623565b909b50995060208c01359150808211156116c157600080fd5b6116cd8d838e01611623565b909950975060408c01359150808211156116e657600080fd5b506116f38c828d01611623565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561173457600080fd5b88356001600160401b038082111561174b57600080fd5b6117578c838d01611623565b909a50985060208b013591508082111561177057600080fd5b61177c8c838d01611623565b909850965060408b013591508082111561179557600080fd5b506117a28b828c01611623565b999c989b509699959896976060870135966080013595509350505050565b600082601f8301126117d157600080fd5b813560206001600160401b038211156117ec576117ec6114db565b8160051b6117fb8282016114f1565b928352848101820192828101908785111561181557600080fd5b83870192505b848310156118345782358252918301919083019061181b565b979650505050505050565b600080600080600060a0868803121561185757600080fd5b61186086611355565b945061186e60208701611355565b935060408601356001600160401b038082111561188a57600080fd5b61189689838a016117c0565b945060608801359150808211156118ac57600080fd5b6118b889838a016117c0565b935060808801359150808211156118ce57600080fd5b506118db88828901611521565b9150509295509295909350565b600080600080600060a0868803121561190057600080fd5b61190986611355565b945061191760208701611355565b9350604086013592506060860135915060808601356001600160401b0381111561194057600080fd5b6118db88828901611521565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a06040820152600061199d60a08301868861194c565b60608301949094525060800152949350505050565b60018060a01b03851681528360208201526060604082015260006119da60608301848661194c565b9695505050505050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611a4f57600080fd5b61078a82611355565b6000808335601e19843603018112611a6f57600080fd5b8301803591506001600160401b03821115611a8957600080fd5b6020019150368190038213156113b257600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611ac657611ac6611a9e565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015611b515782840389528135601e19883603018112611b0857600080fd5b870185810190356001600160401b03811115611b2357600080fd5b803603821315611b3257600080fd5b611b3d86828461194c565b9a87019a9550505090840190600101611ae7565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015611b9f576001600160a01b03611b8a84611355565b16825260209283019290910190600101611b71565b5083810360208501528881526001600160fb1b03891115611bbf57600080fd5b8860051b9150818a602083013781810191505060208101600081526020848303016040850152611bf081888a611acd565b6060850196909652505050608001529695505050505050565b60008219821115611c1c57611c1c611a9e565b500190565b60005b83811015611c3c578181015183820152602001611c24565b83811115611c4b576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c89816017850160208801611c21565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cba816028840160208801611c21565b01602801949350505050565b6020815260008251806020840152611ce5816040850160208701611c21565b601f01601f19169190910160400192915050565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b8183823760009101908152919050565b6000816000190483118215151615611d6d57611d6d611a9e565b500290565b600081611d8157611d81611a9e565b50600019019056fea26469706673582212209124a5c04b0ef63257d2175357f085b77af2c708fd49113ccc2e7662c6ecf82664736f6c634300080f00335f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63fd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f7830000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000034fef5da92c59d6ac21d0a75ce90b351d0fb6ce6000000000000000000000000000000000000000000000000000000000000000200000000000000000000000034fef5da92c59d6ac21d0a75ce90b351d0fb6ce60000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b619
Deployed Bytecode
0x6080604052600436106101bb5760003560e01c80638065657f116100ec578063bc197c811161008a578063d547741f11610064578063d547741f14610582578063e38335e5146105a2578063f23a6e61146105b5578063f27a0c92146105e157600080fd5b8063bc197c8114610509578063c4d252f514610535578063d45c44351461055557600080fd5b806391d14854116100c657806391d1485414610480578063a217fddf146104a0578063b08e51c0146104b5578063b1c5f427146104e957600080fd5b80638065657f1461040c5780638f2a0bb01461042c5780638f61f4f51461044c57600080fd5b8063248a9ca31161015957806331d507501161013357806331d507501461038c57806336568abe146103ac578063584b153e146103cc57806364d62353146103ec57600080fd5b8063248a9ca31461030b5780632ab0f5291461033b5780632f2ff15d1461036c57600080fd5b80630d3cf6fc116101955780630d3cf6fc14610260578063134008d31461029457806313bc9f20146102a7578063150b7a02146102c757600080fd5b806301d5062a146101c757806301ffc9a7146101e957806307bd02651461021e57600080fd5b366101c257005b600080fd5b3480156101d357600080fd5b506101e76101e23660046113b9565b6105f6565b005b3480156101f557600080fd5b5061020961020436600461142d565b61068b565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b506102527fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610215565b34801561026c57600080fd5b506102527f5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca581565b6101e76102a2366004611457565b6106b6565b3480156102b357600080fd5b506102096102c23660046114c2565b61076b565b3480156102d357600080fd5b506102f26102e2366004611590565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610215565b34801561031757600080fd5b506102526103263660046114c2565b60009081526020819052604090206001015490565b34801561034757600080fd5b506102096103563660046114c2565b6000908152600160208190526040909120541490565b34801561037857600080fd5b506101e76103873660046115f7565b610791565b34801561039857600080fd5b506102096103a73660046114c2565b6107bb565b3480156103b857600080fd5b506101e76103c73660046115f7565b6107d4565b3480156103d857600080fd5b506102096103e73660046114c2565b610857565b3480156103f857600080fd5b506101e76104073660046114c2565b61086d565b34801561041857600080fd5b50610252610427366004611457565b610911565b34801561043857600080fd5b506101e7610447366004611667565b610950565b34801561045857600080fd5b506102527fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b34801561048c57600080fd5b5061020961049b3660046115f7565b610aa2565b3480156104ac57600080fd5b50610252600081565b3480156104c157600080fd5b506102527ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b3480156104f557600080fd5b50610252610504366004611718565b610acb565b34801561051557600080fd5b506102f261052436600461183f565b63bc197c8160e01b95945050505050565b34801561054157600080fd5b506101e76105503660046114c2565b610b10565b34801561056157600080fd5b506102526105703660046114c2565b60009081526001602052604090205490565b34801561058e57600080fd5b506101e761059d3660046115f7565b610be5565b6101e76105b0366004611718565b610c0a565b3480156105c157600080fd5b506102f26105d03660046118e8565b63f23a6e6160e01b95945050505050565b3480156105ed57600080fd5b50600254610252565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161062081610d94565b6000610630898989898989610911565b905061063c8184610da1565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161067896959493929190611975565b60405180910390a3505050505050505050565b60006001600160e01b03198216630271189760e51b14806106b057506106b082610e90565b92915050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e636106e2816000610aa2565b6106f0576106f08133610ec5565b6000610700888888888888610911565b905061070c8185610f29565b61071888888888610fc5565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161075094939291906119b2565b60405180910390a361076181611098565b5050505050505050565b60008181526001602052604081205460018111801561078a5750428111155b9392505050565b6000828152602081905260409020600101546107ac81610d94565b6107b683836110d1565b505050565b60008181526001602052604081205481905b1192915050565b6001600160a01b03811633146108495760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6108538282611155565b5050565b60008181526001602081905260408220546107cd565b3330146108d05760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b6064820152608401610840565b60025460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1600255565b600086868686868660405160200161092e96959493929190611975565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc161097a81610d94565b8887146109995760405162461bcd60e51b8152600401610840906119e4565b8885146109b85760405162461bcd60e51b8152600401610840906119e4565b60006109ca8b8b8b8b8b8b8b8b610acb565b90506109d68184610da1565b60005b8a811015610a945780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610a1657610a16611a27565b9050602002016020810190610a2b9190611a3d565b8d8d86818110610a3d57610a3d611a27565b905060200201358c8c87818110610a5657610a56611a27565b9050602002810190610a689190611a58565b8c8b604051610a7c96959493929190611975565b60405180910390a3610a8d81611ab4565b90506109d9565b505050505050505050505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610aec989796959493929190611b5e565b60405160208183030381529060405280519060200120905098975050505050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610b3a81610d94565b610b4382610857565b610ba95760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b6064820152608401610840565b6000828152600160205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260208190526040902060010154610c0081610d94565b6107b68383611155565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610c36816000610aa2565b610c4457610c448133610ec5565b878614610c635760405162461bcd60e51b8152600401610840906119e4565b878414610c825760405162461bcd60e51b8152600401610840906119e4565b6000610c948a8a8a8a8a8a8a8a610acb565b9050610ca08185610f29565b60005b89811015610d7e5760008b8b83818110610cbf57610cbf611a27565b9050602002016020810190610cd49190611a3d565b905060008a8a84818110610cea57610cea611a27565b9050602002013590503660008a8a86818110610d0857610d08611a27565b9050602002810190610d1a9190611a58565b91509150610d2a84848484610fc5565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610d6194939291906119b2565b60405180910390a35050505080610d7790611ab4565b9050610ca3565b50610d8881611098565b50505050505050505050565b610d9e8133610ec5565b50565b610daa826107bb565b15610e0f5760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b6064820152608401610840565b600254811015610e705760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b6064820152608401610840565b610e7a8142611c09565b6000928352600160205260409092209190915550565b60006001600160e01b03198216637965db0b60e01b14806106b057506301ffc9a760e01b6001600160e01b03198316146106b0565b610ecf8282610aa2565b61085357610ee7816001600160a01b031660146111ba565b610ef28360206111ba565b604051602001610f03929190611c51565b60408051601f198184030181529082905262461bcd60e51b825261084091600401611cc6565b610f328261076b565b610f4e5760405162461bcd60e51b815260040161084090611cf9565b801580610f6a5750600081815260016020819052604090912054145b6108535760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b6064820152608401610840565b6000846001600160a01b0316848484604051610fe2929190611d43565b60006040518083038185875af1925050503d806000811461101f576040519150601f19603f3d011682016040523d82523d6000602084013e611024565b606091505b50509050806110915760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b6064820152608401610840565b5050505050565b6110a18161076b565b6110bd5760405162461bcd60e51b815260040161084090611cf9565b600090815260016020819052604090912055565b6110db8282610aa2565b610853576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556111113390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61115f8282610aa2565b15610853576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b606060006111c9836002611d53565b6111d4906002611c09565b6001600160401b038111156111eb576111eb6114db565b6040519080825280601f01601f191660200182016040528015611215576020820181803683370190505b509050600360fc1b8160008151811061123057611230611a27565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061125f5761125f611a27565b60200101906001600160f81b031916908160001a9053506000611283846002611d53565b61128e906001611c09565b90505b6001811115611306576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106112c2576112c2611a27565b1a60f81b8282815181106112d8576112d8611a27565b60200101906001600160f81b031916908160001a90535060049490941c936112ff81611d72565b9050611291565b50831561078a5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610840565b80356001600160a01b038116811461136c57600080fd5b919050565b60008083601f84011261138357600080fd5b5081356001600160401b0381111561139a57600080fd5b6020830191508360208285010111156113b257600080fd5b9250929050565b600080600080600080600060c0888a0312156113d457600080fd5b6113dd88611355565b96506020880135955060408801356001600160401b038111156113ff57600080fd5b61140b8a828b01611371565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561143f57600080fd5b81356001600160e01b03198116811461078a57600080fd5b60008060008060008060a0878903121561147057600080fd5b61147987611355565b95506020870135945060408701356001600160401b0381111561149b57600080fd5b6114a789828a01611371565b979a9699509760608101359660809091013595509350505050565b6000602082840312156114d457600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611519576115196114db565b604052919050565b600082601f83011261153257600080fd5b81356001600160401b0381111561154b5761154b6114db565b61155e601f8201601f19166020016114f1565b81815284602083860101111561157357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156115a657600080fd5b6115af85611355565b93506115bd60208601611355565b92506040850135915060608501356001600160401b038111156115df57600080fd5b6115eb87828801611521565b91505092959194509250565b6000806040838503121561160a57600080fd5b8235915061161a60208401611355565b90509250929050565b60008083601f84011261163557600080fd5b5081356001600160401b0381111561164c57600080fd5b6020830191508360208260051b85010111156113b257600080fd5b600080600080600080600080600060c08a8c03121561168557600080fd5b89356001600160401b038082111561169c57600080fd5b6116a88d838e01611623565b909b50995060208c01359150808211156116c157600080fd5b6116cd8d838e01611623565b909950975060408c01359150808211156116e657600080fd5b506116f38c828d01611623565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b03121561173457600080fd5b88356001600160401b038082111561174b57600080fd5b6117578c838d01611623565b909a50985060208b013591508082111561177057600080fd5b61177c8c838d01611623565b909850965060408b013591508082111561179557600080fd5b506117a28b828c01611623565b999c989b509699959896976060870135966080013595509350505050565b600082601f8301126117d157600080fd5b813560206001600160401b038211156117ec576117ec6114db565b8160051b6117fb8282016114f1565b928352848101820192828101908785111561181557600080fd5b83870192505b848310156118345782358252918301919083019061181b565b979650505050505050565b600080600080600060a0868803121561185757600080fd5b61186086611355565b945061186e60208701611355565b935060408601356001600160401b038082111561188a57600080fd5b61189689838a016117c0565b945060608801359150808211156118ac57600080fd5b6118b889838a016117c0565b935060808801359150808211156118ce57600080fd5b506118db88828901611521565b9150509295509295909350565b600080600080600060a0868803121561190057600080fd5b61190986611355565b945061191760208701611355565b9350604086013592506060860135915060808601356001600160401b0381111561194057600080fd5b6118db88828901611521565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a06040820152600061199d60a08301868861194c565b60608301949094525060800152949350505050565b60018060a01b03851681528360208201526060604082015260006119da60608301848661194c565b9695505050505050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611a4f57600080fd5b61078a82611355565b6000808335601e19843603018112611a6f57600080fd5b8301803591506001600160401b03821115611a8957600080fd5b6020019150368190038213156113b257600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611ac657611ac6611a9e565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015611b515782840389528135601e19883603018112611b0857600080fd5b870185810190356001600160401b03811115611b2357600080fd5b803603821315611b3257600080fd5b611b3d86828461194c565b9a87019a9550505090840190600101611ae7565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015611b9f576001600160a01b03611b8a84611355565b16825260209283019290910190600101611b71565b5083810360208501528881526001600160fb1b03891115611bbf57600080fd5b8860051b9150818a602083013781810191505060208101600081526020848303016040850152611bf081888a611acd565b6060850196909652505050608001529695505050505050565b60008219821115611c1c57611c1c611a9e565b500190565b60005b83811015611c3c578181015183820152602001611c24565b83811115611c4b576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351611c89816017850160208801611c21565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351611cba816028840160208801611c21565b01602801949350505050565b6020815260008251806020840152611ce5816040850160208701611c21565b601f01601f19169190910160400192915050565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b8183823760009101908152919050565b6000816000190483118215151615611d6d57611d6d611a9e565b500290565b600081611d8157611d81611a9e565b50600019019056fea26469706673582212209124a5c04b0ef63257d2175357f085b77af2c708fd49113ccc2e7662c6ecf82664736f6c634300080f0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000005460000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000034fef5da92c59d6ac21d0a75ce90b351d0fb6ce6000000000000000000000000000000000000000000000000000000000000000200000000000000000000000034fef5da92c59d6ac21d0a75ce90b351d0fb6ce60000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b619
-----Decoded View---------------
Arg [0] : minDelay (uint256): 21600
Arg [1] : proposers (address[]): 0x34fEf5DA92c59d6aC21d0A75ce90B351D0Fb6CE6
Arg [2] : executors (address[]): 0x34fEf5DA92c59d6aC21d0A75ce90B351D0Fb6CE6,0x4fED5491693007f0CD49f4614FFC38Ab6A04B619
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000005460
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [4] : 00000000000000000000000034fef5da92c59d6ac21d0a75ce90b351d0fb6ce6
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 00000000000000000000000034fef5da92c59d6ac21d0a75ce90b351d0fb6ce6
Arg [7] : 0000000000000000000000004fed5491693007f0cd49f4614ffc38ab6a04b619
Deployed Bytecode Sourcemap
29754:13452:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36330:413;;;;;;;;;;-1:-1:-1;36330:413:0;;;;;:::i;:::-;;:::i;:::-;;33394:230;;;;;;;;;;-1:-1:-1;33394:230:0;;;;;:::i;:::-;;:::i;:::-;;;1763:14:1;;1756:22;1738:41;;1726:2;1711:18;33394:230:0;;;;;;;;29999:66;;;;;;;;;;;;30039:26;29999:66;;;;;1936:25:1;;;1924:2;1909:18;29999:66:0;1790:177:1;29841:78:0;;;;;;;;;;;;29887:32;29841:78;;39003:472;;;;;;:::i;:::-;;:::i;34226:211::-;;;;;;;;;;-1:-1:-1;34226:211:0;;;;;:::i;:::-;;:::i;42347:207::-;;;;;;;;;;-1:-1:-1;42347:207:0;;;;;:::i;:::-;-1:-1:-1;;;42347:207:0;;;;;;;;;;-1:-1:-1;;;;;;4502:33:1;;;4484:52;;4472:2;4457:18;42347:207:0;4340:202:1;12819:131:0;;;;;;;;;;-1:-1:-1;12819:131:0;;;;;:::i;:::-;12893:7;12920:12;;;;;;;;;;:22;;;;12819:131;34521:138;;;;;;;;;;-1:-1:-1;34521:138:0;;;;;:::i;:::-;34587:9;34912:15;;;30199:1;34912:15;;;;;;;;;34616:35;;34521:138;13260:147;;;;;;;;;;-1:-1:-1;13260:147:0;;;;;:::i;:::-;;:::i;33786:125::-;;;;;;;;;;-1:-1:-1;33786:125:0;;;;;:::i;:::-;;:::i;14404:218::-;;;;;;;;;;-1:-1:-1;14404:218:0;;;;;:::i;:::-;;:::i;33998:143::-;;;;;;;;;;-1:-1:-1;33998:143:0;;;;;:::i;:::-;;:::i;42028:240::-;;;;;;;;;;-1:-1:-1;42028:240:0;;;;;:::i;:::-;;:::i;35352:292::-;;;;;;;;;;-1:-1:-1;35352:292:0;;;;;:::i;:::-;;:::i;37008:729::-;;;;;;;;;;-1:-1:-1;37008:729:0;;;;;:::i;:::-;;:::i;29926:66::-;;;;;;;;;;;;29966:26;29926:66;;11279:147;;;;;;;;;;-1:-1:-1;11279:147:0;;;;;:::i;:::-;;:::i;10384:49::-;;;;;;;;;;-1:-1:-1;10384:49:0;10429:4;10384:49;;30072:68;;;;;;;;;;;;30113:27;30072:68;;35766:333;;;;;;;;;;-1:-1:-1;35766:333:0;;;;;:::i;:::-;;:::i;42948:255::-;;;;;;;;;;-1:-1:-1;42948:255:0;;;;;:::i;:::-;-1:-1:-1;;;42948:255:0;;;;;;;;38280:235;;;;;;;;;;-1:-1:-1;38280:235:0;;;;;:::i;:::-;;:::i;34812:123::-;;;;;;;;;;-1:-1:-1;34812:123:0;;;;;:::i;:::-;34875:17;34912:15;;;:11;:15;;;;;;;34812:123;13700:149;;;;;;;;;;-1:-1:-1;13700:149:0;;;;;:::i;:::-;;:::i;39746:904::-;;;;;;:::i;:::-;;:::i;42635:227::-;;;;;;;;;;-1:-1:-1;42635:227:0;;;;;:::i;:::-;-1:-1:-1;;;42635:227:0;;;;;;;;35128:105;;;;;;;;;;-1:-1:-1;35216:9:0;;35128:105;;36330:413;29966:26;10875:16;10886:4;10875:10;:16::i;:::-;36561:10:::1;36574:53;36588:6;36596:5;36603:4;;36609:11;36622:4;36574:13;:53::i;:::-;36561:66;;36638:20;36648:2;36652:5;36638:9;:20::i;:::-;36692:1;36688:2;36674:61;36695:6;36703:5;36710:4;;36716:11;36729:5;36674:61;;;;;;;;;;;:::i;:::-;;;;;;;;36550:193;36330:413:::0;;;;;;;;:::o;33394:230::-;33503:4;-1:-1:-1;;;;;;33527:49:0;;-1:-1:-1;;;33527:49:0;;:89;;;33580:36;33604:11;33580:23;:36::i;:::-;33520:96;33394:230;-1:-1:-1;;33394:230:0:o;39003:472::-;30039:26;33083:25;33091:4;33105:1;33083:7;:25::i;:::-;33078:89;;33125:30;33136:4;3833:10;33125;:30::i;:::-;39230:10:::1;39243:56;39257:6;39265:5;39272:7;;39281:11;39294:4;39243:13;:56::i;:::-;39230:69;;39312:28;39324:2;39328:11;39312;:28::i;:::-;39351:32;39360:6;39368:5;39375:7;;39351:8;:32::i;:::-;39416:1;39412:2;39399:43;39419:6;39427:5;39434:7;;39399:43;;;;;;;;;:::i;:::-;;;;;;;;39453:14;39464:2;39453:10;:14::i;:::-;39219:256;39003:472:::0;;;;;;;:::o;34226:211::-;34293:10;34912:15;;;:11;:15;;;;;;30199:1;34370:9;:27;:59;;;;;34414:15;34401:9;:28;;34370:59;34363:66;34226:211;-1:-1:-1;;;34226:211:0:o;13260:147::-;12893:7;12920:12;;;;;;;;;;:22;;;10875:16;10886:4;10875:10;:16::i;:::-;13374:25:::1;13385:4;13391:7;13374:10;:25::i;:::-;13260:147:::0;;;:::o;33786:125::-;33848:15;34912;;;:11;:15;;;;;;33848;;33883:16;:20;;33786:125;-1:-1:-1;;33786:125:0:o;14404:218::-;-1:-1:-1;;;;;14500:23:0;;3833:10;14500:23;14492:83;;;;-1:-1:-1;;;14492:83:0;;11826:2:1;14492:83:0;;;11808:21:1;11865:2;11845:18;;;11838:30;11904:34;11884:18;;;11877:62;-1:-1:-1;;;11955:18:1;;;11948:45;12010:19;;14492:83:0;;;;;;;;;14588:26;14600:4;14606:7;14588:11;:26::i;:::-;14404:218;;:::o;33998:143::-;34067:12;34912:15;;;30199:1;34912:15;;;;;;;;34099:16;34812:123;42028:240;42103:10;42125:4;42103:27;42095:83;;;;-1:-1:-1;;;42095:83:0;;12242:2:1;42095:83:0;;;12224:21:1;12281:2;12261:18;;;12254:30;12320:34;12300:18;;;12293:62;-1:-1:-1;;;12371:18:1;;;12364:41;12422:19;;42095:83:0;12040:407:1;42095:83:0;42209:9;;42194:35;;;12626:25:1;;;12682:2;12667:18;;12660:34;;;42194:35:0;;12599:18:1;42194:35:0;;;;;;;42240:9;:20;42028:240::o;35352:292::-;35543:12;35596:6;35604:5;35611:4;;35617:11;35630:4;35585:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35575:61;;;;;;35568:68;;35352:292;;;;;;;;:::o;37008:729::-;29966:26;10875:16;10886:4;10875:10;:16::i;:::-;37282:31;;::::1;37274:79;;;;-1:-1:-1::0;;;37274:79:0::1;;;;;;;:::i;:::-;37372:33:::0;;::::1;37364:81;;;;-1:-1:-1::0;;;37364:81:0::1;;;;;;;:::i;:::-;37458:10;37471:64;37490:7;;37499:6;;37507:8;;37517:11;37530:4;37471:18;:64::i;:::-;37458:77;;37546:20;37556:2;37560:5;37546:9;:20::i;:::-;37582:9;37577:153;37597:18:::0;;::::1;37577:153;;;37660:1;37656:2;37642:76;37663:7;;37671:1;37663:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;37675:6;;37682:1;37675:9;;;;;;;:::i;:::-;;;;;;;37686:8;;37695:1;37686:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;37699;37712:5;37642:76;;;;;;;;;;;:::i;:::-;;;;;;;;37617:3;::::0;::::1;:::i;:::-;;;37577:153;;;;37263:474;37008:729:::0;;;;;;;;;;:::o;11279:147::-;11365:4;11389:12;;;;;;;;;;;-1:-1:-1;;;;;11389:29:0;;;;;;;;;;;;;;;11279:147::o;35766:333::-;35992:12;36045:7;;36054:6;;36062:8;;36072:11;36085:4;36034:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36024:67;;;;;;36017:74;;35766:333;;;;;;;;;;:::o;38280:235::-;30113:27;10875:16;10886:4;10875:10;:16::i;:::-;38367:22:::1;38386:2;38367:18;:22::i;:::-;38359:84;;;::::0;-1:-1:-1;;;38359:84:0;;17507:2:1;38359:84:0::1;::::0;::::1;17489:21:1::0;17546:2;17526:18;;;17519:30;17585:34;17565:18;;;17558:62;-1:-1:-1;;;17636:18:1;;;17629:47;17693:19;;38359:84:0::1;17305:413:1::0;38359:84:0::1;38461:15;::::0;;;:11:::1;:15;::::0;;;;;38454:22;;;38494:13;38473:2;;38494:13:::1;::::0;::::1;38280:235:::0;;:::o;13700:149::-;12893:7;12920:12;;;;;;;;;;:22;;;10875:16;10886:4;10875:10;:16::i;:::-;13815:26:::1;13827:4;13833:7;13815:11;:26::i;39746:904::-:0;30039:26;33083:25;33091:4;33105:1;33083:7;:25::i;:::-;33078:89;;33125:30;33136:4;3833:10;33125;:30::i;:::-;40013:31;;::::1;40005:79;;;;-1:-1:-1::0;;;40005:79:0::1;;;;;;;:::i;:::-;40103:33:::0;;::::1;40095:81;;;;-1:-1:-1::0;;;40095:81:0::1;;;;;;;:::i;:::-;40189:10;40202:64;40221:7;;40230:6;;40238:8;;40248:11;40261:4;40202:18;:64::i;:::-;40189:77;;40279:28;40291:2;40295:11;40279;:28::i;:::-;40323:9;40318:300;40338:18:::0;;::::1;40318:300;;;40378:14;40395:7;;40403:1;40395:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;40378:27;;40420:13;40436:6;;40443:1;40436:9;;;;;;;:::i;:::-;;;;;;;40420:25;;40460:22;;40485:8;;40494:1;40485:11;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;40460:36;;;;40511:32;40520:6;40528:5;40535:7;;40511:8;:32::i;:::-;40580:1;40576:2;40563:43;40583:6;40591:5;40598:7;;40563:43;;;;;;;;;:::i;:::-;;;;;;;;40363:255;;;;40358:3;;;;:::i;:::-;;;40318:300;;;;40628:14;40639:2;40628:10;:14::i;:::-;39994:656;39746:904:::0;;;;;;;;;:::o;11730:105::-;11797:30;11808:4;3833:10;33125;:30::i;11797:::-;11730:105;:::o;37844:285::-;37918:15;37930:2;37918:11;:15::i;:::-;37917:16;37909:76;;;;-1:-1:-1;;;37909:76:0;;17925:2:1;37909:76:0;;;17907:21:1;17964:2;17944:18;;;17937:30;18003:34;17983:18;;;17976:62;-1:-1:-1;;;18054:18:1;;;18047:45;18109:19;;37909:76:0;17723:411:1;37909:76:0;35216:9;;38004:5;:22;;37996:73;;;;-1:-1:-1;;;37996:73:0;;18341:2:1;37996:73:0;;;18323:21:1;18380:2;18360:18;;;18353:30;18419:34;18399:18;;;18392:62;-1:-1:-1;;;18470:18:1;;;18463:36;18516:19;;37996:73:0;18139:402:1;37996:73:0;38098:23;38116:5;38098:15;:23;:::i;:::-;38080:15;;;;:11;:15;;;;;;:41;;;;-1:-1:-1;37844:285:0:o;10983:204::-;11068:4;-1:-1:-1;;;;;;11092:47:0;;-1:-1:-1;;;11092:47:0;;:87;;-1:-1:-1;;;;;;;;;;8353:40:0;;;11143:36;8244:157;12125:505;12214:22;12222:4;12228:7;12214;:22::i;:::-;12209:414;;12402:41;12430:7;-1:-1:-1;;;;;12402:41:0;12440:2;12402:19;:41::i;:::-;12516:38;12544:4;12551:2;12516:19;:38::i;:::-;12307:270;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;12307:270:0;;;;;;;;;;-1:-1:-1;;;12253:358:0;;;;;;;:::i;41078:280::-;41164:20;41181:2;41164:16;:20::i;:::-;41156:75;;;;-1:-1:-1;;;41156:75:0;;;;;;;:::i;:::-;41250:25;;;:57;;-1:-1:-1;34587:9:0;34912:15;;;30199:1;34912:15;;;;;;;;;34616:35;41279:28;41242:108;;;;-1:-1:-1;;;41242:108:0;;20734:2:1;41242:108:0;;;20716:21:1;20773:2;20753:18;;;20746:30;20812:34;20792:18;;;20785:62;-1:-1:-1;;;20863:18:1;;;20856:36;20909:19;;41242:108:0;20532:402:1;40718:272:0;40851:12;40869:6;-1:-1:-1;;;;;40869:11:0;40888:5;40895:4;;40869:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40850:50;;;40919:7;40911:71;;;;-1:-1:-1;;;40911:71:0;;21417:2:1;40911:71:0;;;21399:21:1;21456:2;21436:18;;;21429:30;21495:34;21475:18;;;21468:62;-1:-1:-1;;;21546:18:1;;;21539:49;21605:19;;40911:71:0;21215:415:1;40911:71:0;40839:151;40718:272;;;;:::o;41445:178::-;41504:20;41521:2;41504:16;:20::i;:::-;41496:75;;;;-1:-1:-1;;;41496:75:0;;;;;;;:::i;:::-;41582:15;;;;30199:1;41582:15;;;;;;;;:33;41445:178::o;16001:238::-;16085:22;16093:4;16099:7;16085;:22::i;:::-;16080:152;;16124:6;:12;;;;;;;;;;;-1:-1:-1;;;;;16124:29:0;;;;;;;;;:36;;-1:-1:-1;;16124:36:0;16156:4;16124:36;;;16207:12;3833:10;;3753:98;16207:12;-1:-1:-1;;;;;16180:40:0;16198:7;-1:-1:-1;;;;;16180:40:0;16192:4;16180:40;;;;;;;;;;16001:238;;:::o;16419:239::-;16503:22;16511:4;16517:7;16503;:22::i;:::-;16499:152;;;16574:5;16542:12;;;;;;;;;;;-1:-1:-1;;;;;16542:29:0;;;;;;;;;;:37;;-1:-1:-1;;16542:37:0;;;16599:40;3833:10;;16542:12;;16599:40;;16574:5;16599:40;16419:239;;:::o;5698:451::-;5773:13;5799:19;5831:10;5835:6;5831:1;:10;:::i;:::-;:14;;5844:1;5831:14;:::i;:::-;-1:-1:-1;;;;;5821:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5821:25:0;;5799:47;;-1:-1:-1;;;5857:6:0;5864:1;5857:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;5857:15:0;;;;;;;;;-1:-1:-1;;;5883:6:0;5890:1;5883:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;5883:15:0;;;;;;;;-1:-1:-1;5914:9:0;5926:10;5930:6;5926:1;:10;:::i;:::-;:14;;5939:1;5926:14;:::i;:::-;5914:26;;5909:135;5946:1;5942;:5;5909:135;;;-1:-1:-1;;;5994:5:0;6002:3;5994:11;5981:25;;;;;;;:::i;:::-;;;;5969:6;5976:1;5969:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;5969:37:0;;;;;;;;-1:-1:-1;6031:1:0;6021:11;;;;;5949:3;;;:::i;:::-;;;5909:135;;;-1:-1:-1;6062:10:0;;6054:55;;;;-1:-1:-1;;;6054:55:0;;22151:2:1;6054:55:0;;;22133:21:1;;;22170:18;;;22163:30;22229:34;22209:18;;;22202:62;22281:18;;6054:55:0;21949:356:1;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;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:1;;-1:-1:-1;;;;;380:30:1;;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:1;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:1;1188:2;1173:18;;1160:32;;1239:3;1224:19;;1211:33;;-1:-1:-1;1291:3:1;1276:19;;;1263:33;;-1:-1:-1;544:758:1;-1:-1:-1;;;;544:758:1: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:1;;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:1;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:1;2599:2;2584:18;;2571:32;;2650:3;2635:19;;;2622:33;;-1:-1:-1;1972:689:1;-1:-1:-1;;;;1972:689:1: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:1;;2666:180;-1:-1:-1;2666:180:1: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:1;3084:40;;-1:-1:-1;;;;;3139:34:1;;3175:22;;;3136:62;3133:88;;;3201:18;;:::i;:::-;3237:2;3230:22;2983:275;;-1:-1:-1;2983:275:1: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:1;3431:26;3428:52;;;3460:18;;:::i;:::-;3504:55;3547:2;3528:13;;-1:-1:-1;;3524:27:1;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:1: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:1;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:367::-;5054:8;5064:6;5118:3;5111:4;5103:6;5099:17;5095:27;5085:55;;5136:1;5133;5126:12;5085:55;-1:-1:-1;5159:20:1;;-1:-1:-1;;;;;5191:30:1;;5188:50;;;5234:1;5231;5224:12;5188:50;5271:4;5263:6;5259:17;5247:29;;5331:3;5324:4;5314:6;5311:1;5307:14;5299:6;5295:27;5291:38;5288:47;5285:67;;;5348:1;5345;5338:12;5363:1306;5559:6;5567;5575;5583;5591;5599;5607;5615;5623;5676:3;5664:9;5655:7;5651:23;5647:33;5644:53;;;5693:1;5690;5683:12;5644:53;5733:9;5720:23;-1:-1:-1;;;;;5803:2:1;5795:6;5792:14;5789:34;;;5819:1;5816;5809:12;5789:34;5858:70;5920:7;5911:6;5900:9;5896:22;5858:70;:::i;:::-;5947:8;;-1:-1:-1;5832:96:1;-1:-1:-1;6035:2:1;6020:18;;6007:32;;-1:-1:-1;6051:16:1;;;6048:36;;;6080:1;6077;6070:12;6048:36;6119:72;6183:7;6172:8;6161:9;6157:24;6119:72;:::i;:::-;6210:8;;-1:-1:-1;6093:98:1;-1:-1:-1;6298:2:1;6283:18;;6270:32;;-1:-1:-1;6314:16:1;;;6311:36;;;6343:1;6340;6333:12;6311:36;;6382:72;6446:7;6435:8;6424:9;6420:24;6382:72;:::i;:::-;5363:1306;;;;-1:-1:-1;5363:1306:1;;;;6473:8;;6555:2;6540:18;;6527:32;;6606:3;6591:19;;6578:33;;-1:-1:-1;6658:3:1;6643:19;6630:33;;-1:-1:-1;5363:1306:1;-1:-1:-1;;;;5363:1306:1:o;6674:1237::-;6861:6;6869;6877;6885;6893;6901;6909;6917;6970:3;6958:9;6949:7;6945:23;6941:33;6938:53;;;6987:1;6984;6977:12;6938:53;7027:9;7014:23;-1:-1:-1;;;;;7097:2:1;7089:6;7086:14;7083:34;;;7113:1;7110;7103:12;7083:34;7152:70;7214:7;7205:6;7194:9;7190:22;7152:70;:::i;:::-;7241:8;;-1:-1:-1;7126:96:1;-1:-1:-1;7329:2:1;7314:18;;7301:32;;-1:-1:-1;7345:16:1;;;7342:36;;;7374:1;7371;7364:12;7342:36;7413:72;7477:7;7466:8;7455:9;7451:24;7413:72;:::i;:::-;7504:8;;-1:-1:-1;7387:98:1;-1:-1:-1;7592:2:1;7577:18;;7564:32;;-1:-1:-1;7608:16:1;;;7605:36;;;7637:1;7634;7627:12;7605:36;;7676:72;7740:7;7729:8;7718:9;7714:24;7676:72;:::i;:::-;6674:1237;;;;-1:-1:-1;6674:1237:1;;;;7767:8;;7849:2;7834:18;;7821:32;;7900:3;7885:19;7872:33;;-1:-1:-1;6674:1237:1;-1:-1:-1;;;;6674:1237:1:o;7916:712::-;7970:5;8023:3;8016:4;8008:6;8004:17;8000:27;7990:55;;8041:1;8038;8031:12;7990:55;8077:6;8064:20;8103:4;-1:-1:-1;;;;;8122:2:1;8119:26;8116:52;;;8148:18;;:::i;:::-;8194:2;8191:1;8187:10;8217:28;8241:2;8237;8233:11;8217:28;:::i;:::-;8279:15;;;8349;;;8345:24;;;8310:12;;;;8381:15;;;8378:35;;;8409:1;8406;8399:12;8378:35;8445:2;8437:6;8433:15;8422:26;;8457:142;8473:6;8468:3;8465:15;8457:142;;;8539:17;;8527:30;;8490:12;;;;8577;;;;8457:142;;;8617:5;7916:712;-1:-1:-1;;;;;;;7916:712:1:o;8633:943::-;8787:6;8795;8803;8811;8819;8872:3;8860:9;8851:7;8847:23;8843:33;8840:53;;;8889:1;8886;8879:12;8840:53;8912:29;8931:9;8912:29;:::i;:::-;8902:39;;8960:38;8994:2;8983:9;8979:18;8960:38;:::i;:::-;8950:48;;9049:2;9038:9;9034:18;9021:32;-1:-1:-1;;;;;9113:2:1;9105:6;9102:14;9099:34;;;9129:1;9126;9119:12;9099:34;9152:61;9205:7;9196:6;9185:9;9181:22;9152:61;:::i;:::-;9142:71;;9266:2;9255:9;9251:18;9238:32;9222:48;;9295:2;9285:8;9282:16;9279:36;;;9311:1;9308;9301:12;9279:36;9334:63;9389:7;9378:8;9367:9;9363:24;9334:63;:::i;:::-;9324:73;;9450:3;9439:9;9435:19;9422:33;9406:49;;9480:2;9470:8;9467:16;9464:36;;;9496:1;9493;9486:12;9464:36;;9519:51;9562:7;9551:8;9540:9;9536:24;9519:51;:::i;:::-;9509:61;;;8633:943;;;;;;;;:::o;9763:606::-;9867:6;9875;9883;9891;9899;9952:3;9940:9;9931:7;9927:23;9923:33;9920:53;;;9969:1;9966;9959:12;9920:53;9992:29;10011:9;9992:29;:::i;:::-;9982:39;;10040:38;10074:2;10063:9;10059:18;10040:38;:::i;:::-;10030:48;;10125:2;10114:9;10110:18;10097:32;10087:42;;10176:2;10165:9;10161:18;10148:32;10138:42;;10231:3;10220:9;10216:19;10203:33;-1:-1:-1;;;;;10251:6:1;10248:30;10245:50;;;10291:1;10288;10281:12;10245:50;10314:49;10355:7;10346:6;10335:9;10331:22;10314:49;:::i;10374:266::-;10462:6;10457:3;10450:19;10514:6;10507:5;10500:4;10495:3;10491:14;10478:43;-1:-1:-1;10566:1:1;10541:16;;;10559:4;10537:27;;;10530:38;;;;10622:2;10601:15;;;-1:-1:-1;;10597:29:1;10588:39;;;10584:50;;10374:266::o;10645:557::-;10943:1;10939;10934:3;10930:11;10926:19;10918:6;10914:32;10903:9;10896:51;10983:6;10978:2;10967:9;10963:18;10956:34;11026:3;11021:2;11010:9;11006:18;10999:31;10877:4;11047:62;11104:3;11093:9;11089:19;11081:6;11073;11047:62;:::i;:::-;11140:2;11125:18;;11118:34;;;;-1:-1:-1;11183:3:1;11168:19;11161:35;11039:70;10645:557;-1:-1:-1;;;;10645:557:1:o;11207:412::-;11449:1;11445;11440:3;11436:11;11432:19;11424:6;11420:32;11409:9;11402:51;11489:6;11484:2;11473:9;11469:18;11462:34;11532:2;11527;11516:9;11512:18;11505:30;11383:4;11552:61;11609:2;11598:9;11594:18;11586:6;11578;11552:61;:::i;:::-;11544:69;11207:412;-1:-1:-1;;;;;;11207:412:1:o;13267:399::-;13469:2;13451:21;;;13508:2;13488:18;;;13481:30;13547:34;13542:2;13527:18;;13520:62;-1:-1:-1;;;13613:2:1;13598:18;;13591:33;13656:3;13641:19;;13267:399::o;13671:127::-;13732:10;13727:3;13723:20;13720:1;13713:31;13763:4;13760:1;13753:15;13787:4;13784:1;13777:15;13803:186;13862:6;13915:2;13903:9;13894:7;13890:23;13886:32;13883:52;;;13931:1;13928;13921:12;13883:52;13954:29;13973:9;13954:29;:::i;13994:521::-;14071:4;14077:6;14137:11;14124:25;14231:2;14227:7;14216:8;14200:14;14196:29;14192:43;14172:18;14168:68;14158:96;;14250:1;14247;14240:12;14158:96;14277:33;;14329:20;;;-1:-1:-1;;;;;;14361:30:1;;14358:50;;;14404:1;14401;14394:12;14358:50;14437:4;14425:17;;-1:-1:-1;14468:14:1;14464:27;;;14454:38;;14451:58;;;14505:1;14502;14495:12;14520:127;14581:10;14576:3;14572:20;14569:1;14562:31;14612:4;14609:1;14602:15;14636:4;14633:1;14626:15;14652:135;14691:3;14712:17;;;14709:43;;14732:18;;:::i;:::-;-1:-1:-1;14779:1:1;14768:13;;14652:135::o;14792:1067::-;14899:6;14894:3;14887:19;14869:3;14925:4;14966:2;14961:3;14957:12;14991:11;15018;15011:18;;15068:6;15065:1;15061:14;15054:5;15050:26;15038:38;;15099:5;15122:1;15132:701;15146:6;15143:1;15140:13;15132:701;;;15217:5;15211:4;15207:16;15202:3;15195:29;15276:6;15263:20;15366:2;15362:7;15354:5;15338:14;15334:26;15330:40;15310:18;15306:65;15296:93;;15385:1;15382;15375:12;15296:93;15417:30;;15525:16;;;;15476:21;-1:-1:-1;;;;;15557:32:1;;15554:52;;;15602:1;15599;15592:12;15554:52;15655:8;15639:14;15635:29;15626:7;15622:43;15619:63;;;15678:1;15675;15668:12;15619:63;15703:50;15748:4;15738:8;15729:7;15703:50;:::i;:::-;15811:12;;;;15695:58;-1:-1:-1;;;15776:15:1;;;;15168:1;15161:9;15132:701;;;-1:-1:-1;15849:4:1;;14792:1067;-1:-1:-1;;;;;;;14792:1067:1:o;15864:1436::-;16316:3;16329:22;;;16301:19;;16386:22;;;16268:4;16466:6;16439:3;16424:19;;16268:4;16500:235;16514:6;16511:1;16508:13;16500:235;;;-1:-1:-1;;;;;16579:26:1;16598:6;16579:26;:::i;:::-;16575:52;16563:65;;16651:4;16710:15;;;;16675:12;;;;16536:1;16529:9;16500:235;;;-1:-1:-1;16773:19:1;;;16766:4;16751:20;;16744:49;16802:19;;;-1:-1:-1;;;;;16833:31:1;;16830:51;;;16877:1;16874;16867:12;16830:51;16911:6;16908:1;16904:14;16890:28;;16964:6;16956;16949:4;16944:3;16940:14;16927:44;16999:6;16994:3;16990:16;16980:26;;;17033:4;17029:2;17025:13;17058:1;17054:2;17047:13;17120:4;17108:9;17104:2;17100:18;17096:29;17091:2;17080:9;17076:18;17069:57;17143:64;17204:2;17196:6;17188;17143:64;:::i;:::-;17238:2;17223:18;;17216:34;;;;-1:-1:-1;;;17281:3:1;17266:19;17259:35;17135:72;15864:1436;-1:-1:-1;;;;;;15864:1436:1:o;18546:128::-;18586:3;18617:1;18613:6;18610:1;18607:13;18604:39;;;18623:18;;:::i;:::-;-1:-1:-1;18659:9:1;;18546:128::o;18679:258::-;18751:1;18761:113;18775:6;18772:1;18769:13;18761:113;;;18851:11;;;18845:18;18832:11;;;18825:39;18797:2;18790:10;18761:113;;;18892:6;18889:1;18886:13;18883:48;;;18927:1;18918:6;18913:3;18909:16;18902:27;18883:48;;18679:258;;;:::o;18942:786::-;19353:25;19348:3;19341:38;19323:3;19408:6;19402:13;19424:62;19479:6;19474:2;19469:3;19465:12;19458:4;19450:6;19446:17;19424:62;:::i;:::-;-1:-1:-1;;;19545:2:1;19505:16;;;19537:11;;;19530:40;19595:13;;19617:63;19595:13;19666:2;19658:11;;19651:4;19639:17;;19617:63;:::i;:::-;19700:17;19719:2;19696:26;;18942:786;-1:-1:-1;;;;18942:786:1:o;19733:383::-;19882:2;19871:9;19864:21;19845:4;19914:6;19908:13;19957:6;19952:2;19941:9;19937:18;19930:34;19973:66;20032:6;20027:2;20016:9;20012:18;20007:2;19999:6;19995:15;19973:66;:::i;:::-;20100:2;20079:15;-1:-1:-1;;20075:29:1;20060:45;;;;20107:2;20056:54;;19733:383;-1:-1:-1;;19733:383:1:o;20121:406::-;20323:2;20305:21;;;20362:2;20342:18;;;20335:30;20401:34;20396:2;20381:18;;20374:62;-1:-1:-1;;;20467:2:1;20452:18;;20445:40;20517:3;20502:19;;20121:406::o;20939:271::-;21122:6;21114;21109:3;21096:33;21078:3;21148:16;;21173:13;;;21148:16;20939:271;-1:-1:-1;20939:271:1:o;21635:168::-;21675:7;21741:1;21737;21733:6;21729:14;21726:1;21723:21;21718:1;21711:9;21704:17;21700:45;21697:71;;;21748:18;;:::i;:::-;-1:-1:-1;21788:9:1;;21635:168::o;21808:136::-;21847:3;21875:5;21865:39;;21884:18;;:::i;:::-;-1:-1:-1;;;21920:18:1;;21808:136::o
Swarm Source
ipfs://9124a5c04b0ef63257d2175357f085b77af2c708fd49113ccc2e7662c6ecf826
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.