Polygon Sponsored slots available. Book your slot here!
More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
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:
sLayerK
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2024-03-27 */ // SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol) pragma solidity 0.8.18; /** * @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: IBeaconUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol) /** * @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: draft-IERC1822Upgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (interfaces/draft-IERC1822.sol) /** * @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: AddressUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) /** * @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: Initializable.sol // OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol) /** * @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: ERC1967UpgradeUpgradeable.sol // OpenZeppelin Contracts (last updated v4.5.0) (proxy/ERC1967/ERC1967Upgrade.sol) /** * @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 { 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 Emitted when the implementation is upgraded. */ event Upgraded(address indexed implementation); /** * @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 Emitted when the admin account has changed. */ event AdminChanged(address previousAdmin, address newAdmin); /** * @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 Emitted when the beacon is upgraded. */ event BeaconUpgraded(address indexed beacon); /** * @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: UUPSUpgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (proxy/utils/UUPSUpgradeable.sol) /** * @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: ContextUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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: OwnableUpgradeable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) /** * @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: IERC20Upgradeable.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) /** * @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: IERC20MetadataUpgradeable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) /** * @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: ERC20Upgradeable.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) /** * @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 8; } /** * @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; } contract sLayerK is Initializable , ERC20Upgradeable , UUPSUpgradeable , OwnableUpgradeable { // This mapping maintains a whitelist of addresses. // Only addresses listed in this whitelist are allowed to perform the burn operation. mapping(address => bool) public whiteList; // Event to log address addition/removal from whitelist event AddRemoveWhiteList(address indexed addr, bool flag); // Event to log token burn event Burn(address indexed burner, uint256 amount); // Event to log token minting event Mint(address indexed minter, uint256 amount); constructor() { _disableInitializers(); } /// @dev Initializes the contract with initial values. function initialize() public initializer { __ERC20_init("sLayerK","SLYK"); __Ownable_init(); _mint( msg.sender , 500000000 * 10** decimals()); } /// @dev Adds or removes addresses from the whitelist. /// @param _addr The addresses to add or remove. /// @param _flag The flag indicating whether to add or remove. function addNRemoveWhiteList(address[] memory _addr,bool _flag ) public onlyOwner { require(_addr.length <= 100, "Exceeded maximum address limit"); for (uint256 i; i < _addr.length; i++) { whiteList[_addr[i]] = _flag; emit AddRemoveWhiteList(_addr[i], _flag); // Emit the AddRemoveWhiteList event }} /// @dev Burns a specified amount of tokens if the sender is whitelisted. /// @param value The amount of tokens to burn. function burn(uint256 value) public { require( whiteList[msg.sender] == true,"address cannot burn"); _burn(_msgSender(), value); emit Burn(msg.sender, value); // Emit the Burn event } /// @dev Mints new tokens. /// @param _amount The amount of tokens to mint. function mint( uint256 _amount) public onlyOwner { _mint( msg.sender , _amount); emit Mint(msg.sender, _amount); // Emit the Mint event } /// @dev Authorizes an upgrade to a new implementation. /// @param newImplementation The address of the new implementation. function _authorizeUpgrade(address newImplementation) internal override onlyOwner{} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"bool","name":"flag","type":"bool"}],"name":"AddRemoveWhiteList","type":"event"},{"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":true,"internalType":"address","name":"burner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","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":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","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":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":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"},{"internalType":"bool","name":"_flag","type":"bool"}],"name":"addNRemoveWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"value","type":"uint256"}],"name":"burn","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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","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":"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":[{"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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152503480156200004457600080fd5b50620000556200005b60201b60201c565b62000206565b600060019054906101000a900460ff1615620000ae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a590620001a9565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff161015620001205760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff604051620001179190620001e9565b60405180910390a15b565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60006200019160278362000122565b91506200019e8262000133565b604082019050919050565b60006020820190508181036000830152620001c48162000182565b9050919050565b600060ff82169050919050565b620001e381620001cb565b82525050565b6000602082019050620002006000830184620001d8565b92915050565b608051613a476200023e60003960008181610634015281816106c201528181610a5201528181610ae00152610b900152613a476000f3fe6080604052600436106101355760003560e01c806352d1902d116100ab57806395d89b411161006f57806395d89b4114610407578063a0712d6814610432578063a457c2d71461045b578063a9059cbb14610498578063dd62ed3e146104d5578063f2fde38b1461051257610135565b806352d1902d1461034657806370a0823114610371578063715018a6146103ae5780638129fc1c146103c55780638da5cb5b146103dc57610135565b80633659cfe6116100fd5780633659cfe614610235578063372c12b11461025e578063387d4ce11461029b57806339509351146102c457806342966c68146103015780634f1ef2861461032a57610135565b806306fdde031461013a578063095ea7b31461016557806318160ddd146101a257806323b872dd146101cd578063313ce5671461020a575b600080fd5b34801561014657600080fd5b5061014f61053b565b60405161015c9190612138565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612202565b6105cd565b604051610199919061225d565b60405180910390f35b3480156101ae57600080fd5b506101b76105f0565b6040516101c49190612287565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef91906122a2565b6105fa565b604051610201919061225d565b60405180910390f35b34801561021657600080fd5b5061021f610629565b60405161022c9190612311565b60405180910390f35b34801561024157600080fd5b5061025c6004803603810190610257919061232c565b610632565b005b34801561026a57600080fd5b506102856004803603810190610280919061232c565b6107ba565b604051610292919061225d565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd91906124cd565b6107da565b005b3480156102d057600080fd5b506102eb60048036038101906102e69190612202565b610924565b6040516102f8919061225d565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190612529565b61095b565b005b610344600480360381019061033f919061260b565b610a50565b005b34801561035257600080fd5b5061035b610b8c565b6040516103689190612680565b60405180910390f35b34801561037d57600080fd5b506103986004803603810190610393919061232c565b610c45565b6040516103a59190612287565b60405180910390f35b3480156103ba57600080fd5b506103c3610c8e565b005b3480156103d157600080fd5b506103da610ca2565b005b3480156103e857600080fd5b506103f1610e80565b6040516103fe91906126aa565b60405180910390f35b34801561041357600080fd5b5061041c610eaa565b6040516104299190612138565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190612529565b610f3c565b005b34801561046757600080fd5b50610482600480360381019061047d9190612202565b610f9f565b60405161048f919061225d565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190612202565b611016565b6040516104cc919061225d565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906126c5565b611039565b6040516105099190612287565b60405180910390f35b34801561051e57600080fd5b506105396004803603810190610534919061232c565b6110c0565b005b60606036805461054a90612734565b80601f016020809104026020016040519081016040528092919081815260200182805461057690612734565b80156105c35780601f10610598576101008083540402835291602001916105c3565b820191906000526020600020905b8154815290600101906020018083116105a657829003601f168201915b5050505050905090565b6000806105d8611143565b90506105e581858561114b565b600191505092915050565b6000603554905090565b600080610605611143565b9050610612858285611314565b61061d8585856113a0565b60019150509392505050565b60006008905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b7906127d7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106ff611619565b73ffffffffffffffffffffffffffffffffffffffff1614610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074c90612869565b60405180910390fd5b61075e81611670565b6107b781600067ffffffffffffffff81111561077d5761077c61235e565b5b6040519080825280601f01601f1916602001820160405280156107af5781602001600182028036833780820191505090505b50600061167b565b50565b60fb6020528060005260406000206000915054906101000a900460ff1681565b6107e26117e9565b606482511115610827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081e906128d5565b60405180910390fd5b60005b825181101561091f578160fb600085848151811061084b5761084a6128f5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106108b7576108b66128f5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f7ee5771f4eb07abdd4204b54d132e0027d3ae65d3c613ffa23a213265eda0a8283604051610904919061225d565b60405180910390a2808061091790612953565b91505061082a565b505050565b60008061092f611143565b90506109508185856109418589611039565b61094b919061299b565b61114b565b600191505092915050565b6001151560fb60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590612a1b565b60405180910390fd5b6109ff6109f9611143565b82611867565b3373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610a459190612287565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad5906127d7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610b1d611619565b73ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90612869565b60405180910390fd5b610b7c82611670565b610b888282600161167b565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390612aad565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c966117e9565b610ca06000611a36565b565b60008060019054906101000a900460ff16159050808015610cd35750600160008054906101000a900460ff1660ff16105b80610d005750610ce230611afc565b158015610cff5750600160008054906101000a900460ff1660ff16145b5b610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612b3f565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610d7c576001600060016101000a81548160ff0219169083151502179055505b610df06040518060400160405280600781526020017f734c617965724b000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534c594b00000000000000000000000000000000000000000000000000000000815250611b1f565b610df8611b7c565b610e2433610e04610629565b600a610e109190612c92565b631dcd6500610e1f9190612cdd565b611bd5565b8015610e7d5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610e749190612d64565b60405180910390a15b50565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060378054610eb990612734565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee590612734565b8015610f325780601f10610f0757610100808354040283529160200191610f32565b820191906000526020600020905b815481529060010190602001808311610f1557829003601f168201915b5050505050905090565b610f446117e9565b610f4e3382611bd5565b3373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610f949190612287565b60405180910390a250565b600080610faa611143565b90506000610fb88286611039565b905083811015610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490612df1565b60405180910390fd5b61100a828686840361114b565b60019250505092915050565b600080611021611143565b905061102e8185856113a0565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110c86117e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90612e83565b60405180910390fd5b61114081611a36565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190612f15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612fa7565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113079190612287565b60405180910390a3505050565b60006113208484611039565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461139a578181101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613013565b60405180910390fd5b611399848484840361114b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611406906130a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613137565b60405180910390fd5b611489838383611d2c565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611507906131c9565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116009190612287565b60405180910390a3611613848484611d31565b50505050565b60006116477f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d36565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116786117e9565b50565b6116a77f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d40565b60000160009054906101000a900460ff16156116cb576116c683611d4a565b6117e4565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561173357506040513d601f19601f820116820180604052508101906117309190613215565b60015b611772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611769906132b4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90613346565b60405180910390fd5b506117e3838383611e03565b5b505050565b6117f1611143565b73ffffffffffffffffffffffffffffffffffffffff1661180f610e80565b73ffffffffffffffffffffffffffffffffffffffff1614611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c906133b2565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613444565b60405180910390fd5b6118e282600083611d2c565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906134d6565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a1d9190612287565b60405180910390a3611a3183600084611d31565b505050565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613568565b60405180910390fd5b611b788282611e2f565b5050565b600060019054906101000a900460ff16611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290613568565b60405180910390fd5b611bd3611ea2565b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b906135d4565b60405180910390fd5b611c5060008383611d2c565b8060356000828254611c62919061299b565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d149190612287565b60405180910390a3611d2860008383611d31565b5050565b505050565b505050565b6000819050919050565b6000819050919050565b611d5381611afc565b611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990613666565b60405180910390fd5b80611dbf7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d36565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e0c83611f03565b600082511180611e195750805b15611e2a57611e288383611f52565b505b505050565b600060019054906101000a900460ff16611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590613568565b60405180910390fd5b8160369081611e8d9190613828565b508060379081611e9d9190613828565b505050565b600060019054906101000a900460ff16611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890613568565b60405180910390fd5b611f01611efc611143565b611a36565b565b611f0c81611d4a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611f5d83611afc565b611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061396c565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051611fc491906139d3565b600060405180830381855af49150503d8060008114611fff576040519150601f19603f3d011682016040523d82523d6000602084013e612004565b606091505b509150915061202c82826040518060600160405280602781526020016139eb60279139612036565b9250505092915050565b6060831561204657829050612051565b6120508383612058565b5b9392505050565b60008251111561206b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f9190612138565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b838110156120e25780820151818401526020810190506120c7565b60008484015250505050565b6000601f19601f8301169050919050565b600061210a826120a8565b61211481856120b3565b93506121248185602086016120c4565b61212d816120ee565b840191505092915050565b6000602082019050818103600083015261215281846120ff565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121998261216e565b9050919050565b6121a98161218e565b81146121b457600080fd5b50565b6000813590506121c6816121a0565b92915050565b6000819050919050565b6121df816121cc565b81146121ea57600080fd5b50565b6000813590506121fc816121d6565b92915050565b6000806040838503121561221957612218612164565b5b6000612227858286016121b7565b9250506020612238858286016121ed565b9150509250929050565b60008115159050919050565b61225781612242565b82525050565b6000602082019050612272600083018461224e565b92915050565b612281816121cc565b82525050565b600060208201905061229c6000830184612278565b92915050565b6000806000606084860312156122bb576122ba612164565b5b60006122c9868287016121b7565b93505060206122da868287016121b7565b92505060406122eb868287016121ed565b9150509250925092565b600060ff82169050919050565b61230b816122f5565b82525050565b60006020820190506123266000830184612302565b92915050565b60006020828403121561234257612341612164565b5b6000612350848285016121b7565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612396826120ee565b810181811067ffffffffffffffff821117156123b5576123b461235e565b5b80604052505050565b60006123c861215a565b90506123d4828261238d565b919050565b600067ffffffffffffffff8211156123f4576123f361235e565b5b602082029050602081019050919050565b600080fd5b600061241d612418846123d9565b6123be565b905080838252602082019050602084028301858111156124405761243f612405565b5b835b81811015612469578061245588826121b7565b845260208401935050602081019050612442565b5050509392505050565b600082601f83011261248857612487612359565b5b813561249884826020860161240a565b91505092915050565b6124aa81612242565b81146124b557600080fd5b50565b6000813590506124c7816124a1565b92915050565b600080604083850312156124e4576124e3612164565b5b600083013567ffffffffffffffff81111561250257612501612169565b5b61250e85828601612473565b925050602061251f858286016124b8565b9150509250929050565b60006020828403121561253f5761253e612164565b5b600061254d848285016121ed565b91505092915050565b600080fd5b600067ffffffffffffffff8211156125765761257561235e565b5b61257f826120ee565b9050602081019050919050565b82818337600083830152505050565b60006125ae6125a98461255b565b6123be565b9050828152602081018484840111156125ca576125c9612556565b5b6125d584828561258c565b509392505050565b600082601f8301126125f2576125f1612359565b5b813561260284826020860161259b565b91505092915050565b6000806040838503121561262257612621612164565b5b6000612630858286016121b7565b925050602083013567ffffffffffffffff81111561265157612650612169565b5b61265d858286016125dd565b9150509250929050565b6000819050919050565b61267a81612667565b82525050565b60006020820190506126956000830184612671565b92915050565b6126a48161218e565b82525050565b60006020820190506126bf600083018461269b565b92915050565b600080604083850312156126dc576126db612164565b5b60006126ea858286016121b7565b92505060206126fb858286016121b7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061274c57607f821691505b60208210810361275f5761275e612705565b5b50919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006127c1602c836120b3565b91506127cc82612765565b604082019050919050565b600060208201905081810360008301526127f0816127b4565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612853602c836120b3565b915061285e826127f7565b604082019050919050565b6000602082019050818103600083015261288281612846565b9050919050565b7f4578636565646564206d6178696d756d2061646472657373206c696d69740000600082015250565b60006128bf601e836120b3565b91506128ca82612889565b602082019050919050565b600060208201905081810360008301526128ee816128b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061295e826121cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129905761298f612924565b5b600182019050919050565b60006129a6826121cc565b91506129b1836121cc565b92508282019050808211156129c9576129c8612924565b5b92915050565b7f616464726573732063616e6e6f74206275726e00000000000000000000000000600082015250565b6000612a056013836120b3565b9150612a10826129cf565b602082019050919050565b60006020820190508181036000830152612a34816129f8565b9050919050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000612a976038836120b3565b9150612aa282612a3b565b604082019050919050565b60006020820190508181036000830152612ac681612a8a565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612b29602e836120b3565b9150612b3482612acd565b604082019050919050565b60006020820190508181036000830152612b5881612b1c565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612bb657808604811115612b9257612b91612924565b5b6001851615612ba15780820291505b8081029050612baf85612b5f565b9450612b76565b94509492505050565b600082612bcf5760019050612c8b565b81612bdd5760009050612c8b565b8160018114612bf35760028114612bfd57612c2c565b6001915050612c8b565b60ff841115612c0f57612c0e612924565b5b8360020a915084821115612c2657612c25612924565b5b50612c8b565b5060208310610133831016604e8410600b8410161715612c615782820a905083811115612c5c57612c5b612924565b5b612c8b565b612c6e8484846001612b6c565b92509050818404811115612c8557612c84612924565b5b81810290505b9392505050565b6000612c9d826121cc565b9150612ca8836122f5565b9250612cd57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612bbf565b905092915050565b6000612ce8826121cc565b9150612cf3836121cc565b9250828202612d01816121cc565b91508282048414831517612d1857612d17612924565b5b5092915050565b6000819050919050565b6000819050919050565b6000612d4e612d49612d4484612d1f565b612d29565b6122f5565b9050919050565b612d5e81612d33565b82525050565b6000602082019050612d796000830184612d55565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ddb6025836120b3565b9150612de682612d7f565b604082019050919050565b60006020820190508181036000830152612e0a81612dce565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e6d6026836120b3565b9150612e7882612e11565b604082019050919050565b60006020820190508181036000830152612e9c81612e60565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eff6024836120b3565b9150612f0a82612ea3565b604082019050919050565b60006020820190508181036000830152612f2e81612ef2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f916022836120b3565b9150612f9c82612f35565b604082019050919050565b60006020820190508181036000830152612fc081612f84565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ffd601d836120b3565b915061300882612fc7565b602082019050919050565b6000602082019050818103600083015261302c81612ff0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061308f6025836120b3565b915061309a82613033565b604082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006131216023836120b3565b915061312c826130c5565b604082019050919050565b6000602082019050818103600083015261315081613114565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131b36026836120b3565b91506131be82613157565b604082019050919050565b600060208201905081810360008301526131e2816131a6565b9050919050565b6131f281612667565b81146131fd57600080fd5b50565b60008151905061320f816131e9565b92915050565b60006020828403121561322b5761322a612164565b5b600061323984828501613200565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061329e602e836120b3565b91506132a982613242565b604082019050919050565b600060208201905081810360008301526132cd81613291565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006133306029836120b3565b915061333b826132d4565b604082019050919050565b6000602082019050818103600083015261335f81613323565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061339c6020836120b3565b91506133a782613366565b602082019050919050565b600060208201905081810360008301526133cb8161338f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061342e6021836120b3565b9150613439826133d2565b604082019050919050565b6000602082019050818103600083015261345d81613421565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006134c06022836120b3565b91506134cb82613464565b604082019050919050565b600060208201905081810360008301526134ef816134b3565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613552602b836120b3565b915061355d826134f6565b604082019050919050565b6000602082019050818103600083015261358181613545565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006135be601f836120b3565b91506135c982613588565b602082019050919050565b600060208201905081810360008301526135ed816135b1565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613650602d836120b3565b915061365b826135f4565b604082019050919050565b6000602082019050818103600083015261367f81613643565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136ab565b6136f286836136ab565b95508019841693508086168417925050509392505050565b600061372561372061371b846121cc565b612d29565b6121cc565b9050919050565b6000819050919050565b61373f8361370a565b61375361374b8261372c565b8484546136b8565b825550505050565b600090565b61376861375b565b613773818484613736565b505050565b5b818110156137975761378c600082613760565b600181019050613779565b5050565b601f8211156137dc576137ad81613686565b6137b68461369b565b810160208510156137c5578190505b6137d96137d18561369b565b830182613778565b50505b505050565b600082821c905092915050565b60006137ff600019846008026137e1565b1980831691505092915050565b600061381883836137ee565b9150826002028217905092915050565b613831826120a8565b67ffffffffffffffff81111561384a5761384961235e565b5b6138548254612734565b61385f82828561379b565b600060209050601f8311600181146138925760008415613880578287015190505b61388a858261380c565b8655506138f2565b601f1984166138a086613686565b60005b828110156138c8578489015182556001820191506020850194506020810190506138a3565b868310156138e557848901516138e1601f8916826137ee565b8355505b6001600288020188555050505b505050505050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006139566026836120b3565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b600081519050919050565b600081905092915050565b60006139ad8261398c565b6139b78185613997565b93506139c78185602086016120c4565b80840191505092915050565b60006139df82846139a2565b91508190509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e3afb5a7553b9bcd97eba3503496cde01a137d39c55ea6fc6d7b5f37aadfff7d64736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101355760003560e01c806352d1902d116100ab57806395d89b411161006f57806395d89b4114610407578063a0712d6814610432578063a457c2d71461045b578063a9059cbb14610498578063dd62ed3e146104d5578063f2fde38b1461051257610135565b806352d1902d1461034657806370a0823114610371578063715018a6146103ae5780638129fc1c146103c55780638da5cb5b146103dc57610135565b80633659cfe6116100fd5780633659cfe614610235578063372c12b11461025e578063387d4ce11461029b57806339509351146102c457806342966c68146103015780634f1ef2861461032a57610135565b806306fdde031461013a578063095ea7b31461016557806318160ddd146101a257806323b872dd146101cd578063313ce5671461020a575b600080fd5b34801561014657600080fd5b5061014f61053b565b60405161015c9190612138565b60405180910390f35b34801561017157600080fd5b5061018c60048036038101906101879190612202565b6105cd565b604051610199919061225d565b60405180910390f35b3480156101ae57600080fd5b506101b76105f0565b6040516101c49190612287565b60405180910390f35b3480156101d957600080fd5b506101f460048036038101906101ef91906122a2565b6105fa565b604051610201919061225d565b60405180910390f35b34801561021657600080fd5b5061021f610629565b60405161022c9190612311565b60405180910390f35b34801561024157600080fd5b5061025c6004803603810190610257919061232c565b610632565b005b34801561026a57600080fd5b506102856004803603810190610280919061232c565b6107ba565b604051610292919061225d565b60405180910390f35b3480156102a757600080fd5b506102c260048036038101906102bd91906124cd565b6107da565b005b3480156102d057600080fd5b506102eb60048036038101906102e69190612202565b610924565b6040516102f8919061225d565b60405180910390f35b34801561030d57600080fd5b5061032860048036038101906103239190612529565b61095b565b005b610344600480360381019061033f919061260b565b610a50565b005b34801561035257600080fd5b5061035b610b8c565b6040516103689190612680565b60405180910390f35b34801561037d57600080fd5b506103986004803603810190610393919061232c565b610c45565b6040516103a59190612287565b60405180910390f35b3480156103ba57600080fd5b506103c3610c8e565b005b3480156103d157600080fd5b506103da610ca2565b005b3480156103e857600080fd5b506103f1610e80565b6040516103fe91906126aa565b60405180910390f35b34801561041357600080fd5b5061041c610eaa565b6040516104299190612138565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190612529565b610f3c565b005b34801561046757600080fd5b50610482600480360381019061047d9190612202565b610f9f565b60405161048f919061225d565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190612202565b611016565b6040516104cc919061225d565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906126c5565b611039565b6040516105099190612287565b60405180910390f35b34801561051e57600080fd5b506105396004803603810190610534919061232c565b6110c0565b005b60606036805461054a90612734565b80601f016020809104026020016040519081016040528092919081815260200182805461057690612734565b80156105c35780601f10610598576101008083540402835291602001916105c3565b820191906000526020600020905b8154815290600101906020018083116105a657829003601f168201915b5050505050905090565b6000806105d8611143565b90506105e581858561114b565b600191505092915050565b6000603554905090565b600080610605611143565b9050610612858285611314565b61061d8585856113a0565b60019150509392505050565b60006008905090565b7f00000000000000000000000024b7322e81f41a89a783ff3c8cc2965ca6db747773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16036106c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b7906127d7565b60405180910390fd5b7f00000000000000000000000024b7322e81f41a89a783ff3c8cc2965ca6db747773ffffffffffffffffffffffffffffffffffffffff166106ff611619565b73ffffffffffffffffffffffffffffffffffffffff1614610755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074c90612869565b60405180910390fd5b61075e81611670565b6107b781600067ffffffffffffffff81111561077d5761077c61235e565b5b6040519080825280601f01601f1916602001820160405280156107af5781602001600182028036833780820191505090505b50600061167b565b50565b60fb6020528060005260406000206000915054906101000a900460ff1681565b6107e26117e9565b606482511115610827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081e906128d5565b60405180910390fd5b60005b825181101561091f578160fb600085848151811061084b5761084a6128f5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106108b7576108b66128f5565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f7ee5771f4eb07abdd4204b54d132e0027d3ae65d3c613ffa23a213265eda0a8283604051610904919061225d565b60405180910390a2808061091790612953565b91505061082a565b505050565b60008061092f611143565b90506109508185856109418589611039565b61094b919061299b565b61114b565b600191505092915050565b6001151560fb60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146109ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e590612a1b565b60405180910390fd5b6109ff6109f9611143565b82611867565b3373ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca582604051610a459190612287565b60405180910390a250565b7f00000000000000000000000024b7322e81f41a89a783ff3c8cc2965ca6db747773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1603610ade576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad5906127d7565b60405180910390fd5b7f00000000000000000000000024b7322e81f41a89a783ff3c8cc2965ca6db747773ffffffffffffffffffffffffffffffffffffffff16610b1d611619565b73ffffffffffffffffffffffffffffffffffffffff1614610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a90612869565b60405180910390fd5b610b7c82611670565b610b888282600161167b565b5050565b60007f00000000000000000000000024b7322e81f41a89a783ff3c8cc2965ca6db747773ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1390612aad565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6000603360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c966117e9565b610ca06000611a36565b565b60008060019054906101000a900460ff16159050808015610cd35750600160008054906101000a900460ff1660ff16105b80610d005750610ce230611afc565b158015610cff5750600160008054906101000a900460ff1660ff16145b5b610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612b3f565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610d7c576001600060016101000a81548160ff0219169083151502179055505b610df06040518060400160405280600781526020017f734c617965724b000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534c594b00000000000000000000000000000000000000000000000000000000815250611b1f565b610df8611b7c565b610e2433610e04610629565b600a610e109190612c92565b631dcd6500610e1f9190612cdd565b611bd5565b8015610e7d5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610e749190612d64565b60405180910390a15b50565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060378054610eb990612734565b80601f0160208091040260200160405190810160405280929190818152602001828054610ee590612734565b8015610f325780601f10610f0757610100808354040283529160200191610f32565b820191906000526020600020905b815481529060010190602001808311610f1557829003601f168201915b5050505050905090565b610f446117e9565b610f4e3382611bd5565b3373ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051610f949190612287565b60405180910390a250565b600080610faa611143565b90506000610fb88286611039565b905083811015610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490612df1565b60405180910390fd5b61100a828686840361114b565b60019250505092915050565b600080611021611143565b905061102e8185856113a0565b600191505092915050565b6000603460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110c86117e9565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112e90612e83565b60405180910390fd5b61114081611a36565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036111ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b190612f15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612fa7565b60405180910390fd5b80603460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113079190612287565b60405180910390a3505050565b60006113208484611039565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461139a578181101561138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613013565b60405180910390fd5b611399848484840361114b565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361140f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611406906130a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613137565b60405180910390fd5b611489838383611d2c565b6000603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611510576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611507906131c9565b60405180910390fd5b818103603360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116009190612287565b60405180910390a3611613848484611d31565b50505050565b60006116477f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d36565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116786117e9565b50565b6116a77f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d40565b60000160009054906101000a900460ff16156116cb576116c683611d4a565b6117e4565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561173357506040513d601f19601f820116820180604052508101906117309190613215565b60015b611772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611769906132b4565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90613346565b60405180910390fd5b506117e3838383611e03565b5b505050565b6117f1611143565b73ffffffffffffffffffffffffffffffffffffffff1661180f610e80565b73ffffffffffffffffffffffffffffffffffffffff1614611865576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185c906133b2565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cd90613444565b60405180910390fd5b6118e282600083611d2c565b6000603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611969576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611960906134d6565b60405180910390fd5b818103603360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081603560008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a1d9190612287565b60405180910390a3611a3183600084611d31565b505050565b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590613568565b60405180910390fd5b611b788282611e2f565b5050565b600060019054906101000a900460ff16611bcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc290613568565b60405180910390fd5b611bd3611ea2565b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b906135d4565b60405180910390fd5b611c5060008383611d2c565b8060356000828254611c62919061299b565b9250508190555080603360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d149190612287565b60405180910390a3611d2860008383611d31565b5050565b505050565b505050565b6000819050919050565b6000819050919050565b611d5381611afc565b611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8990613666565b60405180910390fd5b80611dbf7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d36565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e0c83611f03565b600082511180611e195750805b15611e2a57611e288383611f52565b505b505050565b600060019054906101000a900460ff16611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7590613568565b60405180910390fd5b8160369081611e8d9190613828565b508060379081611e9d9190613828565b505050565b600060019054906101000a900460ff16611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890613568565b60405180910390fd5b611f01611efc611143565b611a36565b565b611f0c81611d4a565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611f5d83611afc565b611f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f939061396c565b60405180910390fd5b6000808473ffffffffffffffffffffffffffffffffffffffff1684604051611fc491906139d3565b600060405180830381855af49150503d8060008114611fff576040519150601f19603f3d011682016040523d82523d6000602084013e612004565b606091505b509150915061202c82826040518060600160405280602781526020016139eb60279139612036565b9250505092915050565b6060831561204657829050612051565b6120508383612058565b5b9392505050565b60008251111561206b5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209f9190612138565b60405180910390fd5b600081519050919050565b600082825260208201905092915050565b60005b838110156120e25780820151818401526020810190506120c7565b60008484015250505050565b6000601f19601f8301169050919050565b600061210a826120a8565b61211481856120b3565b93506121248185602086016120c4565b61212d816120ee565b840191505092915050565b6000602082019050818103600083015261215281846120ff565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006121998261216e565b9050919050565b6121a98161218e565b81146121b457600080fd5b50565b6000813590506121c6816121a0565b92915050565b6000819050919050565b6121df816121cc565b81146121ea57600080fd5b50565b6000813590506121fc816121d6565b92915050565b6000806040838503121561221957612218612164565b5b6000612227858286016121b7565b9250506020612238858286016121ed565b9150509250929050565b60008115159050919050565b61225781612242565b82525050565b6000602082019050612272600083018461224e565b92915050565b612281816121cc565b82525050565b600060208201905061229c6000830184612278565b92915050565b6000806000606084860312156122bb576122ba612164565b5b60006122c9868287016121b7565b93505060206122da868287016121b7565b92505060406122eb868287016121ed565b9150509250925092565b600060ff82169050919050565b61230b816122f5565b82525050565b60006020820190506123266000830184612302565b92915050565b60006020828403121561234257612341612164565b5b6000612350848285016121b7565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612396826120ee565b810181811067ffffffffffffffff821117156123b5576123b461235e565b5b80604052505050565b60006123c861215a565b90506123d4828261238d565b919050565b600067ffffffffffffffff8211156123f4576123f361235e565b5b602082029050602081019050919050565b600080fd5b600061241d612418846123d9565b6123be565b905080838252602082019050602084028301858111156124405761243f612405565b5b835b81811015612469578061245588826121b7565b845260208401935050602081019050612442565b5050509392505050565b600082601f83011261248857612487612359565b5b813561249884826020860161240a565b91505092915050565b6124aa81612242565b81146124b557600080fd5b50565b6000813590506124c7816124a1565b92915050565b600080604083850312156124e4576124e3612164565b5b600083013567ffffffffffffffff81111561250257612501612169565b5b61250e85828601612473565b925050602061251f858286016124b8565b9150509250929050565b60006020828403121561253f5761253e612164565b5b600061254d848285016121ed565b91505092915050565b600080fd5b600067ffffffffffffffff8211156125765761257561235e565b5b61257f826120ee565b9050602081019050919050565b82818337600083830152505050565b60006125ae6125a98461255b565b6123be565b9050828152602081018484840111156125ca576125c9612556565b5b6125d584828561258c565b509392505050565b600082601f8301126125f2576125f1612359565b5b813561260284826020860161259b565b91505092915050565b6000806040838503121561262257612621612164565b5b6000612630858286016121b7565b925050602083013567ffffffffffffffff81111561265157612650612169565b5b61265d858286016125dd565b9150509250929050565b6000819050919050565b61267a81612667565b82525050565b60006020820190506126956000830184612671565b92915050565b6126a48161218e565b82525050565b60006020820190506126bf600083018461269b565b92915050565b600080604083850312156126dc576126db612164565b5b60006126ea858286016121b7565b92505060206126fb858286016121b7565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061274c57607f821691505b60208210810361275f5761275e612705565b5b50919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b60006127c1602c836120b3565b91506127cc82612765565b604082019050919050565b600060208201905081810360008301526127f0816127b4565b9050919050565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b6000612853602c836120b3565b915061285e826127f7565b604082019050919050565b6000602082019050818103600083015261288281612846565b9050919050565b7f4578636565646564206d6178696d756d2061646472657373206c696d69740000600082015250565b60006128bf601e836120b3565b91506128ca82612889565b602082019050919050565b600060208201905081810360008301526128ee816128b2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061295e826121cc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036129905761298f612924565b5b600182019050919050565b60006129a6826121cc565b91506129b1836121cc565b92508282019050808211156129c9576129c8612924565b5b92915050565b7f616464726573732063616e6e6f74206275726e00000000000000000000000000600082015250565b6000612a056013836120b3565b9150612a10826129cf565b602082019050919050565b60006020820190508181036000830152612a34816129f8565b9050919050565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b6000612a976038836120b3565b9150612aa282612a3b565b604082019050919050565b60006020820190508181036000830152612ac681612a8a565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000612b29602e836120b3565b9150612b3482612acd565b604082019050919050565b60006020820190508181036000830152612b5881612b1c565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612bb657808604811115612b9257612b91612924565b5b6001851615612ba15780820291505b8081029050612baf85612b5f565b9450612b76565b94509492505050565b600082612bcf5760019050612c8b565b81612bdd5760009050612c8b565b8160018114612bf35760028114612bfd57612c2c565b6001915050612c8b565b60ff841115612c0f57612c0e612924565b5b8360020a915084821115612c2657612c25612924565b5b50612c8b565b5060208310610133831016604e8410600b8410161715612c615782820a905083811115612c5c57612c5b612924565b5b612c8b565b612c6e8484846001612b6c565b92509050818404811115612c8557612c84612924565b5b81810290505b9392505050565b6000612c9d826121cc565b9150612ca8836122f5565b9250612cd57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612bbf565b905092915050565b6000612ce8826121cc565b9150612cf3836121cc565b9250828202612d01816121cc565b91508282048414831517612d1857612d17612924565b5b5092915050565b6000819050919050565b6000819050919050565b6000612d4e612d49612d4484612d1f565b612d29565b6122f5565b9050919050565b612d5e81612d33565b82525050565b6000602082019050612d796000830184612d55565b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ddb6025836120b3565b9150612de682612d7f565b604082019050919050565b60006020820190508181036000830152612e0a81612dce565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e6d6026836120b3565b9150612e7882612e11565b604082019050919050565b60006020820190508181036000830152612e9c81612e60565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eff6024836120b3565b9150612f0a82612ea3565b604082019050919050565b60006020820190508181036000830152612f2e81612ef2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f916022836120b3565b9150612f9c82612f35565b604082019050919050565b60006020820190508181036000830152612fc081612f84565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612ffd601d836120b3565b915061300882612fc7565b602082019050919050565b6000602082019050818103600083015261302c81612ff0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061308f6025836120b3565b915061309a82613033565b604082019050919050565b600060208201905081810360008301526130be81613082565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006131216023836120b3565b915061312c826130c5565b604082019050919050565b6000602082019050818103600083015261315081613114565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131b36026836120b3565b91506131be82613157565b604082019050919050565b600060208201905081810360008301526131e2816131a6565b9050919050565b6131f281612667565b81146131fd57600080fd5b50565b60008151905061320f816131e9565b92915050565b60006020828403121561322b5761322a612164565b5b600061323984828501613200565b91505092915050565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b600061329e602e836120b3565b91506132a982613242565b604082019050919050565b600060208201905081810360008301526132cd81613291565b9050919050565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b60006133306029836120b3565b915061333b826132d4565b604082019050919050565b6000602082019050818103600083015261335f81613323565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061339c6020836120b3565b91506133a782613366565b602082019050919050565b600060208201905081810360008301526133cb8161338f565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061342e6021836120b3565b9150613439826133d2565b604082019050919050565b6000602082019050818103600083015261345d81613421565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006134c06022836120b3565b91506134cb82613464565b604082019050919050565b600060208201905081810360008301526134ef816134b3565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000613552602b836120b3565b915061355d826134f6565b604082019050919050565b6000602082019050818103600083015261358181613545565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006135be601f836120b3565b91506135c982613588565b602082019050919050565b600060208201905081810360008301526135ed816135b1565b9050919050565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b6000613650602d836120b3565b915061365b826135f4565b604082019050919050565b6000602082019050818103600083015261367f81613643565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026136e87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826136ab565b6136f286836136ab565b95508019841693508086168417925050509392505050565b600061372561372061371b846121cc565b612d29565b6121cc565b9050919050565b6000819050919050565b61373f8361370a565b61375361374b8261372c565b8484546136b8565b825550505050565b600090565b61376861375b565b613773818484613736565b505050565b5b818110156137975761378c600082613760565b600181019050613779565b5050565b601f8211156137dc576137ad81613686565b6137b68461369b565b810160208510156137c5578190505b6137d96137d18561369b565b830182613778565b50505b505050565b600082821c905092915050565b60006137ff600019846008026137e1565b1980831691505092915050565b600061381883836137ee565b9150826002028217905092915050565b613831826120a8565b67ffffffffffffffff81111561384a5761384961235e565b5b6138548254612734565b61385f82828561379b565b600060209050601f8311600181146138925760008415613880578287015190505b61388a858261380c565b8655506138f2565b601f1984166138a086613686565b60005b828110156138c8578489015182556001820191506020850194506020810190506138a3565b868310156138e557848901516138e1601f8916826137ee565b8355505b6001600288020188555050505b505050505050565b7f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b60006139566026836120b3565b9150613961826138fa565b604082019050919050565b6000602082019050818103600083015261398581613949565b9050919050565b600081519050919050565b600081905092915050565b60006139ad8261398c565b6139b78185613997565b93506139c78185602086016120c4565b80840191505092915050565b60006139df82846139a2565b91508190509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e3afb5a7553b9bcd97eba3503496cde01a137d39c55ea6fc6d7b5f37aadfff7d64736f6c63430008120033
Deployed Bytecode Sourcemap
53685:2175:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42200:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44550:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43319:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45331:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43162:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30368:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53925:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54717:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46035:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55171:213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30827:225;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30046:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43490:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35199:103;;;;;;;;;;;;;:::i;:::-;;54380:148;;;;;;;;;;;;;:::i;:::-;;34551:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42419:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55478:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46776:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43823:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44079:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35457:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42200:100;42254:13;42287:5;42280:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42200:100;:::o;44550:201::-;44633:4;44650:13;44666:12;:10;:12::i;:::-;44650:28;;44689:32;44698:5;44705:7;44714:6;44689:8;:32::i;:::-;44739:4;44732:11;;;44550:201;;;;:::o;43319:108::-;43380:7;43407:12;;43400:19;;43319:108;:::o;45331:295::-;45462:4;45479:15;45497:12;:10;:12::i;:::-;45479:30;;45520:38;45536:4;45542:7;45551:6;45520:15;:38::i;:::-;45569:27;45579:4;45585:2;45589:6;45569:9;:27::i;:::-;45614:4;45607:11;;;45331:295;;;;;:::o;43162:92::-;43220:5;43245:1;43238:8;;43162:92;:::o;30368:200::-;28916:6;28899:23;;28907:4;28899:23;;;28891:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29014:6;28990:30;;:20;:18;:20::i;:::-;:30;;;28982:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;30452:36:::1;30470:17;30452;:36::i;:::-;30499:61;30521:17;30550:1;30540:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30554:5;30499:21;:61::i;:::-;30368:200:::0;:::o;53925:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;54717:315::-;34437:13;:11;:13::i;:::-;54828:3:::1;54812:5;:12;:19;;54804:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;54877:9;54872:159;54892:5;:12;54888:1;:16;54872:159;;;54938:5;54916:9;:19;54926:5;54932:1;54926:8;;;;;;;;:::i;:::-;;;;;;;;54916:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;54972:5;54978:1;54972:8;;;;;;;;:::i;:::-;;;;;;;;54953:35;;;54982:5;54953:35;;;;;;:::i;:::-;;;;;;;;54906:3;;;;;:::i;:::-;;;;54872:159;;;;54717:315:::0;;:::o;46035:238::-;46123:4;46140:13;46156:12;:10;:12::i;:::-;46140:28;;46179:64;46188:5;46195:7;46232:10;46204:25;46214:5;46221:7;46204:9;:25::i;:::-;:38;;;;:::i;:::-;46179:8;:64::i;:::-;46261:4;46254:11;;;46035:238;;;;:::o;55171:213::-;55250:4;55225:29;;:9;:21;55235:10;55225:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;55216:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;55288:26;55294:12;:10;:12::i;:::-;55308:5;55288;:26::i;:::-;55335:10;55330:23;;;55347:5;55330:23;;;;;;:::i;:::-;;;;;;;;55171:213;:::o;30827:225::-;28916:6;28899:23;;28907:4;28899:23;;;28891:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29014:6;28990:30;;:20;:18;:20::i;:::-;:30;;;28982:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;30945:36:::1;30963:17;30945;:36::i;:::-;30992:52;31014:17;31033:4;31039;30992:21;:52::i;:::-;30827:225:::0;;:::o;30046:133::-;30124:7;29361:6;29344:23;;29352:4;29344:23;;;29336:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;20415:66:::1;30151:20;;30144:27;;30046:133:::0;:::o;43490:127::-;43564:7;43591:9;:18;43601:7;43591:18;;;;;;;;;;;;;;;;43584:25;;43490:127;;;:::o;35199:103::-;34437:13;:11;:13::i;:::-;35264:30:::1;35291:1;35264:18;:30::i;:::-;35199:103::o:0;54380:148::-;15887:19;15910:13;;;;;;;;;;;15909:14;15887:36;;15957:14;:34;;;;;15990:1;15975:12;;;;;;;;;;:16;;;15957:34;15956:108;;;;15998:44;16036:4;15998:29;:44::i;:::-;15997:45;:66;;;;;16062:1;16046:12;;;;;;;;;;:17;;;15997:66;15956:108;15934:204;;;;;;;;;;;;:::i;:::-;;;;;;;;;16164:1;16149:12;;:16;;;;;;;;;;;;;;;;;;16180:14;16176:67;;;16227:4;16211:13;;:20;;;;;;;;;;;;;;;;;;16176:67;54424:30:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:30::i;:::-;54457:16;:14;:16::i;:::-;54476:48;54483:10;54513;:8;:10::i;:::-;54508:2;:15;;;;:::i;:::-;54496:9;:27;;;;:::i;:::-;54476:5;:48::i;:::-;16269:14:::0;16265:102;;;16316:5;16300:13;;:21;;;;;;;;;;;;;;;;;;16341:14;16353:1;16341:14;;;;;;:::i;:::-;;;;;;;;16265:102;15876:498;54380:148::o;34551:87::-;34597:7;34624:6;;;;;;;;;;;34617:13;;34551:87;:::o;42419:104::-;42475:13;42508:7;42501:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42419:104;:::o;55478:148::-;34437:13;:11;:13::i;:::-;55534:28:::1;55541:10;55554:7;55534:5;:28::i;:::-;55577:10;55572:25;;;55589:7;55572:25;;;;;;:::i;:::-;;;;;;;;55478:148:::0;:::o;46776:436::-;46869:4;46886:13;46902:12;:10;:12::i;:::-;46886:28;;46925:24;46952:25;46962:5;46969:7;46952:9;:25::i;:::-;46925:52;;47016:15;46996:16;:35;;46988:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;47109:60;47118:5;47125:7;47153:15;47134:16;:34;47109:8;:60::i;:::-;47200:4;47193:11;;;;46776:436;;;;:::o;43823:193::-;43902:4;43919:13;43935:12;:10;:12::i;:::-;43919:28;;43958;43968:5;43975:2;43979:6;43958:9;:28::i;:::-;44004:4;43997:11;;;43823:193;;;;:::o;44079:151::-;44168:7;44195:11;:18;44207:5;44195:18;;;;;;;;;;;;;;;:27;44214:7;44195:27;;;;;;;;;;;;;;;;44188:34;;44079:151;;;;:::o;35457:201::-;34437:13;:11;:13::i;:::-;35566:1:::1;35546:22;;:8;:22;;::::0;35538:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35622:28;35641:8;35622:18;:28::i;:::-;35457:201:::0;:::o;32657:98::-;32710:7;32737:10;32730:17;;32657:98;:::o;50803:380::-;50956:1;50939:19;;:5;:19;;;50931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51037:1;51018:21;;:7;:21;;;51010:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51121:6;51091:11;:18;51103:5;51091:18;;;;;;;;;;;;;;;:27;51110:7;51091:27;;;;;;;;;;;;;;;:36;;;;51159:7;51143:32;;51152:5;51143:32;;;51168:6;51143:32;;;;;;:::i;:::-;;;;;;;;50803:380;;;:::o;51474:453::-;51609:24;51636:25;51646:5;51653:7;51636:9;:25::i;:::-;51609:52;;51696:17;51676:16;:37;51672:248;;51758:6;51738:16;:26;;51730:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51842:51;51851:5;51858:7;51886:6;51867:16;:25;51842:8;:51::i;:::-;51672:248;51598:329;51474:453;;;:::o;47682:840::-;47829:1;47813:18;;:4;:18;;;47805:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47906:1;47892:16;;:2;:16;;;47884:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;47961:38;47982:4;47988:2;47992:6;47961:20;:38::i;:::-;48012:19;48034:9;:15;48044:4;48034:15;;;;;;;;;;;;;;;;48012:37;;48083:6;48068:11;:21;;48060:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;48200:6;48186:11;:20;48168:9;:15;48178:4;48168:15;;;;;;;;;;;;;;;:38;;;;48403:6;48386:9;:13;48396:2;48386:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;48453:2;48438:26;;48447:4;48438:26;;;48457:6;48438:26;;;;;;:::i;:::-;;;;;;;;48477:37;48497:4;48503:2;48507:6;48477:19;:37::i;:::-;47794:728;47682:840;;;:::o;20696:153::-;20749:7;20776:59;20415:66;20814:20;;20776:37;:59::i;:::-;:65;;;;;;;;;;;;20769:72;;20696:153;:::o;55766:91::-;34437:13;:11;:13::i;:::-;55766:91;:::o;22114:992::-;22568:53;20067:66;22606:14;;22568:37;:53::i;:::-;:59;;;;;;;;;;;;22564:535;;;22644:37;22663:17;22644:18;:37::i;:::-;22564:535;;;22747:17;22718:61;;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22714:306;;22948:56;;;;;;;;;;:::i;:::-;;;;;;;;22714:306;20415:66;22840:20;;22832:4;:28;22824:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;22782:140;23034:53;23052:17;23071:4;23077:9;23034:17;:53::i;:::-;22564:535;22114:992;;;:::o;34716:132::-;34791:12;:10;:12::i;:::-;34780:23;;:7;:5;:7::i;:::-;:23;;;34772:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34716:132::o;49690:675::-;49793:1;49774:21;;:7;:21;;;49766:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49846:49;49867:7;49884:1;49888:6;49846:20;:49::i;:::-;49908:22;49933:9;:18;49943:7;49933:18;;;;;;;;;;;;;;;;49908:43;;49988:6;49970:14;:24;;49962:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50107:6;50090:14;:23;50069:9;:18;50079:7;50069:18;;;;;;;;;;;;;;;:44;;;;50224:6;50208:12;;:22;;;;;;;;;;;50285:1;50259:37;;50268:7;50259:37;;;50289:6;50259:37;;;;;;:::i;:::-;;;;;;;;50309:48;50329:7;50346:1;50350:6;50309:19;:48::i;:::-;49755:610;49690:675;;:::o;35818:191::-;35892:16;35911:6;;;;;;;;;;;35892:25;;35937:8;35928:6;;:17;;;;;;;;;;;;;;;;;;35992:8;35961:40;;35982:8;35961:40;;;;;;;;;;;;35881:128;35818:191;:::o;5326:326::-;5386:4;5643:1;5621:7;:19;;;:23;5614:30;;5326:326;;;:::o;41811:149::-;18030:13;;;;;;;;;;;18022:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;41914:38:::1;41937:5;41944:7;41914:22;:38::i;:::-;41811:149:::0;;:::o;34094:97::-;18030:13;;;;;;;;;;;18022:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:26:::1;:24;:26::i;:::-;34094:97::o:0;48809:548::-;48912:1;48893:21;;:7;:21;;;48885:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48963:49;48992:1;48996:7;49005:6;48963:20;:49::i;:::-;49041:6;49025:12;;:22;;;;;;;:::i;:::-;;;;;;;;49218:6;49196:9;:18;49206:7;49196:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;49272:7;49251:37;;49268:1;49251:37;;;49281:6;49251:37;;;;;;:::i;:::-;;;;;;;;49301:48;49329:1;49333:7;49342:6;49301:19;:48::i;:::-;48809:548;;:::o;52527:125::-;;;;:::o;53256:124::-;;;;:::o;1676:195::-;1737:21;1849:4;1839:14;;1676:195;;;:::o;1974:::-;2035:21;2147:4;2137:14;;1974:195;;;:::o;20945:284::-;21027:48;21057:17;21027:29;:48::i;:::-;21019:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;21204:17;21136:59;20415:66;21174:20;;21136:37;:59::i;:::-;:65;;;:85;;;;;;;;;;;;;;;;;;20945:284;:::o;21638:297::-;21781:29;21792:17;21781:10;:29::i;:::-;21839:1;21825:4;:11;:15;:28;;;;21844:9;21825:28;21821:107;;;21870:46;21892:17;21911:4;21870:21;:46::i;:::-;;21821:107;21638:297;;;:::o;41968:162::-;18030:13;;;;;;;;;;;18022:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42089:5:::1;42081;:13;;;;;;:::i;:::-;;42115:7;42105;:17;;;;;;:::i;:::-;;41968:162:::0;;:::o;34199:113::-;18030:13;;;;;;;;;;;18022:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;34272:32:::1;34291:12;:10;:12::i;:::-;34272:18;:32::i;:::-;34199:113::o:0;21342:155::-;21409:37;21428:17;21409:18;:37::i;:::-;21471:17;21462:27;;;;;;;;;;;;21342:155;:::o;26375:461::-;26458:12;26491:37;26521:6;26491:29;:37::i;:::-;26483:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;26645:12;26659:23;26686:6;:19;;26706:4;26686:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26644:67;;;;26729:99;26765:7;26774:10;26729:99;;;;;;;;;;;;;;;;;:35;:99::i;:::-;26722:106;;;;26375:461;;;;:::o;11736:305::-;11886:12;11915:7;11911:123;;;11946:10;11939:17;;;;11911:123;11989:33;11997:10;12009:12;11989:7;:33::i;:::-;11736:305;;;;;;:::o;12049:552::-;12230:1;12210:10;:17;:21;12206:388;;;12442:10;12436:17;12499:15;12486:10;12482:2;12478:19;12471:44;12206:388;12569:12;12562: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:117::-;5297:1;5294;5287:12;5311:180;5359:77;5356:1;5349:88;5456:4;5453:1;5446:15;5480:4;5477:1;5470:15;5497:281;5580:27;5602:4;5580:27;:::i;:::-;5572:6;5568:40;5710:6;5698:10;5695:22;5674:18;5662:10;5659:34;5656:62;5653:88;;;5721:18;;:::i;:::-;5653:88;5761:10;5757:2;5750:22;5540:238;5497:281;;:::o;5784:129::-;5818:6;5845:20;;:::i;:::-;5835:30;;5874:33;5902:4;5894:6;5874:33;:::i;:::-;5784:129;;;:::o;5919:311::-;5996:4;6086:18;6078:6;6075:30;6072:56;;;6108:18;;:::i;:::-;6072:56;6158:4;6150:6;6146:17;6138:25;;6218:4;6212;6208:15;6200:23;;5919:311;;;:::o;6236:117::-;6345:1;6342;6335:12;6376:710;6472:5;6497:81;6513:64;6570:6;6513:64;:::i;:::-;6497:81;:::i;:::-;6488:90;;6598:5;6627:6;6620:5;6613:21;6661:4;6654:5;6650:16;6643:23;;6714:4;6706:6;6702:17;6694:6;6690:30;6743:3;6735:6;6732:15;6729:122;;;6762:79;;:::i;:::-;6729:122;6877:6;6860:220;6894:6;6889:3;6886:15;6860:220;;;6969:3;6998:37;7031:3;7019:10;6998:37;:::i;:::-;6993:3;6986:50;7065:4;7060:3;7056:14;7049:21;;6936:144;6920:4;6915:3;6911:14;6904:21;;6860:220;;;6864:21;6478:608;;6376:710;;;;;:::o;7109:370::-;7180:5;7229:3;7222:4;7214:6;7210:17;7206:27;7196:122;;7237:79;;:::i;:::-;7196:122;7354:6;7341:20;7379:94;7469:3;7461:6;7454:4;7446:6;7442:17;7379:94;:::i;:::-;7370:103;;7186:293;7109:370;;;;:::o;7485:116::-;7555:21;7570:5;7555:21;:::i;:::-;7548:5;7545:32;7535:60;;7591:1;7588;7581:12;7535:60;7485:116;:::o;7607:133::-;7650:5;7688:6;7675:20;7666:29;;7704:30;7728:5;7704:30;:::i;:::-;7607:133;;;;:::o;7746:678::-;7836:6;7844;7893:2;7881:9;7872:7;7868:23;7864:32;7861:119;;;7899:79;;:::i;:::-;7861:119;8047:1;8036:9;8032:17;8019:31;8077:18;8069:6;8066:30;8063:117;;;8099:79;;:::i;:::-;8063:117;8204:78;8274:7;8265:6;8254:9;8250:22;8204:78;:::i;:::-;8194:88;;7990:302;8331:2;8357:50;8399:7;8390:6;8379:9;8375:22;8357:50;:::i;:::-;8347:60;;8302:115;7746:678;;;;;:::o;8430:329::-;8489:6;8538:2;8526:9;8517:7;8513:23;8509:32;8506:119;;;8544:79;;:::i;:::-;8506:119;8664:1;8689:53;8734:7;8725:6;8714:9;8710:22;8689:53;:::i;:::-;8679:63;;8635:117;8430:329;;;;:::o;8765:117::-;8874:1;8871;8864:12;8888:307;8949:4;9039:18;9031:6;9028:30;9025:56;;;9061:18;;:::i;:::-;9025:56;9099:29;9121:6;9099:29;:::i;:::-;9091:37;;9183:4;9177;9173:15;9165:23;;8888:307;;;:::o;9201:146::-;9298:6;9293:3;9288;9275:30;9339:1;9330:6;9325:3;9321:16;9314:27;9201:146;;;:::o;9353:423::-;9430:5;9455:65;9471:48;9512:6;9471:48;:::i;:::-;9455:65;:::i;:::-;9446:74;;9543:6;9536:5;9529:21;9581:4;9574:5;9570:16;9619:3;9610:6;9605:3;9601:16;9598:25;9595:112;;;9626:79;;:::i;:::-;9595:112;9716:54;9763:6;9758:3;9753;9716:54;:::i;:::-;9436:340;9353:423;;;;;:::o;9795:338::-;9850:5;9899:3;9892:4;9884:6;9880:17;9876:27;9866:122;;9907:79;;:::i;:::-;9866:122;10024:6;10011:20;10049:78;10123:3;10115:6;10108:4;10100:6;10096:17;10049:78;:::i;:::-;10040:87;;9856:277;9795:338;;;;:::o;10139:652::-;10216:6;10224;10273:2;10261:9;10252:7;10248:23;10244:32;10241:119;;;10279:79;;:::i;:::-;10241:119;10399:1;10424:53;10469:7;10460:6;10449:9;10445:22;10424:53;:::i;:::-;10414:63;;10370:117;10554:2;10543:9;10539:18;10526:32;10585:18;10577:6;10574:30;10571:117;;;10607:79;;:::i;:::-;10571:117;10712:62;10766:7;10757:6;10746:9;10742:22;10712:62;:::i;:::-;10702:72;;10497:287;10139:652;;;;;:::o;10797:77::-;10834:7;10863:5;10852:16;;10797:77;;;:::o;10880:118::-;10967:24;10985:5;10967:24;:::i;:::-;10962:3;10955:37;10880:118;;:::o;11004:222::-;11097:4;11135:2;11124:9;11120:18;11112:26;;11148:71;11216:1;11205:9;11201:17;11192:6;11148:71;:::i;:::-;11004:222;;;;:::o;11232:118::-;11319:24;11337:5;11319:24;:::i;:::-;11314:3;11307:37;11232:118;;:::o;11356:222::-;11449:4;11487:2;11476:9;11472:18;11464:26;;11500:71;11568:1;11557:9;11553:17;11544:6;11500:71;:::i;:::-;11356:222;;;;:::o;11584:474::-;11652:6;11660;11709:2;11697:9;11688:7;11684:23;11680:32;11677:119;;;11715:79;;:::i;:::-;11677:119;11835:1;11860:53;11905:7;11896:6;11885:9;11881:22;11860:53;:::i;:::-;11850:63;;11806:117;11962:2;11988:53;12033:7;12024:6;12013:9;12009:22;11988:53;:::i;:::-;11978:63;;11933:118;11584:474;;;;;:::o;12064:180::-;12112:77;12109:1;12102:88;12209:4;12206:1;12199:15;12233:4;12230:1;12223:15;12250:320;12294:6;12331:1;12325:4;12321:12;12311:22;;12378:1;12372:4;12368:12;12399:18;12389:81;;12455:4;12447:6;12443:17;12433:27;;12389:81;12517:2;12509:6;12506:14;12486:18;12483:38;12480:84;;12536:18;;:::i;:::-;12480:84;12301:269;12250:320;;;:::o;12576:231::-;12716:34;12712:1;12704:6;12700:14;12693:58;12785:14;12780:2;12772:6;12768:15;12761:39;12576:231;:::o;12813:366::-;12955:3;12976:67;13040:2;13035:3;12976:67;:::i;:::-;12969:74;;13052:93;13141:3;13052:93;:::i;:::-;13170:2;13165:3;13161:12;13154:19;;12813:366;;;:::o;13185:419::-;13351:4;13389:2;13378:9;13374:18;13366:26;;13438:9;13432:4;13428:20;13424:1;13413:9;13409:17;13402:47;13466:131;13592:4;13466:131;:::i;:::-;13458:139;;13185:419;;;:::o;13610:231::-;13750:34;13746:1;13738:6;13734:14;13727:58;13819:14;13814:2;13806:6;13802:15;13795:39;13610:231;:::o;13847:366::-;13989:3;14010:67;14074:2;14069:3;14010:67;:::i;:::-;14003:74;;14086:93;14175:3;14086:93;:::i;:::-;14204:2;14199:3;14195:12;14188:19;;13847:366;;;:::o;14219:419::-;14385:4;14423:2;14412:9;14408:18;14400:26;;14472:9;14466:4;14462:20;14458:1;14447:9;14443:17;14436:47;14500:131;14626:4;14500:131;:::i;:::-;14492:139;;14219:419;;;:::o;14644:180::-;14784:32;14780:1;14772:6;14768:14;14761:56;14644:180;:::o;14830:366::-;14972:3;14993:67;15057:2;15052:3;14993:67;:::i;:::-;14986:74;;15069:93;15158:3;15069:93;:::i;:::-;15187:2;15182:3;15178:12;15171:19;;14830:366;;;:::o;15202:419::-;15368:4;15406:2;15395:9;15391:18;15383:26;;15455:9;15449:4;15445:20;15441:1;15430:9;15426:17;15419:47;15483:131;15609:4;15483:131;:::i;:::-;15475:139;;15202:419;;;:::o;15627:180::-;15675:77;15672:1;15665:88;15772:4;15769:1;15762:15;15796:4;15793:1;15786:15;15813:180;15861:77;15858:1;15851:88;15958:4;15955:1;15948:15;15982:4;15979:1;15972:15;15999:233;16038:3;16061:24;16079:5;16061:24;:::i;:::-;16052:33;;16107:66;16100:5;16097:77;16094:103;;16177:18;;:::i;:::-;16094:103;16224:1;16217:5;16213:13;16206:20;;15999:233;;;:::o;16238:191::-;16278:3;16297:20;16315:1;16297:20;:::i;:::-;16292:25;;16331:20;16349:1;16331:20;:::i;:::-;16326:25;;16374:1;16371;16367:9;16360:16;;16395:3;16392:1;16389:10;16386:36;;;16402:18;;:::i;:::-;16386:36;16238:191;;;;:::o;16435:169::-;16575:21;16571:1;16563:6;16559:14;16552:45;16435:169;:::o;16610:366::-;16752:3;16773:67;16837:2;16832:3;16773:67;:::i;:::-;16766:74;;16849:93;16938:3;16849:93;:::i;:::-;16967:2;16962:3;16958:12;16951:19;;16610:366;;;:::o;16982:419::-;17148:4;17186:2;17175:9;17171:18;17163:26;;17235:9;17229:4;17225:20;17221:1;17210:9;17206:17;17199:47;17263:131;17389:4;17263:131;:::i;:::-;17255:139;;16982:419;;;:::o;17407:243::-;17547:34;17543:1;17535:6;17531:14;17524:58;17616:26;17611:2;17603:6;17599:15;17592:51;17407:243;:::o;17656:366::-;17798:3;17819:67;17883:2;17878:3;17819:67;:::i;:::-;17812:74;;17895:93;17984:3;17895:93;:::i;:::-;18013:2;18008:3;18004:12;17997:19;;17656:366;;;:::o;18028:419::-;18194:4;18232:2;18221:9;18217:18;18209:26;;18281:9;18275:4;18271:20;18267:1;18256:9;18252:17;18245:47;18309:131;18435:4;18309:131;:::i;:::-;18301:139;;18028:419;;;:::o;18453:233::-;18593:34;18589:1;18581:6;18577:14;18570:58;18662:16;18657:2;18649:6;18645:15;18638:41;18453:233;:::o;18692:366::-;18834:3;18855:67;18919:2;18914:3;18855:67;:::i;:::-;18848:74;;18931:93;19020:3;18931:93;:::i;:::-;19049:2;19044:3;19040:12;19033:19;;18692:366;;;:::o;19064:419::-;19230:4;19268:2;19257:9;19253:18;19245:26;;19317:9;19311:4;19307:20;19303:1;19292:9;19288:17;19281:47;19345:131;19471:4;19345:131;:::i;:::-;19337:139;;19064:419;;;:::o;19489:102::-;19531:8;19578:5;19575:1;19571:13;19550:34;;19489:102;;;:::o;19597:848::-;19658:5;19665:4;19689:6;19680:15;;19713:5;19704:14;;19727:712;19748:1;19738:8;19735:15;19727:712;;;19843:4;19838:3;19834:14;19828:4;19825:24;19822:50;;;19852:18;;:::i;:::-;19822:50;19902:1;19892:8;19888:16;19885:451;;;20317:4;20310:5;20306:16;20297:25;;19885:451;20367:4;20361;20357:15;20349:23;;20397:32;20420:8;20397:32;:::i;:::-;20385:44;;19727:712;;;19597:848;;;;;;;:::o;20451:1073::-;20505:5;20696:8;20686:40;;20717:1;20708:10;;20719:5;;20686:40;20745:4;20735:36;;20762:1;20753:10;;20764:5;;20735:36;20831:4;20879:1;20874:27;;;;20915:1;20910:191;;;;20824:277;;20874:27;20892:1;20883:10;;20894:5;;;20910:191;20955:3;20945:8;20942:17;20939:43;;;20962:18;;:::i;:::-;20939:43;21011:8;21008:1;21004:16;20995:25;;21046:3;21039:5;21036:14;21033:40;;;21053:18;;:::i;:::-;21033:40;21086:5;;;20824:277;;21210:2;21200:8;21197:16;21191:3;21185:4;21182:13;21178:36;21160:2;21150:8;21147:16;21142:2;21136:4;21133:12;21129:35;21113:111;21110:246;;;21266:8;21260:4;21256:19;21247:28;;21301:3;21294:5;21291:14;21288:40;;;21308:18;;:::i;:::-;21288:40;21341:5;;21110:246;21381:42;21419:3;21409:8;21403:4;21400:1;21381:42;:::i;:::-;21366:57;;;;21455:4;21450:3;21446:14;21439:5;21436:25;21433:51;;;21464:18;;:::i;:::-;21433:51;21513:4;21506:5;21502:16;21493:25;;20451:1073;;;;;;:::o;21530:281::-;21588:5;21612:23;21630:4;21612:23;:::i;:::-;21604:31;;21656:25;21672:8;21656:25;:::i;:::-;21644:37;;21700:104;21737:66;21727:8;21721:4;21700:104;:::i;:::-;21691:113;;21530:281;;;;:::o;21817:410::-;21857:7;21880:20;21898:1;21880:20;:::i;:::-;21875:25;;21914:20;21932:1;21914:20;:::i;:::-;21909:25;;21969:1;21966;21962:9;21991:30;22009:11;21991:30;:::i;:::-;21980:41;;22170:1;22161:7;22157:15;22154:1;22151:22;22131:1;22124:9;22104:83;22081:139;;22200:18;;:::i;:::-;22081:139;21865:362;21817:410;;;;:::o;22233:85::-;22278:7;22307:5;22296:16;;22233:85;;;:::o;22324:60::-;22352:3;22373:5;22366:12;;22324:60;;;:::o;22390:154::-;22446:9;22479:59;22495:42;22504:32;22530:5;22504:32;:::i;:::-;22495:42;:::i;:::-;22479:59;:::i;:::-;22466:72;;22390:154;;;:::o;22550:143::-;22643:43;22680:5;22643:43;:::i;:::-;22638:3;22631:56;22550:143;;:::o;22699:234::-;22798:4;22836:2;22825:9;22821:18;22813:26;;22849:77;22923:1;22912:9;22908:17;22899:6;22849:77;:::i;:::-;22699:234;;;;:::o;22939:224::-;23079:34;23075:1;23067:6;23063:14;23056:58;23148:7;23143:2;23135:6;23131:15;23124:32;22939:224;:::o;23169:366::-;23311:3;23332:67;23396:2;23391:3;23332:67;:::i;:::-;23325:74;;23408:93;23497:3;23408:93;:::i;:::-;23526:2;23521:3;23517:12;23510:19;;23169:366;;;:::o;23541:419::-;23707:4;23745:2;23734:9;23730:18;23722:26;;23794:9;23788:4;23784:20;23780:1;23769:9;23765:17;23758:47;23822:131;23948:4;23822:131;:::i;:::-;23814:139;;23541:419;;;:::o;23966:225::-;24106:34;24102:1;24094:6;24090:14;24083:58;24175:8;24170:2;24162:6;24158:15;24151:33;23966:225;:::o;24197:366::-;24339:3;24360:67;24424:2;24419:3;24360:67;:::i;:::-;24353:74;;24436:93;24525:3;24436:93;:::i;:::-;24554:2;24549:3;24545:12;24538:19;;24197:366;;;:::o;24569:419::-;24735:4;24773:2;24762:9;24758:18;24750:26;;24822:9;24816:4;24812:20;24808:1;24797:9;24793:17;24786:47;24850:131;24976:4;24850:131;:::i;:::-;24842:139;;24569:419;;;:::o;24994:223::-;25134:34;25130:1;25122:6;25118:14;25111:58;25203:6;25198:2;25190:6;25186:15;25179:31;24994:223;:::o;25223:366::-;25365:3;25386:67;25450:2;25445:3;25386:67;:::i;:::-;25379:74;;25462:93;25551:3;25462:93;:::i;:::-;25580:2;25575:3;25571:12;25564:19;;25223:366;;;:::o;25595:419::-;25761:4;25799:2;25788:9;25784:18;25776:26;;25848:9;25842:4;25838:20;25834:1;25823:9;25819:17;25812:47;25876:131;26002:4;25876:131;:::i;:::-;25868:139;;25595:419;;;:::o;26020:221::-;26160:34;26156:1;26148:6;26144:14;26137:58;26229:4;26224:2;26216:6;26212:15;26205:29;26020:221;:::o;26247:366::-;26389:3;26410:67;26474:2;26469:3;26410:67;:::i;:::-;26403:74;;26486:93;26575:3;26486:93;:::i;:::-;26604:2;26599:3;26595:12;26588:19;;26247:366;;;:::o;26619:419::-;26785:4;26823:2;26812:9;26808:18;26800:26;;26872:9;26866:4;26862:20;26858:1;26847:9;26843:17;26836:47;26900:131;27026:4;26900:131;:::i;:::-;26892:139;;26619:419;;;:::o;27044:179::-;27184:31;27180:1;27172:6;27168:14;27161:55;27044:179;:::o;27229:366::-;27371:3;27392:67;27456:2;27451:3;27392:67;:::i;:::-;27385:74;;27468:93;27557:3;27468:93;:::i;:::-;27586:2;27581:3;27577:12;27570:19;;27229:366;;;:::o;27601:419::-;27767:4;27805:2;27794:9;27790:18;27782:26;;27854:9;27848:4;27844:20;27840:1;27829:9;27825:17;27818:47;27882:131;28008:4;27882:131;:::i;:::-;27874:139;;27601:419;;;:::o;28026:224::-;28166:34;28162:1;28154:6;28150:14;28143:58;28235:7;28230:2;28222:6;28218:15;28211:32;28026:224;:::o;28256:366::-;28398:3;28419:67;28483:2;28478:3;28419:67;:::i;:::-;28412:74;;28495:93;28584:3;28495:93;:::i;:::-;28613:2;28608:3;28604:12;28597:19;;28256:366;;;:::o;28628:419::-;28794:4;28832:2;28821:9;28817:18;28809:26;;28881:9;28875:4;28871:20;28867:1;28856:9;28852:17;28845:47;28909:131;29035:4;28909:131;:::i;:::-;28901:139;;28628:419;;;:::o;29053:222::-;29193:34;29189:1;29181:6;29177:14;29170:58;29262:5;29257:2;29249:6;29245:15;29238:30;29053:222;:::o;29281:366::-;29423:3;29444:67;29508:2;29503:3;29444:67;:::i;:::-;29437:74;;29520:93;29609:3;29520:93;:::i;:::-;29638:2;29633:3;29629:12;29622:19;;29281:366;;;:::o;29653:419::-;29819:4;29857:2;29846:9;29842:18;29834:26;;29906:9;29900:4;29896:20;29892:1;29881:9;29877:17;29870:47;29934:131;30060:4;29934:131;:::i;:::-;29926:139;;29653:419;;;:::o;30078:225::-;30218:34;30214:1;30206:6;30202:14;30195:58;30287:8;30282:2;30274:6;30270:15;30263:33;30078:225;:::o;30309:366::-;30451:3;30472:67;30536:2;30531:3;30472:67;:::i;:::-;30465:74;;30548:93;30637:3;30548:93;:::i;:::-;30666:2;30661:3;30657:12;30650:19;;30309:366;;;:::o;30681:419::-;30847:4;30885:2;30874:9;30870:18;30862:26;;30934:9;30928:4;30924:20;30920:1;30909:9;30905:17;30898:47;30962:131;31088:4;30962:131;:::i;:::-;30954:139;;30681:419;;;:::o;31106:122::-;31179:24;31197:5;31179:24;:::i;:::-;31172:5;31169:35;31159:63;;31218:1;31215;31208:12;31159:63;31106:122;:::o;31234:143::-;31291:5;31322:6;31316:13;31307:22;;31338:33;31365:5;31338:33;:::i;:::-;31234:143;;;;:::o;31383:351::-;31453:6;31502:2;31490:9;31481:7;31477:23;31473:32;31470:119;;;31508:79;;:::i;:::-;31470:119;31628:1;31653:64;31709:7;31700:6;31689:9;31685:22;31653:64;:::i;:::-;31643:74;;31599:128;31383:351;;;;:::o;31740:233::-;31880:34;31876:1;31868:6;31864:14;31857:58;31949:16;31944:2;31936:6;31932:15;31925:41;31740:233;:::o;31979:366::-;32121:3;32142:67;32206:2;32201:3;32142:67;:::i;:::-;32135:74;;32218:93;32307:3;32218:93;:::i;:::-;32336:2;32331:3;32327:12;32320:19;;31979:366;;;:::o;32351:419::-;32517:4;32555:2;32544:9;32540:18;32532:26;;32604:9;32598:4;32594:20;32590:1;32579:9;32575:17;32568:47;32632:131;32758:4;32632:131;:::i;:::-;32624:139;;32351:419;;;:::o;32776:228::-;32916:34;32912:1;32904:6;32900:14;32893:58;32985:11;32980:2;32972:6;32968:15;32961:36;32776:228;:::o;33010:366::-;33152:3;33173:67;33237:2;33232:3;33173:67;:::i;:::-;33166:74;;33249:93;33338:3;33249:93;:::i;:::-;33367:2;33362:3;33358:12;33351:19;;33010:366;;;:::o;33382:419::-;33548:4;33586:2;33575:9;33571:18;33563:26;;33635:9;33629:4;33625:20;33621:1;33610:9;33606:17;33599:47;33663:131;33789:4;33663:131;:::i;:::-;33655:139;;33382:419;;;:::o;33807:182::-;33947:34;33943:1;33935:6;33931:14;33924:58;33807:182;:::o;33995:366::-;34137:3;34158:67;34222:2;34217:3;34158:67;:::i;:::-;34151:74;;34234:93;34323:3;34234:93;:::i;:::-;34352:2;34347:3;34343:12;34336:19;;33995:366;;;:::o;34367:419::-;34533:4;34571:2;34560:9;34556:18;34548:26;;34620:9;34614:4;34610:20;34606:1;34595:9;34591:17;34584:47;34648:131;34774:4;34648:131;:::i;:::-;34640:139;;34367:419;;;:::o;34792:220::-;34932:34;34928:1;34920:6;34916:14;34909:58;35001:3;34996:2;34988:6;34984:15;34977:28;34792:220;:::o;35018:366::-;35160:3;35181:67;35245:2;35240:3;35181:67;:::i;:::-;35174:74;;35257:93;35346:3;35257:93;:::i;:::-;35375:2;35370:3;35366:12;35359:19;;35018:366;;;:::o;35390:419::-;35556:4;35594:2;35583:9;35579:18;35571:26;;35643:9;35637:4;35633:20;35629:1;35618:9;35614:17;35607:47;35671:131;35797:4;35671:131;:::i;:::-;35663:139;;35390:419;;;:::o;35815:221::-;35955:34;35951:1;35943:6;35939:14;35932:58;36024:4;36019:2;36011:6;36007:15;36000:29;35815:221;:::o;36042:366::-;36184:3;36205:67;36269:2;36264:3;36205:67;:::i;:::-;36198:74;;36281:93;36370:3;36281:93;:::i;:::-;36399:2;36394:3;36390:12;36383:19;;36042:366;;;:::o;36414:419::-;36580:4;36618:2;36607:9;36603:18;36595:26;;36667:9;36661:4;36657:20;36653:1;36642:9;36638:17;36631:47;36695:131;36821:4;36695:131;:::i;:::-;36687:139;;36414:419;;;:::o;36839:230::-;36979:34;36975:1;36967:6;36963:14;36956:58;37048:13;37043:2;37035:6;37031:15;37024:38;36839:230;:::o;37075:366::-;37217:3;37238:67;37302:2;37297:3;37238:67;:::i;:::-;37231:74;;37314:93;37403:3;37314:93;:::i;:::-;37432:2;37427:3;37423:12;37416:19;;37075:366;;;:::o;37447:419::-;37613:4;37651:2;37640:9;37636:18;37628:26;;37700:9;37694:4;37690:20;37686:1;37675:9;37671:17;37664:47;37728:131;37854:4;37728:131;:::i;:::-;37720:139;;37447:419;;;:::o;37872:181::-;38012:33;38008:1;38000:6;37996:14;37989:57;37872:181;:::o;38059:366::-;38201:3;38222:67;38286:2;38281:3;38222:67;:::i;:::-;38215:74;;38298:93;38387:3;38298:93;:::i;:::-;38416:2;38411:3;38407:12;38400:19;;38059:366;;;:::o;38431:419::-;38597:4;38635:2;38624:9;38620:18;38612:26;;38684:9;38678:4;38674:20;38670:1;38659:9;38655:17;38648:47;38712:131;38838:4;38712:131;:::i;:::-;38704:139;;38431:419;;;:::o;38856:232::-;38996:34;38992:1;38984:6;38980:14;38973:58;39065:15;39060:2;39052:6;39048:15;39041:40;38856:232;:::o;39094:366::-;39236:3;39257:67;39321:2;39316:3;39257:67;:::i;:::-;39250:74;;39333:93;39422:3;39333:93;:::i;:::-;39451:2;39446:3;39442:12;39435:19;;39094:366;;;:::o;39466:419::-;39632:4;39670:2;39659:9;39655:18;39647:26;;39719:9;39713:4;39709:20;39705:1;39694:9;39690:17;39683:47;39747:131;39873:4;39747:131;:::i;:::-;39739:139;;39466:419;;;:::o;39891:141::-;39940:4;39963:3;39955:11;;39986:3;39983:1;39976:14;40020:4;40017:1;40007:18;39999:26;;39891:141;;;:::o;40038:93::-;40075:6;40122:2;40117;40110:5;40106:14;40102:23;40092:33;;40038:93;;;:::o;40137:107::-;40181:8;40231:5;40225:4;40221:16;40200:37;;40137:107;;;;:::o;40250:393::-;40319:6;40369:1;40357:10;40353:18;40392:97;40422:66;40411:9;40392:97;:::i;:::-;40510:39;40540:8;40529:9;40510:39;:::i;:::-;40498:51;;40582:4;40578:9;40571:5;40567:21;40558:30;;40631:4;40621:8;40617:19;40610:5;40607:30;40597:40;;40326:317;;40250:393;;;;;:::o;40649:142::-;40699:9;40732:53;40750:34;40759:24;40777:5;40759:24;:::i;:::-;40750:34;:::i;:::-;40732:53;:::i;:::-;40719:66;;40649:142;;;:::o;40797:75::-;40840:3;40861:5;40854:12;;40797:75;;;:::o;40878:269::-;40988:39;41019:7;40988:39;:::i;:::-;41049:91;41098:41;41122:16;41098:41;:::i;:::-;41090:6;41083:4;41077:11;41049:91;:::i;:::-;41043:4;41036:105;40954:193;40878:269;;;:::o;41153:73::-;41198:3;41153:73;:::o;41232:189::-;41309:32;;:::i;:::-;41350:65;41408:6;41400;41394:4;41350:65;:::i;:::-;41285:136;41232:189;;:::o;41427:186::-;41487:120;41504:3;41497:5;41494:14;41487:120;;;41558:39;41595:1;41588:5;41558:39;:::i;:::-;41531:1;41524:5;41520:13;41511:22;;41487:120;;;41427:186;;:::o;41619:543::-;41720:2;41715:3;41712:11;41709:446;;;41754:38;41786:5;41754:38;:::i;:::-;41838:29;41856:10;41838:29;:::i;:::-;41828:8;41824:44;42021:2;42009:10;42006:18;42003:49;;;42042:8;42027:23;;42003:49;42065:80;42121:22;42139:3;42121:22;:::i;:::-;42111:8;42107:37;42094:11;42065:80;:::i;:::-;41724:431;;41709:446;41619:543;;;:::o;42168:117::-;42222:8;42272:5;42266:4;42262:16;42241:37;;42168:117;;;;:::o;42291:169::-;42335:6;42368:51;42416:1;42412:6;42404:5;42401:1;42397:13;42368:51;:::i;:::-;42364:56;42449:4;42443;42439:15;42429:25;;42342:118;42291:169;;;;:::o;42465:295::-;42541:4;42687:29;42712:3;42706:4;42687:29;:::i;:::-;42679:37;;42749:3;42746:1;42742:11;42736:4;42733:21;42725:29;;42465:295;;;;:::o;42765:1395::-;42882:37;42915:3;42882:37;:::i;:::-;42984:18;42976:6;42973:30;42970:56;;;43006:18;;:::i;:::-;42970:56;43050:38;43082:4;43076:11;43050:38;:::i;:::-;43135:67;43195:6;43187;43181:4;43135:67;:::i;:::-;43229:1;43253:4;43240:17;;43285:2;43277:6;43274:14;43302:1;43297:618;;;;43959:1;43976:6;43973:77;;;44025:9;44020:3;44016:19;44010:26;44001:35;;43973:77;44076:67;44136:6;44129:5;44076:67;:::i;:::-;44070:4;44063:81;43932:222;43267:887;;43297:618;43349:4;43345:9;43337:6;43333:22;43383:37;43415:4;43383:37;:::i;:::-;43442:1;43456:208;43470:7;43467:1;43464:14;43456:208;;;43549:9;43544:3;43540:19;43534:26;43526:6;43519:42;43600:1;43592:6;43588:14;43578:24;;43647:2;43636:9;43632:18;43619:31;;43493:4;43490:1;43486:12;43481:17;;43456:208;;;43692:6;43683:7;43680:19;43677:179;;;43750:9;43745:3;43741:19;43735:26;43793:48;43835:4;43827:6;43823:17;43812:9;43793:48;:::i;:::-;43785:6;43778:64;43700:156;43677:179;43902:1;43898;43890:6;43886:14;43882:22;43876:4;43869:36;43304:611;;;43267:887;;42857:1303;;;42765:1395;;:::o;44166:225::-;44306:34;44302:1;44294:6;44290:14;44283:58;44375:8;44370:2;44362:6;44358:15;44351:33;44166:225;:::o;44397:366::-;44539:3;44560:67;44624:2;44619:3;44560:67;:::i;:::-;44553:74;;44636:93;44725:3;44636:93;:::i;:::-;44754:2;44749:3;44745:12;44738:19;;44397:366;;;:::o;44769:419::-;44935:4;44973:2;44962:9;44958:18;44950:26;;45022:9;45016:4;45012:20;45008:1;44997:9;44993:17;44986:47;45050:131;45176:4;45050:131;:::i;:::-;45042:139;;44769:419;;;:::o;45194:98::-;45245:6;45279:5;45273:12;45263:22;;45194:98;;;:::o;45298:147::-;45399:11;45436:3;45421:18;;45298:147;;;;:::o;45451:386::-;45555:3;45583:38;45615:5;45583:38;:::i;:::-;45637:88;45718:6;45713:3;45637:88;:::i;:::-;45630:95;;45734:65;45792:6;45787:3;45780:4;45773:5;45769:16;45734:65;:::i;:::-;45824:6;45819:3;45815:16;45808:23;;45559:278;45451:386;;;;:::o;45843:271::-;45973:3;45995:93;46084:3;46075:6;45995:93;:::i;:::-;45988:100;;46105:3;46098:10;;45843:271;;;;:::o
Swarm Source
ipfs://e3afb5a7553b9bcd97eba3503496cde01a137d39c55ea6fc6d7b5f37aadfff7d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.