Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5749460 | 51 days ago | Contract Creation | 0 ETH |
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 Source Code Verified (Exact Match)
Contract Name:
AbstractPizzaUpgradeable
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.7
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.24; import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; contract AbstractPizzaUpgradeable is Initializable, OwnableUpgradeable, ReentrancyGuardUpgradeable, PausableUpgradeable { // Константы uint256 private constant BASE_POINTS_PER_CLICK = 100; uint256 private constant REFERRAL_LEVEL1_PERCENT = 20; uint256 private constant REFERRAL_LEVEL2_PERCENT = 5; uint256 private constant TOP_USERS_LIMIT = 50; uint256 private constant MAX_BATTLE_PASSES = 3; uint256 private constant BATTLE_PASS_BONUS_PERCENT = 20; uint256 private constant AUTO_CLICKER_DURATION = 10 minutes; // Структуры данных struct UserData { uint40 lastClickTime; uint64 points; uint64 totalReferralPoints; uint16 referralCount; uint8 battlePassCount; bool isRegistered; } struct ReferralRewards { uint64 pendingPoints; bool hasRewards; } struct UserScore { address userAddress; uint256 points; } struct AutoClicker { uint256 endTimestamp; bool claimed; } // Переменные состояния uint256 public battlePassPrice; uint256 public clickCooldown; uint256 public autoClickerPrice; mapping(address => UserData) private userData; mapping(address => address) private referralLevel1; mapping(address => address) private referralLevel2; mapping(address => ReferralRewards) private referralRewards; mapping(address => AutoClicker) private autoClicker; address[] private registeredUsersList; // События event UserRegistered(address indexed user, address indexed referrer1, address indexed referrer2); event BattlePassPurchased(address indexed user, uint8 battlePassCount); event BattlePassPriceChanged(uint256 newPrice); event FundsWithdrawn(address indexed owner, uint256 amount); event PointsEarned(address indexed user, uint256 amount); event ReferralPointsEarned(address indexed referral, address indexed user, uint256 amount, uint256 level); event ReferralRewardsClaimed(address indexed user, uint256 amount); event ClickCooldownChanged(uint256 newCooldown); event AutoClickerPurchased(address indexed user, uint256 endTimestamp); /// @notice Функция инициализации (вызывается один раз через прокси) /// @param initialPrice Начальная цена BattlePass function initialize(uint256 initialPrice) public initializer { __Ownable_init(msg.sender); __ReentrancyGuard_init(); __Pausable_init(); battlePassPrice = initialPrice; clickCooldown = 1 minutes; autoClickerPrice = 0.01 ether; } // Управление паузой function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } // Регистрация пользователя с возможным указанием реферала первого уровня function registration(address referrer1) external whenNotPaused { require(!userData[msg.sender].isRegistered, "User already registered"); if (referrer1 != address(0)) { require(referrer1 != msg.sender, "Cannot refer yourself"); require(userData[referrer1].isRegistered, "Referrer not registered"); referralLevel1[msg.sender] = referrer1; userData[referrer1].referralCount++; address potentialReferrer2 = referralLevel1[referrer1]; if (potentialReferrer2 != address(0) && potentialReferrer2 != msg.sender && potentialReferrer2 != referrer1) { referralLevel2[msg.sender] = potentialReferrer2; userData[potentialReferrer2].referralCount++; } } userData[msg.sender].isRegistered = true; registeredUsersList.push(msg.sender); emit UserRegistered(msg.sender, referrer1, referralLevel2[msg.sender]); } // Вспомогательная функция для расчёта множителя очков function getPointsMultiplier(uint8 battlePassCount) internal pure returns (uint256) { return 100 + (battlePassCount * BATTLE_PASS_BONUS_PERCENT); } // Функция клика (с обычным или авто-кликом) function click() external whenNotPaused nonReentrant { UserData storage user = userData[msg.sender]; require(user.isRegistered, "User not registered"); if (autoClicker[msg.sender].endTimestamp != 0 && !autoClicker[msg.sender].claimed) { if (block.timestamp < autoClicker[msg.sender].endTimestamp) { revert("Auto-clicker active, wait for expiration"); } else { uint256 numClicks = AUTO_CLICKER_DURATION / clickCooldown; uint256 autoPoints = (numClicks * BASE_POINTS_PER_CLICK * getPointsMultiplier(user.battlePassCount)) / 100; user.points += uint64(autoPoints); user.lastClickTime = uint40(block.timestamp); autoClicker[msg.sender].claimed = true; autoClicker[msg.sender].endTimestamp = 0; emit PointsEarned(msg.sender, autoPoints); return; } } require(block.timestamp >= user.lastClickTime + clickCooldown, "Cooldown period not finished"); uint256 pointsToAdd = (BASE_POINTS_PER_CLICK * getPointsMultiplier(user.battlePassCount)) / 100; user.points += uint64(pointsToAdd); user.lastClickTime = uint40(block.timestamp); emit PointsEarned(msg.sender, pointsToAdd); // Начисление реферальных очков address ref1 = referralLevel1[msg.sender]; if (ref1 != address(0)) { uint256 ref1Points = (pointsToAdd * REFERRAL_LEVEL1_PERCENT) / 100; referralRewards[ref1].pendingPoints += uint64(ref1Points); referralRewards[ref1].hasRewards = true; emit ReferralPointsEarned(ref1, msg.sender, ref1Points, 1); } address ref2 = referralLevel2[msg.sender]; if (ref2 != address(0)) { uint256 ref2Points = (pointsToAdd * REFERRAL_LEVEL2_PERCENT) / 100; referralRewards[ref2].pendingPoints += uint64(ref2Points); referralRewards[ref2].hasRewards = true; emit ReferralPointsEarned(ref2, msg.sender, ref2Points, 2); } } // Функция для вывода реферальных вознаграждений function claimReferralRewards() external whenNotPaused { ReferralRewards storage rewards = referralRewards[msg.sender]; require(rewards.hasRewards, "No rewards to claim"); require(rewards.pendingPoints > 0, "No points to claim"); uint256 pointsToClaim = rewards.pendingPoints; rewards.pendingPoints = 0; rewards.hasRewards = false; UserData storage user = userData[msg.sender]; user.points += uint64(pointsToClaim); user.totalReferralPoints += uint64(pointsToClaim); emit ReferralRewardsClaimed(msg.sender, pointsToClaim); } // Проверка возможности клика function canClick(address user) public view returns (uint256) { UserData memory userInfo = userData[user]; if (!userInfo.isRegistered) return 0; uint256 nextClickTime = uint256(userInfo.lastClickTime) + clickCooldown; return nextClickTime > block.timestamp ? nextClickTime : 0; } // Получение статистики пользователя function getUserStats(address user) external view returns ( uint256 points, uint256 referrals, uint8 battlePassCount, bool isRegistered, uint256 pendingReferralRewards, uint256 totalReferralPoints ) { UserData memory userInfo = userData[user]; return ( userInfo.points, userInfo.referralCount, userInfo.battlePassCount, userInfo.isRegistered, referralRewards[user].pendingPoints, userInfo.totalReferralPoints ); } // Получение статистики всех пользователей (топ-50) function getAllUsersStats() external view returns ( address[] memory users, uint256[] memory points, uint256[] memory referralsCount ) { uint256 totalUsers = registeredUsersList.length; UserScore[] memory topScores = new UserScore[](TOP_USERS_LIMIT); uint256 count = 0; for (uint256 i = 0; i < totalUsers; i++) { address userAddr = registeredUsersList[i]; uint256 userPoints = userData[userAddr].points; if (count < TOP_USERS_LIMIT) { topScores[count] = UserScore(userAddr, userPoints); count++; for (uint256 j = count - 1; j > 0; j--) { if (topScores[j].points > topScores[j - 1].points) { UserScore memory temp = topScores[j - 1]; topScores[j - 1] = topScores[j]; topScores[j] = temp; } else { break; } } } else { if (userPoints > topScores[count - 1].points) { topScores[count - 1] = UserScore(userAddr, userPoints); for (uint256 j = count - 1; j > 0; j--) { if (topScores[j].points > topScores[j - 1].points) { UserScore memory temp = topScores[j - 1]; topScores[j - 1] = topScores[j]; topScores[j] = temp; } else { break; } } } } } users = new address[](count); points = new uint256[](count); referralsCount = new uint256[](count); for (uint256 i = 0; i < count; i++) { users[i] = topScores[i].userAddress; points[i] = topScores[i].points; referralsCount[i] = userData[topScores[i].userAddress].referralCount; } return (users, points, referralsCount); } // Получение информации о рефералах пользователя function getUserReferrals(address user) external view returns ( address referrer1, address referrer2 ) { return (referralLevel1[user], referralLevel2[user]); } // Проверка регистрации пользователя function checkRegistration(address user) external view returns (bool) { return userData[user].isRegistered; } // Покупка Battle Pass function buyBattlePass() external payable whenNotPaused nonReentrant { UserData storage user = userData[msg.sender]; require(user.isRegistered, "User not registered"); require(user.battlePassCount < MAX_BATTLE_PASSES, "Max battle passes reached"); require(msg.value >= battlePassPrice, "Incorrect payment amount"); user.battlePassCount++; emit BattlePassPurchased(msg.sender, user.battlePassCount); } // Проверка количества Battle Pass function checkBattlePass(address user) external view returns (uint8) { return userData[user].battlePassCount; } // Изменение цены Battle Pass function setBattlePassPrice(uint256 newPrice) external onlyOwner { battlePassPrice = newPrice; emit BattlePassPriceChanged(newPrice); } // Изменение времени перезарядки клика function setClickCooldown(uint256 newCooldown) external onlyOwner { require(newCooldown > 0, "Cooldown must be greater than 0"); clickCooldown = newCooldown; emit ClickCooldownChanged(newCooldown); } // Вывод средств владельцем контракта function withdrawFunds() external onlyOwner nonReentrant { uint256 balance = address(this).balance; require(balance > 0, "No funds to withdraw"); (bool success, ) = owner().call{value: balance}(""); require(success, "Transfer failed"); emit FundsWithdrawn(owner(), balance); } // Покупка авто-кликера function buyAutoClicker() external payable whenNotPaused nonReentrant { require(msg.value >= autoClickerPrice, "Insufficient funds for auto-clicker"); require(autoClicker[msg.sender].endTimestamp == 0 || autoClicker[msg.sender].claimed, "Auto-clicker already active"); autoClicker[msg.sender].endTimestamp = block.timestamp + AUTO_CLICKER_DURATION; autoClicker[msg.sender].claimed = false; emit AutoClickerPurchased(msg.sender, autoClicker[msg.sender].endTimestamp); } // Статус авто-кликера function getAutoClickerStatus(address user) external view returns (uint256, bool) { if(autoClicker[user].endTimestamp == 0) { return (0, true); } return (autoClicker[user].endTimestamp, autoClicker[user].claimed); } // Изменение цены авто-кликера function setAutoClickerPrice(uint256 newPrice) external onlyOwner { autoClickerPrice = newPrice; } // Получение продолжительности авто-кликера function getAutoClickerDuration() external pure returns (uint256) { return AUTO_CLICKER_DURATION; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol"; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /// @custom:storage-location erc7201:openzeppelin.storage.Pausable struct PausableStorage { bool _paused; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Pausable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300; function _getPausableStorage() private pure returns (PausableStorage storage $) { assembly { $.slot := PausableStorageLocation } } /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal onlyInitializing { __Pausable_init_unchained(); } function __Pausable_init_unchained() internal onlyInitializing { PausableStorage storage $ = _getPausableStorage(); $._paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { PausableStorage storage $ = _getPausableStorage(); return $._paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol"; import {Initializable} from "../proxy/utils/Initializable.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. * * The initial owner is set to the address provided by the deployer. 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 { /// @custom:storage-location erc7201:openzeppelin.storage.Ownable struct OwnableStorage { address _owner; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Ownable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant OwnableStorageLocation = 0x9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300; function _getOwnableStorage() private pure returns (OwnableStorage storage $) { assembly { $.slot := OwnableStorageLocation } } /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ function __Ownable_init(address initialOwner) internal onlyInitializing { __Ownable_init_unchained(initialOwner); } function __Ownable_init_unchained(address initialOwner) internal onlyInitializing { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @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) { OwnableStorage storage $ = _getOwnableStorage(); return $._owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling 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 { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { OwnableStorage storage $ = _getOwnableStorage(); address oldOwner = $._owner; $._owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuardUpgradeable is Initializable { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard struct ReentrancyGuardStorage { uint256 _status; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00; function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) { assembly { $.slot := ReentrancyGuardStorageLocation } } /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); function __ReentrancyGuard_init() internal onlyInitializing { __ReentrancyGuard_init_unchained(); } function __ReentrancyGuard_init_unchained() internal onlyInitializing { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); $._status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); // On the first call to nonReentrant, _status will be NOT_ENTERED if ($._status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail $._status = ENTERED; } function _nonReentrantAfter() private { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) $._status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); return $._status == ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @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] * ```solidity * 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 Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 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 in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._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 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._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() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @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 { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; import {Initializable} from "../proxy/utils/Initializable.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; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
{ "evmVersion": "paris", "optimizer": { "enabled": true, "mode": "3" }, "outputSelection": { "*": { "*": [ "abi", "metadata" ], "": [ "ast" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
Contract ABI
API[{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"endTimestamp","type":"uint256"}],"name":"AutoClickerPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"BattlePassPriceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint8","name":"battlePassCount","type":"uint8"}],"name":"BattlePassPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"ClickCooldownChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PointsEarned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referral","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"level","type":"uint256"}],"name":"ReferralPointsEarned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReferralRewardsClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"referrer1","type":"address"},{"indexed":true,"internalType":"address","name":"referrer2","type":"address"}],"name":"UserRegistered","type":"event"},{"inputs":[],"name":"autoClickerPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"battlePassPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyAutoClicker","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buyBattlePass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"canClick","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"checkBattlePass","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"checkRegistration","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReferralRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"click","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clickCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllUsersStats","outputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"points","type":"uint256[]"},{"internalType":"uint256[]","name":"referralsCount","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAutoClickerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getAutoClickerStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserReferrals","outputs":[{"internalType":"address","name":"referrer1","type":"address"},{"internalType":"address","name":"referrer2","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserStats","outputs":[{"internalType":"uint256","name":"points","type":"uint256"},{"internalType":"uint256","name":"referrals","type":"uint256"},{"internalType":"uint8","name":"battlePassCount","type":"uint8"},{"internalType":"bool","name":"isRegistered","type":"bool"},{"internalType":"uint256","name":"pendingReferralRewards","type":"uint256"},{"internalType":"uint256","name":"totalReferralPoints","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialPrice","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer1","type":"address"}],"name":"registration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setAutoClickerPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setBattlePassPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCooldown","type":"uint256"}],"name":"setClickCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010002c91d7dca18447eff1ae1fcc853830f1e0c08bcff6e6f1a02a39533fd8900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0004000000000002000900000000000200000060041002700000023e03400197000300000031035500020000000103550000023e0040019d0000008004000039000000400040043f0000000100200190000000330000c13d000000040030008c0000088b0000413d000000000201043b000000e002200270000002400020009c0000003b0000a13d000002410020009c000000610000213d0000024b0020009c0000009b0000a13d0000024c0020009c0000017a0000213d0000024f0020009c000001b60000613d000002500020009c0000088b0000c13d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000026e02000041000000000202041a0000026d032001970000000002000411000000000023004b0000037c0000c13d0000000401100370000000000101043b000000000010041b000000800010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000295011001c70000800d0200003900000001030000390000029604000041000004550000013d0000000001000416000000000001004b0000088b0000c13d0000002001000039000001000010044300000120000004430000023f01000041000008f40001042e000002540020009c0000007a0000a13d000002550020009c000000bb0000a13d000002560020009c000001870000213d000002590020009c000001d10000613d0000025a0020009c0000088b0000c13d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b0000026d0010009c0000088b0000213d000000000010043f0000000401000039000000200010043f000000000100001908f308d80000040f000000000101041a000900000001001d0000000501000039000000200010043f000000000100001908f308d80000040f000000000101041a00000009020000290000026d02200197000000800020043f0000026d01100197000000a00010043f000002a501000041000008f40001042e000002420020009c0000010f0000a13d000002430020009c000001900000213d000002460020009c000001d80000613d000002470020009c0000088b0000c13d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b0000026d0010009c0000088b0000213d000000000010043f0000000301000039000000200010043f000000000100001908f308d80000040f000000000101041a0000027d00100198000003630000013d0000025e0020009c000001220000213d000002620020009c000001f50000613d000002630020009c000002110000613d000002640020009c0000088b0000c13d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b0000026e02000041000000000202041a0000026d032001970000000002000411000000000023004b0000037c0000c13d000000000001004b0000043f0000c13d0000028901000041000000800010043f0000002001000039000000840010043f0000001f01000039000000a40010043f000002b201000041000000c40010043f000002b301000041000008f500010430000002510020009c0000026c0000613d000002520020009c000002810000613d000002530020009c0000088b0000c13d0000000001000416000000000001004b0000088b0000c13d0000026e01000041000000000101041a0000026d021001970000000001000411000000000012004b000003770000c13d0000027302000041000000000302041a000000ff00300190000003360000c13d000002c40330019700000001033001bf000000000032041b000000800010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000295011001c70000800d0200003900000001030000390000029804000041000004550000013d0000025b0020009c000002d90000613d0000025c0020009c000002ff0000613d0000025d0020009c0000088b0000c13d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000201043b0000026d0020009c0000088b0000213d000800000002001d000000000020043f0000000301000039000000200010043f000000000100001908f308d80000040f000900000001001d08f3089a0000040f0000000902000029000000000202041a0000029a03200197000000000331043600000028042002700000026704400197000900000004001d0000000000430435000000680320027000000267033001970000004004100039000700000004001d0000000000340435000000a8032002700000ffff0430018f000600000004001d00000060031000390000000000430435000000b803200270000000ff0430018f000500000004001d00000080031000390000000000430435000000a0011000390000027d002001980000000002000039000000010200c039000400000002001d00000000002104350000000801000029000000000010043f0000000601000039000000200010043f000000000100001908f308d80000040f000000000101041a00000007020000290000000002020433000000400300043d0000002004300039000000060500002900000000005404350000004004300039000000050500002900000000005404350000006004300039000000040500002900000000005404350000026702200197000000a0043000390000000000240435000002670110019700000080023000390000000000120435000000090100002900000000001304350000023e0030009c0000023e030080410000004001300210000002a6011001c7000008f40001042e000002480020009c000003100000613d000002490020009c0000032a0000613d0000024a0020009c0000088b0000c13d000000240030008c0000088b0000413d0000000001000416000000000001004b0000088b0000c13d08f308c60000040f00000004010000390000000201100367000000000101043b0000000202000039000000000012041b0000000001000019000008f40001042e0000025f0020009c0000033a0000613d000002600020009c000003410000613d000002610020009c0000088b0000c13d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b0000026d0010009c0000088b0000213d000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000400200043d000002af0020009c000001ef0000213d000000000101043b000000c003200039000000400030043f000000000101041a000000a0032000390000027d001001980000000004000039000000010400c0390000000000430435000000b803100270000000ff0330018f00000080042000390000000000340435000000a8031002700000ffff0330018f00000060042000390000000000340435000000680310027000000267033001970000004004200039000000000034043500000028031002700000026703300197000000200420003900000000003404350000029a0310019700000000003204350000000002000019000001730000613d0000000101000039000000000101041a000900000003001d000800000001001d000000000031001a000006f70000413d0000028d01000041000000000010044300000000010004140000023e0010009c0000023e01008041000000c0011002100000028e011001c70000800b0200003908f308ee0000040f00000001002001900000067b0000613d00000008030000290000000902300029000000000101043b000000000012004b000000000200a019000000400100043d00000000002104350000023e0010009c0000023e010080410000004001100210000002b0011001c7000008f40001042e0000024d0020009c000003550000613d0000024e0020009c0000088b0000c13d0000000001000416000000000001004b0000088b0000c13d0000026e01000041000000000101041a0000026d01100197000000800010043f0000027e01000041000008f40001042e000002570020009c0000035d0000613d000002580020009c0000088b0000c13d0000000001000416000000000001004b0000088b0000c13d0000000201000039000003590000013d000002440020009c000003680000613d000002450020009c0000088b0000c13d000000240030008c0000088b0000413d0000000001000416000000000001004b0000088b0000c13d0000026501000041000000000201041a00000266032001970000026701200198000004240000613d000000010010008c000004380000c13d000800000002001d000900000003001d000002680100004100000000001004430000000001000410000000040010044300000000010004140000023e0010009c0000023e01008041000000c00110021000000269011001c7000080020200003908f308ee0000040f00000001002001900000067b0000613d000000000101043b000000000001004b00000009030000290000000802000029000004260000613d000000400400043d000004380000013d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b0000026d0010009c0000088b0000213d000000000010043f0000000701000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000201043b000000000102041a000000000001004b0000050d0000c13d0000000102000039000005120000013d0000000001000416000000000001004b0000088b0000c13d000000000100041a000000800010043f0000027e01000041000008f40001042e0000000001000416000000000001004b0000088b0000c13d0000000801000039000000000101041a000600000001001d0000003201000039000000800010043f000006e00200003900000000010000190000004003200039000000400030043f000000200320003900000000000304350000000000020435000000a0031000390000000000230435000006200010008c000003810000813d0000002001100039000000400200043d000002810020009c000001e20000a13d0000028301000041000000000010043f0000004101000039000000040010043f0000027901000041000008f5000104300000000001000416000000000001004b0000088b0000c13d0000027301000041000000000101041a000000ff00100190000003360000c13d0000000001000411000000000010043f0000000601000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a00000266002001980000051c0000c13d000000400100043d0000004402100039000002c303000041000004160000013d000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b000900000001001d0000026d0010009c0000088b0000213d0000027301000041000000000101041a000000ff00100190000003360000c13d0000000001000411000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000101041a0000027d00100198000005700000c13d00000009010000290000026d02100198000005fc0000c13d000900000002001d0000000001000411000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a000002ba02200197000002bb022001c7000000000021041b0000000802000039000000000102041a000002670010009c000001ef0000213d0000000103100039000000000032041b0000027f0110009a000000000201041a0000026f022001970000000003000411000000000232019f000000000021041b000000000030043f0000000501000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000101041a00000000020004140000023e0020009c0000023e02008041000000c0022002100000026d0710019700000270012001c70000800d020000390000000403000039000002bc0400004100000000050004110000000906000029000004550000013d0000000001000416000000000001004b0000088b0000c13d0000026e01000041000000000201041a0000026d032001970000000005000411000000000053004b000003fb0000c13d0000026f02200197000000000021041b00000000010004140000023e0010009c0000023e01008041000000c00110021000000270011001c70000800d02000039000000030300003900000271040000410000000006000019000004550000013d0000000001000416000000000001004b0000088b0000c13d0000027301000041000000000101041a000000ff00100190000003360000c13d0000027201000041000000000201041a000000020020008c000003320000613d0000000202000039000000000021041b0000000001000411000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a0000027d00200198000004130000613d000800000002001d000900000001001d0000000001000411000000000010043f0000000701000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a000700000002001d000000000002004b0000065a0000613d0000000101100039000000000101041a000000ff001001900000065a0000c13d0000028d01000041000000000010044300000000010004140000023e0010009c0000023e01008041000000c0011002100000028e011001c70000800b0200003908f308ee0000040f00000001002001900000067b0000613d000000000101043b000000070010006c000007ef0000813d000000400100043d00000064021000390000029e03000041000000000032043500000044021000390000029f030000410000000000320435000000240210003900000028030000390000000000320435000002890200004100000000002104350000000402100039000000200300003900000000003204350000023e0010009c0000023e010080410000004001100210000002a0011001c7000008f5000104300000000001000416000000000001004b0000088b0000c13d0000026e01000041000000000101041a0000026d021001970000000001000411000000000012004b000003770000c13d0000027201000041000000000201041a000000020020008c000003320000613d0000000202000039000000000021041b000002aa0100004100000000001004430000000001000410000000040010044300000000010004140000023e0010009c0000023e01008041000000c00110021000000269011001c70000800a0200003908f308ee0000040f00000001002001900000067b0000613d000000000301043b000000000003004b000005770000c13d000000400100043d0000004402100039000002ad03000041000000000032043500000024021000390000001403000039000004190000013d0000000001000416000000000001004b0000088b0000c13d0000026e01000041000000000101041a0000026d021001970000000001000411000000000012004b000003770000c13d0000027302000041000000000302041a000000ff003001900000044a0000c13d000002a801000041000000800010043f000002a901000041000008f5000104300000027301000041000000000101041a000000ff00100190000003360000c13d0000027201000041000000000201041a000000020020008c000003320000613d0000000202000039000000000021041b000000000102041a0000000002000416000000000012004b0000045a0000813d0000028901000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000029001000041000000c40010043f0000029101000041000000e40010043f0000029201000041000008f5000104300000027301000041000000000101041a000000ff00100190000003360000c13d0000027201000041000000000201041a000000020020008c000004000000c13d000002ae01000041000000800010043f000002a901000041000008f500010430000002bd01000041000000800010043f000002a901000041000008f5000104300000000001000416000000000001004b0000088b0000c13d0000025801000039000000800010043f0000027e01000041000008f40001042e000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b0000026d0010009c0000088b0000213d000000000010043f0000000301000039000000200010043f000000000100001908f308d80000040f000000000101041a000000b801100270000000ff0110018f000000800010043f0000027e01000041000008f40001042e0000000001000416000000000001004b0000088b0000c13d0000000101000039000000000101041a000000800010043f0000027e01000041000008f40001042e0000000001000416000000000001004b0000088b0000c13d0000027301000041000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f0000027e01000041000008f40001042e000000240030008c0000088b0000413d0000000002000416000000000002004b0000088b0000c13d0000000401100370000000000101043b000900000001001d0000026d0010009c0000088b0000213d08f308c60000040f000000090100002908f308a60000040f0000000001000019000008f40001042e0000029302000041000000800020043f000000840010043f0000029401000041000008f5000104300000029301000041000000800010043f000000840020043f0000029401000041000008f500010430000000060000006b0000000009000019000004760000c13d00000005019002100000003f021000390000028204200197000000400200043d000600000002001d0000000002240019000000000042004b00000000030000390000000103004039000002670020009c000001ef0000213d0000000100300190000001ef0000c13d000000400020043f0000000602000029000000000a9204360000001f0210018f00000000030000310000000203300367000000000001004b000003a00000613d00000000051a0019000000000603034f00000000070a0019000000006806043c0000000007870436000000000057004b0000039c0000c13d000000000002004b000000400600043d0000000005460019000500000006001d000000000065004b00000000060000390000000106004039000002670050009c000001ef0000213d0000000100600190000001ef0000c13d000000400050043f00000005050000290000000005950436000300000005001d000000000001004b000003b80000613d00000003070000290000000005170019000000000603034f000000006806043c0000000007870436000000000057004b000003b40000c13d000000000002004b000000400500043d0000000004450019000400000005001d000000000054004b00000000050000390000000105004039000002670040009c000001ef0000213d0000000100500190000001ef0000c13d000000400040043f00000004040000290000000004940436000200000004001d000000000001004b000003cf0000613d00000002040000290000000001140019000000003503043c0000000004540436000000000014004b000003cb0000c13d000000000002004b000000000009004b000006950000c13d000000400400043d00000060010000390000000001140436000000060200002900000000030204330000006002400039000000000032043500000000070400190000008002400039000000000003004b000003e50000613d000000000400001900000000060a001900000000650604340000026d0550019700000000025204360000000104400039000000000034004b000003df0000413d000900000007001d00000000037200490000000000310435000000050100002908f3088d0000040f00000000020100190000000903000029000000000131004900000040033000390000000000130435000000040100002908f3088d0000040f000000090200002900000000012100490000023e0020009c0000023e0200804100000040022002100000023e0010009c0000023e010080410000006001100210000000000121019f000008f40001042e0000029301000041000000800010043f000000840050043f0000029401000041000008f5000104300000000202000039000000000021041b0000000001000411000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000201043b000000000302041a0000027d00300198000005250000c13d000000400100043d0000004402100039000002a4030000410000000000320435000000240210003900000013030000390000000000320435000002890200004100000000002104350000000402100039000000200300003900000000003204350000023e0010009c0000023e0100804100000040011002100000028a011001c7000008f500010430000000000003004b000004380000c13d0000026a0120019700000001011001bf0000026b022001970000026c022001c7000000000003004b000000000201c0190000026501000041000000000021041b0000026600200198000005300000c13d000000400100043d0000027a0200004100000000002104350000023e0010009c0000023e0100804100000040011002100000027b011001c7000008f5000104300000027c0100004100000000001404350000023e0040009c0000023e0400804100000040014002100000027b011001c7000008f5000104300000000103000039000000000013041b000000800010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000295011001c70000800d02000039000002b104000041000004550000013d000002c403300197000000000032041b000000800010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000295011001c70000800d020000390000000103000039000002a70400004108f308e90000040f00000001002001900000088b0000613d0000000001000019000008f40001042e0000000001000411000000000010043f0000000701000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a000000000002004b0000053d0000613d0000000101100039000000000101041a000000ff001001900000053d0000c13d000000400100043d00000044021000390000028c03000041000000000032043500000024021000390000001b03000039000004190000013d000000000a00001900000000090000190000047d0000013d0000000009010019000000010aa000390000000600a0006c000006fd0000813d0000000801000039000000000101041a0000000000a1004b000005070000a13d000900000009001d00080000000a001d0000027f01a0009a000000000101041a0000026d01100197000700000001001d000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000101041a000000280110027000000267021001970000000909000029000000320090008c000004cd0000813d000000400100043d000002810010009c000000080a000029000001ef0000213d0000004003100039000000400030043f0000002003100039000000000023043500000007020000290000000000210435000000800200043d000000000092004b000005070000a13d0000000502900210000000a0022000390000000000120435000000800300043d000000000093004b000005070000a13d0000000101900039000000000009004b000004790000613d000000000093004b000005070000a13d000000010290008a000000000023004b000005070000a13d0000000503900210000000a0033000390000000005030433000000050420021000000020065000390000000007060433000000a006400039000000000406043300000020084000390000000008080433000000000087004b000004790000a13d0000000000560435000000800500043d000000000025004b000005070000a13d000000000095004b000005070000a13d0000000000430435000000800300043d000000000093004b0000000009020019000004ae0000213d000005070000013d000000010190008a000000800300043d000000000013004b000000080a000029000005070000a13d0000000503100210000000a003300039000000000403043300000020044000390000000004040433000000000042004b0000047a0000a13d000000400400043d000002810040009c000001ef0000213d0000004005400039000000400050043f0000002005400039000000000025043500000007020000290000000000240435000000800200043d000000000012004b000005070000a13d0000000000430435000000800300043d000000000013004b000005070000a13d000000000001004b0000047a0000613d000000000013004b000005070000a13d000000010210008a000000000023004b000005070000a13d0000000503100210000000a0033000390000000005030433000000050420021000000020065000390000000007060433000000a006400039000000000406043300000020084000390000000008080433000000000087004b0000047a0000a13d0000000000560435000000800500043d000000000025004b000005070000a13d000000000015004b000005070000a13d0000000000430435000000800300043d000000000013004b0000000001020019000004e90000213d0000028301000041000000000010043f0000003201000039000000040010043f0000027901000041000008f5000104300000000102200039000000000202041a000000ff002001900000000002000039000000010200c039000000010220018f000000400300043d0000002004300039000000000024043500000000001304350000023e0030009c0000023e03008041000000400130021000000297011001c7000008f40001042e0000026703200198000005810000c13d000000400100043d0000004402100039000002c203000041000000000032043500000024021000390000001203000039000004190000013d000000400100043d000000b804300270000000ff0440018f000000030040008c000005b80000413d00000044021000390000028b03000041000000000032043500000024021000390000001903000039000004190000013d00000000010004110000026d06100198000005c20000c13d000000400100043d00000278020000410000000000210435000000040210003900000000000204350000023e0010009c0000023e01008041000000400110021000000279011001c7000008f5000104300000028d01000041000000000010044300000000010004140000023e0010009c0000023e01008041000000c0011002100000028e011001c70000800b0200003908f308ee0000040f00000001002001900000067b0000613d000000000201043b000900000002001d000002c50020009c000006f70000213d0000000001000411000000000010043f0000000701000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d00000009020000290000025802200039000000000101043b000000000021041b0000000101100039000000000301041a000002c403300197000000000031041b000000400100043d00000000002104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000276011001c70000800d0200003900000002030000390000028f04000041000006310000013d000000400100043d0000004402100039000002b403000041000000000032043500000024021000390000001703000039000004190000013d0000026e01000041000000000201041a00000000010004140000026d04200197000000040040008c000900000003001d000006060000c13d00000001020000390000000101000031000006120000013d000900000003001d0000026b02200197000000000021041b0000000001000411000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a0000002803200270000002670330019700000009050000290000000003530019000002a10030009c000006f70000813d00000028033002100000029b03300197000002be04200197000000000343019f000000000031041b000000680220027000000267022001970000000002520019000002670020009c000006f70000213d000002bf033001970000006802200210000002c002200197000000000223019f000000000021041b000000400100043d00000000005104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000276011001c70000800d020000390000000203000039000002c1040000410000000005000411000004550000013d000000000500041a0000000006000416000000000056004b0000061d0000813d00000044021000390000028803000041000000000032043500000024021000390000001803000039000004190000013d000900000003001d0000026e01000041000000000201041a0000026f03200197000000000363019f000000000031041b00000000010004140000026d052001970000023e0010009c0000023e01008041000000c00110021000000270011001c70000800d020000390000000303000039000002710400004108f308e90000040f00000001002001900000088b0000613d0000026501000041000000000101041a00000266001001980000000906000029000004300000613d00000001030000390000027202000041000000000032041b0000027302000041000000000402041a000002c404400197000000000042041b00000004020000390000000202200367000000000202043b000000000020041b0000003c02000039000000000023041b00000274020000410000000204000039000000000024041b000000000006004b000004580000c13d00000275011001970000026502000041000000000012041b000000400100043d00000000003104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000276011001c70000800d020000390000027704000041000004550000013d0000000001000411000000000012004b000006d80000c13d000000400100043d0000004402100039000002b903000041000000000032043500000024021000390000001503000039000004190000013d0000023e0010009c0000023e01008041000000c00110021000000270011001c70000800902000039000000000500001908f308e90000040f000000010220018f000300000001035500000060011002700001023e0010019d0000023e01100197000000000001004b000006330000c13d000000400100043d000000000002004b0000067c0000c13d0000004402100039000002ac03000041000000000032043500000024021000390000000f03000039000004190000013d0000028403300197000000b804400210000002850440009a0000028605400197000000000335019f000000000032041b000000b80240027000000000002104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000276011001c70000800d020000390000000203000039000002870400004100000000050004110000068d0000013d0000001f04100039000002c6044001970000003f04400039000002c605400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000002670050009c000001ef0000213d0000000100600190000001ef0000c13d000000400050043f0000000006140436000002c6031001980000001f0410018f000000000136001900000003050003670000064c0000613d000000000705034f000000007807043c0000000006860436000000000016004b000006480000c13d000000000004004b000006140000613d000000000335034f0000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000310435000006140000013d0000000101000039000000000201041a0000000901000029000000000101041a000600000001001d0000029a01100197000800000002001d000700000001001d000000000012001a000006f70000413d0000028d01000041000000000010044300000000010004140000023e0010009c0000023e01008041000000c0011002100000028e011001c70000800b0200003908f308ee0000040f00000001002001900000067b0000613d00000007030000290000000802300029000000000101043b000000000021004b000006ed0000813d000000400100043d0000004402100039000002a303000041000000000032043500000024021000390000001c03000039000004190000013d000000000001042f0000026e02000041000000000202041a000000090300002900000000003104350000023e0010009c0000023e01008041000000400110021000000000030004140000023e0030009c0000023e03008041000000c003300210000000000113019f00000276011001c70000026d052001970000800d020000390000000203000039000002ab0400004108f308e90000040f00000001002001900000088b0000613d00000001010000390000027202000041000000000012041b0000000001000019000008f40001042e0000000004000019000900000009001d00010000000a001d000000800100043d000000000041004b000005070000a13d00000006010000290000000001010433000000000041004b000005070000a13d0000000505400210000000a0015000390000000002a50019000000000301043300000000030304330000026d033001970000000000320435000000800200043d000000000042004b000005070000a13d00000005020000290000000002020433000000000042004b000005070000a13d00000003025000290000000003010433000000200330003900000000030304330000000000320435000000800200043d000000000042004b000005070000a13d000700000005001d000800000004001d000000000101043300000000010104330000026d01100197000000000010043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000040200002900000000020204330000000804000029000000000042004b0000000909000029000000010a0000290000000703000029000005070000a13d0000000202300029000000000101043b000000000101041a000000a8011002700000ffff0110018f00000000001204350000000104400039000000000094004b000006980000413d000003d20000013d000900000002001d000000000020043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000101041a0000027d00100198000007000000c13d000000400100043d0000004402100039000002b803000041000005730000013d000000060300002900000028023002700000026702200197000000b803300270000000ff0330018f00000014033000c9000800640030003d0000000802200029000002670020009c0000076f0000a13d0000028301000041000000000010043f0000001101000039000000040010043f0000027901000041000008f500010430000002670090009c000001ef0000213d000003840000013d0000000001000411000000000010043f0000000401000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a0000026f022001970000000903000029000000000232019f000000000021041b000000000030043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a000000a8032002700000ffff0330018f0000ffff0030008c000006f70000613d000002b502200197000000a803300210000002b60330009a000002b703300197000000000223019f000000000021041b0000000901000029000000000010043f0000000401000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000101041a0008026d0010019b0000000902000029000000080020006b000002330000613d000000080000006b000002330000613d0000000001000411000000080010006b000002330000613d000000000010043f0000000501000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a0000026f022001970000000803000029000000000232019f000000000021041b000000000030043f0000000301000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a000000a8032002700000ffff0330018f0000ffff0030008c000006f70000613d000002b502200197000000a803300210000002b60330009a000002b703300197000000000223019f000000000021041b0000000902000029000002330000013d0000029a0110019700000028022002100000029b02200197000000000121019f0000000903000029000000000203041a0000029c02200197000000000121019f000000000013041b000000400100043d000000080200002900000000002104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000276011001c70000800d0200003900000002030000390000029d04000041000000000500041108f308e90000040f00000001002001900000088b0000613d0000000001000411000000000010043f0000000401000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000101041a0009026d0010019c0000084a0000c13d0000000001000411000000000010043f0000000501000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000101041a0009026d0010019c000006900000613d0000000901000029000000000010043f0000000601000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d00000008020000290008001400200122000000000101043b000000000201041a00000267032001970000000803300029000002670030009c000006f70000213d0000026a02200197000000000223019f000000000021041b0000000901000029000000000010043f0000000601000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a0000027502200197000002a1022001c7000000000021041b000000400100043d000000200210003900000002030000390000000000320435000000080200002900000000002104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000280011001c70000800d020000390000000303000039000002a2040000410000000905000029000000000600041108f308e90000040f00000001002001900000088b0000613d000006900000013d0000000102000039000000000202041a000000000002004b000007f90000c13d0000028301000041000000000010043f0000001201000039000000040010043f0000027901000041000008f5000104300000025803200119000002580020008c000008380000a13d0000000802000029000000b802200270000000ff0220018f000007d0022000c9000027100220003900000000032300a90000023e02300197000000640320011a000000080200002900000028022002700000026702200197000800000003001d0000000002320019000002670020009c000006f70000213d0000029a0110019700000028022002100000029b02200197000000000112019f0000000903000029000000000203041a0000029c02200197000000000121019f000000000013041b0000000001000411000000000010043f0000000701000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b0000000102100039000000000302041a000002c40330019700000001033001bf000000000032041b000000000001041b000000400100043d000000080200002900000000002104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000276011001c70000800d0200003900000002030000390000029d04000041000006310000013d00000064023000c90000ffff0330018f0000ffff0420018f00000000033400d9000000640030008c000006f70000c13d0000000803000029000000b803300270000000ff0330018f00000014033000c9000000640430003900000000034200a90000023e02200197000002990530019700000000022500d9000000000024004b000006f70000c13d000008020000013d0000000901000029000000000010043f0000000601000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d00000008020000290007000500200122000000000101043b000000000201041a00000267032001970000000703300029000002670030009c000006f70000213d0000026a02200197000000000223019f000000000021041b0000000901000029000000000010043f0000000601000039000000200010043f00000000010004140000023e0010009c0000023e01008041000000c00110021000000280011001c7000080100200003908f308ee0000040f00000001002001900000088b0000613d000000000101043b000000000201041a0000027502200197000002a1022001c7000000000021041b000000400100043d000000200210003900000001030000390000000000320435000000070200002900000000002104350000023e0010009c0000023e01008041000000400110021000000000020004140000023e0020009c0000023e02008041000000c002200210000000000112019f00000280011001c70000800d020000390000000303000039000002a2040000410000000905000029000000000600041108f308e90000040f00000001002001900000079c0000c13d0000000001000019000008f500010430000000000301001900000000040104330000000001420436000000000004004b000008990000613d00000000020000190000002003300039000000000503043300000000015104360000000102200039000000000042004b000008930000413d000000000001042d000000400100043d000002c70010009c000008a00000813d000000c002100039000000400020043f000000000001042d0000028301000041000000000010043f0000004101000039000000040010043f0000027901000041000008f5000104300000026d06100198000008ba0000613d0000026e01000041000000000201041a0000026f03200197000000000363019f000000000031041b00000000010004140000026d052001970000023e0010009c0000023e01008041000000c00110021000000270011001c70000800d020000390000000303000039000002710400004108f308e90000040f0000000100200190000008c40000613d000000000001042d000000400100043d00000278020000410000000000210435000000040210003900000000000204350000023e0010009c0000023e01008041000000400110021000000279011001c7000008f5000104300000000001000019000008f5000104300000026e01000041000000000101041a0000026d021001970000000001000411000000000012004b000008cd0000c13d000000000001042d000000400200043d00000293030000410000000000320435000000040320003900000000001304350000023e0020009c0000023e02008041000000400120021000000279011001c7000008f500010430000000000001042f00000000020004140000023e0020009c0000023e02008041000000c0022002100000023e0010009c0000023e010080410000004001100210000000000121019f00000280011001c7000080100200003908f308ee0000040f0000000100200190000008e70000613d000000000101043b000000000001042d0000000001000019000008f500010430000008ec002104210000000102000039000000000001042d0000000002000019000000000001042d000008f1002104230000000102000039000000000001042d0000000002000019000000000001042d000008f300000432000008f40001042e000008f5000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000715018a500000000000000000000000000000000000000000000000000000000a3bcd93000000000000000000000000000000000000000000000000000000000c5dce43b00000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000fe4b84df00000000000000000000000000000000000000000000000000000000c5dce43c00000000000000000000000000000000000000000000000000000000e2a4128300000000000000000000000000000000000000000000000000000000a3bcd93100000000000000000000000000000000000000000000000000000000a7757f5100000000000000000000000000000000000000000000000000000000ba684acd00000000000000000000000000000000000000000000000000000000845ec1b2000000000000000000000000000000000000000000000000000000008c46f307000000000000000000000000000000000000000000000000000000008c46f308000000000000000000000000000000000000000000000000000000008da5cb5b00000000000000000000000000000000000000000000000000000000845ec1b3000000000000000000000000000000000000000000000000000000008b1ec71d00000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000007d55923d000000000000000000000000000000000000000000000000000000008456cb590000000000000000000000000000000000000000000000000000000024600fc2000000000000000000000000000000000000000000000000000000005397da86000000000000000000000000000000000000000000000000000000005c975aba000000000000000000000000000000000000000000000000000000005c975abb0000000000000000000000000000000000000000000000000000000062afbaf8000000000000000000000000000000000000000000000000000000005397da8700000000000000000000000000000000000000000000000000000000575cea6b0000000000000000000000000000000000000000000000000000000024600fc3000000000000000000000000000000000000000000000000000000003f4ba83a000000000000000000000000000000000000000000000000000000004e43603a0000000000000000000000000000000000000000000000000000000016fcde170000000000000000000000000000000000000000000000000000000016fcde18000000000000000000000000000000000000000000000000000000001bb123ee0000000000000000000000000000000000000000000000000000000020ee29ce0000000000000000000000000000000000000000000000000000000005eaab4b000000000000000000000000000000000000000000000000000000000840605a000000000000000000000000000000000000000000000000000000000b616a72f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000010000000000000001000000000000000000000000ffffffffffffffffffffffffffffffffffffffff9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300ffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300000000000000000000000000000000000000000000000000002386f26fc10000ffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff0200000000000000000000000000000000000020000000000000000000000000c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d21e4fbdf7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000d7e6bcf8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000f92ee8a90000000000000000000000000000000000000000000000000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000008000000000000000000c085601c9b05546c4de925af5cdebeab0dd5f5d4bea4dc57b37e961749c911d0200000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffbf00000000000000000000000000000000000000000000003fffffffffffffffe04e487b7100000000000000000000000000000000000000000000000000000000ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000ff00000000000000000000000000000000000000000000002ca3a869468497ac8aaa58840422f15436165121abdeca2d8a2c0743197651fe496e636f7272656374207061796d656e7420616d6f756e74000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000004d617820626174746c65207061737365732072656163686564000000000000004175746f2d636c69636b657220616c7265616479206163746976650000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000b67af7b4276341386bb65723dece00412ab60efa077e7497c9c8becee1cf0b3c496e73756666696369656e742066756e647320666f72206175746f2d636c69636b657200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084000000800000000000000000118cdaa70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000008000000000000000000200000000000000000000000000000000000020000000800000000000000000f5adce8f4e3279f541bb9ad785c8d0f9f5d6d8dea2b65778d848a8e6d4d72f52000000000000000000000000000000000000004000000000000000000000000062e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25800000000000000000000000000000000000000000000000000000000fffffffc000000000000000000000000000000000000000000000000000000ffffffffff00000000000000000000000000000000000000ffffffffffffffff0000000000ffffffffffffffffffffffffffffffffffffff000000000000000000000000002c4c0dc427a50c4a69d2fc184c47a311acf950d8d2f289fbaee64e83e9b289677069726174696f6e0000000000000000000000000000000000000000000000004175746f2d636c69636b6572206163746976652c207761697420666f72206578000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000000000000100000000000000001324b6d93080a8996651b8def13df586817313170f80fd5d5168292456d9e2c8436f6f6c646f776e20706572696f64206e6f742066696e69736865640000000055736572206e6f74207265676973746572656400000000000000000000000000000000000000000000000000000000000000004000000080000000000000000000000000000000000000000000000000000000c00000000000000000000000005db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa8dfc202b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000008000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f39eaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d5472616e73666572206661696c656400000000000000000000000000000000004e6f2066756e647320746f2077697468647261770000000000000000000000003ee5aeb500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff3f00000000000000000000000000000000000000200000000000000000000000004dedb00172e87028d5d017e4d95848160971afa0f755bb45bce5a880aecdfd71436f6f6c646f776e206d7573742062652067726561746572207468616e20300000000000000000000000000000000000000000640000008000000000000000005573657220616c72656164792072656769737465726564000000000000000000ffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000ffff0000000000000000000000000000000000000000005265666572726572206e6f74207265676973746572656400000000000000000043616e6e6f7420726566657220796f757273656c660000000000000000000000ffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000010000000000000000000000000000000000000000000000000b74774e4141658915edba9d58702af343e4b36c30f6805f93721612f387587bd93c066500000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffff0000000000000000000000ffffffffffffffff0000000000000000000000000098741ecf35c5d20a8ed68dbd8540500684864a6c98c2a41a5844d0b3a2357d434e6f20706f696e747320746f20636c61696d00000000000000000000000000004e6f207265776172647320746f20636c61696d00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffda7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff402ef6238198bf9def86d0f10df239804a6c4158a5e3aa81beca6e1e345ef5a865
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.