Overview
HYPE Balance
HYPE Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TimelockController
Compiler Version
v0.8.30+commit.73712a01
Contract Source Code (Solidity)
/**
*Submitted for verification at hyperevmscan.io on 2025-10-29
*/
// File: @openzeppelin/contracts/access/IAccessControl.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/IAccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev The `account` is missing a role.
*/
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
/**
* @dev The caller of a function is not the expected one.
*
* NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
*/
error AccessControlBadConfirmation();
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*/
function renounceRole(bytes32 role, address callerConfirmation) external;
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/access/AccessControl.sol
// OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```solidity
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```solidity
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
* to enforce additional security measures for this role.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address account => bool) hasRole;
bytes32 adminRole;
}
mapping(bytes32 role => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with an {AccessControlUnauthorizedAccount} error including the required role.
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual returns (bool) {
return _roles[role].hasRole[account];
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
* is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
* is missing `role`.
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address callerConfirmation) public virtual {
if (callerConfirmation != _msgSender()) {
revert AccessControlBadConfirmation();
}
_revokeRole(role, callerConfirmation);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
if (!hasRole(role, account)) {
_roles[role].hasRole[account] = true;
emit RoleGranted(role, account, _msgSender());
return true;
} else {
return false;
}
}
/**
* @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
if (hasRole(role, account)) {
_roles[role].hasRole[account] = false;
emit RoleRevoked(role, account, _msgSender());
return true;
} else {
return false;
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.20;
/**
* @title ERC-721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC-721 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/contracts/token/ERC721/utils/ERC721Holder.sol
// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC721/utils/ERC721Holder.sol)
pragma solidity ^0.8.20;
/**
* @dev Implementation of the {IERC721Receiver} interface.
*
* Accepts all token transfers.
* Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or
* {IERC721-setApprovalForAll}.
*/
abstract contract ERC721Holder is IERC721Receiver {
/**
* @dev See {IERC721Receiver-onERC721Received}.
*
* Always returns `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(address, address, uint256, bytes memory) public virtual returns (bytes4) {
return this.onERC721Received.selector;
}
}
// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/IERC1155Receiver.sol)
pragma solidity ^0.8.20;
/**
* @dev Interface that must be implemented by smart contracts in order to receive
* ERC-1155 token transfers.
*/
interface IERC1155Receiver is IERC165 {
/**
* @dev Handles the receipt of a single ERC-1155 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 ERC-1155 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/contracts/token/ERC1155/utils/ERC1155Holder.sol
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC1155/utils/ERC1155Holder.sol)
pragma solidity ^0.8.20;
/**
* @dev Simple implementation of `IERC1155Receiver` that will allow a contract to hold ERC-1155 tokens.
*
* IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be
* stuck.
*/
abstract contract ERC1155Holder is ERC165, IERC1155Receiver {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId);
}
function onERC1155Received(
address,
address,
uint256,
uint256,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155Received.selector;
}
function onERC1155BatchReceived(
address,
address,
uint256[] memory,
uint256[] memory,
bytes memory
) public virtual override returns (bytes4) {
return this.onERC1155BatchReceived.selector;
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)
pragma solidity ^0.8.20;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev The ETH balance of the account is not enough to perform the operation.
*/
error AddressInsufficientBalance(address account);
/**
* @dev There's no code at `target` (it is not a contract).
*/
error AddressEmptyCode(address target);
/**
* @dev A call to an address target failed. The target may have reverted.
*/
error FailedInnerCall();
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
if (address(this).balance < amount) {
revert AddressInsufficientBalance(address(this));
}
(bool success, ) = recipient.call{value: amount}("");
if (!success) {
revert FailedInnerCall();
}
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason or custom error, it is bubbled
* up by this function (like regular Solidity function calls). However, if
* the call reverted with no returned reason, this function reverts with a
* {FailedInnerCall} error.
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
if (address(this).balance < value) {
revert AddressInsufficientBalance(address(this));
}
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target
* was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an
* unsuccessful call.
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata
) internal view returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
// only check if target is a contract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
if (returndata.length == 0 && target.code.length == 0) {
revert AddressEmptyCode(target);
}
return returndata;
}
}
/**
* @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the
* revert reason or with a default {FailedInnerCall} error.
*/
function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
if (!success) {
_revert(returndata);
} else {
return returndata;
}
}
/**
* @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.
*/
function _revert(bytes memory returndata) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert FailedInnerCall();
}
}
}
// File: @openzeppelin/contracts/governance/TimelockController.sol
// OpenZeppelin Contracts (last updated v5.0.0) (governance/TimelockController.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which acts as a timelocked controller. When set as the
* owner of an `Ownable` smart contract, it enforces a timelock on all
* `onlyOwner` maintenance operations. This gives time for users of the
* controlled contract to exit before a potentially dangerous maintenance
* operation is applied.
*
* By default, this contract is self administered, meaning administration tasks
* have to go through the timelock process. The proposer (resp executor) role
* is in charge of proposing (resp executing) operations. A common use case is
* to position this {TimelockController} as the owner of a smart contract, with
* a multisig or a DAO as the sole proposer.
*/
contract TimelockController is AccessControl, ERC721Holder, ERC1155Holder {
bytes32 public constant PROPOSER_ROLE = keccak256("PROPOSER_ROLE");
bytes32 public constant EXECUTOR_ROLE = keccak256("EXECUTOR_ROLE");
bytes32 public constant CANCELLER_ROLE = keccak256("CANCELLER_ROLE");
uint256 internal constant _DONE_TIMESTAMP = uint256(1);
mapping(bytes32 id => uint256) private _timestamps;
uint256 private _minDelay;
enum OperationState {
Unset,
Waiting,
Ready,
Done
}
/**
* @dev Mismatch between the parameters length for an operation call.
*/
error TimelockInvalidOperationLength(uint256 targets, uint256 payloads, uint256 values);
/**
* @dev The schedule operation doesn't meet the minimum delay.
*/
error TimelockInsufficientDelay(uint256 delay, uint256 minDelay);
/**
* @dev The current state of an operation is not as required.
* The `expectedStates` is a bitmap with the bits enabled for each OperationState enum position
* counting from right to left.
*
* See {_encodeStateBitmap}.
*/
error TimelockUnexpectedOperationState(bytes32 operationId, bytes32 expectedStates);
/**
* @dev The predecessor to an operation not yet done.
*/
error TimelockUnexecutedPredecessor(bytes32 predecessorId);
/**
* @dev The caller account is not authorized.
*/
error TimelockUnauthorizedCaller(address caller);
/**
* @dev Emitted when a call is scheduled as part of operation `id`.
*/
event CallScheduled(
bytes32 indexed id,
uint256 indexed index,
address target,
uint256 value,
bytes data,
bytes32 predecessor,
uint256 delay
);
/**
* @dev Emitted when a call is performed as part of operation `id`.
*/
event CallExecuted(bytes32 indexed id, uint256 indexed index, address target, uint256 value, bytes data);
/**
* @dev Emitted when new proposal is scheduled with non-zero salt.
*/
event CallSalt(bytes32 indexed id, bytes32 salt);
/**
* @dev Emitted when operation `id` is cancelled.
*/
event Cancelled(bytes32 indexed id);
/**
* @dev Emitted when the minimum delay for future operations is modified.
*/
event MinDelayChange(uint256 oldDuration, uint256 newDuration);
/**
* @dev Initializes the contract with the following parameters:
*
* - `minDelay`: initial minimum delay in seconds for operations
* - `proposers`: accounts to be granted proposer and canceller roles
* - `executors`: accounts to be granted executor role
* - `admin`: optional account to be granted admin role; disable with zero address
*
* IMPORTANT: The optional admin can aid with initial configuration of roles after deployment
* without being subject to delay, but this role should be subsequently renounced in favor of
* administration through timelocked proposals. Previous versions of this contract would assign
* this admin to the deployer automatically and should be renounced as well.
*/
constructor(uint256 minDelay, address[] memory proposers, address[] memory executors, address admin) {
// self administration
_grantRole(DEFAULT_ADMIN_ROLE, address(this));
// optional admin
if (admin != address(0)) {
_grantRole(DEFAULT_ADMIN_ROLE, admin);
}
// register proposers and cancellers
for (uint256 i = 0; i < proposers.length; ++i) {
_grantRole(PROPOSER_ROLE, proposers[i]);
_grantRole(CANCELLER_ROLE, proposers[i]);
}
// register executors
for (uint256 i = 0; i < executors.length; ++i) {
_grantRole(EXECUTOR_ROLE, executors[i]);
}
_minDelay = minDelay;
emit MinDelayChange(0, minDelay);
}
/**
* @dev Modifier to make a function callable only by a certain role. In
* addition to checking the sender's role, `address(0)` 's role is also
* considered. Granting a role to `address(0)` is equivalent to enabling
* this role for everyone.
*/
modifier onlyRoleOrOpenRole(bytes32 role) {
if (!hasRole(role, address(0))) {
_checkRole(role, _msgSender());
}
_;
}
/**
* @dev Contract might receive/hold ETH as part of the maintenance process.
*/
receive() external payable {}
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(
bytes4 interfaceId
) public view virtual override(AccessControl, ERC1155Holder) returns (bool) {
return super.supportsInterface(interfaceId);
}
/**
* @dev Returns whether an id corresponds to a registered operation. This
* includes both Waiting, Ready, and Done operations.
*/
function isOperation(bytes32 id) public view returns (bool) {
return getOperationState(id) != OperationState.Unset;
}
/**
* @dev Returns whether an operation is pending or not. Note that a "pending" operation may also be "ready".
*/
function isOperationPending(bytes32 id) public view returns (bool) {
OperationState state = getOperationState(id);
return state == OperationState.Waiting || state == OperationState.Ready;
}
/**
* @dev Returns whether an operation is ready for execution. Note that a "ready" operation is also "pending".
*/
function isOperationReady(bytes32 id) public view returns (bool) {
return getOperationState(id) == OperationState.Ready;
}
/**
* @dev Returns whether an operation is done or not.
*/
function isOperationDone(bytes32 id) public view returns (bool) {
return getOperationState(id) == OperationState.Done;
}
/**
* @dev Returns the timestamp at which an operation becomes ready (0 for
* unset operations, 1 for done operations).
*/
function getTimestamp(bytes32 id) public view virtual returns (uint256) {
return _timestamps[id];
}
/**
* @dev Returns operation state.
*/
function getOperationState(bytes32 id) public view virtual returns (OperationState) {
uint256 timestamp = getTimestamp(id);
if (timestamp == 0) {
return OperationState.Unset;
} else if (timestamp == _DONE_TIMESTAMP) {
return OperationState.Done;
} else if (timestamp > block.timestamp) {
return OperationState.Waiting;
} else {
return OperationState.Ready;
}
}
/**
* @dev Returns the minimum delay in seconds for an operation to become valid.
*
* This value can be changed by executing an operation that calls `updateDelay`.
*/
function getMinDelay() public view virtual returns (uint256) {
return _minDelay;
}
/**
* @dev Returns the identifier of an operation containing a single
* transaction.
*/
function hashOperation(
address target,
uint256 value,
bytes calldata data,
bytes32 predecessor,
bytes32 salt
) public pure virtual returns (bytes32) {
return keccak256(abi.encode(target, value, data, predecessor, salt));
}
/**
* @dev Returns the identifier of an operation containing a batch of
* transactions.
*/
function hashOperationBatch(
address[] calldata targets,
uint256[] calldata values,
bytes[] calldata payloads,
bytes32 predecessor,
bytes32 salt
) public pure virtual returns (bytes32) {
return keccak256(abi.encode(targets, values, payloads, predecessor, salt));
}
/**
* @dev Schedule an operation containing a single transaction.
*
* Emits {CallSalt} if salt is nonzero, and {CallScheduled}.
*
* Requirements:
*
* - the caller must have the 'proposer' role.
*/
function schedule(
address target,
uint256 value,
bytes calldata data,
bytes32 predecessor,
bytes32 salt,
uint256 delay
) public virtual onlyRole(PROPOSER_ROLE) {
bytes32 id = hashOperation(target, value, data, predecessor, salt);
_schedule(id, delay);
emit CallScheduled(id, 0, target, value, data, predecessor, delay);
if (salt != bytes32(0)) {
emit CallSalt(id, salt);
}
}
/**
* @dev Schedule an operation containing a batch of transactions.
*
* Emits {CallSalt} if salt is nonzero, and one {CallScheduled} event per transaction in the batch.
*
* Requirements:
*
* - the caller must have the 'proposer' role.
*/
function scheduleBatch(
address[] calldata targets,
uint256[] calldata values,
bytes[] calldata payloads,
bytes32 predecessor,
bytes32 salt,
uint256 delay
) public virtual onlyRole(PROPOSER_ROLE) {
if (targets.length != values.length || targets.length != payloads.length) {
revert TimelockInvalidOperationLength(targets.length, payloads.length, values.length);
}
bytes32 id = hashOperationBatch(targets, values, payloads, predecessor, salt);
_schedule(id, delay);
for (uint256 i = 0; i < targets.length; ++i) {
emit CallScheduled(id, i, targets[i], values[i], payloads[i], predecessor, delay);
}
if (salt != bytes32(0)) {
emit CallSalt(id, salt);
}
}
/**
* @dev Schedule an operation that is to become valid after a given delay.
*/
function _schedule(bytes32 id, uint256 delay) private {
if (isOperation(id)) {
revert TimelockUnexpectedOperationState(id, _encodeStateBitmap(OperationState.Unset));
}
uint256 minDelay = getMinDelay();
if (delay < minDelay) {
revert TimelockInsufficientDelay(delay, minDelay);
}
_timestamps[id] = block.timestamp + delay;
}
/**
* @dev Cancel an operation.
*
* Requirements:
*
* - the caller must have the 'canceller' role.
*/
function cancel(bytes32 id) public virtual onlyRole(CANCELLER_ROLE) {
if (!isOperationPending(id)) {
revert TimelockUnexpectedOperationState(
id,
_encodeStateBitmap(OperationState.Waiting) | _encodeStateBitmap(OperationState.Ready)
);
}
delete _timestamps[id];
emit Cancelled(id);
}
/**
* @dev Execute an (ready) operation containing a single transaction.
*
* Emits a {CallExecuted} event.
*
* Requirements:
*
* - the caller must have the 'executor' role.
*/
// This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending,
// thus any modifications to the operation during reentrancy should be caught.
// slither-disable-next-line reentrancy-eth
function execute(
address target,
uint256 value,
bytes calldata payload,
bytes32 predecessor,
bytes32 salt
) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
bytes32 id = hashOperation(target, value, payload, predecessor, salt);
_beforeCall(id, predecessor);
_execute(target, value, payload);
emit CallExecuted(id, 0, target, value, payload);
_afterCall(id);
}
/**
* @dev Execute an (ready) operation containing a batch of transactions.
*
* Emits one {CallExecuted} event per transaction in the batch.
*
* Requirements:
*
* - the caller must have the 'executor' role.
*/
// This function can reenter, but it doesn't pose a risk because _afterCall checks that the proposal is pending,
// thus any modifications to the operation during reentrancy should be caught.
// slither-disable-next-line reentrancy-eth
function executeBatch(
address[] calldata targets,
uint256[] calldata values,
bytes[] calldata payloads,
bytes32 predecessor,
bytes32 salt
) public payable virtual onlyRoleOrOpenRole(EXECUTOR_ROLE) {
if (targets.length != values.length || targets.length != payloads.length) {
revert TimelockInvalidOperationLength(targets.length, payloads.length, values.length);
}
bytes32 id = hashOperationBatch(targets, values, payloads, predecessor, salt);
_beforeCall(id, predecessor);
for (uint256 i = 0; i < targets.length; ++i) {
address target = targets[i];
uint256 value = values[i];
bytes calldata payload = payloads[i];
_execute(target, value, payload);
emit CallExecuted(id, i, target, value, payload);
}
_afterCall(id);
}
/**
* @dev Execute an operation's call.
*/
function _execute(address target, uint256 value, bytes calldata data) internal virtual {
(bool success, bytes memory returndata) = target.call{value: value}(data);
Address.verifyCallResult(success, returndata);
}
/**
* @dev Checks before execution of an operation's calls.
*/
function _beforeCall(bytes32 id, bytes32 predecessor) private view {
if (!isOperationReady(id)) {
revert TimelockUnexpectedOperationState(id, _encodeStateBitmap(OperationState.Ready));
}
if (predecessor != bytes32(0) && !isOperationDone(predecessor)) {
revert TimelockUnexecutedPredecessor(predecessor);
}
}
/**
* @dev Checks after execution of an operation's calls.
*/
function _afterCall(bytes32 id) private {
if (!isOperationReady(id)) {
revert TimelockUnexpectedOperationState(id, _encodeStateBitmap(OperationState.Ready));
}
_timestamps[id] = _DONE_TIMESTAMP;
}
/**
* @dev Changes the minimum timelock duration for future operations.
*
* Emits a {MinDelayChange} event.
*
* Requirements:
*
* - the caller must be the timelock itself. This can only be achieved by scheduling and later executing
* an operation where the timelock is the target and the data is the ABI-encoded call to this function.
*/
function updateDelay(uint256 newDelay) external virtual {
address sender = _msgSender();
if (sender != address(this)) {
revert TimelockUnauthorizedCaller(sender);
}
emit MinDelayChange(_minDelay, newDelay);
_minDelay = newDelay;
}
/**
* @dev Encodes a `OperationState` into a `bytes32` representation where each bit enabled corresponds to
* the underlying position in the `OperationState` enum. For example:
*
* 0x000...1000
* ^^^^^^----- ...
* ^---- Done
* ^--- Ready
* ^-- Waiting
* ^- Unset
*/
function _encodeStateBitmap(OperationState operationState) internal pure returns (bytes32) {
return bytes32(1 << uint8(operationState));
}
}
// File: contracts/Timelock.sol
pragma solidity ^0.8.28;
contract TimeLock is TimelockController {
constructor(
uint256 minDelay,
address[] memory proposers,
address[] memory executors,
address admin
) TimelockController(minDelay, proposers, executors, admin) {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"minDelay","type":"uint256"},{"internalType":"address[]","name":"proposers","type":"address[]"},{"internalType":"address[]","name":"executors","type":"address[]"},{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"minDelay","type":"uint256"}],"name":"TimelockInsufficientDelay","type":"error"},{"inputs":[{"internalType":"uint256","name":"targets","type":"uint256"},{"internalType":"uint256","name":"payloads","type":"uint256"},{"internalType":"uint256","name":"values","type":"uint256"}],"name":"TimelockInvalidOperationLength","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"TimelockUnauthorizedCaller","type":"error"},{"inputs":[{"internalType":"bytes32","name":"predecessorId","type":"bytes32"}],"name":"TimelockUnexecutedPredecessor","type":"error"},{"inputs":[{"internalType":"bytes32","name":"operationId","type":"bytes32"},{"internalType":"bytes32","name":"expectedStates","type":"bytes32"}],"name":"TimelockUnexpectedOperationState","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"CallExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"CallSalt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"CallScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"MinDelayChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"CANCELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"executeBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMinDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getOperationState","outputs":[{"internalType":"enum TimelockController.OperationState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperation","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperationBatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"scheduleBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
608060405234801561000f575f5ffd5b506040516130cf3803806130cf83398181016040528101906100319190610536565b6100435f5f1b306101e960201b60201c565b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461008b576100895f5f1b826101e960201b60201c565b505b5f5f90505b835181101561013a576100e37fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc18583815181106100d0576100cf6105d2565b5b60200260200101516101e960201b60201c565b5061012e7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78385838151811061011b5761011a6105d2565b5b60200260200101516101e960201b60201c565b50806001019050610090565b505f5f90505b825181101561019f576101937fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e638483815181106101805761017f6105d2565b5b60200260200101516101e960201b60201c565b50806001019050610140565b50836002819055507f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d55f856040516101d8929190610650565b60405180910390a150505050610677565b5f6101fa83836102de60201b60201c565b6102d45760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061027161034160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506102d8565b5f90505b92915050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f604051905090565b5f5ffd5b5f5ffd5b5f819050919050565b61036b81610359565b8114610375575f5ffd5b50565b5f8151905061038681610362565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6103d682610390565b810181811067ffffffffffffffff821117156103f5576103f46103a0565b5b80604052505050565b5f610407610348565b905061041382826103cd565b919050565b5f67ffffffffffffffff821115610432576104316103a0565b5b602082029050602081019050919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61047082610447565b9050919050565b61048081610466565b811461048a575f5ffd5b50565b5f8151905061049b81610477565b92915050565b5f6104b36104ae84610418565b6103fe565b905080838252602082019050602084028301858111156104d6576104d5610443565b5b835b818110156104ff57806104eb888261048d565b8452602084019350506020810190506104d8565b5050509392505050565b5f82601f83011261051d5761051c61038c565b5b815161052d8482602086016104a1565b91505092915050565b5f5f5f5f6080858703121561054e5761054d610351565b5b5f61055b87828801610378565b945050602085015167ffffffffffffffff81111561057c5761057b610355565b5b61058887828801610509565b935050604085015167ffffffffffffffff8111156105a9576105a8610355565b5b6105b587828801610509565b92505060606105c68782880161048d565b91505092959194509250565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f61062b610626610621846105ff565b610608565b610359565b9050919050565b61063b81610611565b82525050565b61064a81610359565b82525050565b5f6040820190506106635f830185610632565b6106706020830184610641565b9392505050565b612a4b806106845f395ff3fe6080604052600436106101ba575f3560e01c80638065657f116100eb578063bc197c8111610089578063d547741f11610063578063d547741f14610685578063e38335e5146106ad578063f23a6e61146106c9578063f27a0c9214610705576101c1565b8063bc197c81146105e5578063c4d252f514610621578063d45c443514610649576101c1565b806391d14854116100c557806391d1485414610519578063a217fddf14610555578063b08e51c01461057f578063b1c5f427146105a9576101c1565b80638065657f1461048b5780638f2a0bb0146104c75780638f61f4f5146104ef576101c1565b80632ab0f5291161015857806336568abe1161013257806336568abe146103c3578063584b153e146103eb57806364d62353146104275780637958004c1461044f576101c1565b80632ab0f529146103235780632f2ff15d1461035f57806331d5075014610387576101c1565b8063134008d311610194578063134008d31461025357806313bc9f201461026f578063150b7a02146102ab578063248a9ca3146102e7576101c1565b806301d5062a146101c557806301ffc9a7146101ed57806307bd026514610229576101c1565b366101c157005b5f5ffd5b3480156101d0575f5ffd5b506101eb60048036038101906101e69190611991565b61072f565b005b3480156101f8575f5ffd5b50610213600480360381019061020e9190611a90565b610804565b6040516102209190611ad5565b60405180910390f35b348015610234575f5ffd5b5061023d610815565b60405161024a9190611afd565b60405180910390f35b61026d60048036038101906102689190611b16565b610839565b005b34801561027a575f5ffd5b5061029560048036038101906102909190611bac565b6108f3565b6040516102a29190611ad5565b60405180910390f35b3480156102b6575f5ffd5b506102d160048036038101906102cc9190611d0f565b61092b565b6040516102de9190611d9e565b60405180910390f35b3480156102f2575f5ffd5b5061030d60048036038101906103089190611bac565b61093e565b60405161031a9190611afd565b60405180910390f35b34801561032e575f5ffd5b5061034960048036038101906103449190611bac565b61095a565b6040516103569190611ad5565b60405180910390f35b34801561036a575f5ffd5b5061038560048036038101906103809190611db7565b610991565b005b348015610392575f5ffd5b506103ad60048036038101906103a89190611bac565b6109b3565b6040516103ba9190611ad5565b60405180910390f35b3480156103ce575f5ffd5b506103e960048036038101906103e49190611db7565b6109eb565b005b3480156103f6575f5ffd5b50610411600480360381019061040c9190611bac565b610a66565b60405161041e9190611ad5565b60405180910390f35b348015610432575f5ffd5b5061044d60048036038101906104489190611df5565b610ad2565b005b34801561045a575f5ffd5b5061047560048036038101906104709190611bac565b610b93565b6040516104829190611e93565b60405180910390f35b348015610496575f5ffd5b506104b160048036038101906104ac9190611b16565b610bdf565b6040516104be9190611afd565b60405180910390f35b3480156104d2575f5ffd5b506104ed60048036038101906104e89190611fab565b610c1d565b005b3480156104fa575f5ffd5b50610503610ddf565b6040516105109190611afd565b60405180910390f35b348015610524575f5ffd5b5061053f600480360381019061053a9190611db7565b610e03565b60405161054c9190611ad5565b60405180910390f35b348015610560575f5ffd5b50610569610e66565b6040516105769190611afd565b60405180910390f35b34801561058a575f5ffd5b50610593610e6c565b6040516105a09190611afd565b60405180910390f35b3480156105b4575f5ffd5b506105cf60048036038101906105ca9190612094565b610e90565b6040516105dc9190611afd565b60405180910390f35b3480156105f0575f5ffd5b5061060b6004803603810190610606919061222b565b610ed4565b6040516106189190611d9e565b60405180910390f35b34801561062c575f5ffd5b5061064760048036038101906106429190611bac565b610ee8565b005b348015610654575f5ffd5b5061066f600480360381019061066a9190611bac565b610fb7565b60405161067c9190612305565b60405180910390f35b348015610690575f5ffd5b506106ab60048036038101906106a69190611db7565b610fd1565b005b6106c760048036038101906106c29190612094565b610ff3565b005b3480156106d4575f5ffd5b506106ef60048036038101906106ea919061231e565b6111ae565b6040516106fc9190611d9e565b60405180910390f35b348015610710575f5ffd5b506107196111c2565b6040516107269190612305565b60405180910390f35b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610759816111cb565b5f610768898989898989610bdf565b905061077481846111df565b5f817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516107af969594939291906123fc565b60405180910390a35f5f1b84146107f957807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516107f09190611afd565b60405180910390a25b505050505050505050565b5f61080e826112ac565b9050919050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610864815f610e03565b61087a5761087981610874611325565b61132c565b5b5f610889888888888888610bdf565b9050610895818561137d565b6108a188888888611430565b5f817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516108d89493929190612456565b60405180910390a36108e9816114b1565b5050505050505050565b5f6002600381111561090857610907611e20565b5b61091183610b93565b600381111561092357610922611e20565b5b149050919050565b5f63150b7a0260e01b9050949350505050565b5f5f5f8381526020019081526020015f20600101549050919050565b5f60038081111561096e5761096d611e20565b5b61097783610b93565b600381111561098957610988611e20565b5b149050919050565b61099a8261093e565b6109a3816111cb565b6109ad838361151f565b50505050565b5f5f60038111156109c7576109c6611e20565b5b6109d083610b93565b60038111156109e2576109e1611e20565b5b14159050919050565b6109f3611325565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a618282611608565b505050565b5f5f610a7183610b93565b905060016003811115610a8757610a86611e20565b5b816003811115610a9a57610a99611e20565b5b1480610aca575060026003811115610ab557610ab4611e20565b5b816003811115610ac857610ac7611e20565b5b145b915050919050565b5f610adb611325565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b4d57806040517fe2850c59000000000000000000000000000000000000000000000000000000008152600401610b449190612494565b60405180910390fd5b7f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d560025483604051610b809291906124ad565b60405180910390a1816002819055505050565b5f5f610b9e83610fb7565b90505f8103610bb0575f915050610bda565b60018103610bc2576003915050610bda565b42811115610bd4576001915050610bda565b60029150505b919050565b5f868686868686604051602001610bfb969594939291906124d4565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610c47816111cb565b878790508a8a9050141580610c625750858590508a8a905014155b15610cb1578989905086869050898990506040517fffb03211000000000000000000000000000000000000000000000000000000008152600401610ca89392919061252e565b60405180910390fd5b5f610cc28b8b8b8b8b8b8b8b610e90565b9050610cce81846111df565b5f5f90505b8b8b9050811015610d8f5780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610d1457610d13612563565b5b9050602002016020810190610d299190612590565b8d8d86818110610d3c57610d3b612563565b5b905060200201358c8c87818110610d5657610d55612563565b5b9050602002810190610d6891906125c7565b8c8b604051610d7c969594939291906123fc565b60405180910390a3806001019050610cd3565b505f5f1b8414610dd257807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610dc99190611afd565b60405180910390a25b5050505050505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f5f1b81565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b5f8888888888888888604051602001610eb09897969594939291906128b5565b60405160208183030381529060405280519060200120905098975050505050505050565b5f63bc197c8160e01b905095945050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610f12816111cb565b610f1b82610a66565b610f725781610f2a60026116f1565b610f3460016116f1565b176040517f5ead8eb5000000000000000000000000000000000000000000000000000000008152600401610f69929190612921565b60405180910390fd5b60015f8381526020019081526020015f205f9055817fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7060405160405180910390a25050565b5f60015f8381526020019081526020015f20549050919050565b610fda8261093e565b610fe3816111cb565b610fed8383611608565b50505050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6361101e815f610e03565b611034576110338161102e611325565b61132c565b5b868690508989905014158061104f5750848490508989905014155b1561109e578888905085859050888890506040517fffb032110000000000000000000000000000000000000000000000000000000081526004016110959392919061252e565b60405180910390fd5b5f6110af8a8a8a8a8a8a8a8a610e90565b90506110bb818561137d565b5f5f90505b8a8a9050811015611198575f8b8b838181106110df576110de612563565b5b90506020020160208101906110f49190612590565b90505f8a8a8481811061110a57611109612563565b5b905060200201359050365f8a8a8681811061112857611127612563565b5b905060200281019061113a91906125c7565b9150915061114a84848484611430565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58868686866040516111819493929190612456565b60405180910390a3505050508060010190506110c0565b506111a2816114b1565b50505050505050505050565b5f63f23a6e6160e01b905095945050505050565b5f600254905090565b6111dc816111d7611325565b61132c565b50565b6111e8826109b3565b1561123457816111f75f6116f1565b6040517f5ead8eb500000000000000000000000000000000000000000000000000000000815260040161122b929190612921565b60405180910390fd5b5f61123d6111c2565b9050808210156112865781816040517f5433660900000000000000000000000000000000000000000000000000000000815260040161127d9291906124ad565b60405180910390fd5b81426112929190612975565b60015f8581526020019081526020015f2081905550505050565b5f7f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061131e575061131d82611715565b5b9050919050565b5f33905090565b6113368282610e03565b6113795780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016113709291906129a8565b60405180910390fd5b5050565b611386826108f3565b6113d2578161139560026116f1565b6040517f5ead8eb50000000000000000000000000000000000000000000000000000000081526004016113c9929190612921565b60405180910390fd5b5f5f1b81141580156113ea57506113e88161095a565b155b1561142c57806040517f90a9a6180000000000000000000000000000000000000000000000000000000081526004016114239190611afd565b60405180910390fd5b5050565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1685858560405161145a9291906129fd565b5f6040518083038185875af1925050503d805f8114611494576040519150601f19603f3d011682016040523d82523d5f602084013e611499565b606091505b50915091506114a8828261178e565b50505050505050565b6114ba816108f3565b61150657806114c960026116f1565b6040517f5ead8eb50000000000000000000000000000000000000000000000000000000081526004016114fd929190612921565b60405180910390fd5b6001805f8381526020019081526020015f208190555050565b5f61152a8383610e03565b6115fe5760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061159b611325565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611602565b5f90505b92915050565b5f6116138383610e03565b156116e7575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611684611325565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506116eb565b5f90505b92915050565b5f81600381111561170557611704611e20565b5b60ff166001901b5f1b9050919050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117875750611786826117b2565b5b9050919050565b6060826117a35761179e8261181b565b6117ab565b8190506117ac565b5b92915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8151111561182d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61189982611870565b9050919050565b6118a98161188f565b81146118b3575f5ffd5b50565b5f813590506118c4816118a0565b92915050565b5f819050919050565b6118dc816118ca565b81146118e6575f5ffd5b50565b5f813590506118f7816118d3565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261191e5761191d6118fd565b5b8235905067ffffffffffffffff81111561193b5761193a611901565b5b60208301915083600182028301111561195757611956611905565b5b9250929050565b5f819050919050565b6119708161195e565b811461197a575f5ffd5b50565b5f8135905061198b81611967565b92915050565b5f5f5f5f5f5f5f60c0888a0312156119ac576119ab611868565b5b5f6119b98a828b016118b6565b97505060206119ca8a828b016118e9565b965050604088013567ffffffffffffffff8111156119eb576119ea61186c565b5b6119f78a828b01611909565b95509550506060611a0a8a828b0161197d565b9350506080611a1b8a828b0161197d565b92505060a0611a2c8a828b016118e9565b91505092959891949750929550565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a6f81611a3b565b8114611a79575f5ffd5b50565b5f81359050611a8a81611a66565b92915050565b5f60208284031215611aa557611aa4611868565b5b5f611ab284828501611a7c565b91505092915050565b5f8115159050919050565b611acf81611abb565b82525050565b5f602082019050611ae85f830184611ac6565b92915050565b611af78161195e565b82525050565b5f602082019050611b105f830184611aee565b92915050565b5f5f5f5f5f5f60a08789031215611b3057611b2f611868565b5b5f611b3d89828a016118b6565b9650506020611b4e89828a016118e9565b955050604087013567ffffffffffffffff811115611b6f57611b6e61186c565b5b611b7b89828a01611909565b94509450506060611b8e89828a0161197d565b9250506080611b9f89828a0161197d565b9150509295509295509295565b5f60208284031215611bc157611bc0611868565b5b5f611bce8482850161197d565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c2182611bdb565b810181811067ffffffffffffffff82111715611c4057611c3f611beb565b5b80604052505050565b5f611c5261185f565b9050611c5e8282611c18565b919050565b5f67ffffffffffffffff821115611c7d57611c7c611beb565b5b611c8682611bdb565b9050602081019050919050565b828183375f83830152505050565b5f611cb3611cae84611c63565b611c49565b905082815260208101848484011115611ccf57611cce611bd7565b5b611cda848285611c93565b509392505050565b5f82601f830112611cf657611cf56118fd565b5b8135611d06848260208601611ca1565b91505092915050565b5f5f5f5f60808587031215611d2757611d26611868565b5b5f611d34878288016118b6565b9450506020611d45878288016118b6565b9350506040611d56878288016118e9565b925050606085013567ffffffffffffffff811115611d7757611d7661186c565b5b611d8387828801611ce2565b91505092959194509250565b611d9881611a3b565b82525050565b5f602082019050611db15f830184611d8f565b92915050565b5f5f60408385031215611dcd57611dcc611868565b5b5f611dda8582860161197d565b9250506020611deb858286016118b6565b9150509250929050565b5f60208284031215611e0a57611e09611868565b5b5f611e17848285016118e9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60048110611e5e57611e5d611e20565b5b50565b5f819050611e6e82611e4d565b919050565b5f611e7d82611e61565b9050919050565b611e8d81611e73565b82525050565b5f602082019050611ea65f830184611e84565b92915050565b5f5f83601f840112611ec157611ec06118fd565b5b8235905067ffffffffffffffff811115611ede57611edd611901565b5b602083019150836020820283011115611efa57611ef9611905565b5b9250929050565b5f5f83601f840112611f1657611f156118fd565b5b8235905067ffffffffffffffff811115611f3357611f32611901565b5b602083019150836020820283011115611f4f57611f4e611905565b5b9250929050565b5f5f83601f840112611f6b57611f6a6118fd565b5b8235905067ffffffffffffffff811115611f8857611f87611901565b5b602083019150836020820283011115611fa457611fa3611905565b5b9250929050565b5f5f5f5f5f5f5f5f5f60c08a8c031215611fc857611fc7611868565b5b5f8a013567ffffffffffffffff811115611fe557611fe461186c565b5b611ff18c828d01611eac565b995099505060208a013567ffffffffffffffff8111156120145761201361186c565b5b6120208c828d01611f01565b975097505060408a013567ffffffffffffffff8111156120435761204261186c565b5b61204f8c828d01611f56565b955095505060606120628c828d0161197d565b93505060806120738c828d0161197d565b92505060a06120848c828d016118e9565b9150509295985092959850929598565b5f5f5f5f5f5f5f5f60a0898b0312156120b0576120af611868565b5b5f89013567ffffffffffffffff8111156120cd576120cc61186c565b5b6120d98b828c01611eac565b9850985050602089013567ffffffffffffffff8111156120fc576120fb61186c565b5b6121088b828c01611f01565b9650965050604089013567ffffffffffffffff81111561212b5761212a61186c565b5b6121378b828c01611f56565b9450945050606061214a8b828c0161197d565b925050608061215b8b828c0161197d565b9150509295985092959890939650565b5f67ffffffffffffffff82111561218557612184611beb565b5b602082029050602081019050919050565b5f6121a86121a38461216b565b611c49565b905080838252602082019050602084028301858111156121cb576121ca611905565b5b835b818110156121f457806121e088826118e9565b8452602084019350506020810190506121cd565b5050509392505050565b5f82601f830112612212576122116118fd565b5b8135612222848260208601612196565b91505092915050565b5f5f5f5f5f60a0868803121561224457612243611868565b5b5f612251888289016118b6565b9550506020612262888289016118b6565b945050604086013567ffffffffffffffff8111156122835761228261186c565b5b61228f888289016121fe565b935050606086013567ffffffffffffffff8111156122b0576122af61186c565b5b6122bc888289016121fe565b925050608086013567ffffffffffffffff8111156122dd576122dc61186c565b5b6122e988828901611ce2565b9150509295509295909350565b6122ff816118ca565b82525050565b5f6020820190506123185f8301846122f6565b92915050565b5f5f5f5f5f60a0868803121561233757612336611868565b5b5f612344888289016118b6565b9550506020612355888289016118b6565b9450506040612366888289016118e9565b9350506060612377888289016118e9565b925050608086013567ffffffffffffffff8111156123985761239761186c565b5b6123a488828901611ce2565b9150509295509295909350565b6123ba8161188f565b82525050565b5f82825260208201905092915050565b5f6123db83856123c0565b93506123e8838584611c93565b6123f183611bdb565b840190509392505050565b5f60a08201905061240f5f8301896123b1565b61241c60208301886122f6565b818103604083015261242f8186886123d0565b905061243e6060830185611aee565b61244b60808301846122f6565b979650505050505050565b5f6060820190506124695f8301876123b1565b61247660208301866122f6565b81810360408301526124898184866123d0565b905095945050505050565b5f6020820190506124a75f8301846123b1565b92915050565b5f6040820190506124c05f8301856122f6565b6124cd60208301846122f6565b9392505050565b5f60a0820190506124e75f8301896123b1565b6124f460208301886122f6565b81810360408301526125078186886123d0565b90506125166060830185611aee565b6125236080830184611aee565b979650505050505050565b5f6060820190506125415f8301866122f6565b61254e60208301856122f6565b61255b60408301846122f6565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156125a5576125a4611868565b5b5f6125b2848285016118b6565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f833560016020038436030381126125e3576125e26125bb565b5b80840192508235915067ffffffffffffffff821115612605576126046125bf565b5b602083019250600182023603831315612621576126206125c3565b5b509250929050565b5f82825260208201905092915050565b5f819050919050565b61264b8161188f565b82525050565b5f61265c8383612642565b60208301905092915050565b5f61267660208401846118b6565b905092915050565b5f602082019050919050565b5f6126958385612629565b93506126a082612639565b805f5b858110156126d8576126b58284612668565b6126bf8882612651565b97506126ca8361267e565b9250506001810190506126a3565b5085925050509392505050565b5f82825260208201905092915050565b5f5ffd5b82818337505050565b5f61270d83856126e5565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156127405761273f6126f5565b5b6020830292506127518385846126f9565b82840190509392505050565b5f82825260208201905092915050565b5f819050919050565b5f82825260208201905092915050565b5f6127918385612776565b935061279e838584611c93565b6127a783611bdb565b840190509392505050565b5f6127be848484612786565b90509392505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f833560016020038436030381126127ef576127ee6127cf565b5b83810192508235915060208301925067ffffffffffffffff821115612817576128166127c7565b5b60018202360383131561282d5761282c6127cb565b5b509250929050565b5f602082019050919050565b5f61284c838561275d565b93508360208402850161285e8461276d565b805f5b878110156128a357848403895261287882846127d3565b6128838682846127b2565b955061288e84612835565b935060208b019a505050600181019050612861565b50829750879450505050509392505050565b5f60a0820190508181035f8301526128ce818a8c61268a565b905081810360208301526128e381888a612702565b905081810360408301526128f8818688612841565b90506129076060830185611aee565b6129146080830184611aee565b9998505050505050505050565b5f6040820190506129345f830185611aee565b6129416020830184611aee565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61297f826118ca565b915061298a836118ca565b92508282019050808211156129a2576129a1612948565b5b92915050565b5f6040820190506129bb5f8301856123b1565b6129c86020830184611aee565b9392505050565b5f81905092915050565b5f6129e483856129cf565b93506129f1838584611c93565b82840190509392505050565b5f612a098284866129d9565b9150819050939250505056fea2646970667358221220e944c3e9098d086a5ddb202a9b8bdbcf3291f034070c30c4fa0b8f329ccfc69764736f6c634300081e00330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a
Deployed Bytecode
0x6080604052600436106101ba575f3560e01c80638065657f116100eb578063bc197c8111610089578063d547741f11610063578063d547741f14610685578063e38335e5146106ad578063f23a6e61146106c9578063f27a0c9214610705576101c1565b8063bc197c81146105e5578063c4d252f514610621578063d45c443514610649576101c1565b806391d14854116100c557806391d1485414610519578063a217fddf14610555578063b08e51c01461057f578063b1c5f427146105a9576101c1565b80638065657f1461048b5780638f2a0bb0146104c75780638f61f4f5146104ef576101c1565b80632ab0f5291161015857806336568abe1161013257806336568abe146103c3578063584b153e146103eb57806364d62353146104275780637958004c1461044f576101c1565b80632ab0f529146103235780632f2ff15d1461035f57806331d5075014610387576101c1565b8063134008d311610194578063134008d31461025357806313bc9f201461026f578063150b7a02146102ab578063248a9ca3146102e7576101c1565b806301d5062a146101c557806301ffc9a7146101ed57806307bd026514610229576101c1565b366101c157005b5f5ffd5b3480156101d0575f5ffd5b506101eb60048036038101906101e69190611991565b61072f565b005b3480156101f8575f5ffd5b50610213600480360381019061020e9190611a90565b610804565b6040516102209190611ad5565b60405180910390f35b348015610234575f5ffd5b5061023d610815565b60405161024a9190611afd565b60405180910390f35b61026d60048036038101906102689190611b16565b610839565b005b34801561027a575f5ffd5b5061029560048036038101906102909190611bac565b6108f3565b6040516102a29190611ad5565b60405180910390f35b3480156102b6575f5ffd5b506102d160048036038101906102cc9190611d0f565b61092b565b6040516102de9190611d9e565b60405180910390f35b3480156102f2575f5ffd5b5061030d60048036038101906103089190611bac565b61093e565b60405161031a9190611afd565b60405180910390f35b34801561032e575f5ffd5b5061034960048036038101906103449190611bac565b61095a565b6040516103569190611ad5565b60405180910390f35b34801561036a575f5ffd5b5061038560048036038101906103809190611db7565b610991565b005b348015610392575f5ffd5b506103ad60048036038101906103a89190611bac565b6109b3565b6040516103ba9190611ad5565b60405180910390f35b3480156103ce575f5ffd5b506103e960048036038101906103e49190611db7565b6109eb565b005b3480156103f6575f5ffd5b50610411600480360381019061040c9190611bac565b610a66565b60405161041e9190611ad5565b60405180910390f35b348015610432575f5ffd5b5061044d60048036038101906104489190611df5565b610ad2565b005b34801561045a575f5ffd5b5061047560048036038101906104709190611bac565b610b93565b6040516104829190611e93565b60405180910390f35b348015610496575f5ffd5b506104b160048036038101906104ac9190611b16565b610bdf565b6040516104be9190611afd565b60405180910390f35b3480156104d2575f5ffd5b506104ed60048036038101906104e89190611fab565b610c1d565b005b3480156104fa575f5ffd5b50610503610ddf565b6040516105109190611afd565b60405180910390f35b348015610524575f5ffd5b5061053f600480360381019061053a9190611db7565b610e03565b60405161054c9190611ad5565b60405180910390f35b348015610560575f5ffd5b50610569610e66565b6040516105769190611afd565b60405180910390f35b34801561058a575f5ffd5b50610593610e6c565b6040516105a09190611afd565b60405180910390f35b3480156105b4575f5ffd5b506105cf60048036038101906105ca9190612094565b610e90565b6040516105dc9190611afd565b60405180910390f35b3480156105f0575f5ffd5b5061060b6004803603810190610606919061222b565b610ed4565b6040516106189190611d9e565b60405180910390f35b34801561062c575f5ffd5b5061064760048036038101906106429190611bac565b610ee8565b005b348015610654575f5ffd5b5061066f600480360381019061066a9190611bac565b610fb7565b60405161067c9190612305565b60405180910390f35b348015610690575f5ffd5b506106ab60048036038101906106a69190611db7565b610fd1565b005b6106c760048036038101906106c29190612094565b610ff3565b005b3480156106d4575f5ffd5b506106ef60048036038101906106ea919061231e565b6111ae565b6040516106fc9190611d9e565b60405180910390f35b348015610710575f5ffd5b506107196111c2565b6040516107269190612305565b60405180910390f35b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610759816111cb565b5f610768898989898989610bdf565b905061077481846111df565b5f817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516107af969594939291906123fc565b60405180910390a35f5f1b84146107f957807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516107f09190611afd565b60405180910390a25b505050505050505050565b5f61080e826112ac565b9050919050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63610864815f610e03565b61087a5761087981610874611325565b61132c565b5b5f610889888888888888610bdf565b9050610895818561137d565b6108a188888888611430565b5f817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516108d89493929190612456565b60405180910390a36108e9816114b1565b5050505050505050565b5f6002600381111561090857610907611e20565b5b61091183610b93565b600381111561092357610922611e20565b5b149050919050565b5f63150b7a0260e01b9050949350505050565b5f5f5f8381526020019081526020015f20600101549050919050565b5f60038081111561096e5761096d611e20565b5b61097783610b93565b600381111561098957610988611e20565b5b149050919050565b61099a8261093e565b6109a3816111cb565b6109ad838361151f565b50505050565b5f5f60038111156109c7576109c6611e20565b5b6109d083610b93565b60038111156109e2576109e1611e20565b5b14159050919050565b6109f3611325565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a57576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a618282611608565b505050565b5f5f610a7183610b93565b905060016003811115610a8757610a86611e20565b5b816003811115610a9a57610a99611e20565b5b1480610aca575060026003811115610ab557610ab4611e20565b5b816003811115610ac857610ac7611e20565b5b145b915050919050565b5f610adb611325565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b4d57806040517fe2850c59000000000000000000000000000000000000000000000000000000008152600401610b449190612494565b60405180910390fd5b7f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d560025483604051610b809291906124ad565b60405180910390a1816002819055505050565b5f5f610b9e83610fb7565b90505f8103610bb0575f915050610bda565b60018103610bc2576003915050610bda565b42811115610bd4576001915050610bda565b60029150505b919050565b5f868686868686604051602001610bfb969594939291906124d4565b6040516020818303038152906040528051906020012090509695505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1610c47816111cb565b878790508a8a9050141580610c625750858590508a8a905014155b15610cb1578989905086869050898990506040517fffb03211000000000000000000000000000000000000000000000000000000008152600401610ca89392919061252e565b60405180910390fd5b5f610cc28b8b8b8b8b8b8b8b610e90565b9050610cce81846111df565b5f5f90505b8b8b9050811015610d8f5780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610d1457610d13612563565b5b9050602002016020810190610d299190612590565b8d8d86818110610d3c57610d3b612563565b5b905060200201358c8c87818110610d5657610d55612563565b5b9050602002810190610d6891906125c7565b8c8b604051610d7c969594939291906123fc565b60405180910390a3806001019050610cd3565b505f5f1b8414610dd257807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610dc99190611afd565b60405180910390a25b5050505050505050505050565b7fb09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc181565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f5f1b81565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f78381565b5f8888888888888888604051602001610eb09897969594939291906128b5565b60405160208183030381529060405280519060200120905098975050505050505050565b5f63bc197c8160e01b905095945050505050565b7ffd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783610f12816111cb565b610f1b82610a66565b610f725781610f2a60026116f1565b610f3460016116f1565b176040517f5ead8eb5000000000000000000000000000000000000000000000000000000008152600401610f69929190612921565b60405180910390fd5b60015f8381526020019081526020015f205f9055817fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7060405160405180910390a25050565b5f60015f8381526020019081526020015f20549050919050565b610fda8261093e565b610fe3816111cb565b610fed8383611608565b50505050565b7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6361101e815f610e03565b611034576110338161102e611325565b61132c565b5b868690508989905014158061104f5750848490508989905014155b1561109e578888905085859050888890506040517fffb032110000000000000000000000000000000000000000000000000000000081526004016110959392919061252e565b60405180910390fd5b5f6110af8a8a8a8a8a8a8a8a610e90565b90506110bb818561137d565b5f5f90505b8a8a9050811015611198575f8b8b838181106110df576110de612563565b5b90506020020160208101906110f49190612590565b90505f8a8a8481811061110a57611109612563565b5b905060200201359050365f8a8a8681811061112857611127612563565b5b905060200281019061113a91906125c7565b9150915061114a84848484611430565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b58868686866040516111819493929190612456565b60405180910390a3505050508060010190506110c0565b506111a2816114b1565b50505050505050505050565b5f63f23a6e6160e01b905095945050505050565b5f600254905090565b6111dc816111d7611325565b61132c565b50565b6111e8826109b3565b1561123457816111f75f6116f1565b6040517f5ead8eb500000000000000000000000000000000000000000000000000000000815260040161122b929190612921565b60405180910390fd5b5f61123d6111c2565b9050808210156112865781816040517f5433660900000000000000000000000000000000000000000000000000000000815260040161127d9291906124ad565b60405180910390fd5b81426112929190612975565b60015f8581526020019081526020015f2081905550505050565b5f7f4e2312e0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061131e575061131d82611715565b5b9050919050565b5f33905090565b6113368282610e03565b6113795780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016113709291906129a8565b60405180910390fd5b5050565b611386826108f3565b6113d2578161139560026116f1565b6040517f5ead8eb50000000000000000000000000000000000000000000000000000000081526004016113c9929190612921565b60405180910390fd5b5f5f1b81141580156113ea57506113e88161095a565b155b1561142c57806040517f90a9a6180000000000000000000000000000000000000000000000000000000081526004016114239190611afd565b60405180910390fd5b5050565b5f5f8573ffffffffffffffffffffffffffffffffffffffff1685858560405161145a9291906129fd565b5f6040518083038185875af1925050503d805f8114611494576040519150601f19603f3d011682016040523d82523d5f602084013e611499565b606091505b50915091506114a8828261178e565b50505050505050565b6114ba816108f3565b61150657806114c960026116f1565b6040517f5ead8eb50000000000000000000000000000000000000000000000000000000081526004016114fd929190612921565b60405180910390fd5b6001805f8381526020019081526020015f208190555050565b5f61152a8383610e03565b6115fe5760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061159b611325565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611602565b5f90505b92915050565b5f6116138383610e03565b156116e7575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611684611325565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a4600190506116eb565b5f90505b92915050565b5f81600381111561170557611704611e20565b5b60ff166001901b5f1b9050919050565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806117875750611786826117b2565b5b9050919050565b6060826117a35761179e8261181b565b6117ab565b8190506117ac565b5b92915050565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f8151111561182d5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f604051905090565b5f5ffd5b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61189982611870565b9050919050565b6118a98161188f565b81146118b3575f5ffd5b50565b5f813590506118c4816118a0565b92915050565b5f819050919050565b6118dc816118ca565b81146118e6575f5ffd5b50565b5f813590506118f7816118d3565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261191e5761191d6118fd565b5b8235905067ffffffffffffffff81111561193b5761193a611901565b5b60208301915083600182028301111561195757611956611905565b5b9250929050565b5f819050919050565b6119708161195e565b811461197a575f5ffd5b50565b5f8135905061198b81611967565b92915050565b5f5f5f5f5f5f5f60c0888a0312156119ac576119ab611868565b5b5f6119b98a828b016118b6565b97505060206119ca8a828b016118e9565b965050604088013567ffffffffffffffff8111156119eb576119ea61186c565b5b6119f78a828b01611909565b95509550506060611a0a8a828b0161197d565b9350506080611a1b8a828b0161197d565b92505060a0611a2c8a828b016118e9565b91505092959891949750929550565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611a6f81611a3b565b8114611a79575f5ffd5b50565b5f81359050611a8a81611a66565b92915050565b5f60208284031215611aa557611aa4611868565b5b5f611ab284828501611a7c565b91505092915050565b5f8115159050919050565b611acf81611abb565b82525050565b5f602082019050611ae85f830184611ac6565b92915050565b611af78161195e565b82525050565b5f602082019050611b105f830184611aee565b92915050565b5f5f5f5f5f5f60a08789031215611b3057611b2f611868565b5b5f611b3d89828a016118b6565b9650506020611b4e89828a016118e9565b955050604087013567ffffffffffffffff811115611b6f57611b6e61186c565b5b611b7b89828a01611909565b94509450506060611b8e89828a0161197d565b9250506080611b9f89828a0161197d565b9150509295509295509295565b5f60208284031215611bc157611bc0611868565b5b5f611bce8482850161197d565b91505092915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b611c2182611bdb565b810181811067ffffffffffffffff82111715611c4057611c3f611beb565b5b80604052505050565b5f611c5261185f565b9050611c5e8282611c18565b919050565b5f67ffffffffffffffff821115611c7d57611c7c611beb565b5b611c8682611bdb565b9050602081019050919050565b828183375f83830152505050565b5f611cb3611cae84611c63565b611c49565b905082815260208101848484011115611ccf57611cce611bd7565b5b611cda848285611c93565b509392505050565b5f82601f830112611cf657611cf56118fd565b5b8135611d06848260208601611ca1565b91505092915050565b5f5f5f5f60808587031215611d2757611d26611868565b5b5f611d34878288016118b6565b9450506020611d45878288016118b6565b9350506040611d56878288016118e9565b925050606085013567ffffffffffffffff811115611d7757611d7661186c565b5b611d8387828801611ce2565b91505092959194509250565b611d9881611a3b565b82525050565b5f602082019050611db15f830184611d8f565b92915050565b5f5f60408385031215611dcd57611dcc611868565b5b5f611dda8582860161197d565b9250506020611deb858286016118b6565b9150509250929050565b5f60208284031215611e0a57611e09611868565b5b5f611e17848285016118e9565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60048110611e5e57611e5d611e20565b5b50565b5f819050611e6e82611e4d565b919050565b5f611e7d82611e61565b9050919050565b611e8d81611e73565b82525050565b5f602082019050611ea65f830184611e84565b92915050565b5f5f83601f840112611ec157611ec06118fd565b5b8235905067ffffffffffffffff811115611ede57611edd611901565b5b602083019150836020820283011115611efa57611ef9611905565b5b9250929050565b5f5f83601f840112611f1657611f156118fd565b5b8235905067ffffffffffffffff811115611f3357611f32611901565b5b602083019150836020820283011115611f4f57611f4e611905565b5b9250929050565b5f5f83601f840112611f6b57611f6a6118fd565b5b8235905067ffffffffffffffff811115611f8857611f87611901565b5b602083019150836020820283011115611fa457611fa3611905565b5b9250929050565b5f5f5f5f5f5f5f5f5f60c08a8c031215611fc857611fc7611868565b5b5f8a013567ffffffffffffffff811115611fe557611fe461186c565b5b611ff18c828d01611eac565b995099505060208a013567ffffffffffffffff8111156120145761201361186c565b5b6120208c828d01611f01565b975097505060408a013567ffffffffffffffff8111156120435761204261186c565b5b61204f8c828d01611f56565b955095505060606120628c828d0161197d565b93505060806120738c828d0161197d565b92505060a06120848c828d016118e9565b9150509295985092959850929598565b5f5f5f5f5f5f5f5f60a0898b0312156120b0576120af611868565b5b5f89013567ffffffffffffffff8111156120cd576120cc61186c565b5b6120d98b828c01611eac565b9850985050602089013567ffffffffffffffff8111156120fc576120fb61186c565b5b6121088b828c01611f01565b9650965050604089013567ffffffffffffffff81111561212b5761212a61186c565b5b6121378b828c01611f56565b9450945050606061214a8b828c0161197d565b925050608061215b8b828c0161197d565b9150509295985092959890939650565b5f67ffffffffffffffff82111561218557612184611beb565b5b602082029050602081019050919050565b5f6121a86121a38461216b565b611c49565b905080838252602082019050602084028301858111156121cb576121ca611905565b5b835b818110156121f457806121e088826118e9565b8452602084019350506020810190506121cd565b5050509392505050565b5f82601f830112612212576122116118fd565b5b8135612222848260208601612196565b91505092915050565b5f5f5f5f5f60a0868803121561224457612243611868565b5b5f612251888289016118b6565b9550506020612262888289016118b6565b945050604086013567ffffffffffffffff8111156122835761228261186c565b5b61228f888289016121fe565b935050606086013567ffffffffffffffff8111156122b0576122af61186c565b5b6122bc888289016121fe565b925050608086013567ffffffffffffffff8111156122dd576122dc61186c565b5b6122e988828901611ce2565b9150509295509295909350565b6122ff816118ca565b82525050565b5f6020820190506123185f8301846122f6565b92915050565b5f5f5f5f5f60a0868803121561233757612336611868565b5b5f612344888289016118b6565b9550506020612355888289016118b6565b9450506040612366888289016118e9565b9350506060612377888289016118e9565b925050608086013567ffffffffffffffff8111156123985761239761186c565b5b6123a488828901611ce2565b9150509295509295909350565b6123ba8161188f565b82525050565b5f82825260208201905092915050565b5f6123db83856123c0565b93506123e8838584611c93565b6123f183611bdb565b840190509392505050565b5f60a08201905061240f5f8301896123b1565b61241c60208301886122f6565b818103604083015261242f8186886123d0565b905061243e6060830185611aee565b61244b60808301846122f6565b979650505050505050565b5f6060820190506124695f8301876123b1565b61247660208301866122f6565b81810360408301526124898184866123d0565b905095945050505050565b5f6020820190506124a75f8301846123b1565b92915050565b5f6040820190506124c05f8301856122f6565b6124cd60208301846122f6565b9392505050565b5f60a0820190506124e75f8301896123b1565b6124f460208301886122f6565b81810360408301526125078186886123d0565b90506125166060830185611aee565b6125236080830184611aee565b979650505050505050565b5f6060820190506125415f8301866122f6565b61254e60208301856122f6565b61255b60408301846122f6565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156125a5576125a4611868565b5b5f6125b2848285016118b6565b91505092915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f833560016020038436030381126125e3576125e26125bb565b5b80840192508235915067ffffffffffffffff821115612605576126046125bf565b5b602083019250600182023603831315612621576126206125c3565b5b509250929050565b5f82825260208201905092915050565b5f819050919050565b61264b8161188f565b82525050565b5f61265c8383612642565b60208301905092915050565b5f61267660208401846118b6565b905092915050565b5f602082019050919050565b5f6126958385612629565b93506126a082612639565b805f5b858110156126d8576126b58284612668565b6126bf8882612651565b97506126ca8361267e565b9250506001810190506126a3565b5085925050509392505050565b5f82825260208201905092915050565b5f5ffd5b82818337505050565b5f61270d83856126e5565b93507f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8311156127405761273f6126f5565b5b6020830292506127518385846126f9565b82840190509392505050565b5f82825260208201905092915050565b5f819050919050565b5f82825260208201905092915050565b5f6127918385612776565b935061279e838584611c93565b6127a783611bdb565b840190509392505050565b5f6127be848484612786565b90509392505050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f833560016020038436030381126127ef576127ee6127cf565b5b83810192508235915060208301925067ffffffffffffffff821115612817576128166127c7565b5b60018202360383131561282d5761282c6127cb565b5b509250929050565b5f602082019050919050565b5f61284c838561275d565b93508360208402850161285e8461276d565b805f5b878110156128a357848403895261287882846127d3565b6128838682846127b2565b955061288e84612835565b935060208b019a505050600181019050612861565b50829750879450505050509392505050565b5f60a0820190508181035f8301526128ce818a8c61268a565b905081810360208301526128e381888a612702565b905081810360408301526128f8818688612841565b90506129076060830185611aee565b6129146080830184611aee565b9998505050505050505050565b5f6040820190506129345f830185611aee565b6129416020830184611aee565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61297f826118ca565b915061298a836118ca565b92508282019050808211156129a2576129a1612948565b5b92915050565b5f6040820190506129bb5f8301856123b1565b6129c86020830184611aee565b9392505050565b5f81905092915050565b5f6129e483856129cf565b93506129f1838584611c93565b82840190509392505050565b5f612a098284866129d9565b9150819050939250505056fea2646970667358221220e944c3e9098d086a5ddb202a9b8bdbcf3291f034070c30c4fa0b8f329ccfc69764736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a
-----Decoded View---------------
Arg [0] : minDelay (uint256): 0
Arg [1] : proposers (address[]): 0x20D630cF1f5628285BfB91DfaC8C89eB9087BE1A
Arg [2] : executors (address[]): 0x20D630cF1f5628285BfB91DfaC8C89eB9087BE1A
Arg [3] : admin (address): 0x20D630cF1f5628285BfB91DfaC8C89eB9087BE1A
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 00000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 00000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 00000000000000000000000020d630cf1f5628285bfb91dfac8c89eb9087be1a
Deployed Bytecode Sourcemap
26572:15653:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34826:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31269:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26726:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37988:472;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32256:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15118:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10064:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32476:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10496:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31632:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11633:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31903:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41398:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32941:471;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33831:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35623:827;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26653:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9080:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8392:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26799:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34240:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18962:255;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37115:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32764:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10927:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38982:918;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18727:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33616:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34826:497;26693:26;8676:16;8687:4;8676:10;:16::i;:::-;35057:10:::1;35070:53;35084:6;35092:5;35099:4;;35105:11;35118:4;35070:13;:53::i;:::-;35057:66;;35134:20;35144:2;35148:5;35134:9;:20::i;:::-;35188:1;35184:2;35170:61;35191:6;35199:5;35206:4;;35212:11;35225:5;35170:61;;;;;;;;;;;:::i;:::-;;;;;;;;35262:1;35254:10;;35246:4;:18;35242:74;;35295:2;35286:18;35299:4;35286:18;;;;;;:::i;:::-;;;;;;;;35242:74;35046:277;34826:497:::0;;;;;;;;:::o;31269:199::-;31400:4;31424:36;31448:11;31424:23;:36::i;:::-;31417:43;;31269:199;;;:::o;26726:66::-;26766:26;26726:66;:::o;37988:472::-;26766:26;30958:25;30966:4;30980:1;30958:7;:25::i;:::-;30953:89;;31000:30;31011:4;31017:12;:10;:12::i;:::-;31000:10;:30::i;:::-;30953:89;38215:10:::1;38228:56;38242:6;38250:5;38257:7;;38266:11;38279:4;38228:13;:56::i;:::-;38215:69;;38297:28;38309:2;38313:11;38297;:28::i;:::-;38336:32;38345:6;38353:5;38360:7;;38336:8;:32::i;:::-;38401:1;38397:2;38384:43;38404:6;38412:5;38419:7;;38384:43;;;;;;;;;:::i;:::-;;;;;;;;38438:14;38449:2;38438:10;:14::i;:::-;38204:256;37988:472:::0;;;;;;;:::o;32256:136::-;32315:4;32364:20;32339:45;;;;;;;;:::i;:::-;;:21;32357:2;32339:17;:21::i;:::-;:45;;;;;;;;:::i;:::-;;;32332:52;;32256:136;;;:::o;15118:155::-;15209:6;15235:30;;;15228:37;;15118:155;;;;;;:::o;10064:122::-;10129:7;10156:6;:12;10163:4;10156:12;;;;;;;;;;;:22;;;10149:29;;10064:122;;;:::o;32476:134::-;32534:4;32583:19;32558:44;;;;;;;;:::i;:::-;;:21;32576:2;32558:17;:21::i;:::-;:44;;;;;;;;:::i;:::-;;;32551:51;;32476:134;;;:::o;10496:138::-;10570:18;10583:4;10570:12;:18::i;:::-;8676:16;8687:4;8676:10;:16::i;:::-;10601:25:::1;10612:4;10618:7;10601:10;:25::i;:::-;;10496:138:::0;;;:::o;31632:131::-;31686:4;31735:20;31710:45;;;;;;;;:::i;:::-;;:21;31728:2;31710:17;:21::i;:::-;:45;;;;;;;;:::i;:::-;;;;31703:52;;31632:131;;;:::o;11633:251::-;11749:12;:10;:12::i;:::-;11727:34;;:18;:34;;;11723:104;;11785:30;;;;;;;;;;;;;;11723:104;11839:37;11851:4;11857:18;11839:11;:37::i;:::-;;11633:251;;:::o;31903:212::-;31964:4;31981:20;32004:21;32022:2;32004:17;:21::i;:::-;31981:44;;32052:22;32043:31;;;;;;;;:::i;:::-;;:5;:31;;;;;;;;:::i;:::-;;;:64;;;;32087:20;32078:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;32043:64;32036:71;;;31903:212;;;:::o;41398:293::-;41465:14;41482:12;:10;:12::i;:::-;41465:29;;41527:4;41509:23;;:6;:23;;;41505:97;;41583:6;41556:34;;;;;;;;;;;:::i;:::-;;;;;;;;41505:97;41617:35;41632:9;;41643:8;41617:35;;;;;;;:::i;:::-;;;;;;;;41675:8;41663:9;:20;;;;41454:237;41398:293;:::o;32941:471::-;33009:14;33036:17;33056:16;33069:2;33056:12;:16::i;:::-;33036:36;;33100:1;33087:9;:14;33083:322;;33125:20;33118:27;;;;;33083:322;26926:1;33167:9;:28;33163:242;;33219:19;33212:26;;;;;33163:242;33272:15;33260:9;:27;33256:149;;;33311:22;33304:29;;;;;33256:149;33373:20;33366:27;;;32941:471;;;;:::o;33831:287::-;34022:7;34070:6;34078:5;34085:4;;34091:11;34104:4;34059:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34049:61;;;;;;34042:68;;33831:287;;;;;;;;:::o;35623:827::-;26693:26;8676:16;8687:4;8676:10;:16::i;:::-;35911:6:::1;;:13;;35893:7;;:14;;:31;;:68;;;;35946:8;;:15;;35928:7;;:14;;:33;;35893:68;35889:186;;;36016:7;;:14;;36032:8;;:15;;36049:6;;:13;;35985:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;35889:186;36087:10;36100:64;36119:7;;36128:6;;36136:8;;36146:11;36159:4;36100:18;:64::i;:::-;36087:77;;36175:20;36185:2;36189:5;36175:9;:20::i;:::-;36211:9;36223:1;36211:13;;36206:153;36230:7;;:14;;36226:1;:18;36206:153;;;36289:1;36285:2;36271:76;36292:7;;36300:1;36292:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;36304:6;;36311:1;36304:9;;;;;;;:::i;:::-;;;;;;;;36315:8;;36324:1;36315:11;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;36328;36341:5;36271:76;;;;;;;;;;;:::i;:::-;;;;;;;;36246:3;;;;;36206:153;;;;36389:1;36381:10;;36373:4;:18;36369:74;;36422:2;36413:18;36426:4;36413:18;;;;;;:::i;:::-;;;;;;;;36369:74;35878:572;35623:827:::0;;;;;;;;;;:::o;26653:66::-;26693:26;26653:66;:::o;9080:138::-;9157:4;9181:6;:12;9188:4;9181:12;;;;;;;;;;;:20;;:29;9202:7;9181:29;;;;;;;;;;;;;;;;;;;;;;;;;9174:36;;9080:138;;;;:::o;8392:49::-;8437:4;8392:49;;;:::o;26799:68::-;26840:27;26799:68;:::o;34240:328::-;34466:7;34514;;34523:6;;34531:8;;34541:11;34554:4;34503:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34493:67;;;;;;34486:74;;34240:328;;;;;;;;;;:::o;18962:255::-;19147:6;19173:36;;;19166:43;;18962:255;;;;;;;:::o;37115:385::-;26840:27;8676:16;8687:4;8676:10;:16::i;:::-;37199:22:::1;37218:2;37199:18;:22::i;:::-;37194:235;;37296:2;37362:40;37381:20;37362:18;:40::i;:::-;37317:42;37336:22;37317:18;:42::i;:::-;:85;37245:172;;;;;;;;;;;;:::i;:::-;;;;;;;;37194:235;37446:11;:15;37458:2;37446:15;;;;;;;;;;;37439:22;;;37489:2;37479:13;;;;;;;;;;37115:385:::0;;:::o;32764:113::-;32827:7;32854:11;:15;32866:2;32854:15;;;;;;;;;;;;32847:22;;32764:113;;;:::o;10927:140::-;11002:18;11015:4;11002:12;:18::i;:::-;8676:16;8687:4;8676:10;:16::i;:::-;11033:26:::1;11045:4;11051:7;11033:11;:26::i;:::-;;10927:140:::0;;;:::o;38982:918::-;26766:26;30958:25;30966:4;30980:1;30958:7;:25::i;:::-;30953:89;;31000:30;31011:4;31017:12;:10;:12::i;:::-;31000:10;:30::i;:::-;30953:89;39263:6:::1;;:13;;39245:7;;:14;;:31;;:68;;;;39298:8;;:15;;39280:7;;:14;;:33;;39245:68;39241:186;;;39368:7;;:14;;39384:8;;:15;;39401:6;;:13;;39337:78;;;;;;;;;;;;;:::i;:::-;;;;;;;;39241:186;39439:10;39452:64;39471:7;;39480:6;;39488:8;;39498:11;39511:4;39452:18;:64::i;:::-;39439:77;;39529:28;39541:2;39545:11;39529;:28::i;:::-;39573:9;39585:1;39573:13;;39568:300;39592:7;;:14;;39588:1;:18;39568:300;;;39628:14;39645:7;;39653:1;39645:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;39628:27;;39670:13;39686:6;;39693:1;39686:9;;;;;;;:::i;:::-;;;;;;;;39670:25;;39710:22;;39735:8;;39744:1;39735:11;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;39710:36;;;;39761:32;39770:6;39778:5;39785:7;;39761:8;:32::i;:::-;39830:1;39826:2;39813:43;39833:6;39841:5;39848:7;;39813:43;;;;;;;;;:::i;:::-;;;;;;;;39613:255;;;;39608:3;;;;;39568:300;;;;39878:14;39889:2;39878:10;:14::i;:::-;39230:670;38982:918:::0;;;;;;;;;:::o;18727:227::-;18889:6;18915:31;;;18908:38;;18727:227;;;;;;;:::o;33616:96::-;33668:7;33695:9;;33688:16;;33616:96;:::o;9433:105::-;9500:30;9511:4;9517:12;:10;:12::i;:::-;9500:10;:30::i;:::-;9433:105;:::o;36556:408::-;36625:15;36637:2;36625:11;:15::i;:::-;36621:133;;;36697:2;36701:40;36720:20;36701:18;:40::i;:::-;36664:78;;;;;;;;;;;;:::i;:::-;;;;;;;;36621:133;36764:16;36783:13;:11;:13::i;:::-;36764:32;;36819:8;36811:5;:16;36807:98;;;36877:5;36884:8;36851:42;;;;;;;;;;;;:::i;:::-;;;;;;;;36807:98;36951:5;36933:15;:23;;;;:::i;:::-;36915:11;:15;36927:2;36915:15;;;;;;;;;;;:41;;;;36610:354;36556:408;;:::o;18496:223::-;18598:4;18637:34;18622:49;;;:11;:49;;;;:89;;;;18675:36;18699:11;18675:23;:36::i;:::-;18622:89;18615:96;;18496:223;;;:::o;4085:98::-;4138:7;4165:10;4158:17;;4085:98;:::o;9674:201::-;9763:22;9771:4;9777:7;9763;:22::i;:::-;9758:110;;9842:7;9851:4;9809:47;;;;;;;;;;;;:::i;:::-;;;;;;;;9758:110;9674:201;;:::o;40291:374::-;40374:20;40391:2;40374:16;:20::i;:::-;40369:139;;40451:2;40455:40;40474:20;40455:18;:40::i;:::-;40418:78;;;;;;;;;;;;:::i;:::-;;;;;;;;40369:139;40545:1;40537:10;;40522:11;:25;;:58;;;;;40552:28;40568:11;40552:15;:28::i;:::-;40551:29;40522:58;40518:140;;;40634:11;40604:42;;;;;;;;;;;:::i;:::-;;;;;;;;40518:140;40291:374;;:::o;39968:235::-;40067:12;40081:23;40108:6;:11;;40127:5;40134:4;;40108:31;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40066:73;;;;40150:45;40175:7;40184:10;40150:24;:45::i;:::-;;40055:148;;39968:235;;;;:::o;40752:241::-;40808:20;40825:2;40808:16;:20::i;:::-;40803:139;;40885:2;40889:40;40908:20;40889:18;:40::i;:::-;40852:78;;;;;;;;;;;;:::i;:::-;;;;;;;;40803:139;26926:1;40952:11;:15;40964:2;40952:15;;;;;;;;;;;:33;;;;40752:241;:::o;12510:324::-;12587:4;12609:22;12617:4;12623:7;12609;:22::i;:::-;12604:223;;12680:4;12648:6;:12;12655:4;12648:12;;;;;;;;;;;:20;;:29;12669:7;12648:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;12731:12;:10;:12::i;:::-;12704:40;;12722:7;12704:40;;12716:4;12704:40;;;;;;;;;;12766:4;12759:11;;;;12604:223;12810:5;12803:12;;12510:324;;;;;:::o;13078:325::-;13156:4;13177:22;13185:4;13191:7;13177;:22::i;:::-;13173:223;;;13248:5;13216:6;:12;13223:4;13216:12;;;;;;;;;;;:20;;:29;13237:7;13216:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;13300:12;:10;:12::i;:::-;13273:40;;13291:7;13273:40;;13285:4;13273:40;;;;;;;;;;13335:4;13328:11;;;;13173:223;13379:5;13372:12;;13078:325;;;;;:::o;42070:152::-;42152:7;42198:14;42192:21;;;;;;;;:::i;:::-;;42187:26;;:1;:26;;42179:35;;42172:42;;42070:152;;;:::o;8784:204::-;8869:4;8908:32;8893:47;;;:11;:47;;;;:87;;;;8944:36;8968:11;8944:23;:36::i;:::-;8893:87;8886:94;;8784:204;;;:::o;24788:230::-;24876:12;24906:7;24901:110;;24930:19;24938:10;24930:7;:19::i;:::-;24901:110;;;24989:10;24982:17;;;;24901:110;24788:230;;;;;:::o;6120:148::-;6196:4;6235:25;6220:40;;;:11;:40;;;;6213:47;;6120:148;;;:::o;25135:528::-;25288:1;25268:10;:17;:21;25264:392;;;25500:10;25494:17;25557:15;25544:10;25540:2;25536:19;25529:44;25264:392;25627:17;;;;;;;;;;;;;;7:75:1;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:117::-;1306:1;1303;1296:12;1320:117;1429:1;1426;1419:12;1443:117;1552:1;1549;1542:12;1579:552;1636:8;1646:6;1696:3;1689:4;1681:6;1677:17;1673:27;1663:122;;1704:79;;:::i;:::-;1663:122;1817:6;1804:20;1794:30;;1847:18;1839:6;1836:30;1833:117;;;1869:79;;:::i;:::-;1833:117;1983:4;1975:6;1971:17;1959:29;;2037:3;2029:4;2021:6;2017:17;2007:8;2003:32;2000:41;1997:128;;;2044:79;;:::i;:::-;1997:128;1579:552;;;;;:::o;2137:77::-;2174:7;2203:5;2192:16;;2137:77;;;:::o;2220:122::-;2293:24;2311:5;2293:24;:::i;:::-;2286:5;2283:35;2273:63;;2332:1;2329;2322:12;2273:63;2220:122;:::o;2348:139::-;2394:5;2432:6;2419:20;2410:29;;2448:33;2475:5;2448:33;:::i;:::-;2348:139;;;;:::o;2493:1255::-;2608:6;2616;2624;2632;2640;2648;2656;2705:3;2693:9;2684:7;2680:23;2676:33;2673:120;;;2712:79;;:::i;:::-;2673:120;2832:1;2857:53;2902:7;2893:6;2882:9;2878:22;2857:53;:::i;:::-;2847:63;;2803:117;2959:2;2985:53;3030:7;3021:6;3010:9;3006:22;2985:53;:::i;:::-;2975:63;;2930:118;3115:2;3104:9;3100:18;3087:32;3146:18;3138:6;3135:30;3132:117;;;3168:79;;:::i;:::-;3132:117;3281:64;3337:7;3328:6;3317:9;3313:22;3281:64;:::i;:::-;3263:82;;;;3058:297;3394:2;3420:53;3465:7;3456:6;3445:9;3441:22;3420:53;:::i;:::-;3410:63;;3365:118;3522:3;3549:53;3594:7;3585:6;3574:9;3570:22;3549:53;:::i;:::-;3539:63;;3493:119;3651:3;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3622:119;2493:1255;;;;;;;;;;:::o;3754:149::-;3790:7;3830:66;3823:5;3819:78;3808:89;;3754:149;;;:::o;3909:120::-;3981:23;3998:5;3981:23;:::i;:::-;3974:5;3971:34;3961:62;;4019:1;4016;4009:12;3961:62;3909:120;:::o;4035:137::-;4080:5;4118:6;4105:20;4096:29;;4134:32;4160:5;4134:32;:::i;:::-;4035:137;;;;:::o;4178:327::-;4236:6;4285:2;4273:9;4264:7;4260:23;4256:32;4253:119;;;4291:79;;:::i;:::-;4253:119;4411:1;4436:52;4480:7;4471:6;4460:9;4456:22;4436:52;:::i;:::-;4426:62;;4382:116;4178:327;;;;:::o;4511:90::-;4545:7;4588:5;4581:13;4574:21;4563:32;;4511:90;;;:::o;4607:109::-;4688:21;4703:5;4688:21;:::i;:::-;4683:3;4676:34;4607:109;;:::o;4722:210::-;4809:4;4847:2;4836:9;4832:18;4824:26;;4860:65;4922:1;4911:9;4907:17;4898:6;4860:65;:::i;:::-;4722:210;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:1109::-;5396:6;5404;5412;5420;5428;5436;5485:3;5473:9;5464:7;5460:23;5456:33;5453:120;;;5492:79;;:::i;:::-;5453:120;5612:1;5637:53;5682:7;5673:6;5662:9;5658:22;5637:53;:::i;:::-;5627:63;;5583:117;5739:2;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5710:118;5895:2;5884:9;5880:18;5867:32;5926:18;5918:6;5915:30;5912:117;;;5948:79;;:::i;:::-;5912:117;6061:64;6117:7;6108:6;6097:9;6093:22;6061:64;:::i;:::-;6043:82;;;;5838:297;6174:2;6200:53;6245:7;6236:6;6225:9;6221:22;6200:53;:::i;:::-;6190:63;;6145:118;6302:3;6329:53;6374:7;6365:6;6354:9;6350:22;6329:53;:::i;:::-;6319:63;;6273:119;5290:1109;;;;;;;;:::o;6405:329::-;6464:6;6513:2;6501:9;6492:7;6488:23;6484:32;6481:119;;;6519:79;;:::i;:::-;6481:119;6639:1;6664:53;6709:7;6700:6;6689:9;6685:22;6664:53;:::i;:::-;6654:63;;6610:117;6405:329;;;;:::o;6740:117::-;6849:1;6846;6839:12;6863:102;6904:6;6955:2;6951:7;6946:2;6939:5;6935:14;6931:28;6921:38;;6863:102;;;:::o;6971:180::-;7019:77;7016:1;7009:88;7116:4;7113:1;7106:15;7140:4;7137:1;7130:15;7157:281;7240:27;7262:4;7240:27;:::i;:::-;7232:6;7228:40;7370:6;7358:10;7355:22;7334:18;7322:10;7319:34;7316:62;7313:88;;;7381:18;;:::i;:::-;7313:88;7421:10;7417:2;7410:22;7200:238;7157:281;;:::o;7444:129::-;7478:6;7505:20;;:::i;:::-;7495:30;;7534:33;7562:4;7554:6;7534:33;:::i;:::-;7444:129;;;:::o;7579:307::-;7640:4;7730:18;7722:6;7719:30;7716:56;;;7752:18;;:::i;:::-;7716:56;7790:29;7812:6;7790:29;:::i;:::-;7782:37;;7874:4;7868;7864:15;7856:23;;7579:307;;;:::o;7892:148::-;7990:6;7985:3;7980;7967:30;8031:1;8022:6;8017:3;8013:16;8006:27;7892:148;;;:::o;8046:423::-;8123:5;8148:65;8164:48;8205:6;8164:48;:::i;:::-;8148:65;:::i;:::-;8139:74;;8236:6;8229:5;8222:21;8274:4;8267:5;8263:16;8312:3;8303:6;8298:3;8294:16;8291:25;8288:112;;;8319:79;;:::i;:::-;8288:112;8409:54;8456:6;8451:3;8446;8409:54;:::i;:::-;8129:340;8046:423;;;;;:::o;8488:338::-;8543:5;8592:3;8585:4;8577:6;8573:17;8569:27;8559:122;;8600:79;;:::i;:::-;8559:122;8717:6;8704:20;8742:78;8816:3;8808:6;8801:4;8793:6;8789:17;8742:78;:::i;:::-;8733:87;;8549:277;8488:338;;;;:::o;8832:943::-;8927:6;8935;8943;8951;9000:3;8988:9;8979:7;8975:23;8971:33;8968:120;;;9007:79;;:::i;:::-;8968:120;9127:1;9152:53;9197:7;9188:6;9177:9;9173:22;9152:53;:::i;:::-;9142:63;;9098:117;9254:2;9280:53;9325:7;9316:6;9305:9;9301:22;9280:53;:::i;:::-;9270:63;;9225:118;9382:2;9408:53;9453:7;9444:6;9433:9;9429:22;9408:53;:::i;:::-;9398:63;;9353:118;9538:2;9527:9;9523:18;9510:32;9569:18;9561:6;9558:30;9555:117;;;9591:79;;:::i;:::-;9555:117;9696:62;9750:7;9741:6;9730:9;9726:22;9696:62;:::i;:::-;9686:72;;9481:287;8832:943;;;;;;;:::o;9781:115::-;9866:23;9883:5;9866:23;:::i;:::-;9861:3;9854:36;9781:115;;:::o;9902:218::-;9993:4;10031:2;10020:9;10016:18;10008:26;;10044:69;10110:1;10099:9;10095:17;10086:6;10044:69;:::i;:::-;9902:218;;;;:::o;10126:474::-;10194:6;10202;10251:2;10239:9;10230:7;10226:23;10222:32;10219:119;;;10257:79;;:::i;:::-;10219:119;10377:1;10402:53;10447:7;10438:6;10427:9;10423:22;10402:53;:::i;:::-;10392:63;;10348:117;10504:2;10530:53;10575:7;10566:6;10555:9;10551:22;10530:53;:::i;:::-;10520:63;;10475:118;10126:474;;;;;:::o;10606:329::-;10665:6;10714:2;10702:9;10693:7;10689:23;10685:32;10682:119;;;10720:79;;:::i;:::-;10682:119;10840:1;10865:53;10910:7;10901:6;10890:9;10886:22;10865:53;:::i;:::-;10855:63;;10811:117;10606:329;;;;:::o;10941:180::-;10989:77;10986:1;10979:88;11086:4;11083:1;11076:15;11110:4;11107:1;11100:15;11127:123;11218:1;11211:5;11208:12;11198:46;;11224:18;;:::i;:::-;11198:46;11127:123;:::o;11256:147::-;11311:7;11340:5;11329:16;;11346:51;11391:5;11346:51;:::i;:::-;11256:147;;;:::o;11409:::-;11475:9;11508:42;11544:5;11508:42;:::i;:::-;11495:55;;11409:147;;;:::o;11562:163::-;11665:53;11712:5;11665:53;:::i;:::-;11660:3;11653:66;11562:163;;:::o;11731:254::-;11840:4;11878:2;11867:9;11863:18;11855:26;;11891:87;11975:1;11964:9;11960:17;11951:6;11891:87;:::i;:::-;11731:254;;;;:::o;12008:568::-;12081:8;12091:6;12141:3;12134:4;12126:6;12122:17;12118:27;12108:122;;12149:79;;:::i;:::-;12108:122;12262:6;12249:20;12239:30;;12292:18;12284:6;12281:30;12278:117;;;12314:79;;:::i;:::-;12278:117;12428:4;12420:6;12416:17;12404:29;;12482:3;12474:4;12466:6;12462:17;12452:8;12448:32;12445:41;12442:128;;;12489:79;;:::i;:::-;12442:128;12008:568;;;;;:::o;12599:::-;12672:8;12682:6;12732:3;12725:4;12717:6;12713:17;12709:27;12699:122;;12740:79;;:::i;:::-;12699:122;12853:6;12840:20;12830:30;;12883:18;12875:6;12872:30;12869:117;;;12905:79;;:::i;:::-;12869:117;13019:4;13011:6;13007:17;12995:29;;13073:3;13065:4;13057:6;13053:17;13043:8;13039:32;13036:41;13033:128;;;13080:79;;:::i;:::-;13033:128;12599:568;;;;;:::o;13188:579::-;13272:8;13282:6;13332:3;13325:4;13317:6;13313:17;13309:27;13299:122;;13340:79;;:::i;:::-;13299:122;13453:6;13440:20;13430:30;;13483:18;13475:6;13472:30;13469:117;;;13505:79;;:::i;:::-;13469:117;13619:4;13611:6;13607:17;13595:29;;13673:3;13665:4;13657:6;13653:17;13643:8;13639:32;13636:41;13633:128;;;13680:79;;:::i;:::-;13633:128;13188:579;;;;;:::o;13773:1769::-;13969:6;13977;13985;13993;14001;14009;14017;14025;14033;14082:3;14070:9;14061:7;14057:23;14053:33;14050:120;;;14089:79;;:::i;:::-;14050:120;14237:1;14226:9;14222:17;14209:31;14267:18;14259:6;14256:30;14253:117;;;14289:79;;:::i;:::-;14253:117;14402:80;14474:7;14465:6;14454:9;14450:22;14402:80;:::i;:::-;14384:98;;;;14180:312;14559:2;14548:9;14544:18;14531:32;14590:18;14582:6;14579:30;14576:117;;;14612:79;;:::i;:::-;14576:117;14725:80;14797:7;14788:6;14777:9;14773:22;14725:80;:::i;:::-;14707:98;;;;14502:313;14882:2;14871:9;14867:18;14854:32;14913:18;14905:6;14902:30;14899:117;;;14935:79;;:::i;:::-;14899:117;15048:91;15131:7;15122:6;15111:9;15107:22;15048:91;:::i;:::-;15030:109;;;;14825:324;15188:2;15214:53;15259:7;15250:6;15239:9;15235:22;15214:53;:::i;:::-;15204:63;;15159:118;15316:3;15343:53;15388:7;15379:6;15368:9;15364:22;15343:53;:::i;:::-;15333:63;;15287:119;15445:3;15472:53;15517:7;15508:6;15497:9;15493:22;15472:53;:::i;:::-;15462:63;;15416:119;13773:1769;;;;;;;;;;;:::o;15548:1623::-;15735:6;15743;15751;15759;15767;15775;15783;15791;15840:3;15828:9;15819:7;15815:23;15811:33;15808:120;;;15847:79;;:::i;:::-;15808:120;15995:1;15984:9;15980:17;15967:31;16025:18;16017:6;16014:30;16011:117;;;16047:79;;:::i;:::-;16011:117;16160:80;16232:7;16223:6;16212:9;16208:22;16160:80;:::i;:::-;16142:98;;;;15938:312;16317:2;16306:9;16302:18;16289:32;16348:18;16340:6;16337:30;16334:117;;;16370:79;;:::i;:::-;16334:117;16483:80;16555:7;16546:6;16535:9;16531:22;16483:80;:::i;:::-;16465:98;;;;16260:313;16640:2;16629:9;16625:18;16612:32;16671:18;16663:6;16660:30;16657:117;;;16693:79;;:::i;:::-;16657:117;16806:91;16889:7;16880:6;16869:9;16865:22;16806:91;:::i;:::-;16788:109;;;;16583:324;16946:2;16972:53;17017:7;17008:6;16997:9;16993:22;16972:53;:::i;:::-;16962:63;;16917:118;17074:3;17101:53;17146:7;17137:6;17126:9;17122:22;17101:53;:::i;:::-;17091:63;;17045:119;15548:1623;;;;;;;;;;;:::o;17177:311::-;17254:4;17344:18;17336:6;17333:30;17330:56;;;17366:18;;:::i;:::-;17330:56;17416:4;17408:6;17404:17;17396:25;;17476:4;17470;17466:15;17458:23;;17177:311;;;:::o;17511:710::-;17607:5;17632:81;17648:64;17705:6;17648:64;:::i;:::-;17632:81;:::i;:::-;17623:90;;17733:5;17762:6;17755:5;17748:21;17796:4;17789:5;17785:16;17778:23;;17849:4;17841:6;17837:17;17829:6;17825:30;17878:3;17870:6;17867:15;17864:122;;;17897:79;;:::i;:::-;17864:122;18012:6;17995:220;18029:6;18024:3;18021:15;17995:220;;;18104:3;18133:37;18166:3;18154:10;18133:37;:::i;:::-;18128:3;18121:50;18200:4;18195:3;18191:14;18184:21;;18071:144;18055:4;18050:3;18046:14;18039:21;;17995:220;;;17999:21;17613:608;;17511:710;;;;;:::o;18244:370::-;18315:5;18364:3;18357:4;18349:6;18345:17;18341:27;18331:122;;18372:79;;:::i;:::-;18331:122;18489:6;18476:20;18514:94;18604:3;18596:6;18589:4;18581:6;18577:17;18514:94;:::i;:::-;18505:103;;18321:293;18244:370;;;;:::o;18620:1509::-;18774:6;18782;18790;18798;18806;18855:3;18843:9;18834:7;18830:23;18826:33;18823:120;;;18862:79;;:::i;:::-;18823:120;18982:1;19007:53;19052:7;19043:6;19032:9;19028:22;19007:53;:::i;:::-;18997:63;;18953:117;19109:2;19135:53;19180:7;19171:6;19160:9;19156:22;19135:53;:::i;:::-;19125:63;;19080:118;19265:2;19254:9;19250:18;19237:32;19296:18;19288:6;19285:30;19282:117;;;19318:79;;:::i;:::-;19282:117;19423:78;19493:7;19484:6;19473:9;19469:22;19423:78;:::i;:::-;19413:88;;19208:303;19578:2;19567:9;19563:18;19550:32;19609:18;19601:6;19598:30;19595:117;;;19631:79;;:::i;:::-;19595:117;19736:78;19806:7;19797:6;19786:9;19782:22;19736:78;:::i;:::-;19726:88;;19521:303;19891:3;19880:9;19876:19;19863:33;19923:18;19915:6;19912:30;19909:117;;;19945:79;;:::i;:::-;19909:117;20050:62;20104:7;20095:6;20084:9;20080:22;20050:62;:::i;:::-;20040:72;;19834:288;18620:1509;;;;;;;;:::o;20135:118::-;20222:24;20240:5;20222:24;:::i;:::-;20217:3;20210:37;20135:118;;:::o;20259:222::-;20352:4;20390:2;20379:9;20375:18;20367:26;;20403:71;20471:1;20460:9;20456:17;20447:6;20403:71;:::i;:::-;20259:222;;;;:::o;20487:1089::-;20591:6;20599;20607;20615;20623;20672:3;20660:9;20651:7;20647:23;20643:33;20640:120;;;20679:79;;:::i;:::-;20640:120;20799:1;20824:53;20869:7;20860:6;20849:9;20845:22;20824:53;:::i;:::-;20814:63;;20770:117;20926:2;20952:53;20997:7;20988:6;20977:9;20973:22;20952:53;:::i;:::-;20942:63;;20897:118;21054:2;21080:53;21125:7;21116:6;21105:9;21101:22;21080:53;:::i;:::-;21070:63;;21025:118;21182:2;21208:53;21253:7;21244:6;21233:9;21229:22;21208:53;:::i;:::-;21198:63;;21153:118;21338:3;21327:9;21323:19;21310:33;21370:18;21362:6;21359:30;21356:117;;;21392:79;;:::i;:::-;21356:117;21497:62;21551:7;21542:6;21531:9;21527:22;21497:62;:::i;:::-;21487:72;;21281:288;20487:1089;;;;;;;;:::o;21582:118::-;21669:24;21687:5;21669:24;:::i;:::-;21664:3;21657:37;21582:118;;:::o;21706:168::-;21789:11;21823:6;21818:3;21811:19;21863:4;21858:3;21854:14;21839:29;;21706:168;;;;:::o;21902:314::-;21998:3;22019:70;22082:6;22077:3;22019:70;:::i;:::-;22012:77;;22099:56;22148:6;22143:3;22136:5;22099:56;:::i;:::-;22180:29;22202:6;22180:29;:::i;:::-;22175:3;22171:39;22164:46;;21902:314;;;;;:::o;22222:771::-;22455:4;22493:3;22482:9;22478:19;22470:27;;22507:71;22575:1;22564:9;22560:17;22551:6;22507:71;:::i;:::-;22588:72;22656:2;22645:9;22641:18;22632:6;22588:72;:::i;:::-;22707:9;22701:4;22697:20;22692:2;22681:9;22677:18;22670:48;22735:86;22816:4;22807:6;22799;22735:86;:::i;:::-;22727:94;;22831:72;22899:2;22888:9;22884:18;22875:6;22831:72;:::i;:::-;22913:73;22981:3;22970:9;22966:19;22957:6;22913:73;:::i;:::-;22222:771;;;;;;;;;:::o;22999:549::-;23176:4;23214:2;23203:9;23199:18;23191:26;;23227:71;23295:1;23284:9;23280:17;23271:6;23227:71;:::i;:::-;23308:72;23376:2;23365:9;23361:18;23352:6;23308:72;:::i;:::-;23427:9;23421:4;23417:20;23412:2;23401:9;23397:18;23390:48;23455:86;23536:4;23527:6;23519;23455:86;:::i;:::-;23447:94;;22999:549;;;;;;;:::o;23554:222::-;23647:4;23685:2;23674:9;23670:18;23662:26;;23698:71;23766:1;23755:9;23751:17;23742:6;23698:71;:::i;:::-;23554:222;;;;:::o;23782:332::-;23903:4;23941:2;23930:9;23926:18;23918:26;;23954:71;24022:1;24011:9;24007:17;23998:6;23954:71;:::i;:::-;24035:72;24103:2;24092:9;24088:18;24079:6;24035:72;:::i;:::-;23782:332;;;;;:::o;24120:771::-;24353:4;24391:3;24380:9;24376:19;24368:27;;24405:71;24473:1;24462:9;24458:17;24449:6;24405:71;:::i;:::-;24486:72;24554:2;24543:9;24539:18;24530:6;24486:72;:::i;:::-;24605:9;24599:4;24595:20;24590:2;24579:9;24575:18;24568:48;24633:86;24714:4;24705:6;24697;24633:86;:::i;:::-;24625:94;;24729:72;24797:2;24786:9;24782:18;24773:6;24729:72;:::i;:::-;24811:73;24879:3;24868:9;24864:19;24855:6;24811:73;:::i;:::-;24120:771;;;;;;;;;:::o;24897:442::-;25046:4;25084:2;25073:9;25069:18;25061:26;;25097:71;25165:1;25154:9;25150:17;25141:6;25097:71;:::i;:::-;25178:72;25246:2;25235:9;25231:18;25222:6;25178:72;:::i;:::-;25260;25328:2;25317:9;25313:18;25304:6;25260:72;:::i;:::-;24897:442;;;;;;:::o;25345:180::-;25393:77;25390:1;25383:88;25490:4;25487:1;25480:15;25514:4;25511:1;25504:15;25531:329;25590:6;25639:2;25627:9;25618:7;25614:23;25610:32;25607:119;;;25645:79;;:::i;:::-;25607:119;25765:1;25790:53;25835:7;25826:6;25815:9;25811:22;25790:53;:::i;:::-;25780:63;;25736:117;25531:329;;;;:::o;25866:117::-;25975:1;25972;25965:12;25989:117;26098:1;26095;26088:12;26112:117;26221:1;26218;26211:12;26235:724;26312:4;26318:6;26374:11;26361:25;26474:1;26468:4;26464:12;26453:8;26437:14;26433:29;26429:48;26409:18;26405:73;26395:168;;26482:79;;:::i;:::-;26395:168;26594:18;26584:8;26580:33;26572:41;;26646:4;26633:18;26623:28;;26674:18;26666:6;26663:30;26660:117;;;26696:79;;:::i;:::-;26660:117;26804:2;26798:4;26794:13;26786:21;;26861:4;26853:6;26849:17;26833:14;26829:38;26823:4;26819:49;26816:136;;;26871:79;;:::i;:::-;26816:136;26325:634;26235:724;;;;;:::o;26965:184::-;27064:11;27098:6;27093:3;27086:19;27138:4;27133:3;27129:14;27114:29;;26965:184;;;;:::o;27155:102::-;27224:4;27247:3;27239:11;;27155:102;;;:::o;27263:108::-;27340:24;27358:5;27340:24;:::i;:::-;27335:3;27328:37;27263:108;;:::o;27377:179::-;27446:10;27467:46;27509:3;27501:6;27467:46;:::i;:::-;27545:4;27540:3;27536:14;27522:28;;27377:179;;;;:::o;27562:122::-;27614:5;27639:39;27674:2;27669:3;27665:12;27660:3;27639:39;:::i;:::-;27630:48;;27562:122;;;;:::o;27690:115::-;27762:4;27794;27789:3;27785:14;27777:22;;27690:115;;;:::o;27841:699::-;27970:3;27993:86;28072:6;28067:3;27993:86;:::i;:::-;27986:93;;28103:58;28155:5;28103:58;:::i;:::-;28184:7;28215:1;28200:315;28225:6;28222:1;28219:13;28200:315;;;28295:42;28330:6;28321:7;28295:42;:::i;:::-;28357:63;28416:3;28401:13;28357:63;:::i;:::-;28350:70;;28443:62;28498:6;28443:62;:::i;:::-;28433:72;;28260:255;28247:1;28244;28240:9;28235:14;;28200:315;;;28204:14;28531:3;28524:10;;27975:565;;27841:699;;;;;:::o;28546:184::-;28645:11;28679:6;28674:3;28667:19;28719:4;28714:3;28710:14;28695:29;;28546:184;;;;:::o;28736:117::-;28845:1;28842;28835:12;28859:99;28944:6;28939:3;28934;28921:30;28859:99;;;:::o;28994:537::-;29122:3;29143:86;29222:6;29217:3;29143:86;:::i;:::-;29136:93;;29253:66;29245:6;29242:78;29239:165;;;29323:79;;:::i;:::-;29239:165;29435:4;29427:6;29423:17;29413:27;;29450:43;29486:6;29481:3;29474:5;29450:43;:::i;:::-;29518:6;29513:3;29509:16;29502:23;;28994:537;;;;;:::o;29537:193::-;29645:11;29679:6;29674:3;29667:19;29719:4;29714:3;29710:14;29695:29;;29537:193;;;;:::o;29736:113::-;29816:4;29839:3;29831:11;;29736:113;;;:::o;29855:158::-;29928:11;29962:6;29957:3;29950:19;30002:4;29997:3;29993:14;29978:29;;29855:158;;;;:::o;30041:294::-;30127:3;30148:60;30201:6;30196:3;30148:60;:::i;:::-;30141:67;;30218:56;30267:6;30262:3;30255:5;30218:56;:::i;:::-;30299:29;30321:6;30299:29;:::i;:::-;30294:3;30290:39;30283:46;;30041:294;;;;;:::o;30341:212::-;30438:10;30473:74;30543:3;30535:6;30527;30473:74;:::i;:::-;30459:88;;30341:212;;;;;:::o;30559:117::-;30668:1;30665;30658:12;30682:117;30791:1;30788;30781:12;30805:117;30914:1;30911;30904:12;30928:711;30992:5;30999:6;31055:3;31042:17;31147:1;31141:4;31137:12;31126:8;31110:14;31106:29;31102:48;31082:18;31078:73;31068:168;;31155:79;;:::i;:::-;31068:168;31278:8;31258:18;31254:33;31245:42;;31320:5;31307:19;31297:29;;31355:4;31348:5;31344:16;31335:25;;31383:18;31375:6;31372:30;31369:117;;;31405:79;;:::i;:::-;31369:117;31541:4;31533:6;31529:17;31513:14;31509:38;31502:5;31498:50;31495:137;;;31551:79;;:::i;:::-;31495:137;31006:633;30928:711;;;;;:::o;31645:126::-;31728:4;31760;31755:3;31751:14;31743:22;;31645:126;;;:::o;31803:990::-;31952:3;31975:95;32063:6;32058:3;31975:95;:::i;:::-;31968:102;;32096:3;32141:4;32133:6;32129:17;32124:3;32120:27;32171:69;32234:5;32171:69;:::i;:::-;32263:7;32294:1;32279:469;32304:6;32301:1;32298:13;32279:469;;;32375:9;32369:4;32365:20;32360:3;32353:33;32435:53;32481:6;32472:7;32435:53;:::i;:::-;32509:99;32603:4;32588:13;32573;32509:99;:::i;:::-;32501:107;;32631:73;32697:6;32631:73;:::i;:::-;32621:83;;32733:4;32728:3;32724:14;32717:21;;32339:409;;32326:1;32323;32319:9;32314:14;;32279:469;;;32283:14;32764:4;32757:11;;32784:3;32777:10;;31957:836;;;;31803:990;;;;;:::o;32799:1217::-;33204:4;33242:3;33231:9;33227:19;33219:27;;33292:9;33286:4;33282:20;33278:1;33267:9;33263:17;33256:47;33320:118;33433:4;33424:6;33416;33320:118;:::i;:::-;33312:126;;33485:9;33479:4;33475:20;33470:2;33459:9;33455:18;33448:48;33513:118;33626:4;33617:6;33609;33513:118;:::i;:::-;33505:126;;33678:9;33672:4;33668:20;33663:2;33652:9;33648:18;33641:48;33706:138;33839:4;33830:6;33822;33706:138;:::i;:::-;33698:146;;33854:72;33922:2;33911:9;33907:18;33898:6;33854:72;:::i;:::-;33936:73;34004:3;33993:9;33989:19;33980:6;33936:73;:::i;:::-;32799:1217;;;;;;;;;;;:::o;34022:332::-;34143:4;34181:2;34170:9;34166:18;34158:26;;34194:71;34262:1;34251:9;34247:17;34238:6;34194:71;:::i;:::-;34275:72;34343:2;34332:9;34328:18;34319:6;34275:72;:::i;:::-;34022:332;;;;;:::o;34360:180::-;34408:77;34405:1;34398:88;34505:4;34502:1;34495:15;34529:4;34526:1;34519:15;34546:191;34586:3;34605:20;34623:1;34605:20;:::i;:::-;34600:25;;34639:20;34657:1;34639:20;:::i;:::-;34634:25;;34682:1;34679;34675:9;34668:16;;34703:3;34700:1;34697:10;34694:36;;;34710:18;;:::i;:::-;34694:36;34546:191;;;;:::o;34743:332::-;34864:4;34902:2;34891:9;34887:18;34879:26;;34915:71;34983:1;34972:9;34968:17;34959:6;34915:71;:::i;:::-;34996:72;35064:2;35053:9;35049:18;35040:6;34996:72;:::i;:::-;34743:332;;;;;:::o;35081:147::-;35182:11;35219:3;35204:18;;35081:147;;;;:::o;35256:327::-;35370:3;35391:88;35472:6;35467:3;35391:88;:::i;:::-;35384:95;;35489:56;35538:6;35533:3;35526:5;35489:56;:::i;:::-;35570:6;35565:3;35561:16;35554:23;;35256:327;;;;;:::o;35589:291::-;35729:3;35751:103;35850:3;35841:6;35833;35751:103;:::i;:::-;35744:110;;35871:3;35864:10;;35589:291;;;;;:::o
Swarm Source
ipfs://e944c3e9098d086a5ddb202a9b8bdbcf3291f034070c30c4fa0b8f329ccfc697
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in HYPE
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.