Source Code
Overview
ETH Balance
0.0001 ETH
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 0 ETH | ||||
5635278 | 8 days ago | 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:
Pinata
Compiler Version
v0.8.28+commit.7893614a
ZkSolc Version
v1.5.11
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.28; import {ReentrancyGuard} from "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IEntropyConsumer} from "@pythnetwork/entropy-sdk-solidity/IEntropyConsumer.sol"; import {IEntropy} from "@pythnetwork/entropy-sdk-solidity/IEntropy.sol"; contract Pinata is ReentrancyGuard, Ownable, IEntropyConsumer { IEntropy private entropy; // EVENTS event userWonPrize(address user, uint256 amount); event userWonJackpot(address user, uint256 amount); // this means the user broke the pinata event userTriesToHit(address user, address pinata, uint256 sequenceNumber); event prizePoolRefilled(address user, uint256 amount); event prizePoolWithdrawed(address user, uint256 amount); event HitResult( address user, address entropyProvider, uint256 sequenceNumber, uint256 firstNumber, uint256 secondNumber, uint256 thirdNumber, uint256 timesHit, uint256 totalPayed ); // STATES address private entropyProvider; address public platformAddress; bool public pinataIsBroken = false; bool public hasJackpotSequence; bool private sequencesInitialized; uint256 public maxMultiplier; uint256 public hasBeenHit; uint256 public hasBeenPaid; uint256 public hitCost; uint256 public creatorFee; uint256 public creatorBenefits; uint256 public platformFee; uint256 public platformBenefits; bytes32 public jackpotSequence; uint256 public secondNumberMaxRange; uint256 public originalPrizePool; uint256 public ownerWithdrawn; uint256 public constant MAX_TOTAL_FEES = 15; // 15% mapping(uint8 => uint256) private allowedRanges; mapping(address => uint256) public playerNumbers; mapping(uint256 => address) private numberToPlayer; mapping(bytes32 => uint256) public winningSequences; constructor( address _initialOwner, uint256 _prizePool, uint256 _hitCost, uint256 _creatorFee, uint256 _platformFee, address _platformAddress, address _entropyAddress, address _entropyProvider, uint8 _rangeIndex ) payable Ownable(_initialOwner) { require(_initialOwner != address(0), "Invalid owner address"); require(_platformAddress != address(0), "Invalid platform address"); require(_entropyAddress != address(0), "Invalid entropy address"); require(_entropyProvider != address(0), "Invalid entropy provider"); require(_creatorFee <= 1000, "Fees cannot exceed 10%"); require((_creatorFee + _platformFee) <= MAX_TOTAL_FEES * 10000, "Fees cant be more than 15%"); require(msg.value >= _prizePool, "Insufficient initial prize pool"); // Initialize allowed ranges allowedRanges[0] = 6; allowedRanges[1] = 8; allowedRanges[2] = 12; allowedRanges[3] = 18; allowedRanges[4] = 24; require(_rangeIndex <= 4, "Invalid range index"); secondNumberMaxRange = allowedRanges[_rangeIndex]; require((_hitCost * (secondNumberMaxRange - 1)) >= _prizePool, "Prize pool cant cover max prize"); maxMultiplier = secondNumberMaxRange - 1; _initializeWinningSequences(); _initializeJackpotSequence(); _hitCost = _hitCost; creatorFee = _creatorFee; platformFee = _platformFee; platformAddress = _platformAddress; originalPrizePool = _prizePool; entropy = IEntropy(_entropyAddress); entropyProvider = _entropyProvider; } // FUNCTIONS // A function to try to hit the pinata function hitPinata(bytes32 userRandomNumber) public payable nonReentrant { uint256 _hitCost = hitCost; // Cache storage read uint256 _maxMultiplier = maxMultiplier; // Cache storage read uint256 fee = entropy.getFee(entropyProvider); uint256 totalCost = _hitCost + fee; uint256 maxPrize = _hitCost * _maxMultiplier; require(playerNumbers[msg.sender] == 0, "user is already playing"); // this is 0 again once the user finish playing require(msg.value >= totalCost, "no enought payment to hit the pinata"); require( address(this).balance >= maxPrize + creatorBenefits + platformBenefits, "Insufficient contract balance for potential prizes" ); // here we call entropy of pyth uint64 sequenceNumber = entropy.requestWithCallback{value: fee}( entropyProvider, userRandomNumber ); playerNumbers[msg.sender] = sequenceNumber; numberToPlayer[sequenceNumber] = msg.sender; // this will be deleted once the user finish playing // Calculate fees based on hitCost using basis points (1 basis point = 0.01%) uint256 creatorAmount = (_hitCost * creatorFee) / 10000; uint256 platformAmount = (_hitCost * platformFee) / 10000; creatorBenefits += creatorAmount; platformBenefits += platformAmount; // Refund excess payment if user sent more than required uint256 excess = msg.value - totalCost; if (excess > 0) { (bool success, ) = payable(msg.sender).call{value: excess}(""); require(success, "Refund transfer failed"); } emit userTriesToHit(msg.sender, address(this), sequenceNumber); } function entropyCallback( uint64 sequenceNumber, address provider, bytes32 randomNumber ) internal override { address user = numberToPlayer[sequenceNumber]; hasBeenHit += 1; uint256[3] memory sequence = generateSequence( randomNumber, secondNumberMaxRange ); uint256 prize = getPrizeForSequence(sequence); if (prize > 0) { sendPrize(prize, user); } delete numberToPlayer[sequenceNumber]; playerNumbers[user] = 0; emit HitResult( user, provider, sequenceNumber, sequence[0], sequence[1], sequence[2], hasBeenHit, hasBeenPaid ); } // Maps a random number into a range between minRange and maxRange (inclusive) function mapRandomNumber( bytes32 randomNumber, uint256 minRange, uint256 maxRange ) internal pure returns (uint256) { uint256 range = maxRange - minRange + 1; return minRange + (uint256(randomNumber) % range); } function generateSequence( bytes32 randomNumber, uint256 maxRange ) internal pure returns (uint256[3] memory) { uint256 firstResult = mapRandomNumber( keccak256(abi.encodePacked(randomNumber, "first")), 1, maxRange ); uint256 secondResult = mapRandomNumber( keccak256(abi.encodePacked(randomNumber, "second")), 1, maxRange ); uint256 thirdResult = mapRandomNumber( keccak256(abi.encodePacked(randomNumber, "third")), 1, maxRange ); uint256[3] memory sequence = [firstResult, secondResult, thirdResult]; return sequence; } // Function to withdraw accumulated benefits for either creator or platform function withdrawBenefits(bool isCreator) public nonReentrant { uint256 amount; address recipient; if (isCreator) { require( creatorBenefits > 0, "No creator benefits available to withdraw" ); amount = creatorBenefits; creatorBenefits = 0; recipient = owner(); } else { require( msg.sender == platformAddress, "Only platform can withdraw platform benefits" ); require( platformBenefits > 0, "No platform benefits available to withdraw" ); amount = platformBenefits; platformBenefits = 0; recipient = platformAddress; } (bool success, ) = payable(recipient).call{value: amount}(""); require(success, "Transfer failed"); } function getEntropy() internal view override returns (address) { return address(entropy); } // Function to get the prize amount for a given sequence // This function also calculates the jackpot minus creator or platform benefits function getPrizeForSequence( uint256[3] memory _sequence ) public view returns (uint256) { bytes32 keyHash = keccak256(abi.encodePacked(_sequence)); // Check if this is the jackpot sequence if (hasJackpotSequence && keyHash == jackpotSequence) { // The prize will be the total balance minus all fees return address(this).balance - creatorBenefits - platformBenefits; } return winningSequences[keyHash]; } // A function to send a prize, minus the creator and plaform benefits function sendPrize(uint256 _amount, address _winner) internal { require(_winner != address(0), "Invalid winner address"); require(_amount > 0, "Prize amount must be greater than 0"); require( _amount <= address(this).balance - creatorBenefits - platformBenefits, "Insufficient contract balance" ); // Calculate fees using basis points uint256 creatorAmount = (_amount * creatorFee) / 10000; uint256 platformAmount = (_amount * platformFee) / 10000; uint256 finalPrizeAmount = _amount - creatorAmount - platformAmount; // Check if this is a jackpot win bool isJackpot = finalPrizeAmount == address(this).balance - creatorBenefits - platformBenefits; // Update state before transfer creatorBenefits += creatorAmount; platformBenefits += platformAmount; hasBeenPaid += finalPrizeAmount; if (isJackpot) { pinataIsBroken = true; } // Send prize to user (bool success, ) = payable(_winner).call{value: finalPrizeAmount}(""); require(success, "Prize transfer failed"); if (isJackpot) { emit userWonJackpot(_winner, finalPrizeAmount); } else { emit userWonPrize(_winner, finalPrizeAmount); } } function _initializeWinningSequences() private { require(!sequencesInitialized, "Sequences already initialized"); for (uint8 i = 1; i < secondNumberMaxRange; i++) { uint8[] memory sequence = new uint8[](3); sequence[0] = i; sequence[1] = i; sequence[2] = i; bytes32 keyHash = keccak256(abi.encodePacked(sequence)); winningSequences[keyHash] = i; } sequencesInitialized = true; } function _initializeJackpotSequence() private { require(!hasJackpotSequence, "Jackpot sequence already initialized"); uint8[] memory sequence = new uint8[](3); sequence[0] = uint8(secondNumberMaxRange); sequence[1] = uint8(secondNumberMaxRange); sequence[2] = uint8(secondNumberMaxRange); jackpotSequence = keccak256(abi.encodePacked(sequence)); hasJackpotSequence = true; } // Function to refill the prize pool function refillPrizePool() public payable nonReentrant { require(msg.value > 0, "Must send some ETH to refill"); require(!pinataIsBroken, "Cannot refill a broken pinata"); emit prizePoolRefilled(msg.sender, msg.value); } function withdrawPrizePool() external onlyOwner nonReentrant { require(!pinataIsBroken, "Cannot withdraw from broken pinata"); require( address(this).balance > creatorBenefits + platformBenefits, "No funds available for withdrawal" ); uint256 availableForWithdrawal = originalPrizePool - ownerWithdrawn; require(availableForWithdrawal > 0, "No prize pool left to withdraw"); uint256 actualBalance = address(this).balance - creatorBenefits - platformBenefits; uint256 withdrawAmount = availableForWithdrawal; if (actualBalance < withdrawAmount) { withdrawAmount = actualBalance; } // Calculate required balance for max prize uint256 maxPrize = hitCost * maxMultiplier; require( (actualBalance - withdrawAmount) >= maxPrize, "Withdrawal would leave insufficient funds for max prize" ); ownerWithdrawn += withdrawAmount; (bool success, ) = payable(owner()).call{value: withdrawAmount}(""); require(success, "Transfer failed"); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @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 ReentrancyGuard { // 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; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _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 { // 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 { // 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) { return _status == ENTERED; } }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; abstract contract IEntropyConsumer { // This method is called by Entropy to provide the random number to the consumer. // It asserts that the msg.sender is the Entropy contract. It is not meant to be // override by the consumer. function _entropyCallback( uint64 sequence, address provider, bytes32 randomNumber ) external { address entropy = getEntropy(); require(entropy != address(0), "Entropy address not set"); require(msg.sender == entropy, "Only Entropy can call this function"); entropyCallback(sequence, provider, randomNumber); } // getEntropy returns Entropy contract address. The method is being used to check that the // callback is indeed from Entropy contract. The consumer is expected to implement this method. // Entropy address can be found here - https://docs.pyth.network/entropy/contract-addresses function getEntropy() internal view virtual returns (address); // This method is expected to be implemented by the consumer to handle the random number. // It will be called by _entropyCallback after _entropyCallback ensures that the call is // indeed from Entropy contract. function entropyCallback( uint64 sequence, address provider, bytes32 randomNumber ) internal virtual; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.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 Ownable is Context { address private _owner; /** * @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. */ constructor(address initialOwner) { 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) { 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 { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; import "./EntropyEvents.sol"; interface IEntropy is EntropyEvents { // Register msg.sender as a randomness provider. The arguments are the provider's configuration parameters // and initial commitment. Re-registering the same provider rotates the provider's commitment (and updates // the feeInWei). // // chainLength is the number of values in the hash chain *including* the commitment, that is, chainLength >= 1. function register( uint128 feeInWei, bytes32 commitment, bytes calldata commitmentMetadata, uint64 chainLength, bytes calldata uri ) external; // Withdraw a portion of the accumulated fees for the provider msg.sender. // Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient // balance of fees in the contract). function withdraw(uint128 amount) external; // Withdraw a portion of the accumulated fees for provider. The msg.sender must be the fee manager for this provider. // Calling this function will transfer `amount` wei to the caller (provided that they have accrued a sufficient // balance of fees in the contract). function withdrawAsFeeManager(address provider, uint128 amount) external; // As a user, request a random number from `provider`. Prior to calling this method, the user should // generate a random number x and keep it secret. The user should then compute hash(x) and pass that // as the userCommitment argument. (You may call the constructUserCommitment method to compute the hash.) // // This method returns a sequence number. The user should pass this sequence number to // their chosen provider (the exact method for doing so will depend on the provider) to retrieve the provider's // number. The user should then call fulfillRequest to construct the final random number. // // This method will revert unless the caller provides a sufficient fee (at least getFee(provider)) as msg.value. // Note that excess value is *not* refunded to the caller. function request( address provider, bytes32 userCommitment, bool useBlockHash ) external payable returns (uint64 assignedSequenceNumber); // Request a random number. The method expects the provider address and a secret random number // in the arguments. It returns a sequence number. // // The address calling this function should be a contract that inherits from the IEntropyConsumer interface. // The `entropyCallback` method on that interface will receive a callback with the generated random number. // // This method will revert unless the caller provides a sufficient fee (at least getFee(provider)) as msg.value. // Note that excess value is *not* refunded to the caller. function requestWithCallback( address provider, bytes32 userRandomNumber ) external payable returns (uint64 assignedSequenceNumber); // Fulfill a request for a random number. This method validates the provided userRandomness and provider's proof // against the corresponding commitments in the in-flight request. If both values are validated, this function returns // the corresponding random number. // // Note that this function can only be called once per in-flight request. Calling this function deletes the stored // request information (so that the contract doesn't use a linear amount of storage in the number of requests). // If you need to use the returned random number more than once, you are responsible for storing it. function reveal( address provider, uint64 sequenceNumber, bytes32 userRevelation, bytes32 providerRevelation ) external returns (bytes32 randomNumber); // Fulfill a request for a random number. This method validates the provided userRandomness // and provider's revelation against the corresponding commitment in the in-flight request. If both values are validated // and the requestor address is a contract address, this function calls the requester's entropyCallback method with the // sequence number, provider address and the random number as arguments. Else if the requestor is an EOA, it won't call it. // // Note that this function can only be called once per in-flight request. Calling this function deletes the stored // request information (so that the contract doesn't use a linear amount of storage in the number of requests). // If you need to use the returned random number more than once, you are responsible for storing it. // // Anyone can call this method to fulfill a request, but the callback will only be made to the original requester. function revealWithCallback( address provider, uint64 sequenceNumber, bytes32 userRandomNumber, bytes32 providerRevelation ) external; function getProviderInfo( address provider ) external view returns (EntropyStructs.ProviderInfo memory info); function getDefaultProvider() external view returns (address provider); function getRequest( address provider, uint64 sequenceNumber ) external view returns (EntropyStructs.Request memory req); function getFee(address provider) external view returns (uint128 feeAmount); function getAccruedPythFees() external view returns (uint128 accruedPythFeesInWei); function setProviderFee(uint128 newFeeInWei) external; function setProviderFeeAsFeeManager( address provider, uint128 newFeeInWei ) external; function setProviderUri(bytes calldata newUri) external; // Set manager as the fee manager for the provider msg.sender. // After calling this function, manager will be able to set the provider's fees and withdraw them. // Only one address can be the fee manager for a provider at a time -- calling this function again with a new value // will override the previous value. Call this function with the all-zero address to disable the fee manager role. function setFeeManager(address manager) external; function constructUserCommitment( bytes32 userRandomness ) external pure returns (bytes32 userCommitment); function combineRandomValues( bytes32 userRandomness, bytes32 providerRandomness, bytes32 blockHash ) external pure returns (bytes32 combinedRandomness); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./EntropyStructs.sol"; interface EntropyEvents { event Registered(EntropyStructs.ProviderInfo provider); event Requested(EntropyStructs.Request request); event RequestedWithCallback( address indexed provider, address indexed requestor, uint64 indexed sequenceNumber, bytes32 userRandomNumber, EntropyStructs.Request request ); event Revealed( EntropyStructs.Request request, bytes32 userRevelation, bytes32 providerRevelation, bytes32 blockHash, bytes32 randomNumber ); event RevealedWithCallback( EntropyStructs.Request request, bytes32 userRandomNumber, bytes32 providerRevelation, bytes32 randomNumber ); event ProviderFeeUpdated(address provider, uint128 oldFee, uint128 newFee); event ProviderUriUpdated(address provider, bytes oldUri, bytes newUri); event ProviderFeeManagerUpdated( address provider, address oldFeeManager, address newFeeManager ); event Withdrawal( address provider, address recipient, uint128 withdrawnAmount ); }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; contract EntropyStructs { struct ProviderInfo { uint128 feeInWei; uint128 accruedFeesInWei; // The commitment that the provider posted to the blockchain, and the sequence number // where they committed to this. This value is not advanced after the provider commits, // and instead is stored to help providers track where they are in the hash chain. bytes32 originalCommitment; uint64 originalCommitmentSequenceNumber; // Metadata for the current commitment. Providers may optionally use this field to help // manage rotations (i.e., to pick the sequence number from the correct hash chain). bytes commitmentMetadata; // Optional URI where clients can retrieve revelations for the provider. // Client SDKs can use this field to automatically determine how to retrieve random values for each provider. // TODO: specify the API that must be implemented at this URI bytes uri; // The first sequence number that is *not* included in the current commitment (i.e., an exclusive end index). // The contract maintains the invariant that sequenceNumber <= endSequenceNumber. // If sequenceNumber == endSequenceNumber, the provider must rotate their commitment to add additional random values. uint64 endSequenceNumber; // The sequence number that will be assigned to the next inbound user request. uint64 sequenceNumber; // The current commitment represents an index/value in the provider's hash chain. // These values are used to verify requests for future sequence numbers. Note that // currentCommitmentSequenceNumber < sequenceNumber. // // The currentCommitment advances forward through the provider's hash chain as values // are revealed on-chain. bytes32 currentCommitment; uint64 currentCommitmentSequenceNumber; // An address that is authorized to set / withdraw fees on behalf of this provider. address feeManager; } struct Request { // Storage slot 1 // address provider; uint64 sequenceNumber; // The number of hashes required to verify the provider revelation. uint32 numHashes; // Storage slot 2 // // The commitment is keccak256(userCommitment, providerCommitment). Storing the hash instead of both saves 20k gas by // eliminating 1 store. bytes32 commitment; // Storage slot 3 // // The number of the block where this request was created. // Note that we're using a uint64 such that we have an additional space for an address and other fields in // this storage slot. Although block.number returns a uint256, 64 bits should be plenty to index all of the // blocks ever generated. uint64 blockNumber; // The address that requested this random number. address requester; // If true, incorporate the blockhash of blockNumber into the generated random value. bool useBlockhash; // If true, the requester will be called back with the generated random value. bool isRequestWithCallback; // There are 2 remaining bytes of free space in this slot. } }
{ "evmVersion": "paris", "optimizer": { "enabled": true, "mode": "3" }, "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"_initialOwner","type":"address"},{"internalType":"uint256","name":"_prizePool","type":"uint256"},{"internalType":"uint256","name":"_hitCost","type":"uint256"},{"internalType":"uint256","name":"_creatorFee","type":"uint256"},{"internalType":"uint256","name":"_platformFee","type":"uint256"},{"internalType":"address","name":"_platformAddress","type":"address"},{"internalType":"address","name":"_entropyAddress","type":"address"},{"internalType":"address","name":"_entropyProvider","type":"address"},{"internalType":"uint8","name":"_rangeIndex","type":"uint8"}],"stateMutability":"payable","type":"constructor"},{"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":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"entropyProvider","type":"address"},{"indexed":false,"internalType":"uint256","name":"sequenceNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"thirdNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timesHit","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalPayed","type":"uint256"}],"name":"HitResult","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":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"prizePoolRefilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"prizePoolWithdrawed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"pinata","type":"address"},{"indexed":false,"internalType":"uint256","name":"sequenceNumber","type":"uint256"}],"name":"userTriesToHit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"userWonJackpot","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"userWonPrize","type":"event"},{"inputs":[],"name":"MAX_TOTAL_FEES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint64","name":"sequence","type":"uint64"},{"internalType":"address","name":"provider","type":"address"},{"internalType":"bytes32","name":"randomNumber","type":"bytes32"}],"name":"_entropyCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creatorBenefits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[3]","name":"_sequence","type":"uint256[3]"}],"name":"getPrizeForSequence","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasBeenHit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasBeenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hasJackpotSequence","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hitCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"userRandomNumber","type":"bytes32"}],"name":"hitPinata","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"jackpotSequence","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"originalPrizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ownerWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pinataIsBroken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformBenefits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platformFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"playerNumbers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refillPrizePool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"secondNumberMaxRange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"winningSequences","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isCreator","type":"bool"}],"name":"withdrawBenefits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010002c16b9565d471560ed5f5440027aacbb786d350edec159ec1c44005a7eb000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001200000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c18800000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188000000000000000000000000858687fd592112f7046e394a3bf10d0c11ff9e630000000000000000000000006cc14824ea2918f5de5c2f75a9da968ad4bd63440000000000000000000000000000000000000000000000000000000000000002
Deployed Bytecode
0x0004000000000002000d00000000000200000060041002700000023d03400197000300000031035500020000000103550000023d0040019d00000001002001900000002d0000c13d0000008002000039000000400020043f000000040030008c000007e90000413d000000000201043b000000e0022002700000025b0020009c000000690000a13d0000025c0020009c000000780000213d000002660020009c000000bc0000a13d000002670020009c000001110000213d0000026a0020009c000001720000613d0000026b0020009c000007e90000c13d000000000100041a000000020010008c000001f40000613d0000000201000039000000000010041b0000000001000416000000000001004b0000022e0000c13d0000024901000041000000800010043f0000002001000039000000840010043f0000001c01000039000000a40010043f0000029901000041000000c40010043f0000029601000041000008f0000104300000001f023000390000023e022001970000008002200039000000400020043f0000001f0430018f0000023f0530019800000080025000390000003b0000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b000000370000c13d000000000004004b000000480000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000001200030008c000007e90000413d000000800600043d000002400060009c000007e90000213d000001200300043d000002400030009c000007e90000213d000001400100043d000d00000001001d000002400010009c000007e90000213d000001600100043d000c00000001001d000002400010009c000007e90000213d000001800100043d000b00000001001d000000ff0010008c000007e90000213d000001000200043d000000e00400043d000000c00700043d000000a00100043d0000000105000039000000000050041b000000000006004b000002010000c13d0000028301000041000000000010043f000000040000043f0000028201000041000008f0000104300000026f0020009c000000850000a13d000002700020009c0000009d0000a13d000002710020009c000001080000213d000002740020009c000001600000613d000002750020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000601000039000001d20000013d0000025d0020009c000000c70000a13d0000025e0020009c0000013e0000213d000002610020009c000001790000613d000002620020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000c01000039000001d20000013d000002790020009c000000920000213d0000027d0020009c000001560000613d0000027e0020009c000001470000613d0000027f0020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000d01000039000001d20000013d0000027a0020009c0000015b0000613d0000027b0020009c0000014c0000613d0000027c0020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000e01000039000001d20000013d000002760020009c000001d60000613d000002770020009c0000017e0000613d000002780020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000101000039000000000201041a00000240052001970000000003000411000000000035004b000002240000c13d0000024102200197000000000021041b00000000010004140000023d0010009c0000023d01008041000000c00110021000000242011001c70000800d0200003900000003030000390000024304000041000000000600001908ee08e40000040f0000000100200190000007e90000613d0000000001000019000008ef0001042e0000026c0020009c000001ef0000613d0000026d0020009c000001be0000613d0000026e0020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000001001000039000001d20000013d000002630020009c000001f80000613d000002640020009c000001c30000613d000002650020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000101000039000000000101041a00000240021001970000000001000411000000000012004b000002290000c13d000000000100041a000000020010008c000001f40000613d0000000201000039000000000010041b0000000401000039000000000101041a0000028400100198000002ea0000c13d000002880100004100000000001004430000000001000410000000040010044300000000010004140000023d0010009c0000023d01008041000000c00110021000000289011001c70000800a0200003908ee08e90000040f0000000100200190000007880000613d0000000a02000039000000000402041a0000000c02000039000000000302041a000000000043001a0000031d0000413d0000000002430019000000000101043b000000000021004b000003500000a13d0000001001000039000000000201041a0000000f01000039000000000101041a000000000121004b0000031d0000413d000b00000004001d000c00000003001d000a00000002001d000d00000001001d000003b70000c13d000000400100043d00000044021000390000028e03000041000000000032043500000024021000390000001e03000039000002df0000013d000002720020009c000001670000613d000002730020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000101000039000001fc0000013d000002680020009c0000019c0000613d000002690020009c000007e90000c13d000000240030008c000007e90000413d0000000002000416000000000002004b000007e90000c13d0000000401100370000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b000007e90000c13d000000000200041a000000020020008c000001f40000613d0000000202000039000000000020041b000000000001004b000002f60000c13d0000000401000039000000000101041a00000240011001970000000004000411000000000014004b000003290000c13d0000000c01000039000000000301041a000000000003004b000003640000c13d0000024901000041000000800010043f0000002001000039000000840010043f0000002a01000039000000a40010043f0000029301000041000000c40010043f0000029401000041000000e40010043f0000028701000041000008f0000104300000025f0020009c000001a10000613d000002600020009c000007e90000c13d0000000001000416000000000001004b000007e90000c13d0000000701000039000001d20000013d0000000001000416000000000001004b000007e90000c13d0000000501000039000001d20000013d000000240030008c000007e90000413d0000000002000416000000000002004b000007e90000c13d0000000401100370000000000101043b000000000010043f0000001401000039000001ce0000013d0000000001000416000000000001004b000007e90000c13d0000000801000039000001d20000013d0000000001000416000000000001004b000007e90000c13d0000000b01000039000001d20000013d0000000001000416000000000001004b000007e90000c13d0000000401000039000000000101041a0000024c001001980000016d0000013d0000000001000416000000000001004b000007e90000c13d0000000401000039000000000101041a00000284001001980000000001000039000000010100c039000000800010043f0000028001000041000008ef0001042e0000000001000416000000000001004b000007e90000c13d0000000f01000039000000800010043f0000028001000041000008ef0001042e0000000001000416000000000001004b000007e90000c13d0000000901000039000001d20000013d000000640030008c000007e90000413d0000000002000416000000000002004b000007e90000c13d0000000402100370000000000202043b000002a10020009c000007e90000213d0000002403100370000000000303043b000d00000003001d000002400030009c000007e90000213d0000004401100370000000000401043b0000000201000039000000000101041a0000024001100198000003060000c13d0000024901000041000000800010043f0000002001000039000000840010043f0000001701000039000000a40010043f000002bb01000041000000c40010043f0000029601000041000008f0000104300000000001000416000000000001004b000007e90000c13d0000000f01000039000001d20000013d000000240030008c000007e90000413d0000000002000416000000000002004b000007e90000c13d0000000401100370000000000601043b000002400060009c000007e90000213d0000000101000039000000000201041a00000240052001970000000003000411000000000035004b000002240000c13d000000000006004b000000640000613d0000024102200197000000000262019f000000000021041b00000000010004140000023d0010009c0000023d01008041000000c00110021000000242011001c70000800d0200003900000003030000390000024304000041000000b70000013d0000000001000416000000000001004b000007e90000c13d0000000a01000039000001d20000013d000000240030008c000007e90000413d0000000002000416000000000002004b000007e90000c13d0000000401100370000000000101043b000002400010009c000007e90000213d000000000010043f0000001201000039000000200010043f0000004002000039000000000100001908ee08cf0000040f000000000101041a000000800010043f0000028001000041000008ef0001042e000000640030008c000007e90000413d0000000002000416000000000002004b000007e90000c13d000000e002000039000000400020043f0000000402100370000000000202043b000000800020043f0000002402100370000000000202043b000000a00020043f0000004401100370000000000101043b000000c00010043f000000800100003908ee082a0000040f000000400200043d00000000001204350000023d0020009c0000023d020080410000004001200210000002bc011001c7000008ef0001042e000000240030008c000007e90000413d000000000100041a000000020010008c000002420000c13d000002aa01000041000000000010043f000002ab01000041000008f0000104300000000001000416000000000001004b000007e90000c13d0000000401000039000000000101041a0000024001100197000000800010043f0000028001000041000008ef0001042e000600000007001d000900000004001d000800000002001d000700000001001d000000000105041a0000024102100197000000000262019f000000000025041b0000000002000414000a00000003001d00000240051001970000023d0020009c0000023d02008041000000c00120021000000242011001c70000800d020000390000000303000039000002430400004108ee08e40000040f0000000a030000290000000100200190000007e90000613d0000000402000039000000000102041a0000024401100197000000000012041b000000000003004b000002d70000c13d000000400100043d00000044021000390000025a03000041000000000032043500000024021000390000001803000039000002df0000013d0000028101000041000000000010043f000000040030043f0000028201000041000008f0000104300000028102000041000000000020043f000000040010043f0000028201000041000008f0000104300000000402000039000000000202041a0000028400200198000002af0000c13d00000000020004110000024002200197000000800020043f000000a00010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000297011001c70000800d020000390000000103000039000002980400004108ee08e40000040f0000000100200190000003750000c13d000007e90000013d0000000201000039000000000010041b0000000502000039000000000202041a000c00000002001d0000000802000039000000000202041a000d00000002001d000000000101041a0000000302000039000000000202041a0000029a03000041000000800030043f0000024002200197000b00000002001d000000840020043f000000000300041400000240021001970000023d0030009c0000023d03008041000000c0013002100000029b011001c7000a00000002001d08ee08e90000040f000000800a00003900000060031002700000023d03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000002690000613d000000000801034f000000008908043c000000000a9a043600000000005a004b000002650000c13d000000000006004b000002760000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000002b90000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c000007e90000413d000000800100043d000900000001001d0000029c0010009c000007e90000213d0000000d01000029000000090010002a0000000c020000290000031d0000413d00000000031200a9000000000001004b0000028e0000613d00000000011300d9000000000021004b0000031d0000c13d000c00000003001d0000000001000411000000000010043f0000001201000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b000000000101041a000000000001004b000003b30000c13d00000009020000290008000d0020002d0000000002000416000000080020006c0000043e0000813d000000400100043d0000006402100039000002a80300004100000000003204350000004402100039000002a903000041000000000032043500000024021000390000002403000039000003590000013d0000024901000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f0000029501000041000000c40010043f0000029601000041000008f0000104300000001f0530018f0000023f06300198000000400200043d0000000004620019000002c40000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000002c00000c13d000000000005004b000002d10000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f000000000014043500000060013002100000023d0020009c0000023d020080410000004002200210000000000112019f000008f0000104300000000d0000006b000003230000c13d000000400100043d000000440210003900000259030000410000000000320435000000240210003900000017030000390000000000320435000002490200004100000000002104350000000402100039000000200300003900000000003204350000023d0010009c0000023d0100804100000040011002100000024a011001c7000008f0000104300000024901000041000000800010043f0000002001000039000000840010043f0000002201000039000000a40010043f0000028501000041000000c40010043f0000028601000041000000e40010043f0000028701000041000008f0000104300000000a01000039000000000301041a000000000003004b000003350000c13d0000024901000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000028f01000041000000c40010043f0000029001000041000000e40010043f0000028701000041000008f0000104300000000003000411000000000013004b0000033a0000c13d000c00000004001d000002a101200197000b00000001001d000000000010043f0000001301000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b0000000604000039000000000204041a000000010320003a000003860000c13d000002ba01000041000000000010043f0000001101000039000000040010043f0000028201000041000008f0000104300000000c0000006b000003460000c13d000000400100043d00000044021000390000025803000041000002200000013d0000024901000041000000800010043f0000002001000039000000840010043f0000002c01000039000000a40010043f0000029101000041000000c40010043f0000029201000041000000e40010043f0000028701000041000008f000010430000000000001041b0000000101000039000000000101041a0000024004100197000003650000013d0000024901000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f000002ac01000041000000c40010043f000002ad01000041000000e40010043f0000028701000041000008f0000104300000000902000029000003e90020008c000003790000413d000000400100043d00000044021000390000025703000041000000000032043500000024021000390000001603000039000002df0000013d000000400100043d00000064021000390000028a03000041000000000032043500000044021000390000028b030000410000000000320435000000240210003900000021030000390000000000320435000002490200004100000000002104350000000402100039000000200300003900000000003204350000023d0010009c0000023d0100804100000040011002100000024f011001c7000008f000010430000000000001041b00000000010004140000023d0010009c0000023d01008041000000c00110021000000242011001c70000800902000039000000000500001908ee08e40000040f000d00000002001d00000060021002700001023d0020019d000300000001035508ee088b0000040f0000000d01000029000000010110018f08ee08ba0000040f0000000101000039000000000010041b0000000001000019000008ef0001042e000000080020002a0000031d0000413d00000009020000290000000801200029000002450010009c000003a90000a13d000000400100043d00000044021000390000025603000041000000000032043500000024021000390000001a03000039000002df0000013d000000000201041a000000000034041b000000400100043d000002ae0010009c000003a30000213d0000000d03000029000902400030019b000a02400020019b0000000e02000039000000000202041a000d00000002001d0000006002100039000000400020043f00000000030000310000000203300367000000003403043c0000000001410436000000000021004b000003950000c13d000000400100043d0000004002100039000002af030000410000000000320435000000250200003900000000022104360000000c030000290000000000320435000002ae0010009c0000046f0000a13d000002ba01000041000000000010043f0000004101000039000000040010043f0000028201000041000008f0000104300000000001000416000000070010006c000003e40000813d000000400100043d00000044021000390000025503000041000000000032043500000024021000390000001f03000039000002df0000013d000000400100043d00000044021000390000029d03000041000002dc0000013d000002880100004100000000001004430000000001000410000000040010044300000000010004140000023d0010009c0000023d01008041000000c00110021000000289011001c70000800a0200003908ee08e90000040f0000000100200190000007880000613d000000000101043b0000000b0110006c0000000d050000290000000c020000290000031d0000413d000000000121004b0000031d0000413d000000000051004b00000000050140190000000502000039000000000302041a0000000802000039000000000402041a00000000024300a9000000000004004b000003d70000613d00000000044200d9000000000034004b0000031d0000c13d0000000001510049000000000021004b000005f30000813d000000400100043d00000064021000390000028c03000041000000000032043500000044021000390000028d03000041000000000032043500000024021000390000003703000039000003590000013d000000000000043f0000001101000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b0000000602000039000000000021041b0000000101000039000000000010043f0000001101000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b0000000802000039000000000021041b0000000201000039000000000010043f0000001101000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b0000000c02000039000000000021041b0000000301000039000000000010043f0000001101000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b0000001202000039000000000021041b0000000401000039000000000010043f0000001101000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d0000000b02000029000000ff0220018f000000000101043b0000001803000039000000000031041b000000050020008c000006060000413d000000400100043d00000044021000390000025403000041000000000032043500000024021000390000001303000039000002df0000013d000002880100004100000000001004430000000001000410000000040010044300000000010004140000023d0010009c0000023d01008041000000c00110021000000289011001c70000800a0200003908ee08e90000040f0000000100200190000007880000613d000000000201043b0000000a01000039000000000101041a0000000c03000029000000000031001a0000031d0000413d00000000013100190000000c03000039000000000303041a000000000013001a0000031d0000413d0000000004130019000000400300043d0000002401300039000c00000003001d0000000403300039000000000042004b0000052c0000813d00000249020000410000000c04000029000000000024043500000020020000390000000000230435000000320200003900000000002104350000006401400039000002a60200004100000000002104350000004401400039000002a70200004100000000002104350000023d0040009c0000023d0400804100000040014002100000024f011001c7000008f0000104300000006003100039000000400030043f0000023d0020009c0000023d02008041000000400220021000000000010104330000023d0010009c0000023d010080410000006001100210000000000121019f00000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000242011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d0000000d0000006b0000031d0000613d000000000101043b000800000001001d000000400100043d0000004002100039000002b003000041000000000032043500000020021000390000000c03000029000000000032043500000026030000390000000000310435000002ae0010009c000003a30000213d0000006003100039000000400030043f0000023d0020009c0000023d02008041000000400220021000000000010104330000023d0010009c0000023d010080410000006001100210000000000121019f00000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000242011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b000700000001001d000000400100043d0000004002100039000002b103000041000000000032043500000020021000390000000c03000029000000000032043500000025030000390000000000310435000002ae0010009c000003a30000213d0000006003100039000000400030043f0000023d0020009c0000023d02008041000000400220021000000000010104330000023d0010009c0000023d010080410000006001100210000000000121019f00000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000242011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000400200043d000c00000002001d000002ae0020009c000003a30000213d00000008020000290000000d202000fa000000010220003900000007030000290000000d303000fa0000000103300039000000000501043b0000000c010000290000006004100039000000400040043f0000002004100039000800000004001d000000000034043500000000002104350000000d205000fa00000001022000390000004003100039000d00000003001d000000000023043508ee082a0000040f000700000001001d000000000001004b000006250000c13d0000000b01000029000000000010043f0000001301000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b000000000201041a0000024102200197000000000021041b0000000a01000029000000000010043f0000001201000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b000000000001041b0000000c010000290000000001010433000000080200002900000000020204330000000d0300002900000000030304330000000604000039000000000404041a0000000705000039000000000505041a000000400600043d000000e0076000390000000000570435000000c0056000390000000000450435000000a0046000390000000000340435000000800360003900000000002304350000006002600039000000000012043500000040016000390000000b0200002900000000002104350000002001600039000000090200002900000000002104350000000a0100002900000000001604350000023d0060009c0000023d06008041000000400160021000000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f000002b8011001c70000800d020000390000000103000039000002b904000041000000b70000013d0000029e020000410000000c0400002900000000002404350000000b02000029000000000023043500000004020000390000000202200367000000000202043b00000000002104350000023d0040009c0000023d010000410000000001044019000000400110021000000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f000000090000006b000005430000c13d000002a0011001c70000000a02000029000005480000013d0000029f011001c7000080090200003900000009030000290000000a04000029000000000500001908ee08e40000040f00000060031002700000023d03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000c05700029000005580000613d000000000801034f0000000c09000029000000008a08043c0000000009a90436000000000059004b000005540000c13d000000000006004b000005650000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000100200190000005e70000613d0000001f01400039000000600210018f0000000c01200029000000000021004b00000000020000390000000102004039000002a10010009c000003a30000213d0000000100200190000003a30000c13d000000400010043f000000200030008c000007e90000413d0000000c010000290000000001010433000c00000001001d000002a10010009c000007e90000213d0000000001000411000000000010043f0000001201000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b0000000c02000029000000000021041b000000000020043f0000001301000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b000000000201041a00000241022001970000000003000411000000000232019f000000000021041b0000000d0000006b00000000010000190000000002000019000005af0000613d0000000901000039000000000101041a0000000d0400002900000000024100a900000000034200d9000000000013004b0000031d0000c13d0000000b01000039000000000301041a00000000014300a900000000044100d9000000000034004b0000031d0000c13d000027100220011a0000000a03000039000000000303041a000000000023001a0000031d0000413d00000000022300190000000a03000039000000000023041b000027100110011a0000000c02000039000000000202041a000000000012001a0000031d0000413d00000000011200190000000c02000039000000000012041b0000000002000416000000080320006c000005d10000613d00000000010004140000023d0010009c0000023d01008041000000c00110021000000242011001c700008009020000390000000004000411000000000500001908ee08e40000040f000300000001035500000060031002700001023d0030019d0000023d03300198000006ff0000c13d0000000100200190000007250000613d000000400100043d00000040021000390000000c030000290000000000320435000000200210003900000000030004100000000000320435000000000200041100000000002104350000023d0010009c0000023d01008041000000400110021000000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f000002a4011001c70000800d020000390000000103000039000002a5040000410000023e0000013d0000001f0530018f0000023f06300198000000400200043d0000000004620019000002c40000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000005ee0000c13d000002c40000013d00000000030500190000000a01000029000000000015001a00000010020000390000031d0000413d0000000001130019000000000012041b0000000101000039000000000201041a00000000010004140000023d0010009c0000023d01008041000000c001100210000000000003004b000002420110c1c70000024004200197000080090200003900000000020460190000036b0000013d000000000020043f0000001101000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b000000000101041a0000000e02000039000000000012041b000000000001004b0000031d0000613d000000010210008a00000006032000b9000000060000006b0000061f0000613d00000006043000fa000000000042004b0000031d0000c13d000000070030006c0000062b0000813d000000400100043d00000044021000390000025303000041000003af0000013d0000000a0000006b000006da0000c13d000000400100043d0000004402100039000002b7030000410000034c0000013d0000000503000039000000000023041b0000000402000039000000000202041a000b00000002001d0000024700200198000006f80000c13d000000020010008c000006870000413d0000000107000039000000400100043d0000024b0010009c000003a30000213d0000008002100039000000400020043f00000003030000390000000003310436000000000400003100000002044003670000000005030019000000004604043c0000000005650436000000000025004b0000063f0000c13d00000000007304350000006003100039000000000073043500000040041000390000000000740435000000400100043d000000200210003900000000007204350000000004040433000000ff0440018f000000400510003900000000004504350000000003030433000000ff0330018f00000060041000390000000000340435000000600300003900000000003104350000024b0010009c000003a30000213d000b00000007001d0000008003100039000000400030043f0000023d0020009c0000023d02008041000000400220021000000000010104330000023d0010009c0000023d010080410000006001100210000000000121019f00000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000242011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b000000000010043f0000001401000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f0000000100200190000007e90000613d000000000101043b0000000b02000029000000000021041b000000ff0020008c0000031d0000613d0000000101200039000000ff0710018f0000000e01000039000000000101041a000000000017004b000006350000413d0000000401000039000000000101041a000b00000001001d000000400100043d000600000001001d0000000b010000290000024c00100198000007290000c13d0000008002000039000000060100002908ee07eb0000040f000000030100003900000006020000290000000001120436000000800220003900000000030000310000000203300367000000003403043c0000000001410436000000000021004b000006950000c13d0000000e01000039000000000101041a000500000001001d000000060100002908ee07fd0000040f0000000502000029000000ff0220018f000500000002001d0000000000210435000000060100002908ee08070000040f00000005020000290000000000210435000000060100002908ee08120000040f00000005020000290000000000210435000000400100043d000500000001001d0000002002100039000400000002001d000000060100002908ee081d0000040f00000005030000290000000002310049000000200120008a0000000000130435000000000103001908ee07eb0000040f00000005010000290000000002010433000000040100002908ee08cf0000040f0000000d02000039000000000012041b00000009010000390000000902000029000000000021041b0000000b010000390000000802000029000000000021041b0000000b0100002900000250011001970000000a011001af00000251011001c70000000402000039000000000012041b0000000f010000390000000702000029000000000021041b0000000203000039000000000103041a00000241011001970000000d011001af000000000013041b0000000303000039000000000103041a00000241011001970000000c011001af000000000013041b0000002001000039000001000010044300000120000004430000025201000041000008ef0001042e000002880100004100000000001004430000000001000410000000040010044300000000010004140000023d0010009c0000023d01008041000000c00110021000000289011001c70000800a0200003908ee08e90000040f0000000100200190000007880000613d0000000a02000039000000000202041a000000000101043b000600000002001d000000000121004b0000031d0000413d0000000c02000039000000000202041a000500000002001d000000000121004b0000031d0000413d000000070010006b0000073d0000a13d000000400100043d0000004402100039000002b603000041000006fb0000013d000000400100043d00000044021000390000024803000041000000000032043500000024021000390000001d03000039000002df0000013d0000001f043000390000023e044001970000003f04400039000002a204400197000000400500043d0000000004450019000000000054004b00000000060000390000000106004039000002a10040009c000003a30000213d0000000100600190000003a30000c13d000000400040043f0000001f0430018f00000000063504360000023f053001980000000003560019000007170000613d000000000701034f000000007807043c0000000006860436000000000036004b000007130000c13d000000000004004b000005cf0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000005cf0000013d000000400100043d0000004402100039000002a3030000410000034c0000013d000000060300002900000064013000390000024d02000041000000000021043500000044013000390000024e020000410000000000210435000000240130003900000024020000390000000000210435000002490100004100000000001304350000000401300039000000200200003900000000002104350000023d0030009c0000023d0300804100000040013002100000024f011001c7000008f0000104300000000901000039000000000201041a00000007012000b900000007031000fa000000000023004b0000031d0000c13d0000000b02000039000000000302041a00000007023000b900000007042000fa000000000034004b0000031d0000c13d000027100310011a000400000003001d00070007003000730000031d0000413d000027100220011a000300000002001d00020007002000730000031d0000413d000002880100004100000000001004430000000001000410000000040010044300000000010004140000023d0010009c0000023d01008041000000c00110021000000289011001c70000800a0200003908ee08e90000040f0000000100200190000007880000613d000000000101043b000000060110006c0000031d0000413d00010005001000740000031d0000413d0000000402000029000000060020002a0000031d0000413d000000040200002900000006012000290000000a02000039000000000012041b0000000302000029000000050020002a0000031d0000413d000000030200002900000005012000290000000c02000039000000000012041b0000000701000039000000000201041a000000020020002a0000031d0000413d0000000202200029000000000021041b0000000101000029000000020010006b0000077f0000c13d0000000401000039000000000201041a0000024402200197000002b2022001c7000000000021041b00000000010004140000023d0010009c0000023d01008041000000c0011002100000000303000029000000070030006b000007890000c13d0000000a020000290000078e0000013d000000000001042f00000242011001c7000080090200003900000002030000290000000a04000029000000000500001908ee08e40000040f000300000001035500000060031002700001023d0030019d0000023d03300198000007b90000613d0000001f043000390000023e044001970000003f04400039000002a204400197000000400500043d0000000004450019000000000054004b00000000060000390000000106004039000002a10040009c000003a30000213d0000000100600190000003a30000c13d000000400040043f0000001f0430018f00000000063504360000023f053001980000000003560019000007ac0000613d000000000701034f000000007807043c0000000006860436000000000036004b000007a80000c13d000000000004004b000007b90000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000400300043d0000023d0030009c0000023d01000041000000000103401900000040011002100000000100200190000007d00000613d0000000a02000029000000000223043600000002030000290000000000320435000000010030006c000007dd0000c13d00000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000246011001c70000800d020000390000000103000039000002b504000041000007e60000013d0000004402300039000002b3040000410000000000420435000000240230003900000015040000390000000000420435000002490200004100000000002304350000000402300039000000200300003900000000003204350000024a011001c7000008f00001043000000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000246011001c70000800d020000390000000103000039000002b40400004108ee08e40000040f0000000100200190000004e20000c13d0000000001000019000008f0000104300000001f02200039000002bd022001970000000001120019000000000021004b00000000020000390000000102004039000002a10010009c000007f70000213d0000000100200190000007f70000c13d000000400010043f000000000001042d000002ba01000041000000000010043f0000004101000039000000040010043f0000028201000041000008f0000104300000000012010434000000000002004b000008010000613d000000000001042d000002ba01000041000000000010043f0000003201000039000000040010043f0000028201000041000008f0000104300000000002010433000000010020008c0000080c0000a13d0000004001100039000000000001042d000002ba01000041000000000010043f0000003201000039000000040010043f0000028201000041000008f0000104300000000002010433000000020020008c000008170000a13d0000006001100039000000000001042d000002ba01000041000000000010043f0000003201000039000000040010043f0000028201000041000008f0000104300000000003010433000000000003004b000008280000613d000000000400001900000020011000390000000005010433000000ff0550018f00000000025204360000000104400039000000000034004b000008210000413d0000000001020019000000000001042d0000000054010434000000400200043d000000200320003900000000004304350000000004050433000000400520003900000000004504350000004001100039000000000101043300000060042000390000000000140435000000600100003900000000001204350000024b0020009c0000087e0000213d0000008001200039000000400010043f0000023d0030009c0000023d03008041000000400130021000000000020204330000023d0020009c0000023d020080410000006002200210000000000112019f00000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000242011001c7000080100200003908ee08e90000040f00000001002001900000087c0000613d000000000101043b0000000402000039000000000202041a0000024c002001980000086d0000613d0000000d02000039000000000202041a000000000021004b0000086d0000c13d000002880100004100000000001004430000000001000410000000040010044300000000010004140000023d0010009c0000023d01008041000000c00110021000000289011001c70000800a0200003908ee08e90000040f00000001002001900000088a0000613d0000000a02000039000000000202041a000000000101043b000000000121004b000008840000413d0000000c02000039000000000202041a000000000121004b000008840000413d000000000001042d000000000010043f0000001401000039000000200010043f00000000010004140000023d0010009c0000023d01008041000000c00110021000000246011001c7000080100200003908ee08e90000040f00000001002001900000087c0000613d000000000101043b000000000101041a000000000001042d0000000001000019000008f000010430000002ba01000041000000000010043f0000004101000039000000040010043f0000028201000041000008f000010430000002ba01000041000000000010043f0000001101000039000000040010043f0000028201000041000008f000010430000000000001042f0000000101000032000008b30000613d0000001f03100039000002bd033001970000003f03300039000002bd04300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000002a10040009c000008b40000213d0000000100500190000008b40000c13d000000400040043f0000000005130436000002bd021001980000001f0310018f00000000012500190000000304000367000008a60000613d000000000604034f000000006706043c0000000005750436000000000015004b000008a20000c13d000000000003004b000008b30000613d000000000224034f0000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f0000000000210435000000000001042d000002ba01000041000000000010043f0000004101000039000000040010043f0000028201000041000008f000010430000000000001004b000008bd0000613d000000000001042d000000400100043d0000004402100039000002be03000041000000000032043500000024021000390000000f030000390000000000320435000002490200004100000000002104350000000402100039000000200300003900000000003204350000023d0010009c0000023d0100804100000040011002100000024a011001c7000008f000010430000000000001042f0000023d0010009c0000023d0100804100000040011002100000023d0020009c0000023d020080410000006002200210000000000112019f00000000020004140000023d0020009c0000023d02008041000000c002200210000000000112019f00000242011001c7000080100200003908ee08e90000040f0000000100200190000008e20000613d000000000101043b000000000001042d0000000001000019000008f000010430000008e7002104210000000102000039000000000001042d0000000002000019000000000001042d000008ec002104230000000102000039000000000001042d0000000002000019000000000001042d000008ee00000432000008ef0001042e000008f00001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000249f00200000000000000000000000000000000000040000000000000000000000000000000000000000000ff0000000000000000000000000000000000000000000053657175656e63657320616c726561647920696e697469616c697a656400000008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f00000000000000000000ff000000000000000000000000000000000000000000697a6564000000000000000000000000000000000000000000000000000000004a61636b706f742073657175656e636520616c726561647920696e697469616c0000000000000000000000000000000000000084000000000000000000000000ffffffffffffffffff0000ff0000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000002000000000000000000000000000000400000010000000000000000005072697a6520706f6f6c2063616e7420636f766572206d6178207072697a6500496e76616c69642072616e676520696e64657800000000000000000000000000496e73756666696369656e7420696e697469616c207072697a6520706f6f6c00466565732063616e74206265206d6f7265207468616e20313525000000000000466565732063616e6e6f74206578636565642031302500000000000000000000496e76616c696420656e74726f70792070726f76696465720000000000000000496e76616c696420656e74726f70792061646472657373000000000000000000496e76616c696420706c6174666f726d206164647265737300000000000000000000000000000000000000000000000000000000000000000000000090dd336c00000000000000000000000000000000000000000000000000000000dbe55e5500000000000000000000000000000000000000000000000000000000e88958db00000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000fed5760100000000000000000000000000000000000000000000000000000000e88958dc00000000000000000000000000000000000000000000000000000000efa7b7ea00000000000000000000000000000000000000000000000000000000dbe55e5600000000000000000000000000000000000000000000000000000000e03a028800000000000000000000000000000000000000000000000000000000e0470fd900000000000000000000000000000000000000000000000000000000c3a1ed4700000000000000000000000000000000000000000000000000000000d472706900000000000000000000000000000000000000000000000000000000d472706a00000000000000000000000000000000000000000000000000000000d7be375c00000000000000000000000000000000000000000000000000000000c3a1ed4800000000000000000000000000000000000000000000000000000000c7cc2aaa0000000000000000000000000000000000000000000000000000000090dd336d00000000000000000000000000000000000000000000000000000000b95298f100000000000000000000000000000000000000000000000000000000c20615ed000000000000000000000000000000000000000000000000000000004407176b000000000000000000000000000000000000000000000000000000007c57505600000000000000000000000000000000000000000000000000000000853e6e9b00000000000000000000000000000000000000000000000000000000853e6e9c000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000007c57505700000000000000000000000000000000000000000000000000000000844622ab000000000000000000000000000000000000000000000000000000004407176c0000000000000000000000000000000000000000000000000000000052a5f1f800000000000000000000000000000000000000000000000000000000715018a60000000000000000000000000000000000000000000000000000000026232a2d0000000000000000000000000000000000000000000000000000000026232a2e00000000000000000000000000000000000000000000000000000000306c183f00000000000000000000000000000000000000000000000000000000426c0601000000000000000000000000000000000000000000000000000000000025ebc8000000000000000000000000000000000000000000000000000000000187aea000000000000000000000000000000000000000000000000000000000230b38060000000000000000000000000000000000000020000000800000000000000000118cdaa70000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000001e4fbdf7000000000000000000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000000000000043616e6e6f742077697468647261772066726f6d2062726f6b656e2070696e61746100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f3902000002000000000000000000000000000000240000000000000000000000006c000000000000000000000000000000000000000000000000000000000000004e6f2066756e647320617661696c61626c6520666f7220776974686472617761656e742066756e647320666f72206d6178207072697a650000000000000000005769746864726177616c20776f756c64206c6561766520696e737566666963694e6f207072697a6520706f6f6c206c65667420746f20776974686472617700004e6f2063726561746f722062656e656669747320617661696c61626c6520746f20776974686472617700000000000000000000000000000000000000000000004f6e6c7920706c6174666f726d2063616e20776974686472617720706c6174666f726d2062656e656669747300000000000000000000000000000000000000004e6f20706c6174666f726d2062656e656669747320617661696c61626c6520746f2077697468647261770000000000000000000000000000000000000000000043616e6e6f7420726566696c6c20612062726f6b656e2070696e617461000000000000000000000000000000000000000000006400000080000000000000000002000000000000000000000000000000000000400000008000000000000000003ab412fa5fb94a1ed45e37b17f472f264059f989a5e1dc35f618f20fb787ec1a4d7573742073656e6420736f6d652045544820746f20726566696c6c00000000b88c914800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000080000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff7573657220697320616c726561647920706c6179696e6700000000000000000019cb825f0000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000440000000000000000000000000000000000000000000000000000000000000044000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff00000000000000000000000000000000000000000000000000000003ffffffe0526566756e64207472616e73666572206661696c6564000000000000000000000200000000000000000000000000000000000060000000000000000000000000a8053e9cad936254b459004a1af6b763a0a9901f15f6a14de645791ca3a031d17220706f74656e7469616c207072697a65730000000000000000000000000000496e73756666696369656e7420636f6e74726163742062616c616e636520666f6e617461000000000000000000000000000000000000000000000000000000006e6f20656e6f75676874207061796d656e7420746f20686974207468652070693ee5aeb50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000004f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e6374696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f66697273740000000000000000000000000000000000000000000000000000007365636f6e640000000000000000000000000000000000000000000000000000746869726400000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000005072697a65207472616e73666572206661696c65640000000000000000000000f880d731312e03a89088c39f014e1d148a0f86a184b56b15ac4b3b854c503bc07340431096b3abd2ae8cd7cf3fe7a2c97e1fbe9908e53d2775b0522c1a2b6e38496e73756666696369656e7420636f6e74726163742062616c616e6365000000496e76616c69642077696e6e6572206164647265737300000000000000000000020000000000000000000000000000000000010000000000000000000000000058a22df16b525dbf6db3b25495f925c89731c06efb8a37afa95e454d237ea75f4e487b7100000000000000000000000000000000000000000000000000000000456e74726f70792061646472657373206e6f74207365740000000000000000000000000000000000000000000000000000000020000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe05472616e73666572206661696c656400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000789abbe1557d5401c92141141410458530a55f183c6253a0465078a840b2f071
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c18800000000000000000000000000000000000000000000000000005af3107a4000000000000000000000000000000000000000000000000000000009184e72a00000000000000000000000000000000000000000000000000000000000000001f4000000000000000000000000000000000000000000000000000000000000012c0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188000000000000000000000000858687fd592112f7046e394a3bf10d0c11ff9e630000000000000000000000006cc14824ea2918f5de5c2f75a9da968ad4bd63440000000000000000000000000000000000000000000000000000000000000002
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x7ea1Bb15c6D91827a37697c75b2Eeee930c0C188
Arg [1] : _prizePool (uint256): 100000000000000
Arg [2] : _hitCost (uint256): 10000000000000
Arg [3] : _creatorFee (uint256): 500
Arg [4] : _platformFee (uint256): 300
Arg [5] : _platformAddress (address): 0x7ea1Bb15c6D91827a37697c75b2Eeee930c0C188
Arg [6] : _entropyAddress (address): 0x858687fD592112f7046E394A3Bf10D0C11fF9e63
Arg [7] : _entropyProvider (address): 0x6CC14824Ea2918f5De5C2f75A9Da968ad4BD6344
Arg [8] : _rangeIndex (uint8): 2
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188
Arg [1] : 00000000000000000000000000000000000000000000000000005af3107a4000
Arg [2] : 000000000000000000000000000000000000000000000000000009184e72a000
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001f4
Arg [4] : 000000000000000000000000000000000000000000000000000000000000012c
Arg [5] : 0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188
Arg [6] : 000000000000000000000000858687fd592112f7046e394a3bf10d0c11ff9e63
Arg [7] : 0000000000000000000000006cc14824ea2918f5de5c2f75a9da968ad4bd6344
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000002
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.