Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
MetaTraceGovernanceToken
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-05-12 */ // File: @openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol) pragma solidity ^0.8.0; /** * @dev Library for reading and writing primitive types to specific storage slots. * * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. * This library helps with reading and writing to such slots without the need for inline assembly. * * The functions in this library return Slot structs that contain a `value` member that can be used to read or write. * * Example usage to set ERC1967 implementation slot: * ``` * contract ERC1967 { * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; * * function _getImplementation() internal view returns (address) { * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; * } * * function _setImplementation(address newImplementation) internal { * require(Address.isContract(newImplementation), "ERC1967: new implementation is not a contract"); * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; * } * } * ``` * * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._ */ library StorageSlotUpgradeable { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } /** * @dev Returns an `AddressSlot` with member `value` located at `slot`. */ function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `BooleanSlot` with member `value` located at `slot`. */ function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Bytes32Slot` with member `value` located at `slot`. */ function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } /** * @dev Returns an `Uint256Slot` with member `value` located at `slot`. */ function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { /// @solidity memory-safe-assembly assembly { r.slot := slot } } } // File: @openzeppelin/contracts-upgradeable/interfaces/IERC1967Upgradeable.sol // OpenZeppelin Contracts (last updated v4.8.3) (interfaces/IERC1967.sol) pragma solidity ^0.8.0; /** * @dev ERC-1967: Proxy Storage Slots. This interface contains the events defined in the ERC. * * _Available since v4.9._ */ interface IERC1967Upgradeable { /** * @dev Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @dev Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @dev Emitted when the beacon is changed. */ event BeaconUpgraded(address indexed beacon); } // File: @openzeppelin/contracts-upgradeable/proxy/beacon/IBeaconUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) pragma solidity ^0.8.0; /** * @dev This is the interface that {BeaconProxy} expects of its beacon. */ interface IBeaconUpgradeable { /** * @dev Must return an address that can be used as a delegate call target. * * {BeaconProxy} will check that this address is a contract. */ function implementation() external view returns (address); } // File: @openzeppelin/contracts-upgradeable/interfaces/draft-IERC1822Upgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol) pragma solidity ^0.8.0; /** * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified * proxy whose upgrades are fully controlled by the current implementation. */ interface IERC1822ProxiableUpgradeable { /** * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation * address. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. */ function proxiableUUID() external view returns (bytes32); } // File: @openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library AddressUpgradeable { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) 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(errorMessage); } } } // File: @openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol // OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol) pragma solidity ^0.8.2; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ``` * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Indicates that the contract has been initialized. * @custom:oz-retyped-from bool */ uint8 private _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private _initializing; /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint8 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a * constructor. * * Emits an {Initialized} event. */ modifier initializer() { bool isTopLevelCall = !_initializing; require( (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1), "Initializable: contract is already initialized" ); _initialized = 1; if (isTopLevelCall) { _initializing = true; } _; if (isTopLevelCall) { _initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: setting the version to 255 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint8 version) { require(!_initializing && _initialized < version, "Initializable: contract is already initialized"); _initialized = version; _initializing = true; _; _initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { require(_initializing, "Initializable: contract is not initializing"); _; } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { require(!_initializing, "Initializable: contract is initializing"); if (_initialized < type(uint8).max) { _initialized = type(uint8).max; emit Initialized(type(uint8).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint8) { return _initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _initializing; } } // File: @openzeppelin/contracts-upgradeable/proxy/ERC1967/ERC1967UpgradeUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.3) (proxy/ERC1967/ERC1967Upgrade.sol) pragma solidity ^0.8.2; /** * @dev This abstract contract provides getters and event emitting update functions for * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots. * * _Available since v4.1._ * * @custom:oz-upgrades-unsafe-allow delegatecall */ abstract contract ERC1967UpgradeUpgradeable is Initializable, IERC1967Upgradeable { function __ERC1967Upgrade_init() internal onlyInitializing { } function __ERC1967Upgrade_init_unchained() internal onlyInitializing { } // This is the keccak-256 hash of "eip1967.proxy.rollback" subtracted by 1 bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143; /** * @dev Storage slot with the address of the current implementation. * This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; /** * @dev Returns the current implementation address. */ function _getImplementation() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value; } /** * @dev Stores a new address in the EIP1967 implementation slot. */ function _setImplementation(address newImplementation) private { require(AddressUpgradeable.isContract(newImplementation), "ERC1967: new implementation is not a contract"); StorageSlotUpgradeable.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } /** * @dev Perform implementation upgrade * * Emits an {Upgraded} event. */ function _upgradeTo(address newImplementation) internal { _setImplementation(newImplementation); emit Upgraded(newImplementation); } /** * @dev Perform implementation upgrade with additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCall( address newImplementation, bytes memory data, bool forceCall ) internal { _upgradeTo(newImplementation); if (data.length > 0 || forceCall) { _functionDelegateCall(newImplementation, data); } } /** * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call. * * Emits an {Upgraded} event. */ function _upgradeToAndCallUUPS( address newImplementation, bytes memory data, bool forceCall ) internal { // Upgrades from old implementations will perform a rollback test. This test requires the new // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing // this special case will break upgrade paths from old UUPS implementation to new ones. if (StorageSlotUpgradeable.getBooleanSlot(_ROLLBACK_SLOT).value) { _setImplementation(newImplementation); } else { try IERC1822ProxiableUpgradeable(newImplementation).proxiableUUID() returns (bytes32 slot) { require(slot == _IMPLEMENTATION_SLOT, "ERC1967Upgrade: unsupported proxiableUUID"); } catch { revert("ERC1967Upgrade: new implementation is not UUPS"); } _upgradeToAndCall(newImplementation, data, forceCall); } } /** * @dev Storage slot with the admin of the contract. * This is the keccak-256 hash of "eip1967.proxy.admin" subtracted by 1, and is * validated in the constructor. */ bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /** * @dev Returns the current admin. */ function _getAdmin() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value; } /** * @dev Stores a new address in the EIP1967 admin slot. */ function _setAdmin(address newAdmin) private { require(newAdmin != address(0), "ERC1967: new admin is the zero address"); StorageSlotUpgradeable.getAddressSlot(_ADMIN_SLOT).value = newAdmin; } /** * @dev Changes the admin of the proxy. * * Emits an {AdminChanged} event. */ function _changeAdmin(address newAdmin) internal { emit AdminChanged(_getAdmin(), newAdmin); _setAdmin(newAdmin); } /** * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy. * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor. */ bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50; /** * @dev Returns the current beacon. */ function _getBeacon() internal view returns (address) { return StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value; } /** * @dev Stores a new beacon in the EIP1967 beacon slot. */ function _setBeacon(address newBeacon) private { require(AddressUpgradeable.isContract(newBeacon), "ERC1967: new beacon is not a contract"); require( AddressUpgradeable.isContract(IBeaconUpgradeable(newBeacon).implementation()), "ERC1967: beacon implementation is not a contract" ); StorageSlotUpgradeable.getAddressSlot(_BEACON_SLOT).value = newBeacon; } /** * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that). * * Emits a {BeaconUpgraded} event. */ function _upgradeBeaconToAndCall( address newBeacon, bytes memory data, bool forceCall ) internal { _setBeacon(newBeacon); emit BeaconUpgraded(newBeacon); if (data.length > 0 || forceCall) { _functionDelegateCall(IBeaconUpgradeable(newBeacon).implementation(), data); } } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function _functionDelegateCall(address target, bytes memory data) private returns (bytes memory) { require(AddressUpgradeable.isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return AddressUpgradeable.verifyCallResult(success, returndata, "Address: low-level delegate call failed"); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/UUPSUpgradeable.sol) pragma solidity ^0.8.0; /** * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy. * * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing * `UUPSUpgradeable` with a custom implementation of upgrades. * * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism. * * _Available since v4.1._ */ abstract contract UUPSUpgradeable is Initializable, IERC1822ProxiableUpgradeable, ERC1967UpgradeUpgradeable { function __UUPSUpgradeable_init() internal onlyInitializing { } function __UUPSUpgradeable_init_unchained() internal onlyInitializing { } /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment address private immutable __self = address(this); /** * @dev Check that the execution is being performed through a delegatecall call and that the execution context is * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to * fail. */ modifier onlyProxy() { require(address(this) != __self, "Function must be called through delegatecall"); require(_getImplementation() == __self, "Function must be called through active proxy"); _; } /** * @dev Check that the execution is not being performed through a delegate call. This allows a function to be * callable on the implementing contract but not through proxies. */ modifier notDelegated() { require(address(this) == __self, "UUPSUpgradeable: must not be called through delegatecall"); _; } /** * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the * implementation. It is used to validate the implementation's compatibility when performing an upgrade. * * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier. */ function proxiableUUID() external view virtual override notDelegated returns (bytes32) { return _IMPLEMENTATION_SLOT; } /** * @dev Upgrade the implementation of the proxy to `newImplementation`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeTo(address newImplementation) external virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, new bytes(0), false); } /** * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call * encoded in `data`. * * Calls {_authorizeUpgrade}. * * Emits an {Upgraded} event. */ function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy { _authorizeUpgrade(newImplementation); _upgradeToAndCallUUPS(newImplementation, data, true); } /** * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by * {upgradeTo} and {upgradeToAndCall}. * * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}. * * ```solidity * function _authorizeUpgrade(address) internal override onlyOwner {} * ``` */ function _authorizeUpgrade(address newImplementation) internal virtual; /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: @openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal onlyInitializing { __Ownable_init_unchained(); } function __Ownable_init_unchained() internal onlyInitializing { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; } // File: @openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal onlyInitializing { __Pausable_init_unchained(); } function __Pausable_init_unchained() internal onlyInitializing { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[49] private __gap; } // File: @openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20MetadataUpgradeable is IERC20Upgradeable { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: @openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable, IERC20MetadataUpgradeable { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ function __ERC20_init(string memory name_, string memory symbol_) internal onlyInitializing { __ERC20_init_unchained(name_, symbol_); } function __ERC20_init_unchained(string memory name_, string memory symbol_) internal onlyInitializing { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - amount); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[45] private __gap; } // File: @openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20BurnableUpgradeable is Initializable, ContextUpgradeable, ERC20Upgradeable { function __ERC20Burnable_init() internal onlyInitializing { } function __ERC20Burnable_init_unchained() internal onlyInitializing { } /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { _spendAllowance(account, _msgSender(), amount); _burn(account, amount); } /** * @dev This empty reserved space is put in place to allow future versions to add new * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ uint256[50] private __gap; } // File: trc.sol pragma solidity ^0.8.9; contract MetaTraceGovernanceToken is Initializable, ERC20Upgradeable, ERC20BurnableUpgradeable, PausableUpgradeable, OwnableUpgradeable, UUPSUpgradeable { constructor() { _disableInitializers(); } function initialize() initializer public { __ERC20_init("MetaTrace Governance Token", "TRC"); __ERC20Burnable_init(); __Pausable_init(); __Ownable_init(); __UUPSUpgradeable_init(); _mint(0xacfA62804D53875c2A25b586A874F7Ec6F65788a, 5000000000 * 10 ** decimals()); } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal whenNotPaused override { super._beforeTokenTransfer(from, to, amount); } function decimals() public view virtual override returns (uint8) { return 2; } function _authorizeUpgrade(address newImplementation) internal onlyOwner override {} function renounceOwnership() public virtual override onlyOwner { revert("Renounce Ownership forbidden"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b62000206565b600060019054906101000a900460ff1615620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a590620001a9565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001205760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001179190620001e9565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200019160278362000122565b91506200019e8262000133565b604082019050919050565b60006020820190508181036000830152620001c48162000182565b9050919050565b600060ff82169050919050565b620001e381620001cb565b82525050565b6000602082019050620002006000830184620001d8565b92915050565b6080516139cb6200023e60003960008181610632015281816106c001528181610817015281816108a5015261095501526139cb6000f3fe6080604052600436106101405760003560e01c80635c975abb116100b65780638da5cb5b1161006f5780638da5cb5b1461040357806395d89b411461042e578063a457c2d714610459578063a9059cbb14610496578063dd62ed3e146104d3578063f2fde38b1461051057610140565b80635c975abb1461032d57806370a0823114610358578063715018a61461039557806379cc6790146103ac5780638129fc1c146103d55780638456cb59146103ec57610140565b80633659cfe6116101085780633659cfe61461024057806339509351146102695780633f4ba83a146102a657806342966c68146102bd5780634f1ef286146102e657806352d1902d1461030257610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad57806323b872dd146101d8578063313ce56714610215575b600080fd5b34801561015157600080fd5b5061015a610539565b6040516101679190612217565b60405180910390f35b34801561017c57600080fd5b50610197600480360381019061019291906122e1565b6105cb565b6040516101a4919061233c565b60405180910390f35b3480156101b957600080fd5b506101c26105ee565b6040516101cf9190612366565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190612381565b6105f8565b60405161020c919061233c565b60405180910390f35b34801561022157600080fd5b5061022a610627565b60405161023791906123f0565b60405180910390f35b34801561024c57600080fd5b506102676004803603810190610262919061240b565b610630565b005b34801561027557600080fd5b50610290600480360381019061028b91906122e1565b6107b8565b60405161029d919061233c565b60405180910390f35b3480156102b257600080fd5b506102bb6107ef565b005b3480156102c957600080fd5b506102e460048036038101906102df9190612438565b610801565b005b61030060048036038101906102fb919061259a565b610815565b005b34801561030e57600080fd5b50610317610951565b604051610324919061260f565b60405180910390f35b34801561033957600080fd5b50610342610a0a565b60405161034f919061233c565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061240b565b610a21565b60405161038c9190612366565b60405180910390f35b3480156103a157600080fd5b506103aa610a6a565b005b3480156103b857600080fd5b506103d360048036038101906103ce91906122e1565b610aad565b005b3480156103e157600080fd5b506103ea610acd565b005b3480156103f857600080fd5b50610401610cd8565b005b34801561040f57600080fd5b50610418610cea565b6040516104259190612639565b60405180910390f35b34801561043a57600080fd5b50610443610d14565b6040516104509190612217565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b91906122e1565b610da6565b60405161048d919061233c565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906122e1565b610e1d565b6040516104ca919061233c565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190612654565b610e40565b6040516105079190612366565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061240b565b610ec7565b005b606060368054610548906126c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610574906126c3565b80156105c15780601f10610596576101008083540402835291602001916105c1565b820191906000526020600020905b8154815290600101906020018083116105a457829003601f168201915b5050505050905090565b6000806105d6610f4a565b90506105e3818585610f52565b600191505092915050565b6000603554905090565b600080610603610f4a565b905061061085828561111b565b61061b8585856111a7565b60019150509392505050565b60006002905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b590612766565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106fd611420565b73ffffffffffffffffffffffffffffffffffffffff1614610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906127f8565b60405180910390fd5b61075c81611477565b6107b581600067ffffffffffffffff81111561077b5761077a61246f565b5b6040519080825280601f01601f1916602001820160405280156107ad5781602001600182028036833780820191505090505b506000611482565b50565b6000806107c3610f4a565b90506107e48185856107d58589610e40565b6107df9190612847565b610f52565b600191505092915050565b6107f76115f0565b6107ff61166e565b565b61081261080c610f4a565b826116d1565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90612766565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108e2611420565b73ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906127f8565b60405180910390fd5b61094182611477565b61094d82826001611482565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d8906128ed565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000609760009054906101000a900460ff16905090565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a726115f0565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa490612959565b60405180910390fd5b610abf82610ab9610f4a565b8361111b565b610ac982826116d1565b5050565b60008060019054906101000a900460ff16159050808015610afe5750600160008054906101000a900460ff1660ff16105b80610b2b5750610b0d306118a0565b158015610b2a5750600160008054906101000a900460ff1660ff16145b5b610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b61906129eb565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610ba7576001600060016101000a81548160ff0219169083151502179055505b610c1b6040518060400160405280601a81526020017f4d657461547261636520476f7665726e616e636520546f6b656e0000000000008152506040518060400160405280600381526020017f54524300000000000000000000000000000000000000000000000000000000008152506118c3565b610c23611920565b610c2b611971565b610c336119ca565b610c3b611a23565b610c7c73acfa62804d53875c2a25b586a874f7ec6f65788a610c5b610627565b600a610c679190612b3e565b64012a05f200610c779190612b89565b611a74565b8015610cd55760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610ccc9190612c10565b60405180910390a15b50565b610ce06115f0565b610ce8611bcb565b565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060378054610d23906126c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4f906126c3565b8015610d9c5780601f10610d7157610100808354040283529160200191610d9c565b820191906000526020600020905b815481529060010190602001808311610d7f57829003601f168201915b5050505050905090565b600080610db1610f4a565b90506000610dbf8286610e40565b905083811015610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90612c9d565b60405180910390fd5b610e118286868403610f52565b60019250505092915050565b600080610e28610f4a565b9050610e358185856111a7565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ecf6115f0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590612d2f565b60405180910390fd5b610f4781611c2e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890612dc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790612e53565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161110e9190612366565b60405180910390a3505050565b60006111278484610e40565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111a15781811015611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90612ebf565b60405180910390fd5b6111a08484848403610f52565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90612f51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90612fe3565b60405180910390fd5b611290838383611cf4565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90613075565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114079190612366565b60405180910390a361141a848484611d0c565b50505050565b600061144e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d11565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61147f6115f0565b50565b6114ae7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d1b565b60000160009054906101000a900460ff16156114d2576114cd83611d25565b6115eb565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561153a57506040513d601f19601f8201168201806040525081019061153791906130c1565b60015b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090613160565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d5906131f2565b60405180910390fd5b506115ea838383611dde565b5b505050565b6115f8610f4a565b73ffffffffffffffffffffffffffffffffffffffff16611616610cea565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639061325e565b60405180910390fd5b565b611676611e0a565b6000609760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116ba610f4a565b6040516116c79190612639565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611740576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611737906132f0565b60405180910390fd5b61174c82600083611cf4565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613382565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118879190612366565b60405180910390a361189b83600084611d0c565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990613414565b60405180910390fd5b61191c8282611e53565b5050565b600060019054906101000a900460ff1661196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613414565b60405180910390fd5b565b600060019054906101000a900460ff166119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790613414565b60405180910390fd5b6119c8611ec6565b565b600060019054906101000a900460ff16611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090613414565b60405180910390fd5b611a21611f32565b565b600060019054906101000a900460ff16611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990613414565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613480565b60405180910390fd5b611aef60008383611cf4565b8060356000828254611b019190612847565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bb39190612366565b60405180910390a3611bc760008383611d0c565b5050565b611bd3611f93565b6001609760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c17610f4a565b604051611c249190612639565b60405180910390a1565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611cfc611f93565b611d07838383611fdd565b505050565b505050565b6000819050919050565b6000819050919050565b611d2e816118a0565b611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490613512565b60405180910390fd5b80611d9a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d11565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611de783611fe2565b600082511180611df45750805b15611e0557611e038383612031565b505b505050565b611e12610a0a565b611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e489061357e565b60405180910390fd5b565b600060019054906101000a900460ff16611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990613414565b60405180910390fd5b8160369081611eb19190613740565b508060379081611ec19190613740565b505050565b600060019054906101000a900460ff16611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90613414565b60405180910390fd5b6000609760006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff16611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7890613414565b60405180910390fd5b611f91611f8c610f4a565b611c2e565b565b611f9b610a0a565b15611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd29061385e565b60405180910390fd5b565b505050565b611feb81611d25565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606061203c836118a0565b61207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906138f0565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516120a39190613957565b600060405180830381855af49150503d80600081146120de576040519150601f19603f3d011682016040523d82523d6000602084013e6120e3565b606091505b509150915061210b828260405180606001604052806027815260200161396f60279139612115565b9250505092915050565b6060831561212557829050612130565b61212f8383612137565b5b9392505050565b60008251111561214a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9190612217565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b838110156121c15780820151818401526020810190506121a6565b60008484015250505050565b6000601f19601f8301169050919050565b60006121e982612187565b6121f38185612192565b93506122038185602086016121a3565b61220c816121cd565b840191505092915050565b6000602082019050818103600083015261223181846121de565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122788261224d565b9050919050565b6122888161226d565b811461229357600080fd5b50565b6000813590506122a58161227f565b92915050565b6000819050919050565b6122be816122ab565b81146122c957600080fd5b50565b6000813590506122db816122b5565b92915050565b600080604083850312156122f8576122f7612243565b5b600061230685828601612296565b9250506020612317858286016122cc565b9150509250929050565b60008115159050919050565b61233681612321565b82525050565b6000602082019050612351600083018461232d565b92915050565b612360816122ab565b82525050565b600060208201905061237b6000830184612357565b92915050565b60008060006060848603121561239a57612399612243565b5b60006123a886828701612296565b93505060206123b986828701612296565b92505060406123ca868287016122cc565b9150509250925092565b600060ff82169050919050565b6123ea816123d4565b82525050565b600060208201905061240560008301846123e1565b92915050565b60006020828403121561242157612420612243565b5b600061242f84828501612296565b91505092915050565b60006020828403121561244e5761244d612243565b5b600061245c848285016122cc565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124a7826121cd565b810181811067ffffffffffffffff821117156124c6576124c561246f565b5b80604052505050565b60006124d9612239565b90506124e5828261249e565b919050565b600067ffffffffffffffff8211156125055761250461246f565b5b61250e826121cd565b9050602081019050919050565b82818337600083830152505050565b600061253d612538846124ea565b6124cf565b9050828152602081018484840111156125595761255861246a565b5b61256484828561251b565b509392505050565b600082601f83011261258157612580612465565b5b813561259184826020860161252a565b91505092915050565b600080604083850312156125b1576125b0612243565b5b60006125bf85828601612296565b925050602083013567ffffffffffffffff8111156125e0576125df612248565b5b6125ec8582860161256c565b9150509250929050565b6000819050919050565b612609816125f6565b82525050565b60006020820190506126246000830184612600565b92915050565b6126338161226d565b82525050565b600060208201905061264e600083018461262a565b92915050565b6000806040838503121561266b5761266a612243565b5b600061267985828601612296565b925050602061268a85828601612296565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126db57607f821691505b6020821081036126ee576126ed612694565b5b50919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612750602c83612192565b915061275b826126f4565b604082019050919050565b6000602082019050818103600083015261277f81612743565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006127e2602c83612192565b91506127ed82612786565b604082019050919050565b60006020820190508181036000830152612811816127d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612852826122ab565b915061285d836122ab565b925082820190508082111561287557612874612818565b5b92915050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006128d7603883612192565b91506128e28261287b565b604082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f52656e6f756e6365204f776e65727368697020666f7262696464656e00000000600082015250565b6000612943601c83612192565b915061294e8261290d565b602082019050919050565b6000602082019050818103600083015261297281612936565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006129d5602e83612192565b91506129e082612979565b604082019050919050565b60006020820190508181036000830152612a04816129c8565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612a6257808604811115612a3e57612a3d612818565b5b6001851615612a4d5780820291505b8081029050612a5b85612a0b565b9450612a22565b94509492505050565b600082612a7b5760019050612b37565b81612a895760009050612b37565b8160018114612a9f5760028114612aa957612ad8565b6001915050612b37565b60ff841115612abb57612aba612818565b5b8360020a915084821115612ad257612ad1612818565b5b50612b37565b5060208310610133831016604e8410600b8410161715612b0d5782820a905083811115612b0857612b07612818565b5b612b37565b612b1a8484846001612a18565b92509050818404811115612b3157612b30612818565b5b81810290505b9392505050565b6000612b49826122ab565b9150612b54836123d4565b9250612b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612a6b565b905092915050565b6000612b94826122ab565b9150612b9f836122ab565b9250828202612bad816122ab565b91508282048414831517612bc457612bc3612818565b5b5092915050565b6000819050919050565b6000819050919050565b6000612bfa612bf5612bf084612bcb565b612bd5565b6123d4565b9050919050565b612c0a81612bdf565b82525050565b6000602082019050612c256000830184612c01565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c87602583612192565b9150612c9282612c2b565b604082019050919050565b60006020820190508181036000830152612cb681612c7a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d19602683612192565b9150612d2482612cbd565b604082019050919050565b60006020820190508181036000830152612d4881612d0c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612dab602483612192565b9150612db682612d4f565b604082019050919050565b60006020820190508181036000830152612dda81612d9e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e3d602283612192565b9150612e4882612de1565b604082019050919050565b60006020820190508181036000830152612e6c81612e30565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ea9601d83612192565b9150612eb482612e73565b602082019050919050565b60006020820190508181036000830152612ed881612e9c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f3b602583612192565b9150612f4682612edf565b604082019050919050565b60006020820190508181036000830152612f6a81612f2e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612fcd602383612192565b9150612fd882612f71565b604082019050919050565b60006020820190508181036000830152612ffc81612fc0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061305f602683612192565b915061306a82613003565b604082019050919050565b6000602082019050818103600083015261308e81613052565b9050919050565b61309e816125f6565b81146130a957600080fd5b50565b6000815190506130bb81613095565b92915050565b6000602082840312156130d7576130d6612243565b5b60006130e5848285016130ac565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061314a602e83612192565b9150613155826130ee565b604082019050919050565b600060208201905081810360008301526131798161313d565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006131dc602983612192565b91506131e782613180565b604082019050919050565b6000602082019050818103600083015261320b816131cf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613248602083612192565b915061325382613212565b602082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006132da602183612192565b91506132e58261327e565b604082019050919050565b60006020820190508181036000830152613309816132cd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061336c602283612192565b915061337782613310565b604082019050919050565b6000602082019050818103600083015261339b8161335f565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006133fe602b83612192565b9150613409826133a2565b604082019050919050565b6000602082019050818103600083015261342d816133f1565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061346a601f83612192565b915061347582613434565b602082019050919050565b600060208201905081810360008301526134998161345d565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006134fc602d83612192565b9150613507826134a0565b604082019050919050565b6000602082019050818103600083015261352b816134ef565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613568601483612192565b915061357382613532565b602082019050919050565b600060208201905081810360008301526135978161355b565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135c3565b61360a86836135c3565b95508019841693508086168417925050509392505050565b600061363d613638613633846122ab565b612bd5565b6122ab565b9050919050565b6000819050919050565b61365783613622565b61366b61366382613644565b8484546135d0565b825550505050565b600090565b613680613673565b61368b81848461364e565b505050565b5b818110156136af576136a4600082613678565b600181019050613691565b5050565b601f8211156136f4576136c58161359e565b6136ce846135b3565b810160208510156136dd578190505b6136f16136e9856135b3565b830182613690565b50505b505050565b600082821c905092915050565b6000613717600019846008026136f9565b1980831691505092915050565b60006137308383613706565b9150826002028217905092915050565b61374982612187565b67ffffffffffffffff8111156137625761376161246f565b5b61376c82546126c3565b6137778282856136b3565b600060209050601f8311600181146137aa5760008415613798578287015190505b6137a28582613724565b86555061380a565b601f1984166137b88661359e565b60005b828110156137e0578489015182556001820191506020850194506020810190506137bb565b868310156137fd57848901516137f9601f891682613706565b8355505b6001600288020188555050505b505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613848601083612192565b915061385382613812565b602082019050919050565b600060208201905081810360008301526138778161383b565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006138da602683612192565b91506138e58261387e565b604082019050919050565b60006020820190508181036000830152613909816138cd565b9050919050565b600081519050919050565b600081905092915050565b600061393182613910565b61393b818561391b565b935061394b8185602086016121a3565b80840191505092915050565b60006139638284613926565b91508190509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201068454cd516a87d0dd9c998f037c81f8b298912d7dfd6caf51b16a35244e41e64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106101405760003560e01c80635c975abb116100b65780638da5cb5b1161006f5780638da5cb5b1461040357806395d89b411461042e578063a457c2d714610459578063a9059cbb14610496578063dd62ed3e146104d3578063f2fde38b1461051057610140565b80635c975abb1461032d57806370a0823114610358578063715018a61461039557806379cc6790146103ac5780638129fc1c146103d55780638456cb59146103ec57610140565b80633659cfe6116101085780633659cfe61461024057806339509351146102695780633f4ba83a146102a657806342966c68146102bd5780634f1ef286146102e657806352d1902d1461030257610140565b806306fdde0314610145578063095ea7b31461017057806318160ddd146101ad57806323b872dd146101d8578063313ce56714610215575b600080fd5b34801561015157600080fd5b5061015a610539565b6040516101679190612217565b60405180910390f35b34801561017c57600080fd5b50610197600480360381019061019291906122e1565b6105cb565b6040516101a4919061233c565b60405180910390f35b3480156101b957600080fd5b506101c26105ee565b6040516101cf9190612366565b60405180910390f35b3480156101e457600080fd5b506101ff60048036038101906101fa9190612381565b6105f8565b60405161020c919061233c565b60405180910390f35b34801561022157600080fd5b5061022a610627565b60405161023791906123f0565b60405180910390f35b34801561024c57600080fd5b506102676004803603810190610262919061240b565b610630565b005b34801561027557600080fd5b50610290600480360381019061028b91906122e1565b6107b8565b60405161029d919061233c565b60405180910390f35b3480156102b257600080fd5b506102bb6107ef565b005b3480156102c957600080fd5b506102e460048036038101906102df9190612438565b610801565b005b61030060048036038101906102fb919061259a565b610815565b005b34801561030e57600080fd5b50610317610951565b604051610324919061260f565b60405180910390f35b34801561033957600080fd5b50610342610a0a565b60405161034f919061233c565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a919061240b565b610a21565b60405161038c9190612366565b60405180910390f35b3480156103a157600080fd5b506103aa610a6a565b005b3480156103b857600080fd5b506103d360048036038101906103ce91906122e1565b610aad565b005b3480156103e157600080fd5b506103ea610acd565b005b3480156103f857600080fd5b50610401610cd8565b005b34801561040f57600080fd5b50610418610cea565b6040516104259190612639565b60405180910390f35b34801561043a57600080fd5b50610443610d14565b6040516104509190612217565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b91906122e1565b610da6565b60405161048d919061233c565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b891906122e1565b610e1d565b6040516104ca919061233c565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f59190612654565b610e40565b6040516105079190612366565b60405180910390f35b34801561051c57600080fd5b506105376004803603810190610532919061240b565b610ec7565b005b606060368054610548906126c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610574906126c3565b80156105c15780601f10610596576101008083540402835291602001916105c1565b820191906000526020600020905b8154815290600101906020018083116105a457829003601f168201915b5050505050905090565b6000806105d6610f4a565b90506105e3818585610f52565b600191505092915050565b6000603554905090565b600080610603610f4a565b905061061085828561111b565b61061b8585856111a7565b60019150509392505050565b60006002905090565b7f0000000000000000000000001d5fd72c02cb52cec1395e5639e0c41b2174db0773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b590612766565b60405180910390fd5b7f0000000000000000000000001d5fd72c02cb52cec1395e5639e0c41b2174db0773ffffffffffffffffffffffffffffffffffffffff166106fd611420565b73ffffffffffffffffffffffffffffffffffffffff1614610753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074a906127f8565b60405180910390fd5b61075c81611477565b6107b581600067ffffffffffffffff81111561077b5761077a61246f565b5b6040519080825280601f01601f1916602001820160405280156107ad5781602001600182028036833780820191505090505b506000611482565b50565b6000806107c3610f4a565b90506107e48185856107d58589610e40565b6107df9190612847565b610f52565b600191505092915050565b6107f76115f0565b6107ff61166e565b565b61081261080c610f4a565b826116d1565b50565b7f0000000000000000000000001d5fd72c02cb52cec1395e5639e0c41b2174db0773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90612766565b60405180910390fd5b7f0000000000000000000000001d5fd72c02cb52cec1395e5639e0c41b2174db0773ffffffffffffffffffffffffffffffffffffffff166108e2611420565b73ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906127f8565b60405180910390fd5b61094182611477565b61094d82826001611482565b5050565b60007f0000000000000000000000001d5fd72c02cb52cec1395e5639e0c41b2174db0773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146109e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d8906128ed565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000609760009054906101000a900460ff16905090565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a726115f0565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa490612959565b60405180910390fd5b610abf82610ab9610f4a565b8361111b565b610ac982826116d1565b5050565b60008060019054906101000a900460ff16159050808015610afe5750600160008054906101000a900460ff1660ff16105b80610b2b5750610b0d306118a0565b158015610b2a5750600160008054906101000a900460ff1660ff16145b5b610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b61906129eb565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610ba7576001600060016101000a81548160ff0219169083151502179055505b610c1b6040518060400160405280601a81526020017f4d657461547261636520476f7665726e616e636520546f6b656e0000000000008152506040518060400160405280600381526020017f54524300000000000000000000000000000000000000000000000000000000008152506118c3565b610c23611920565b610c2b611971565b610c336119ca565b610c3b611a23565b610c7c73acfa62804d53875c2a25b586a874f7ec6f65788a610c5b610627565b600a610c679190612b3e565b64012a05f200610c779190612b89565b611a74565b8015610cd55760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610ccc9190612c10565b60405180910390a15b50565b610ce06115f0565b610ce8611bcb565b565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060378054610d23906126c3565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4f906126c3565b8015610d9c5780601f10610d7157610100808354040283529160200191610d9c565b820191906000526020600020905b815481529060010190602001808311610d7f57829003601f168201915b5050505050905090565b600080610db1610f4a565b90506000610dbf8286610e40565b905083811015610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90612c9d565b60405180910390fd5b610e118286868403610f52565b60019250505092915050565b600080610e28610f4a565b9050610e358185856111a7565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610ecf6115f0565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590612d2f565b60405180910390fd5b610f4781611c2e565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890612dc1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102790612e53565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161110e9190612366565b60405180910390a3505050565b60006111278484610e40565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146111a15781811015611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a90612ebf565b60405180910390fd5b6111a08484848403610f52565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120d90612f51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90612fe3565b60405180910390fd5b611290838383611cf4565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130e90613075565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114079190612366565b60405180910390a361141a848484611d0c565b50505050565b600061144e7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d11565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61147f6115f0565b50565b6114ae7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d1b565b60000160009054906101000a900460ff16156114d2576114cd83611d25565b6115eb565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561153a57506040513d601f19601f8201168201806040525081019061153791906130c1565b60015b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157090613160565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d5906131f2565b60405180910390fd5b506115ea838383611dde565b5b505050565b6115f8610f4a565b73ffffffffffffffffffffffffffffffffffffffff16611616610cea565b73ffffffffffffffffffffffffffffffffffffffff161461166c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116639061325e565b60405180910390fd5b565b611676611e0a565b6000609760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6116ba610f4a565b6040516116c79190612639565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611740576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611737906132f0565b60405180910390fd5b61174c82600083611cf4565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90613382565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118879190612366565b60405180910390a361189b83600084611d0c565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190990613414565b60405180910390fd5b61191c8282611e53565b5050565b600060019054906101000a900460ff1661196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690613414565b60405180910390fd5b565b600060019054906101000a900460ff166119c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b790613414565b60405180910390fd5b6119c8611ec6565b565b600060019054906101000a900460ff16611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090613414565b60405180910390fd5b611a21611f32565b565b600060019054906101000a900460ff16611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990613414565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ada90613480565b60405180910390fd5b611aef60008383611cf4565b8060356000828254611b019190612847565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bb39190612366565b60405180910390a3611bc760008383611d0c565b5050565b611bd3611f93565b6001609760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c17610f4a565b604051611c249190612639565b60405180910390a1565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611cfc611f93565b611d07838383611fdd565b505050565b505050565b6000819050919050565b6000819050919050565b611d2e816118a0565b611d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6490613512565b60405180910390fd5b80611d9a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d11565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611de783611fe2565b600082511180611df45750805b15611e0557611e038383612031565b505b505050565b611e12610a0a565b611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e489061357e565b60405180910390fd5b565b600060019054906101000a900460ff16611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990613414565b60405180910390fd5b8160369081611eb19190613740565b508060379081611ec19190613740565b505050565b600060019054906101000a900460ff16611f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0c90613414565b60405180910390fd5b6000609760006101000a81548160ff021916908315150217905550565b600060019054906101000a900460ff16611f81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7890613414565b60405180910390fd5b611f91611f8c610f4a565b611c2e565b565b611f9b610a0a565b15611fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd29061385e565b60405180910390fd5b565b505050565b611feb81611d25565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b606061203c836118a0565b61207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906138f0565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516120a39190613957565b600060405180830381855af49150503d80600081146120de576040519150601f19603f3d011682016040523d82523d6000602084013e6120e3565b606091505b509150915061210b828260405180606001604052806027815260200161396f60279139612115565b9250505092915050565b6060831561212557829050612130565b61212f8383612137565b5b9392505050565b60008251111561214a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217e9190612217565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b838110156121c15780820151818401526020810190506121a6565b60008484015250505050565b6000601f19601f8301169050919050565b60006121e982612187565b6121f38185612192565b93506122038185602086016121a3565b61220c816121cd565b840191505092915050565b6000602082019050818103600083015261223181846121de565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006122788261224d565b9050919050565b6122888161226d565b811461229357600080fd5b50565b6000813590506122a58161227f565b92915050565b6000819050919050565b6122be816122ab565b81146122c957600080fd5b50565b6000813590506122db816122b5565b92915050565b600080604083850312156122f8576122f7612243565b5b600061230685828601612296565b9250506020612317858286016122cc565b9150509250929050565b60008115159050919050565b61233681612321565b82525050565b6000602082019050612351600083018461232d565b92915050565b612360816122ab565b82525050565b600060208201905061237b6000830184612357565b92915050565b60008060006060848603121561239a57612399612243565b5b60006123a886828701612296565b93505060206123b986828701612296565b92505060406123ca868287016122cc565b9150509250925092565b600060ff82169050919050565b6123ea816123d4565b82525050565b600060208201905061240560008301846123e1565b92915050565b60006020828403121561242157612420612243565b5b600061242f84828501612296565b91505092915050565b60006020828403121561244e5761244d612243565b5b600061245c848285016122cc565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6124a7826121cd565b810181811067ffffffffffffffff821117156124c6576124c561246f565b5b80604052505050565b60006124d9612239565b90506124e5828261249e565b919050565b600067ffffffffffffffff8211156125055761250461246f565b5b61250e826121cd565b9050602081019050919050565b82818337600083830152505050565b600061253d612538846124ea565b6124cf565b9050828152602081018484840111156125595761255861246a565b5b61256484828561251b565b509392505050565b600082601f83011261258157612580612465565b5b813561259184826020860161252a565b91505092915050565b600080604083850312156125b1576125b0612243565b5b60006125bf85828601612296565b925050602083013567ffffffffffffffff8111156125e0576125df612248565b5b6125ec8582860161256c565b9150509250929050565b6000819050919050565b612609816125f6565b82525050565b60006020820190506126246000830184612600565b92915050565b6126338161226d565b82525050565b600060208201905061264e600083018461262a565b92915050565b6000806040838503121561266b5761266a612243565b5b600061267985828601612296565b925050602061268a85828601612296565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806126db57607f821691505b6020821081036126ee576126ed612694565b5b50919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b6000612750602c83612192565b915061275b826126f4565b604082019050919050565b6000602082019050818103600083015261277f81612743565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b60006127e2602c83612192565b91506127ed82612786565b604082019050919050565b60006020820190508181036000830152612811816127d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612852826122ab565b915061285d836122ab565b925082820190508082111561287557612874612818565b5b92915050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b60006128d7603883612192565b91506128e28261287b565b604082019050919050565b60006020820190508181036000830152612906816128ca565b9050919050565b7f52656e6f756e6365204f776e65727368697020666f7262696464656e00000000600082015250565b6000612943601c83612192565b915061294e8261290d565b602082019050919050565b6000602082019050818103600083015261297281612936565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b60006129d5602e83612192565b91506129e082612979565b604082019050919050565b60006020820190508181036000830152612a04816129c8565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612a6257808604811115612a3e57612a3d612818565b5b6001851615612a4d5780820291505b8081029050612a5b85612a0b565b9450612a22565b94509492505050565b600082612a7b5760019050612b37565b81612a895760009050612b37565b8160018114612a9f5760028114612aa957612ad8565b6001915050612b37565b60ff841115612abb57612aba612818565b5b8360020a915084821115612ad257612ad1612818565b5b50612b37565b5060208310610133831016604e8410600b8410161715612b0d5782820a905083811115612b0857612b07612818565b5b612b37565b612b1a8484846001612a18565b92509050818404811115612b3157612b30612818565b5b81810290505b9392505050565b6000612b49826122ab565b9150612b54836123d4565b9250612b817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612a6b565b905092915050565b6000612b94826122ab565b9150612b9f836122ab565b9250828202612bad816122ab565b91508282048414831517612bc457612bc3612818565b5b5092915050565b6000819050919050565b6000819050919050565b6000612bfa612bf5612bf084612bcb565b612bd5565b6123d4565b9050919050565b612c0a81612bdf565b82525050565b6000602082019050612c256000830184612c01565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612c87602583612192565b9150612c9282612c2b565b604082019050919050565b60006020820190508181036000830152612cb681612c7a565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612d19602683612192565b9150612d2482612cbd565b604082019050919050565b60006020820190508181036000830152612d4881612d0c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612dab602483612192565b9150612db682612d4f565b604082019050919050565b60006020820190508181036000830152612dda81612d9e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612e3d602283612192565b9150612e4882612de1565b604082019050919050565b60006020820190508181036000830152612e6c81612e30565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ea9601d83612192565b9150612eb482612e73565b602082019050919050565b60006020820190508181036000830152612ed881612e9c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612f3b602583612192565b9150612f4682612edf565b604082019050919050565b60006020820190508181036000830152612f6a81612f2e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612fcd602383612192565b9150612fd882612f71565b604082019050919050565b60006020820190508181036000830152612ffc81612fc0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061305f602683612192565b915061306a82613003565b604082019050919050565b6000602082019050818103600083015261308e81613052565b9050919050565b61309e816125f6565b81146130a957600080fd5b50565b6000815190506130bb81613095565b92915050565b6000602082840312156130d7576130d6612243565b5b60006130e5848285016130ac565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061314a602e83612192565b9150613155826130ee565b604082019050919050565b600060208201905081810360008301526131798161313d565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006131dc602983612192565b91506131e782613180565b604082019050919050565b6000602082019050818103600083015261320b816131cf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613248602083612192565b915061325382613212565b602082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006132da602183612192565b91506132e58261327e565b604082019050919050565b60006020820190508181036000830152613309816132cd565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061336c602283612192565b915061337782613310565b604082019050919050565b6000602082019050818103600083015261339b8161335f565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006133fe602b83612192565b9150613409826133a2565b604082019050919050565b6000602082019050818103600083015261342d816133f1565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061346a601f83612192565b915061347582613434565b602082019050919050565b600060208201905081810360008301526134998161345d565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b60006134fc602d83612192565b9150613507826134a0565b604082019050919050565b6000602082019050818103600083015261352b816134ef565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b6000613568601483612192565b915061357382613532565b602082019050919050565b600060208201905081810360008301526135978161355b565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135c3565b61360a86836135c3565b95508019841693508086168417925050509392505050565b600061363d613638613633846122ab565b612bd5565b6122ab565b9050919050565b6000819050919050565b61365783613622565b61366b61366382613644565b8484546135d0565b825550505050565b600090565b613680613673565b61368b81848461364e565b505050565b5b818110156136af576136a4600082613678565b600181019050613691565b5050565b601f8211156136f4576136c58161359e565b6136ce846135b3565b810160208510156136dd578190505b6136f16136e9856135b3565b830182613690565b50505b505050565b600082821c905092915050565b6000613717600019846008026136f9565b1980831691505092915050565b60006137308383613706565b9150826002028217905092915050565b61374982612187565b67ffffffffffffffff8111156137625761376161246f565b5b61376c82546126c3565b6137778282856136b3565b600060209050601f8311600181146137aa5760008415613798578287015190505b6137a28582613724565b86555061380a565b601f1984166137b88661359e565b60005b828110156137e0578489015182556001820191506020850194506020810190506137bb565b868310156137fd57848901516137f9601f891682613706565b8355505b6001600288020188555050505b505050505050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000613848601083612192565b915061385382613812565b602082019050919050565b600060208201905081810360008301526138778161383b565b9050919050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006138da602683612192565b91506138e58261387e565b604082019050919050565b60006020820190508181036000830152613909816138cd565b9050919050565b600081519050919050565b600081905092915050565b600061393182613910565b61393b818561391b565b935061394b8185602086016121a3565b80840191505092915050565b60006139638284613926565b91508190509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212201068454cd516a87d0dd9c998f037c81f8b298912d7dfd6caf51b16a35244e41e64736f6c63430008110033
Deployed Bytecode Sourcemap
59852:1256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46614:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48965:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47734:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49746:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60761:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31238:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50450:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60479:67;;;;;;;;;;;;;:::i;:::-;;58912:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31697:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30916:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39210:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47905:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60985:120;;;;;;;;;;;;;:::i;:::-;;59322:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60075:325;;;;;;;;;;;;;:::i;:::-;;60408:63;;;;;;;;;;;;;:::i;:::-;;35556:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46833:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51191:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48238:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48494:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36462:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46614:100;46668:13;46701:5;46694:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46614:100;:::o;48965:201::-;49048:4;49065:13;49081:12;:10;:12::i;:::-;49065:28;;49104:32;49113:5;49120:7;49129:6;49104:8;:32::i;:::-;49154:4;49147:11;;;48965:201;;;;:::o;47734:108::-;47795:7;47822:12;;47815:19;;47734:108;:::o;49746:295::-;49877:4;49894:15;49912:12;:10;:12::i;:::-;49894:30;;49935:38;49951:4;49957:7;49966:6;49935:15;:38::i;:::-;49984:27;49994:4;50000:2;50004:6;49984:9;:27::i;:::-;50029:4;50022:11;;;49746:295;;;;;:::o;60761:92::-;60819:5;60844:1;60837:8;;60761:92;:::o;31238:200::-;29786:6;29769:23;;29777:4;29769:23;;;29761:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29884:6;29860:30;;:20;:18;:20::i;:::-;:30;;;29852:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31322:36:::1;31340:17;31322;:36::i;:::-;31369:61;31391:17;31420:1;31410:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31424:5;31369:21;:61::i;:::-;31238:200:::0;:::o;50450:238::-;50538:4;50555:13;50571:12;:10;:12::i;:::-;50555:28;;50594:64;50603:5;50610:7;50647:10;50619:25;50629:5;50636:7;50619:9;:25::i;:::-;:38;;;;:::i;:::-;50594:8;:64::i;:::-;50676:4;50669:11;;;50450:238;;;;:::o;60479:67::-;35442:13;:11;:13::i;:::-;60528:10:::1;:8;:10::i;:::-;60479:67::o:0;58912:91::-;58968:27;58974:12;:10;:12::i;:::-;58988:6;58968:5;:27::i;:::-;58912:91;:::o;31697:225::-;29786:6;29769:23;;29777:4;29769:23;;;29761:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29884:6;29860:30;;:20;:18;:20::i;:::-;:30;;;29852:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31815:36:::1;31833:17;31815;:36::i;:::-;31862:52;31884:17;31903:4;31909;31862:21;:52::i;:::-;31697:225:::0;;:::o;30916:133::-;30994:7;30231:6;30214:23;;30222:4;30214:23;;;30206:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;21607:66:::1;31021:20;;31014:27;;30916:133:::0;:::o;39210:86::-;39257:4;39281:7;;;;;;;;;;;39274:14;;39210:86;:::o;47905:127::-;47979:7;48006:9;:18;48016:7;48006:18;;;;;;;;;;;;;;;;47999:25;;47905:127;;;:::o;60985:120::-;35442:13;:11;:13::i;:::-;61059:38:::1;;;;;;;;;;:::i;:::-;;;;;;;;59322:164:::0;59399:46;59415:7;59424:12;:10;:12::i;:::-;59438:6;59399:15;:46::i;:::-;59456:22;59462:7;59471:6;59456:5;:22::i;:::-;59322:164;;:::o;60075:325::-;16981:19;17004:13;;;;;;;;;;;17003:14;16981:36;;17051:14;:34;;;;;17084:1;17069:12;;;;;;;;;;:16;;;17051:34;17050:108;;;;17092:44;17130:4;17092:29;:44::i;:::-;17091:45;:66;;;;;17156:1;17140:12;;;;;;;;;;:17;;;17091:66;17050:108;17028:204;;;;;;;;;;;;:::i;:::-;;;;;;;;;17258:1;17243:12;;:16;;;;;;;;;;;;;;;;;;17274:14;17270:67;;;17321:4;17305:13;;:20;;;;;;;;;;;;;;;;;;17270:67;60127:49:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:49::i;:::-;60187:22;:20;:22::i;:::-;60220:17;:15;:17::i;:::-;60248:16;:14;:16::i;:::-;60275:24;:22;:24::i;:::-;60312:80;60318:42;60381:10;:8;:10::i;:::-;60375:2;:16;;;;:::i;:::-;60362:10;:29;;;;:::i;:::-;60312:5;:80::i;:::-;17363:14:::0;17359:102;;;17410:5;17394:13;;:21;;;;;;;;;;;;;;;;;;17435:14;17447:1;17435:14;;;;;;:::i;:::-;;;;;;;;17359:102;16970:498;60075:325::o;60408:63::-;35442:13;:11;:13::i;:::-;60455:8:::1;:6;:8::i;:::-;60408:63::o:0;35556:87::-;35602:7;35629:6;;;;;;;;;;;35622:13;;35556:87;:::o;46833:104::-;46889:13;46922:7;46915:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46833:104;:::o;51191:436::-;51284:4;51301:13;51317:12;:10;:12::i;:::-;51301:28;;51340:24;51367:25;51377:5;51384:7;51367:9;:25::i;:::-;51340:52;;51431:15;51411:16;:35;;51403:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;51524:60;51533:5;51540:7;51568:15;51549:16;:34;51524:8;:60::i;:::-;51615:4;51608:11;;;;51191:436;;;;:::o;48238:193::-;48317:4;48334:13;48350:12;:10;:12::i;:::-;48334:28;;48373;48383:5;48390:2;48394:6;48373:9;:28::i;:::-;48419:4;48412:11;;;48238:193;;;;:::o;48494:151::-;48583:7;48610:11;:18;48622:5;48610:18;;;;;;;;;;;;;;;:27;48629:7;48610:27;;;;;;;;;;;;;;;;48603:34;;48494:151;;;;:::o;36462:201::-;35442:13;:11;:13::i;:::-;36571:1:::1;36551:22;;:8;:22;;::::0;36543:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36627:28;36646:8;36627:18;:28::i;:::-;36462:201:::0;:::o;33594:98::-;33647:7;33674:10;33667:17;;33594:98;:::o;55218:380::-;55371:1;55354:19;;:5;:19;;;55346:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55452:1;55433:21;;:7;:21;;;55425:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55536:6;55506:11;:18;55518:5;55506:18;;;;;;;;;;;;;;;:27;55525:7;55506:27;;;;;;;;;;;;;;;:36;;;;55574:7;55558:32;;55567:5;55558:32;;;55583:6;55558:32;;;;;;:::i;:::-;;;;;;;;55218:380;;;:::o;55889:453::-;56024:24;56051:25;56061:5;56068:7;56051:9;:25::i;:::-;56024:52;;56111:17;56091:16;:37;56087:248;;56173:6;56153:16;:26;;56145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56257:51;56266:5;56273:7;56301:6;56282:16;:25;56257:8;:51::i;:::-;56087:248;56013:329;55889:453;;;:::o;52097:840::-;52244:1;52228:18;;:4;:18;;;52220:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52321:1;52307:16;;:2;:16;;;52299:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;52376:38;52397:4;52403:2;52407:6;52376:20;:38::i;:::-;52427:19;52449:9;:15;52459:4;52449:15;;;;;;;;;;;;;;;;52427:37;;52498:6;52483:11;:21;;52475:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;52615:6;52601:11;:20;52583:9;:15;52593:4;52583:15;;;;;;;;;;;;;;;:38;;;;52818:6;52801:9;:13;52811:2;52801:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;52868:2;52853:26;;52862:4;52853:26;;;52872:6;52853:26;;;;;;:::i;:::-;;;;;;;;52892:37;52912:4;52918:2;52922:6;52892:19;:37::i;:::-;52209:728;52097:840;;;:::o;21757:153::-;21810:7;21837:59;21607:66;21875:20;;21837:37;:59::i;:::-;:65;;;;;;;;;;;;21830:72;;21757:153;:::o;60861:116::-;35442:13;:11;:13::i;:::-;60861:116;:::o;23175:992::-;23629:53;21259:66;23667:14;;23629:37;:53::i;:::-;:59;;;;;;;;;;;;23625:535;;;23705:37;23724:17;23705:18;:37::i;:::-;23625:535;;;23808:17;23779:61;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23775:306;;24009:56;;;;;;;;;;:::i;:::-;;;;;;;;23775:306;21607:66;23901:20;;23893:4;:28;23885:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;23843:140;24095:53;24113:17;24132:4;24138:9;24095:17;:53::i;:::-;23625:535;23175:992;;;:::o;35721:132::-;35796:12;:10;:12::i;:::-;35785:23;;:7;:5;:7::i;:::-;:23;;;35777:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35721:132::o;40065:120::-;39074:16;:14;:16::i;:::-;40134:5:::1;40124:7;;:15;;;;;;;;;;;;;;;;;;40155:22;40164:12;:10;:12::i;:::-;40155:22;;;;;;:::i;:::-;;;;;;;;40065:120::o:0;54105:675::-;54208:1;54189:21;;:7;:21;;;54181:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;54261:49;54282:7;54299:1;54303:6;54261:20;:49::i;:::-;54323:22;54348:9;:18;54358:7;54348:18;;;;;;;;;;;;;;;;54323:43;;54403:6;54385:14;:24;;54377:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;54522:6;54505:14;:23;54484:9;:18;54494:7;54484:18;;;;;;;;;;;;;;;:44;;;;54639:6;54623:12;;:22;;;;;;;;;;;54700:1;54674:37;;54683:7;54674:37;;;54704:6;54674:37;;;;;;:::i;:::-;;;;;;;;54724:48;54744:7;54761:1;54765:6;54724:19;:48::i;:::-;54170:610;54105:675;;:::o;6347:326::-;6407:4;6664:1;6642:7;:19;;;:23;6635:30;;6347:326;;;:::o;46225:149::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46328:38:::1;46351:5;46358:7;46328:22;:38::i;:::-;46225:149:::0;;:::o;58648:66::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;58648:66::o;38380:99::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38444:27:::1;:25;:27::i;:::-;38380:99::o:0;35099:97::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35162:26:::1;:24;:26::i;:::-;35099:97::o:0;28914:68::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;28914:68::o;53224:548::-;53327:1;53308:21;;:7;:21;;;53300:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;53378:49;53407:1;53411:7;53420:6;53378:20;:49::i;:::-;53456:6;53440:12;;:22;;;;;;;:::i;:::-;;;;;;;;53633:6;53611:9;:18;53621:7;53611:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;53687:7;53666:37;;53683:1;53666:37;;;53696:6;53666:37;;;;;;:::i;:::-;;;;;;;;53716:48;53744:1;53748:7;53757:6;53716:19;:48::i;:::-;53224:548;;:::o;39806:118::-;38815:19;:17;:19::i;:::-;39876:4:::1;39866:7;;:14;;;;;;;;;;;;;;;;;;39896:20;39903:12;:10;:12::i;:::-;39896:20;;;;;;:::i;:::-;;;;;;;;39806:118::o:0;36823:191::-;36897:16;36916:6;;;;;;;;;;;36897:25;;36942:8;36933:6;;:17;;;;;;;;;;;;;;;;;;36997:8;36966:40;;36987:8;36966:40;;;;;;;;;;;;36886:128;36823:191;:::o;60554:199::-;38815:19;:17;:19::i;:::-;60701:44:::1;60728:4;60734:2;60738:6;60701:26;:44::i;:::-;60554:199:::0;;;:::o;57671:124::-;;;;:::o;1726:195::-;1787:21;1899:4;1889:14;;1726:195;;;:::o;2024:::-;2085:21;2197:4;2187:14;;2024:195;;;:::o;22006:284::-;22088:48;22118:17;22088:29;:48::i;:::-;22080:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;22265:17;22197:59;21607:66;22235:20;;22197:37;:59::i;:::-;:65;;;:85;;;;;;;;;;;;;;;;;;22006:284;:::o;22699:297::-;22842:29;22853:17;22842:10;:29::i;:::-;22900:1;22886:4;:11;:15;:28;;;;22905:9;22886:28;22882:107;;;22931:46;22953:17;22972:4;22931:21;:46::i;:::-;;22882:107;22699:297;;;:::o;39554:108::-;39621:8;:6;:8::i;:::-;39613:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;39554:108::o;46382:162::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46503:5:::1;46495;:13;;;;;;:::i;:::-;;46529:7;46519;:17;;;;;;:::i;:::-;;46382:162:::0;;:::o;38487:97::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;38571:5:::1;38561:7;;:15;;;;;;;;;;;;;;;;;;38487:97::o:0;35204:113::-;19124:13;;;;;;;;;;;19116:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35277:32:::1;35296:12;:10;:12::i;:::-;35277:18;:32::i;:::-;35204:113::o:0;39369:108::-;39440:8;:6;:8::i;:::-;39439:9;39431:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;39369:108::o;56942:125::-;;;;:::o;22403:155::-;22470:37;22489:17;22470:18;:37::i;:::-;22532:17;22523:27;;;;;;;;;;;;22403:155;:::o;27172:461::-;27255:12;27288:37;27318:6;27288:29;:37::i;:::-;27280:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;27442:12;27456:23;27483:6;:19;;27503:4;27483:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27441:67;;;;27526:99;27562:7;27571:10;27526:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;27519:106;;;;27172:461;;;;:::o;12757:305::-;12907:12;12936:7;12932:123;;;12967:10;12960:17;;;;12932:123;13010:33;13018:10;13030:12;13010:7;:33::i;:::-;12757:305;;;;;;:::o;13070:552::-;13251:1;13231:10;:17;:21;13227:388;;;13463:10;13457:17;13520:15;13507:10;13503:2;13499:19;13492:44;13227:388;13590:12;13583:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:99:1;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:117::-;5632:1;5629;5622:12;5646:117;5755:1;5752;5745:12;5769:180;5817:77;5814:1;5807:88;5914:4;5911:1;5904:15;5938:4;5935:1;5928:15;5955:281;6038:27;6060:4;6038:27;:::i;:::-;6030:6;6026:40;6168:6;6156:10;6153:22;6132:18;6120:10;6117:34;6114:62;6111:88;;;6179:18;;:::i;:::-;6111:88;6219:10;6215:2;6208:22;5998:238;5955:281;;:::o;6242:129::-;6276:6;6303:20;;:::i;:::-;6293:30;;6332:33;6360:4;6352:6;6332:33;:::i;:::-;6242:129;;;:::o;6377:307::-;6438:4;6528:18;6520:6;6517:30;6514:56;;;6550:18;;:::i;:::-;6514:56;6588:29;6610:6;6588:29;:::i;:::-;6580:37;;6672:4;6666;6662:15;6654:23;;6377:307;;;:::o;6690:146::-;6787:6;6782:3;6777;6764:30;6828:1;6819:6;6814:3;6810:16;6803:27;6690:146;;;:::o;6842:423::-;6919:5;6944:65;6960:48;7001:6;6960:48;:::i;:::-;6944:65;:::i;:::-;6935:74;;7032:6;7025:5;7018:21;7070:4;7063:5;7059:16;7108:3;7099:6;7094:3;7090:16;7087:25;7084:112;;;7115:79;;:::i;:::-;7084:112;7205:54;7252:6;7247:3;7242;7205:54;:::i;:::-;6925:340;6842:423;;;;;:::o;7284:338::-;7339:5;7388:3;7381:4;7373:6;7369:17;7365:27;7355:122;;7396:79;;:::i;:::-;7355:122;7513:6;7500:20;7538:78;7612:3;7604:6;7597:4;7589:6;7585:17;7538:78;:::i;:::-;7529:87;;7345:277;7284:338;;;;:::o;7628:652::-;7705:6;7713;7762:2;7750:9;7741:7;7737:23;7733:32;7730:119;;;7768:79;;:::i;:::-;7730:119;7888:1;7913:53;7958:7;7949:6;7938:9;7934:22;7913:53;:::i;:::-;7903:63;;7859:117;8043:2;8032:9;8028:18;8015:32;8074:18;8066:6;8063:30;8060:117;;;8096:79;;:::i;:::-;8060:117;8201:62;8255:7;8246:6;8235:9;8231:22;8201:62;:::i;:::-;8191:72;;7986:287;7628:652;;;;;:::o;8286:77::-;8323:7;8352:5;8341:16;;8286:77;;;:::o;8369:118::-;8456:24;8474:5;8456:24;:::i;:::-;8451:3;8444:37;8369:118;;:::o;8493:222::-;8586:4;8624:2;8613:9;8609:18;8601:26;;8637:71;8705:1;8694:9;8690:17;8681:6;8637:71;:::i;:::-;8493:222;;;;:::o;8721:118::-;8808:24;8826:5;8808:24;:::i;:::-;8803:3;8796:37;8721:118;;:::o;8845:222::-;8938:4;8976:2;8965:9;8961:18;8953:26;;8989:71;9057:1;9046:9;9042:17;9033:6;8989:71;:::i;:::-;8845:222;;;;:::o;9073:474::-;9141:6;9149;9198:2;9186:9;9177:7;9173:23;9169:32;9166:119;;;9204:79;;:::i;:::-;9166:119;9324:1;9349:53;9394:7;9385:6;9374:9;9370:22;9349:53;:::i;:::-;9339:63;;9295:117;9451:2;9477:53;9522:7;9513:6;9502:9;9498:22;9477:53;:::i;:::-;9467:63;;9422:118;9073:474;;;;;:::o;9553:180::-;9601:77;9598:1;9591:88;9698:4;9695:1;9688:15;9722:4;9719:1;9712:15;9739:320;9783:6;9820:1;9814:4;9810:12;9800:22;;9867:1;9861:4;9857:12;9888:18;9878:81;;9944:4;9936:6;9932:17;9922:27;;9878:81;10006:2;9998:6;9995:14;9975:18;9972:38;9969:84;;10025:18;;:::i;:::-;9969:84;9790:269;9739:320;;;:::o;10065:231::-;10205:34;10201:1;10193:6;10189:14;10182:58;10274:14;10269:2;10261:6;10257:15;10250:39;10065:231;:::o;10302:366::-;10444:3;10465:67;10529:2;10524:3;10465:67;:::i;:::-;10458:74;;10541:93;10630:3;10541:93;:::i;:::-;10659:2;10654:3;10650:12;10643:19;;10302:366;;;:::o;10674:419::-;10840:4;10878:2;10867:9;10863:18;10855:26;;10927:9;10921:4;10917:20;10913:1;10902:9;10898:17;10891:47;10955:131;11081:4;10955:131;:::i;:::-;10947:139;;10674:419;;;:::o;11099:231::-;11239:34;11235:1;11227:6;11223:14;11216:58;11308:14;11303:2;11295:6;11291:15;11284:39;11099:231;:::o;11336:366::-;11478:3;11499:67;11563:2;11558:3;11499:67;:::i;:::-;11492:74;;11575:93;11664:3;11575:93;:::i;:::-;11693:2;11688:3;11684:12;11677:19;;11336:366;;;:::o;11708:419::-;11874:4;11912:2;11901:9;11897:18;11889:26;;11961:9;11955:4;11951:20;11947:1;11936:9;11932:17;11925:47;11989:131;12115:4;11989:131;:::i;:::-;11981:139;;11708:419;;;:::o;12133:180::-;12181:77;12178:1;12171:88;12278:4;12275:1;12268:15;12302:4;12299:1;12292:15;12319:191;12359:3;12378:20;12396:1;12378:20;:::i;:::-;12373:25;;12412:20;12430:1;12412:20;:::i;:::-;12407:25;;12455:1;12452;12448:9;12441:16;;12476:3;12473:1;12470:10;12467:36;;;12483:18;;:::i;:::-;12467:36;12319:191;;;;:::o;12516:243::-;12656:34;12652:1;12644:6;12640:14;12633:58;12725:26;12720:2;12712:6;12708:15;12701:51;12516:243;:::o;12765:366::-;12907:3;12928:67;12992:2;12987:3;12928:67;:::i;:::-;12921:74;;13004:93;13093:3;13004:93;:::i;:::-;13122:2;13117:3;13113:12;13106:19;;12765:366;;;:::o;13137:419::-;13303:4;13341:2;13330:9;13326:18;13318:26;;13390:9;13384:4;13380:20;13376:1;13365:9;13361:17;13354:47;13418:131;13544:4;13418:131;:::i;:::-;13410:139;;13137:419;;;:::o;13562:178::-;13702:30;13698:1;13690:6;13686:14;13679:54;13562:178;:::o;13746:366::-;13888:3;13909:67;13973:2;13968:3;13909:67;:::i;:::-;13902:74;;13985:93;14074:3;13985:93;:::i;:::-;14103:2;14098:3;14094:12;14087:19;;13746:366;;;:::o;14118:419::-;14284:4;14322:2;14311:9;14307:18;14299:26;;14371:9;14365:4;14361:20;14357:1;14346:9;14342:17;14335:47;14399:131;14525:4;14399:131;:::i;:::-;14391:139;;14118:419;;;:::o;14543:233::-;14683:34;14679:1;14671:6;14667:14;14660:58;14752:16;14747:2;14739:6;14735:15;14728:41;14543:233;:::o;14782:366::-;14924:3;14945:67;15009:2;15004:3;14945:67;:::i;:::-;14938:74;;15021:93;15110:3;15021:93;:::i;:::-;15139:2;15134:3;15130:12;15123:19;;14782:366;;;:::o;15154:419::-;15320:4;15358:2;15347:9;15343:18;15335:26;;15407:9;15401:4;15397:20;15393:1;15382:9;15378:17;15371:47;15435:131;15561:4;15435:131;:::i;:::-;15427:139;;15154:419;;;:::o;15579:102::-;15621:8;15668:5;15665:1;15661:13;15640:34;;15579:102;;;:::o;15687:848::-;15748:5;15755:4;15779:6;15770:15;;15803:5;15794:14;;15817:712;15838:1;15828:8;15825:15;15817:712;;;15933:4;15928:3;15924:14;15918:4;15915:24;15912:50;;;15942:18;;:::i;:::-;15912:50;15992:1;15982:8;15978:16;15975:451;;;16407:4;16400:5;16396:16;16387:25;;15975:451;16457:4;16451;16447:15;16439:23;;16487:32;16510:8;16487:32;:::i;:::-;16475:44;;15817:712;;;15687:848;;;;;;;:::o;16541:1073::-;16595:5;16786:8;16776:40;;16807:1;16798:10;;16809:5;;16776:40;16835:4;16825:36;;16852:1;16843:10;;16854:5;;16825:36;16921:4;16969:1;16964:27;;;;17005:1;17000:191;;;;16914:277;;16964:27;16982:1;16973:10;;16984:5;;;17000:191;17045:3;17035:8;17032:17;17029:43;;;17052:18;;:::i;:::-;17029:43;17101:8;17098:1;17094:16;17085:25;;17136:3;17129:5;17126:14;17123:40;;;17143:18;;:::i;:::-;17123:40;17176:5;;;16914:277;;17300:2;17290:8;17287:16;17281:3;17275:4;17272:13;17268:36;17250:2;17240:8;17237:16;17232:2;17226:4;17223:12;17219:35;17203:111;17200:246;;;17356:8;17350:4;17346:19;17337:28;;17391:3;17384:5;17381:14;17378:40;;;17398:18;;:::i;:::-;17378:40;17431:5;;17200:246;17471:42;17509:3;17499:8;17493:4;17490:1;17471:42;:::i;:::-;17456:57;;;;17545:4;17540:3;17536:14;17529:5;17526:25;17523:51;;;17554:18;;:::i;:::-;17523:51;17603:4;17596:5;17592:16;17583:25;;16541:1073;;;;;;:::o;17620:281::-;17678:5;17702:23;17720:4;17702:23;:::i;:::-;17694:31;;17746:25;17762:8;17746:25;:::i;:::-;17734:37;;17790:104;17827:66;17817:8;17811:4;17790:104;:::i;:::-;17781:113;;17620:281;;;;:::o;17907:410::-;17947:7;17970:20;17988:1;17970:20;:::i;:::-;17965:25;;18004:20;18022:1;18004:20;:::i;:::-;17999:25;;18059:1;18056;18052:9;18081:30;18099:11;18081:30;:::i;:::-;18070:41;;18260:1;18251:7;18247:15;18244:1;18241:22;18221:1;18214:9;18194:83;18171:139;;18290:18;;:::i;:::-;18171:139;17955:362;17907:410;;;;:::o;18323:85::-;18368:7;18397:5;18386:16;;18323:85;;;:::o;18414:60::-;18442:3;18463:5;18456:12;;18414:60;;;:::o;18480:154::-;18536:9;18569:59;18585:42;18594:32;18620:5;18594:32;:::i;:::-;18585:42;:::i;:::-;18569:59;:::i;:::-;18556:72;;18480:154;;;:::o;18640:143::-;18733:43;18770:5;18733:43;:::i;:::-;18728:3;18721:56;18640:143;;:::o;18789:234::-;18888:4;18926:2;18915:9;18911:18;18903:26;;18939:77;19013:1;19002:9;18998:17;18989:6;18939:77;:::i;:::-;18789:234;;;;:::o;19029:224::-;19169:34;19165:1;19157:6;19153:14;19146:58;19238:7;19233:2;19225:6;19221:15;19214:32;19029:224;:::o;19259:366::-;19401:3;19422:67;19486:2;19481:3;19422:67;:::i;:::-;19415:74;;19498:93;19587:3;19498:93;:::i;:::-;19616:2;19611:3;19607:12;19600:19;;19259:366;;;:::o;19631:419::-;19797:4;19835:2;19824:9;19820:18;19812:26;;19884:9;19878:4;19874:20;19870:1;19859:9;19855:17;19848:47;19912:131;20038:4;19912:131;:::i;:::-;19904:139;;19631:419;;;:::o;20056:225::-;20196:34;20192:1;20184:6;20180:14;20173:58;20265:8;20260:2;20252:6;20248:15;20241:33;20056:225;:::o;20287:366::-;20429:3;20450:67;20514:2;20509:3;20450:67;:::i;:::-;20443:74;;20526:93;20615:3;20526:93;:::i;:::-;20644:2;20639:3;20635:12;20628:19;;20287:366;;;:::o;20659:419::-;20825:4;20863:2;20852:9;20848:18;20840:26;;20912:9;20906:4;20902:20;20898:1;20887:9;20883:17;20876:47;20940:131;21066:4;20940:131;:::i;:::-;20932:139;;20659:419;;;:::o;21084:223::-;21224:34;21220:1;21212:6;21208:14;21201:58;21293:6;21288:2;21280:6;21276:15;21269:31;21084:223;:::o;21313:366::-;21455:3;21476:67;21540:2;21535:3;21476:67;:::i;:::-;21469:74;;21552:93;21641:3;21552:93;:::i;:::-;21670:2;21665:3;21661:12;21654:19;;21313:366;;;:::o;21685:419::-;21851:4;21889:2;21878:9;21874:18;21866:26;;21938:9;21932:4;21928:20;21924:1;21913:9;21909:17;21902:47;21966:131;22092:4;21966:131;:::i;:::-;21958:139;;21685:419;;;:::o;22110:221::-;22250:34;22246:1;22238:6;22234:14;22227:58;22319:4;22314:2;22306:6;22302:15;22295:29;22110:221;:::o;22337:366::-;22479:3;22500:67;22564:2;22559:3;22500:67;:::i;:::-;22493:74;;22576:93;22665:3;22576:93;:::i;:::-;22694:2;22689:3;22685:12;22678:19;;22337:366;;;:::o;22709:419::-;22875:4;22913:2;22902:9;22898:18;22890:26;;22962:9;22956:4;22952:20;22948:1;22937:9;22933:17;22926:47;22990:131;23116:4;22990:131;:::i;:::-;22982:139;;22709:419;;;:::o;23134:179::-;23274:31;23270:1;23262:6;23258:14;23251:55;23134:179;:::o;23319:366::-;23461:3;23482:67;23546:2;23541:3;23482:67;:::i;:::-;23475:74;;23558:93;23647:3;23558:93;:::i;:::-;23676:2;23671:3;23667:12;23660:19;;23319:366;;;:::o;23691:419::-;23857:4;23895:2;23884:9;23880:18;23872:26;;23944:9;23938:4;23934:20;23930:1;23919:9;23915:17;23908:47;23972:131;24098:4;23972:131;:::i;:::-;23964:139;;23691:419;;;:::o;24116:224::-;24256:34;24252:1;24244:6;24240:14;24233:58;24325:7;24320:2;24312:6;24308:15;24301:32;24116:224;:::o;24346:366::-;24488:3;24509:67;24573:2;24568:3;24509:67;:::i;:::-;24502:74;;24585:93;24674:3;24585:93;:::i;:::-;24703:2;24698:3;24694:12;24687:19;;24346:366;;;:::o;24718:419::-;24884:4;24922:2;24911:9;24907:18;24899:26;;24971:9;24965:4;24961:20;24957:1;24946:9;24942:17;24935:47;24999:131;25125:4;24999:131;:::i;:::-;24991:139;;24718:419;;;:::o;25143:222::-;25283:34;25279:1;25271:6;25267:14;25260:58;25352:5;25347:2;25339:6;25335:15;25328:30;25143:222;:::o;25371:366::-;25513:3;25534:67;25598:2;25593:3;25534:67;:::i;:::-;25527:74;;25610:93;25699:3;25610:93;:::i;:::-;25728:2;25723:3;25719:12;25712:19;;25371:366;;;:::o;25743:419::-;25909:4;25947:2;25936:9;25932:18;25924:26;;25996:9;25990:4;25986:20;25982:1;25971:9;25967:17;25960:47;26024:131;26150:4;26024:131;:::i;:::-;26016:139;;25743:419;;;:::o;26168:225::-;26308:34;26304:1;26296:6;26292:14;26285:58;26377:8;26372:2;26364:6;26360:15;26353:33;26168:225;:::o;26399:366::-;26541:3;26562:67;26626:2;26621:3;26562:67;:::i;:::-;26555:74;;26638:93;26727:3;26638:93;:::i;:::-;26756:2;26751:3;26747:12;26740:19;;26399:366;;;:::o;26771:419::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26771:419;;;:::o;27196:122::-;27269:24;27287:5;27269:24;:::i;:::-;27262:5;27259:35;27249:63;;27308:1;27305;27298:12;27249:63;27196:122;:::o;27324:143::-;27381:5;27412:6;27406:13;27397:22;;27428:33;27455:5;27428:33;:::i;:::-;27324:143;;;;:::o;27473:351::-;27543:6;27592:2;27580:9;27571:7;27567:23;27563:32;27560:119;;;27598:79;;:::i;:::-;27560:119;27718:1;27743:64;27799:7;27790:6;27779:9;27775:22;27743:64;:::i;:::-;27733:74;;27689:128;27473:351;;;;:::o;27830:233::-;27970:34;27966:1;27958:6;27954:14;27947:58;28039:16;28034:2;28026:6;28022:15;28015:41;27830:233;:::o;28069:366::-;28211:3;28232:67;28296:2;28291:3;28232:67;:::i;:::-;28225:74;;28308:93;28397:3;28308:93;:::i;:::-;28426:2;28421:3;28417:12;28410:19;;28069:366;;;:::o;28441:419::-;28607:4;28645:2;28634:9;28630:18;28622:26;;28694:9;28688:4;28684:20;28680:1;28669:9;28665:17;28658:47;28722:131;28848:4;28722:131;:::i;:::-;28714:139;;28441:419;;;:::o;28866:228::-;29006:34;29002:1;28994:6;28990:14;28983:58;29075:11;29070:2;29062:6;29058:15;29051:36;28866:228;:::o;29100:366::-;29242:3;29263:67;29327:2;29322:3;29263:67;:::i;:::-;29256:74;;29339:93;29428:3;29339:93;:::i;:::-;29457:2;29452:3;29448:12;29441:19;;29100:366;;;:::o;29472:419::-;29638:4;29676:2;29665:9;29661:18;29653:26;;29725:9;29719:4;29715:20;29711:1;29700:9;29696:17;29689:47;29753:131;29879:4;29753:131;:::i;:::-;29745:139;;29472:419;;;:::o;29897:182::-;30037:34;30033:1;30025:6;30021:14;30014:58;29897:182;:::o;30085:366::-;30227:3;30248:67;30312:2;30307:3;30248:67;:::i;:::-;30241:74;;30324:93;30413:3;30324:93;:::i;:::-;30442:2;30437:3;30433:12;30426:19;;30085:366;;;:::o;30457:419::-;30623:4;30661:2;30650:9;30646:18;30638:26;;30710:9;30704:4;30700:20;30696:1;30685:9;30681:17;30674:47;30738:131;30864:4;30738:131;:::i;:::-;30730:139;;30457:419;;;:::o;30882:220::-;31022:34;31018:1;31010:6;31006:14;30999:58;31091:3;31086:2;31078:6;31074:15;31067:28;30882:220;:::o;31108:366::-;31250:3;31271:67;31335:2;31330:3;31271:67;:::i;:::-;31264:74;;31347:93;31436:3;31347:93;:::i;:::-;31465:2;31460:3;31456:12;31449:19;;31108:366;;;:::o;31480:419::-;31646:4;31684:2;31673:9;31669:18;31661:26;;31733:9;31727:4;31723:20;31719:1;31708:9;31704:17;31697:47;31761:131;31887:4;31761:131;:::i;:::-;31753:139;;31480:419;;;:::o;31905:221::-;32045:34;32041:1;32033:6;32029:14;32022:58;32114:4;32109:2;32101:6;32097:15;32090:29;31905:221;:::o;32132:366::-;32274:3;32295:67;32359:2;32354:3;32295:67;:::i;:::-;32288:74;;32371:93;32460:3;32371:93;:::i;:::-;32489:2;32484:3;32480:12;32473:19;;32132:366;;;:::o;32504:419::-;32670:4;32708:2;32697:9;32693:18;32685:26;;32757:9;32751:4;32747:20;32743:1;32732:9;32728:17;32721:47;32785:131;32911:4;32785:131;:::i;:::-;32777:139;;32504:419;;;:::o;32929:230::-;33069:34;33065:1;33057:6;33053:14;33046:58;33138:13;33133:2;33125:6;33121:15;33114:38;32929:230;:::o;33165:366::-;33307:3;33328:67;33392:2;33387:3;33328:67;:::i;:::-;33321:74;;33404:93;33493:3;33404:93;:::i;:::-;33522:2;33517:3;33513:12;33506:19;;33165:366;;;:::o;33537:419::-;33703:4;33741:2;33730:9;33726:18;33718:26;;33790:9;33784:4;33780:20;33776:1;33765:9;33761:17;33754:47;33818:131;33944:4;33818:131;:::i;:::-;33810:139;;33537:419;;;:::o;33962:181::-;34102:33;34098:1;34090:6;34086:14;34079:57;33962:181;:::o;34149:366::-;34291:3;34312:67;34376:2;34371:3;34312:67;:::i;:::-;34305:74;;34388:93;34477:3;34388:93;:::i;:::-;34506:2;34501:3;34497:12;34490:19;;34149:366;;;:::o;34521:419::-;34687:4;34725:2;34714:9;34710:18;34702:26;;34774:9;34768:4;34764:20;34760:1;34749:9;34745:17;34738:47;34802:131;34928:4;34802:131;:::i;:::-;34794:139;;34521:419;;;:::o;34946:232::-;35086:34;35082:1;35074:6;35070:14;35063:58;35155:15;35150:2;35142:6;35138:15;35131:40;34946:232;:::o;35184:366::-;35326:3;35347:67;35411:2;35406:3;35347:67;:::i;:::-;35340:74;;35423:93;35512:3;35423:93;:::i;:::-;35541:2;35536:3;35532:12;35525:19;;35184:366;;;:::o;35556:419::-;35722:4;35760:2;35749:9;35745:18;35737:26;;35809:9;35803:4;35799:20;35795:1;35784:9;35780:17;35773:47;35837:131;35963:4;35837:131;:::i;:::-;35829:139;;35556:419;;;:::o;35981:170::-;36121:22;36117:1;36109:6;36105:14;36098:46;35981:170;:::o;36157:366::-;36299:3;36320:67;36384:2;36379:3;36320:67;:::i;:::-;36313:74;;36396:93;36485:3;36396:93;:::i;:::-;36514:2;36509:3;36505:12;36498:19;;36157:366;;;:::o;36529:419::-;36695:4;36733:2;36722:9;36718:18;36710:26;;36782:9;36776:4;36772:20;36768:1;36757:9;36753:17;36746:47;36810:131;36936:4;36810:131;:::i;:::-;36802:139;;36529:419;;;:::o;36954:141::-;37003:4;37026:3;37018:11;;37049:3;37046:1;37039:14;37083:4;37080:1;37070:18;37062:26;;36954:141;;;:::o;37101:93::-;37138:6;37185:2;37180;37173:5;37169:14;37165:23;37155:33;;37101:93;;;:::o;37200:107::-;37244:8;37294:5;37288:4;37284:16;37263:37;;37200:107;;;;:::o;37313:393::-;37382:6;37432:1;37420:10;37416:18;37455:97;37485:66;37474:9;37455:97;:::i;:::-;37573:39;37603:8;37592:9;37573:39;:::i;:::-;37561:51;;37645:4;37641:9;37634:5;37630:21;37621:30;;37694:4;37684:8;37680:19;37673:5;37670:30;37660:40;;37389:317;;37313:393;;;;;:::o;37712:142::-;37762:9;37795:53;37813:34;37822:24;37840:5;37822:24;:::i;:::-;37813:34;:::i;:::-;37795:53;:::i;:::-;37782:66;;37712:142;;;:::o;37860:75::-;37903:3;37924:5;37917:12;;37860:75;;;:::o;37941:269::-;38051:39;38082:7;38051:39;:::i;:::-;38112:91;38161:41;38185:16;38161:41;:::i;:::-;38153:6;38146:4;38140:11;38112:91;:::i;:::-;38106:4;38099:105;38017:193;37941:269;;;:::o;38216:73::-;38261:3;38216:73;:::o;38295:189::-;38372:32;;:::i;:::-;38413:65;38471:6;38463;38457:4;38413:65;:::i;:::-;38348:136;38295:189;;:::o;38490:186::-;38550:120;38567:3;38560:5;38557:14;38550:120;;;38621:39;38658:1;38651:5;38621:39;:::i;:::-;38594:1;38587:5;38583:13;38574:22;;38550:120;;;38490:186;;:::o;38682:543::-;38783:2;38778:3;38775:11;38772:446;;;38817:38;38849:5;38817:38;:::i;:::-;38901:29;38919:10;38901:29;:::i;:::-;38891:8;38887:44;39084:2;39072:10;39069:18;39066:49;;;39105:8;39090:23;;39066:49;39128:80;39184:22;39202:3;39184:22;:::i;:::-;39174:8;39170:37;39157:11;39128:80;:::i;:::-;38787:431;;38772:446;38682:543;;;:::o;39231:117::-;39285:8;39335:5;39329:4;39325:16;39304:37;;39231:117;;;;:::o;39354:169::-;39398:6;39431:51;39479:1;39475:6;39467:5;39464:1;39460:13;39431:51;:::i;:::-;39427:56;39512:4;39506;39502:15;39492:25;;39405:118;39354:169;;;;:::o;39528:295::-;39604:4;39750:29;39775:3;39769:4;39750:29;:::i;:::-;39742:37;;39812:3;39809:1;39805:11;39799:4;39796:21;39788:29;;39528:295;;;;:::o;39828:1395::-;39945:37;39978:3;39945:37;:::i;:::-;40047:18;40039:6;40036:30;40033:56;;;40069:18;;:::i;:::-;40033:56;40113:38;40145:4;40139:11;40113:38;:::i;:::-;40198:67;40258:6;40250;40244:4;40198:67;:::i;:::-;40292:1;40316:4;40303:17;;40348:2;40340:6;40337:14;40365:1;40360:618;;;;41022:1;41039:6;41036:77;;;41088:9;41083:3;41079:19;41073:26;41064:35;;41036:77;41139:67;41199:6;41192:5;41139:67;:::i;:::-;41133:4;41126:81;40995:222;40330:887;;40360:618;40412:4;40408:9;40400:6;40396:22;40446:37;40478:4;40446:37;:::i;:::-;40505:1;40519:208;40533:7;40530:1;40527:14;40519:208;;;40612:9;40607:3;40603:19;40597:26;40589:6;40582:42;40663:1;40655:6;40651:14;40641:24;;40710:2;40699:9;40695:18;40682:31;;40556:4;40553:1;40549:12;40544:17;;40519:208;;;40755:6;40746:7;40743:19;40740:179;;;40813:9;40808:3;40804:19;40798:26;40856:48;40898:4;40890:6;40886:17;40875:9;40856:48;:::i;:::-;40848:6;40841:64;40763:156;40740:179;40965:1;40961;40953:6;40949:14;40945:22;40939:4;40932:36;40367:611;;;40330:887;;39920:1303;;;39828:1395;;:::o;41229:166::-;41369:18;41365:1;41357:6;41353:14;41346:42;41229:166;:::o;41401:366::-;41543:3;41564:67;41628:2;41623:3;41564:67;:::i;:::-;41557:74;;41640:93;41729:3;41640:93;:::i;:::-;41758:2;41753:3;41749:12;41742:19;;41401:366;;;:::o;41773:419::-;41939:4;41977:2;41966:9;41962:18;41954:26;;42026:9;42020:4;42016:20;42012:1;42001:9;41997:17;41990:47;42054:131;42180:4;42054:131;:::i;:::-;42046:139;;41773:419;;;:::o;42198:225::-;42338:34;42334:1;42326:6;42322:14;42315:58;42407:8;42402:2;42394:6;42390:15;42383:33;42198:225;:::o;42429:366::-;42571:3;42592:67;42656:2;42651:3;42592:67;:::i;:::-;42585:74;;42668:93;42757:3;42668:93;:::i;:::-;42786:2;42781:3;42777:12;42770:19;;42429:366;;;:::o;42801:419::-;42967:4;43005:2;42994:9;42990:18;42982:26;;43054:9;43048:4;43044:20;43040:1;43029:9;43025:17;43018:47;43082:131;43208:4;43082:131;:::i;:::-;43074:139;;42801:419;;;:::o;43226:98::-;43277:6;43311:5;43305:12;43295:22;;43226:98;;;:::o;43330:147::-;43431:11;43468:3;43453:18;;43330:147;;;;:::o;43483:386::-;43587:3;43615:38;43647:5;43615:38;:::i;:::-;43669:88;43750:6;43745:3;43669:88;:::i;:::-;43662:95;;43766:65;43824:6;43819:3;43812:4;43805:5;43801:16;43766:65;:::i;:::-;43856:6;43851:3;43847:16;43840:23;;43591:278;43483:386;;;;:::o;43875:271::-;44005:3;44027:93;44116:3;44107:6;44027:93;:::i;:::-;44020:100;;44137:3;44130:10;;43875:271;;;;:::o
Swarm Source
ipfs://1068454cd516a87d0dd9c998f037c81f8b298912d7dfd6caf51b16a35244e41e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.