Source Code
Overview
ETH Balance
0.000094638937400002 ETH
Token Holdings
More Info
ContractCreator
Multichain Info
N/A
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Benefit... | 5592080 | 4 days ago | IN | 0 ETH | 0.00000238 | ||||
Withdraw Benefit... | 5592029 | 4 days ago | IN | 0 ETH | 0.00000317 | ||||
Hit Pinata | 5577254 | 5 days ago | IN | 0.0001 ETH | 0.0000141 | ||||
Hit Pinata | 5576966 | 5 days ago | IN | 0.00001 ETH | 0.00001791 | ||||
Set Jackpot Sequ... | 5576810 | 5 days ago | IN | 0 ETH | 0.00000609 | ||||
Add Winning Sequ... | 5576646 | 5 days ago | IN | 0 ETH | 0.00000604 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
5592080 | 4 days ago | 0.00000459 ETH | ||||
5592080 | 4 days ago | 0 ETH | ||||
5592080 | 4 days ago | 0 ETH | ||||
5592029 | 4 days ago | 0.00000275 ETH | ||||
5592029 | 4 days ago | 0 ETH | ||||
5592029 | 4 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577257 | 5 days ago | 0 ETH | ||||
5577254 | 5 days ago | 0 ETH | ||||
5577254 | 5 days ago | 0 ETH | ||||
5577254 | 5 days ago | 0 ETH | ||||
5577254 | 5 days ago | 0.0000105 ETH | ||||
5577254 | 5 days ago | 0.0000105 ETH | ||||
5577254 | 5 days ago | 0 ETH | ||||
5577254 | 5 days ago | 0 ETH | ||||
5577254 | 5 days ago | 0 ETH | ||||
5577254 | 5 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 {Pausable} from "@openzeppelin/contracts/utils/Pausable.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, Pausable, Ownable, IEntropyConsumer { IEntropy private entropy; address private entropyProvider; // 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 HitResult( address user, address entropyProvider, uint256 sequenceNumber, uint256 firstNumber, uint256 secondNumber, uint256 thirdNumber ); // STATES bool public pinataIsBroken = false; uint256 public maxMultiplier; uint256 public hasBeenHit; uint256 public hasBeenPaid; uint256 public hitCost; uint256 public creatorFee; uint256 public creatorBenefits; uint256 public platformFee; uint256 public platformBenefits; address public platformAddress; bytes32 public jackpotSequence; bool public hasJackpotSequence; 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 ) 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 + _platformFee <= 100, "Fees cannot exceed 100%"); require(msg.value >= _prizePool, "Insufficient initial prize pool"); hitCost = _hitCost; creatorFee = _creatorFee; platformFee = _platformFee; platformAddress = _platformAddress; entropy = IEntropy(_entropyAddress); entropyProvider = _entropyProvider; } // FUNCTIONS // A function to try to hit the pinata function hitPinata(bytes32 userRandomNumber) public payable nonReentrant { uint256 fee = entropy.getFee(entropyProvider); require(playerNumbers[msg.sender] == 0, "user is already playing"); // this is 0 again once the user finish playing require( msg.value >= hitCost + fee, "no enought payment to hit the pinata" ); // 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 // we need to save the creatorFee and platformFee contability uint256 creatorAmount = ((msg.value - fee) * creatorFee) / 100; uint256 platformAmount = ((msg.value - fee) * platformFee) / 100; creatorBenefits += creatorAmount; platformBenefits += platformAmount; 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); 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] ); } // 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 ) internal pure returns (uint256[3] memory) { uint256 firstResult = mapRandomNumber( keccak256(abi.encodePacked(randomNumber, "first")), 1, 12 ); uint256 secondResult = mapRandomNumber( keccak256(abi.encodePacked(randomNumber, "second")), 1, 12 ); uint256 thirdResult = mapRandomNumber( keccak256(abi.encodePacked(randomNumber, "third")), 1, 12 ); 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 uint256 creatorAmount = (_amount * creatorFee) / 100; uint256 platformAmount = (_amount * platformFee) / 100; 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 to add new winning sequences and their associated prizes function addWinningSequences( uint8[][] memory _keys, uint256[] memory _values ) public onlyOwner { require( _keys.length == _values.length, "Keys and values arrays must have the same length" ); for (uint256 i = 0; i < _keys.length; i++) { require(_keys[i].length == 3, "Each sequence must have 3 numbers"); for(uint8 j = 0; j < 3; j++) { require(_keys[i][j] >= 1 && _keys[i][j] <= 12, "Numbers must be between 1 and 12"); } bytes32 keyHash = keccak256(abi.encodePacked(_keys[i])); winningSequences[keyHash] = _values[i]; if (_values[i] > maxMultiplier) { maxMultiplier = _values[i]; } } } // Function to set the jackpot sequence function setJackpotSequence(uint8[] memory _sequence) public onlyOwner { require(_sequence.length == 3, "Sequence must be 3 numbers"); for(uint8 i = 0; i < 3; i++) { require(_sequence[i] >= 1 && _sequence[i] <= 12, "Numbers must be between 1 and 12"); } 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); } }
// 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; 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.0) (utils/Pausable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.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 Pausable is Context { bool private _paused; /** * @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. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { 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 { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// 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; 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.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"}],"stateMutability":"payable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","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":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"}],"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":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","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":"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":[{"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":[{"internalType":"uint8[][]","name":"_keys","type":"uint8[][]"},{"internalType":"uint256[]","name":"_values","type":"uint256[]"}],"name":"addWinningSequences","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"uint8[]","name":"_sequence","type":"uint8[]"}],"name":"setJackpotSequence","outputs":[],"stateMutability":"nonpayable","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"}]
Contract Creation Code
9c4d535b000000000000000000000000000000000000000000000000000000000000000001000277b1bd99d15876906d61faf29b29904fd0de926fcab5e33d0b5fddf7e2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000001000000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188000000000000000000000000000000000000000000000000000009184e72a000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188000000000000000000000000858687fd592112f7046e394a3bf10d0c11ff9e630000000000000000000000006cc14824ea2918f5de5c2f75a9da968ad4bd6344
Deployed Bytecode
0x0002000000000002000d00000000000200010000000103550000006003100270000001fe0030019d000001fe0330019700000001002001900000003d0000c13d0000008004000039000000400040043f000000040030008c000003b10000413d000000000201043b000000e0022002700000020f0020009c000000750000a13d000002100020009c000000910000a13d000002110020009c0000015f0000a13d000002120020009c0000016a0000213d000002150020009c000002b30000613d000002160020009c000003b10000c13d000000240030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d0000000401100370000000000601043b000002010060009c000003b10000213d0000000101000039000000000201041a000000080320027000000201053001970000000003000411000000000035004b000003210000c13d000000000006004b000000700000613d000002370220019700000008036002100000020203300197000000000232019f000000000021041b0000000001000414000001fe0010009c000001fe01008041000000c00110021000000204011001c70000800d020000390000000303000039000002050400004107f207e80000040f0000000100200190000003b10000613d000002930000013d0000001f02300039000001ff022001970000008002200039000000400020043f0000001f0430018f000002000530019800000080025000390000004b0000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000026004b000000470000c13d000000000004004b000000580000613d000000000151034f0000000304400210000000000502043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000120435000000ff0030008c000003b10000a13d000000800600043d000002010060009c000003b10000213d000001200400043d000002010040009c000003b10000213d000001400100043d000d00000001001d000002010010009c000003b10000213d000001600100043d000c00000001001d000002010010009c000003b10000213d000001000200043d000000e00300043d000000c00500043d000000a00700043d0000000101000039000000000010041b000000000006004b000002f00000c13d0000023801000041000000000010043f000000040000043f0000023501000041000007f400010430000002210020009c000000840000213d000002290020009c000001060000213d0000022d0020009c000001a70000613d0000022e0020009c000001730000613d0000022f0020009c000003b10000c13d0000000001000416000000000001004b000003b10000c13d0000000d01000039000002e30000013d000002220020009c000001250000213d000002260020009c000001ac0000613d000002270020009c000001780000613d000002280020009c000003b10000c13d0000000001000416000000000001004b000003b10000c13d0000000101000039000001a40000013d0000021a0020009c000001300000213d0000021e0020009c000002a30000613d0000021f0020009c000002950000613d000002200020009c000003b10000c13d000000240030008c000003b10000413d000000000100041a000000020010008c0000029f0000613d0000000201000039000000000010041b000000000101041a0000000302000039000000000202041a0000024803000041000000800030043f0000020102200197000c00000002001d000000840020043f00000000030004140000020102100197000001fe0030009c000001fe03008041000000c00130021000000249011001c7000d00000002001d07f207ed0000040f0000006003100270000001fe03300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000080057001bf000000bf0000613d0000008008000039000000000901034f000000009a09043c0000000008a80436000000000058004b000000bb0000c13d000000000006004b000000cc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000034e0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200030008c000003b10000413d000000800100043d000b00000001001d0000024a0010009c000003b10000213d0000000001000411000000000010043f0000000f01000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b000000000101041a000000000001004b000004ae0000c13d0000000701000039000000000101041a0000000b02000029000000000021001a000003940000413d0000000003210019000000400500043d000000240150003900000004025000390000000004000416000000000034004b000005890000813d000002090300004100000000003504350000002003000039000000000032043500000024020000390000000000210435000000640150003900000252020000410000000000210435000000440150003900000253020000410000000000210435000001fe0050009c000001fe05008041000000400150021000000254011001c7000007f4000104300000022a0020009c000002760000613d0000022b0020009c000001960000613d0000022c0020009c000003b10000c13d000000640030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d000000e002000039000000400020043f0000000402100370000000000202043b000000800020043f0000002402100370000000000202043b000000a00020043f0000004401100370000000000101043b000000c00010043f000000800100003907f207640000040f000000400200043d0000000000120435000001fe0020009c000001fe02008041000000400120021000000271011001c7000007f30001042e000002230020009c0000027b0000613d000002240020009c000001a00000613d000002250020009c000003b10000c13d0000000001000416000000000001004b000003b10000c13d0000000501000039000002e30000013d0000021b0020009c000002ae0000613d0000021c0020009c0000029c0000613d0000021d0020009c000003b10000c13d000000240030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d0000000401100370000000000101043b000000000001004b0000000002000039000000010200c039000000000021004b000003b10000c13d000000000200041a000000020020008c0000029f0000613d0000000202000039000000000020041b000000000001004b0000039a0000c13d0000000c01000039000000000101041a00000201011001970000000004000411000000000014004b000003ca0000c13d0000000b01000039000000000301041a000000000003004b000004150000c13d0000020901000041000000800010043f0000002001000039000000840010043f0000002a01000039000000a40010043f0000024001000041000000c40010043f0000024101000041000000e40010043f0000023b01000041000007f400010430000002170020009c000002e70000613d000002180020009c000002d40000613d000002190020009c000003b10000c13d0000000001000416000000000001004b000003b10000c13d0000000801000039000002e30000013d000002130020009c000002b80000613d000002140020009c000003b10000c13d0000000001000416000000000001004b000003b10000c13d0000000601000039000002e30000013d0000000001000416000000000001004b000003b10000c13d0000000401000039000002e30000013d000000640030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d0000000402100370000000000202043b000002310020009c000003b10000213d0000002403100370000000000303043b000d00000003001d000002010030009c000003b10000213d0000004401100370000000000401043b0000000201000039000000000101041a00000201011001980000037d0000c13d0000020901000041000000800010043f0000002001000039000000840010043f0000001701000039000000a40010043f0000026901000041000000c40010043f0000024401000041000007f400010430000000240030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d0000000401100370000000000101043b000000000010043f0000001101000039000002df0000013d0000000001000416000000000001004b000003b10000c13d0000000e01000039000000000101041a000000ff00100190000002a90000013d0000000001000416000000000001004b000003b10000c13d0000000701000039000002e30000013d000000440030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d0000000402100370000000000202043b000002310020009c000003b10000213d0000002304200039000000000034004b000003b10000813d0000000404200039000000000441034f000000000604043b0000026a0060009c000002ce0000813d00000005056002100000003f045000390000023204400197000002330040009c000002ce0000213d0000008004400039000000400040043f000000800060043f00000024042000390000000005450019000000000035004b000003b10000213d000000000006004b000004530000c13d0000002402100370000000000202043b000002310020009c000003b10000213d0000002304200039000000000034004b00000000050000190000026b050040410000026b04400197000000000004004b00000000060000190000026b060020410000026b0040009c000000000605c019000000000006004b000003b10000613d0000000404200039000000000441034f000000000404043b000002310040009c000002ce0000213d00000005054002100000003f065000390000023206600197000000400700043d0000000006670019000c00000007001d000000000076004b00000000070000390000000107004039000002310060009c000002ce0000213d0000000100700190000002ce0000c13d000000400060043f0000000c060000290000000006460436000900000006001d00000024022000390000000005250019000000000035004b000003b10000213d000000000004004b000001fe0000613d0000000903000029000000000421034f000000000404043b00000000034304360000002002200039000000000052004b000001f80000413d0000000101000039000000000101041a000000080110027000000201021001970000000001000411000000000012004b000004a90000c13d0000000c010000290000000002010433000000800100043d000000000021004b000006590000c13d000000000001004b000002930000613d0000000006000019000002120000013d0000000106600039000000800100043d000000000016004b000002930000813d0000000507600210000000a00170003900000000020104330000000013020434000000030030008c0000067c0000c13d0000000001010433000000ff0110018f0000000d0310008a000002720030009c000004000000a13d00000040042000390000000003040433000000ff0330018f0000000d0330008a000002730030009c000004000000413d00000060052000390000000002050433000000ff0220018f0000000d0220008a000002730020009c000004000000413d000b00000007001d000d00000006001d000000400200043d000000200320003900000000001304350000000001040433000000ff0110018f000000400420003900000000001404350000000001050433000000ff0110018f0000006004200039000000000014043500000060010000390000000000120435000002330020009c000002ce0000213d0000008001200039000000400010043f000001fe0030009c000001fe0300804100000040013002100000000002020433000001fe0020009c000001fe020080410000006002200210000000000112019f0000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000204011001c7000080100200003907f207ed0000040f00000001002001900000000d03000029000003b10000613d0000000c020000290000000002020433000000000032004b0000066d0000a13d0000000b030000290000000902300029000000000101043b000a00000002001d0000000002020433000b00000002001d000000000010043f0000001101000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000d060000290000000100200190000003b10000613d000000000101043b0000000b02000029000000000021041b0000000c010000290000000001010433000000000061004b0000066d0000a13d0000000a0100002900000000010104330000000402000039000000000202041a000000000021004b0000020e0000a13d0000000402000039000000000012041b0000020e0000013d0000000001000416000000000001004b000003b10000c13d0000000a01000039000002e30000013d0000000001000416000000000001004b000003b10000c13d0000000101000039000000000201041a000000080320027000000201053001970000000003000411000000000035004b000003210000c13d0000023702200197000000000021041b0000000001000414000001fe0010009c000001fe01008041000000c00110021000000204011001c70000800d0200003900000003030000390000020504000041000000000600001907f207e80000040f0000000100200190000003b10000613d0000000001000019000007f30001042e0000000001000416000000000001004b000003b10000c13d0000000101000039000000000101041a0000000801100270000002ec0000013d000000000100041a000000020010008c000003120000c13d0000025501000041000000000010043f0000025601000041000007f4000104300000000001000416000000000001004b000003b10000c13d0000000301000039000000000101041a00000242001001980000000001000039000000010100c039000000800010043f0000023001000041000007f30001042e0000000001000416000000000001004b000003b10000c13d0000000901000039000002e30000013d0000000001000416000000000001004b000003b10000c13d0000000b01000039000002e30000013d000000240030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d0000000402100370000000000202043b000002310020009c000003b10000213d0000002305200039000000000035004b000003b10000813d0000000405200039000000000551034f000000000605043b000002310060009c000002ce0000213d00000005056002100000003f075000390000023207700197000002330070009c000003aa0000a13d0000026801000041000000000010043f0000004101000039000000040010043f0000023501000041000007f400010430000000240030008c000003b10000413d0000000002000416000000000002004b000003b10000c13d0000000401100370000000000101043b000002010010009c000003b10000213d000000000010043f0000000f01000039000000200010043f0000004002000039000000000100001907f207d30000040f000000000101041a000000800010043f0000023001000041000007f30001042e0000000001000416000000000001004b000003b10000c13d0000000c01000039000000000101041a0000020101100197000000800010043f0000023001000041000007f30001042e000800000007001d000700000005001d000900000003001d000a00000002001d00000008026002100000020202200197000000000301041a000b00000004001d0000020304300197000000000224019f000000000021041b000000080130027000000000020004140000020105100197000001fe0020009c000001fe02008041000000c00120021000000204011001c70000800d020000390000000303000039000002050400004107f207e80000040f0000000b040000290000000100200190000003b10000613d000000000004004b0000033a0000c13d000000400100043d00000044021000390000020e03000041000000000032043500000024021000390000001803000039000003430000013d0000000201000039000000000010041b0000000001000416000000000001004b000003260000c13d0000020901000041000000800010043f0000002001000039000000840010043f0000001c01000039000000a40010043f0000024701000041000000c40010043f0000024401000041000007f4000104300000023401000041000000000010043f000000040030043f0000023501000041000007f4000104300000000302000039000000000202041a00000242002001980000036c0000c13d00000000020004110000020102200197000000800020043f000000a00010043f0000000001000414000001fe0010009c000001fe01008041000000c00110021000000245011001c70000800d020000390000000103000039000002460400004107f207e80000040f0000000100200190000003b10000613d000004480000013d0000000d05000029000000000005004b000003760000c13d000000400100043d00000044021000390000020d03000041000000000032043500000024021000390000001703000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001fe0010009c000001fe0100804100000040011002100000020a011001c7000007f4000104300000001f0530018f0000020006300198000000400200043d0000000004620019000003590000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000003550000c13d000000000005004b000003660000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000001fe0020009c000001fe020080410000004002200210000000000112019f000007f4000104300000020901000041000000800010043f0000002001000039000000840010043f0000001d01000039000000a40010043f0000024301000041000000c40010043f0000024401000041000007f4000104300000000c06000029000000000006004b000003b30000c13d000000400100043d00000044021000390000020c030000410000030e0000013d0000000003000411000000000013004b000003be0000c13d000c00000004001d0000023101200197000b00000001001d000000000010043f0000001001000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b0000000503000039000000000203041a000000010420003a000004b20000c13d0000026801000041000000000010043f0000001101000039000000040010043f0000023501000041000007f4000104300000000901000039000000000301041a000000000003004b000003d60000c13d0000020901000041000000800010043f0000002001000039000000840010043f0000002901000039000000a40010043f0000023901000041000000c40010043f0000023a01000041000000e40010043f0000023b01000041000007f4000104300000008007700039000000400070043f000000800060043f00000024022000390000000005250019000000000035004b000003dc0000a13d0000000001000019000007f4000104300000000a030000290000000907000029000000000073001a000003940000413d0000000001730019000000640010008c0000040b0000a13d000000400100043d00000044021000390000020b03000041000003400000013d0000020901000041000000800010043f0000002001000039000000840010043f0000002301000039000000a40010043f0000025701000041000000c40010043f0000025801000041000000e40010043f0000023b01000041000007f4000104300000020901000041000000800010043f0000002001000039000000840010043f0000002c01000039000000a40010043f0000023c01000041000000c40010043f0000023d01000041000000e40010043f0000023b01000041000007f400010430000000000001041b0000000101000039000000000101041a00000008011002700000020104100197000004160000013d000000000006004b000003e70000613d000000000321034f000000000303043b000000ff0030008c000003b10000213d000000200440003900000000003404350000002002200039000000000052004b000003de0000413d0000000101000039000000000101041a000000080110027000000201021001970000000001000411000000000012004b000004a90000c13d000000800100043d000000030010008c000005820000c13d000000a00100043d000000ff0110018f0000000d0210008a000002730020009c000004000000413d000000c00200043d000000ff0220018f0000000d0220008a000002730020009c000004000000413d000000e00200043d000000ff0220018f0000000d0220008a000002730020009c000006400000813d000000400100043d000000440210003900000270030000410000000000320435000002090200004100000000002104350000002402100039000000200300003900000000003204350000000402100039000003480000013d0000000001000416000000080010006c0000048e0000813d000000400100043d00000044021000390000020803000041000000000032043500000024021000390000001f03000039000003430000013d000000000001041b0000000001000414000001fe0010009c000001fe01008041000000c00110021000000204011001c70000800902000039000000000500001907f207e80000040f0000006003100270000001fe03300198000004460000613d0000001f04300039000001ff044001970000003f044000390000023e04400197000000400500043d0000000004450019000000000054004b00000000060000390000000106004039000002310040009c000002ce0000213d0000000100600190000002ce0000c13d000000400040043f0000001f0430018f000000000635043600000200053001980000000003560019000004390000613d000000000701034f000000007807043c0000000006860436000000000036004b000004350000c13d000000000004004b000004460000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000001002001900000044c0000613d0000000101000039000000000010041b0000000001000019000007f30001042e000000400100043d00000044021000390000023f03000041000000000032043500000024021000390000000f03000039000003430000013d000000a006000039000004590000013d00000000067604360000002004400039000000000054004b000001cb0000813d000000000741034f000000000707043b000002310070009c000003b10000213d00000000082700190000004307800039000000000037004b00000000090000190000026b090080410000026b07700197000000000007004b000000000a0000190000026b0a0040410000026b0070009c000000000a09c01900000000000a004b000003b10000c13d0000002407800039000000000771034f000000000907043b000002310090009c000002ce0000213d000000050a9002100000003f07a00039000002320b700197000000400700043d000000000bb7001900000000007b004b000000000c000039000000010c0040390000023100b0009c000002ce0000213d0000000100c00190000002ce0000c13d0000004000b0043f0000000000970435000000440880003900000000098a0019000000000039004b000003b10000213d000000000098004b000004550000813d000000000a070019000000000b81034f000000000b0b043b000000ff00b0008c000003b10000213d000000200aa000390000000000ba04350000002008800039000000000098004b000004840000413d000004550000013d0000000309000039000000000109041a00000007020000390000000708000029000000000082041b0000000802000039000000000072041b0000000a02000039000000000032041b0000000c02000039000000000302041a0000020603300197000000000343019f000000000032041b0000000202000039000000000302041a0000020603300197000000000353019f000000000032041b0000020301100197000000000161019f000000000019041b0000002001000039000001000010044300000120000004430000020701000041000007f30001042e0000023402000041000000000020043f000000040010043f0000023501000041000007f400010430000000400100043d00000044021000390000024c03000041000003400000013d000000000201041a000000000043041b000000400100043d000002590010009c000002ce0000213d0000000d03000029000a02010030019b000d02010020019b0000006002100039000000400020043f00000000030000310000000103300367000000003403043c0000000001410436000000000021004b000004be0000c13d000000400100043d00000040021000390000025a030000410000000000320435000000250200003900000000022104360000000c030000290000000000320435000002590010009c000002ce0000213d0000006003100039000000400030043f000001fe0020009c000001fe0200804100000040022002100000000001010433000001fe0010009c000001fe010080410000006001100210000000000121019f0000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000204011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b000900000001001d000000400100043d00000040021000390000025b03000041000000000032043500000020021000390000000c03000029000000000032043500000026030000390000000000310435000002590010009c000002ce0000213d0000006003100039000000400030043f000001fe0020009c000001fe0200804100000040022002100000000001010433000001fe0010009c000001fe010080410000006001100210000000000121019f0000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000204011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b000800000001001d000000400100043d00000040021000390000025c03000041000000000032043500000020021000390000000c03000029000000000032043500000025030000390000000000310435000002590010009c000002ce0000213d0000006003100039000000400030043f000001fe0020009c000001fe0200804100000040022002100000000001010433000001fe0010009c000001fe010080410000006001100210000000000121019f0000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000204011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000400200043d000c00000002001d000002590020009c000002ce0000213d00000009020000290000000c2020011a000000010220003900000008030000290000000c3030011a0000000103300039000000000501043b0000000c010000290000006004100039000000400040043f0000002004100039000900000004001d000000000034043500000000002104350000000c2050011a00000001022000390000004003100039000800000003001d000000000023043507f207640000040f000700000001001d000000000001004b000006730000c13d0000000b01000029000000000010043f0000001001000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b000000000201041a0000020602200197000000000021041b0000000d01000029000000000010043f0000000f01000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b000000000001041b0000000c0100002900000000010104330000000902000029000000000202043300000008030000290000000003030433000000400400043d000000a0054000390000000000350435000000800340003900000000002304350000006002400039000000000012043500000040014000390000000b02000029000000000021043500000020014000390000000a0200002900000000002104350000000d010000290000000000140435000001fe0040009c000001fe0400804100000040014002100000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000266011001c70000800d020000390000000103000039000002670400004107f207e80000040f0000000100200190000003b10000613d000002930000013d000000400100043d00000044021000390000023603000041000000000032043500000024021000390000001a03000039000003430000013d0000024d0300004100000000003504350000000c03000029000000000032043500000004020000390000000102200367000000000202043b0000000000210435000001fe0050009c000c00000005001d000001fe01000041000000000105401900000040011002100000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f0000000b0000006b000005a00000c13d0000024f011001c70000000d02000029000005a50000013d0000024e011001c700008009020000390000000b030000290000000d04000029000000000500001907f207e80000040f0000006003100270000001fe03300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000c05700029000005b50000613d000000000801034f0000000c09000029000000008a08043c0000000009a90436000000000059004b000005b10000c13d000000000006004b000005c20000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000006340000613d0000001f01400039000000600210018f0000000c01200029000000000021004b00000000020000390000000102004039000002310010009c000002ce0000213d0000000100200190000002ce0000c13d000000400010043f000000200030008c000003b10000413d0000000c010000290000000001010433000d00000001001d000002310010009c000003b10000213d0000000001000411000000000010043f0000000f01000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b0000000d02000029000000000021041b000000000020043f0000001001000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000100200190000003b10000613d000000000101043b000000000201041a00000206022001970000000003000411000000000232019f000000000021041b0000000b010000290000000002000416000000000212004b000003940000413d0000000003000416000000000013004b000000000100001900000000030000190000060e0000613d0000000801000039000000000101041a00000000032100a900000000042300d9000000000014004b000003940000c13d0000000a01000039000000000401041a00000000012400a900000000022100d9000000000042004b000003940000c13d000000640330011a0000000902000039000000000402041a000000000034001a000003940000413d0000000003340019000000000032041b000000640110011a0000000b02000039000000000302041a000000000013001a000003940000413d0000000001130019000000000012041b000000400100043d00000040021000390000000d03000029000000000032043500000020021000390000000003000410000000000032043500000000020004110000000000210435000001fe0010009c000001fe0100804100000040011002100000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000250011001c70000800d020000390000000103000039000002510400004107f207e80000040f0000000100200190000003b10000613d000004480000013d0000001f0530018f0000020006300198000000400200043d0000000004620019000003590000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000063b0000c13d000003590000013d000000400100043d000d00000001001d0000002002100039000c00000002001d000000800100003907f207c50000040f0000000d030000290000000002310049000000200120008a0000000000130435000000000103001907f207520000040f0000000d0100002900000000020104330000000c0100002907f207d30000040f0000000d02000039000000000012041b0000000e02000039000000000302041a000002740130019700000001011001bf000000000012041b0000000001000019000007f30001042e000000400100043d00000064021000390000026c03000041000000000032043500000044021000390000026d03000041000000000032043500000024021000390000003003000039000000000032043500000209020000410000000000210435000000040210003900000020030000390000000000320435000001fe0010009c000001fe01008041000000400110021000000254011001c7000007f4000104300000026801000041000000000010043f0000003201000039000000040010043f0000023501000041000007f4000104300000000d0000006b000006860000c13d000000400100043d00000044021000390000026503000041000000000032043500000024021000390000001603000039000003430000013d000000400100043d00000064021000390000026e03000041000000000032043500000044021000390000026f03000041000000000032043500000024021000390000002103000039000006620000013d0000025d010000410000000000100443000000000100041000000004001004430000000001000414000001fe0010009c000001fe01008041000000c0011002100000025e011001c70000800a0200003907f207ed0000040f0000000100200190000006f20000613d0000000902000039000000000202041a000000000101043b000600000002001d000000000121004b000003940000413d0000000b02000039000000000202041a000500000002001d000000000121004b000003940000413d000000070010006b000006a70000a13d000000400100043d00000044021000390000026403000041000000000032043500000024021000390000001d03000039000003430000013d0000000801000039000000000201041a00000007012000b900000007031000fa000000000023004b000003940000c13d0000000a02000039000000000302041a00000007023000b900000007042000fa000000000034004b000003940000c13d000000640310011a000400000003001d0007000700300073000003940000413d000000640220011a000300000002001d0002000700200073000003940000413d0000025d010000410000000000100443000000000100041000000004001004430000000001000414000001fe0010009c000001fe01008041000000c0011002100000025e011001c70000800a0200003907f207ed0000040f0000000100200190000006f20000613d000000000101043b000000060110006c000003940000413d0001000500100074000003940000413d0000000402000029000000060020002a000003940000413d000000040200002900000006012000290000000902000039000000000012041b0000000302000029000000050020002a000003940000413d000000030200002900000005012000290000000b02000039000000000012041b0000000601000039000000000201041a000000020020002a000003940000413d0000000202200029000000000021041b0000000101000029000000020010006b000006e90000c13d0000000301000039000000000201041a0000025f0220019700000260022001c7000000000021041b0000000001000414000001fe0010009c000001fe01008041000000c0011002100000000303000029000000070030006b000006f30000c13d0000000d02000029000006f80000013d000000000001042f00000204011001c7000080090200003900000002030000290000000d04000029000000000500001907f207e80000040f0000006003100270000001fe03300198000007210000613d0000001f04300039000001ff044001970000003f044000390000023e04400197000000400500043d0000000004450019000000000054004b00000000060000390000000106004039000002310040009c000002ce0000213d0000000100600190000002ce0000c13d000000400040043f0000001f0430018f000000000635043600000200053001980000000003560019000007140000613d000000000701034f000000007807043c0000000006860436000000000036004b000007100000c13d000000000004004b000007210000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000400300043d000001fe0030009c000001fe01000041000000000103401900000040011002100000000100200190000007380000613d0000000d02000029000000000223043600000002030000290000000000320435000000010030006c000007450000c13d0000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f0000024b011001c70000800d02000039000000010300003900000263040000410000074e0000013d000000440230003900000261040000410000000000420435000000240230003900000015040000390000000000420435000002090200004100000000002304350000000402300039000000200300003900000000003204350000020a011001c7000007f4000104300000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f0000024b011001c70000800d020000390000000103000039000002620400004107f207e80000040f0000000100200190000003b10000613d0000053d0000013d0000001f0220003900000275022001970000000001120019000000000021004b00000000020000390000000102004039000002310010009c0000075e0000213d00000001002001900000075e0000c13d000000400010043f000000000001042d0000026801000041000000000010043f0000004101000039000000040010043f0000023501000041000007f4000104300000000054010434000000400200043d00000020032000390000000000430435000000000405043300000040052000390000000000450435000000400110003900000000010104330000006004200039000000000014043500000060010000390000000000120435000002330020009c000007b80000213d0000008001200039000000400010043f000001fe0030009c000001fe0300804100000040013002100000000002020433000001fe0020009c000001fe020080410000006002200210000000000112019f0000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000204011001c7000080100200003907f207ed0000040f0000000100200190000007b60000613d000000000101043b0000000e02000039000000000202041a000000ff00200190000007a70000613d0000000d02000039000000000202041a000000000021004b000007a70000c13d0000025d010000410000000000100443000000000100041000000004001004430000000001000414000001fe0010009c000001fe01008041000000c0011002100000025e011001c70000800a0200003907f207ed0000040f0000000100200190000007c40000613d0000000902000039000000000202041a000000000101043b000000000121004b000007be0000413d0000000b02000039000000000202041a000000000121004b000007be0000413d000000000001042d000000000010043f0000001101000039000000200010043f0000000001000414000001fe0010009c000001fe01008041000000c0011002100000024b011001c7000080100200003907f207ed0000040f0000000100200190000007b60000613d000000000101043b000000000101041a000000000001042d0000000001000019000007f4000104300000026801000041000000000010043f0000004101000039000000040010043f0000023501000041000007f4000104300000026801000041000000000010043f0000001101000039000000040010043f0000023501000041000007f400010430000000000001042f0000000003010433000000000003004b000007d00000613d000000000400001900000020011000390000000005010433000000ff0550018f00000000025204360000000104400039000000000034004b000007c90000413d0000000001020019000000000001042d000000000001042f000001fe0010009c000001fe010080410000004001100210000001fe0020009c000001fe020080410000006002200210000000000112019f0000000002000414000001fe0020009c000001fe02008041000000c002200210000000000112019f00000204011001c7000080100200003907f207ed0000040f0000000100200190000007e60000613d000000000101043b000000000001042d0000000001000019000007f400010430000007eb002104210000000102000039000000000001042d0000000002000019000000000001042d000007f0002104230000000102000039000000000001042d0000000002000019000000000001042d000007f200000432000007f30001042e000007f40001043000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffff0000000000000000000000ffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff00000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ffffffffffffffffffffffff00000000000000000000000000000000000000000000000200000000000000000000000000000040000001000000000000000000496e73756666696369656e7420696e697469616c207072697a6520706f6f6c0008c379a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000466565732063616e6e6f74206578636565642031303025000000000000000000496e76616c696420656e74726f70792070726f76696465720000000000000000496e76616c696420656e74726f70792061646472657373000000000000000000496e76616c696420706c6174666f726d2061646472657373000000000000000000000000000000000000000000000000000000000000000000000000853e6e9b00000000000000000000000000000000000000000000000000000000dbe55e5500000000000000000000000000000000000000000000000000000000efa7b7e900000000000000000000000000000000000000000000000000000000f5c4441300000000000000000000000000000000000000000000000000000000f5c4441400000000000000000000000000000000000000000000000000000000fed5760100000000000000000000000000000000000000000000000000000000efa7b7ea00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000dbe55e5600000000000000000000000000000000000000000000000000000000e03a028800000000000000000000000000000000000000000000000000000000e88958dc00000000000000000000000000000000000000000000000000000000b95298f000000000000000000000000000000000000000000000000000000000b95298f100000000000000000000000000000000000000000000000000000000c7cc2aaa00000000000000000000000000000000000000000000000000000000d7be375c00000000000000000000000000000000000000000000000000000000853e6e9c000000000000000000000000000000000000000000000000000000008da5cb5b0000000000000000000000000000000000000000000000000000000090dd336d00000000000000000000000000000000000000000000000000000000444e7bf500000000000000000000000000000000000000000000000000000000715018a500000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000007c57505700000000000000000000000000000000000000000000000000000000844622ab00000000000000000000000000000000000000000000000000000000444e7bf60000000000000000000000000000000000000000000000000000000052a5f1f8000000000000000000000000000000000000000000000000000000005c975abb0000000000000000000000000000000000000000000000000000000026232a2d0000000000000000000000000000000000000000000000000000000026232a2e00000000000000000000000000000000000000000000000000000000306c183f000000000000000000000000000000000000000000000000000000004407176c000000000000000000000000000000000000000000000000000000000025ebc8000000000000000000000000000000000000000000000000000000000187aea000000000000000000000000000000000000000000000000000000000230b38060000000000000000000000000000000000000020000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff7f118cdaa700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000000000000000000000053657175656e6365206d7573742062652033206e756d62657273000000000000ffffffffffffffffffffff0000000000000000000000000000000000000000ff1e4fbdf7000000000000000000000000000000000000000000000000000000004e6f2063726561746f722062656e656669747320617661696c61626c6520746f207769746864726177000000000000000000000000000000000000000000000000000000000000000000000000000000000000840000008000000000000000004f6e6c7920706c6174666f726d2063616e20776974686472617720706c6174666f726d2062656e6566697473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffe05472616e73666572206661696c656400000000000000000000000000000000004e6f20706c6174666f726d2062656e656669747320617661696c61626c6520746f207769746864726177000000000000000000000000000000000000000000000000000000000000000000ff000000000000000000000000000000000000000043616e6e6f7420726566696c6c20612062726f6b656e2070696e617461000000000000000000000000000000000000000000006400000080000000000000000002000000000000000000000000000000000000400000008000000000000000003ab412fa5fb94a1ed45e37b17f472f264059f989a5e1dc35f618f20fb787ec1a4d7573742073656e6420736f6d652045544820746f20726566696c6c00000000b88c914800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002400000080000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff02000000000000000000000000000000000000400000000000000000000000007573657220697320616c726561647920706c6179696e6700000000000000000019cb825f00000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000004400000000000000000000000000000000000000000000000000000000000000440000000000000000000000000200000000000000000000000000000000000060000000000000000000000000a8053e9cad936254b459004a1af6b763a0a9901f15f6a14de645791ca3a031d16e617461000000000000000000000000000000000000000000000000000000006e6f20656e6f75676874207061796d656e7420746f206869742074686520706900000000000000000000000000000000000000840000000000000000000000003ee5aeb50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000004f6e6c7920456e74726f70792063616e2063616c6c20746869732066756e6374696f6e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9f66697273740000000000000000000000000000000000000000000000000000007365636f6e64000000000000000000000000000000000000000000000000000074686972640000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f390200000200000000000000000000000000000024000000000000000000000000ffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff00000000000000000000000100000000000000000000000000000000000000005072697a65207472616e73666572206661696c65640000000000000000000000f880d731312e03a89088c39f014e1d148a0f86a184b56b15ac4b3b854c503bc07340431096b3abd2ae8cd7cf3fe7a2c97e1fbe9908e53d2775b0522c1a2b6e38496e73756666696369656e7420636f6e74726163742062616c616e6365000000496e76616c69642077696e6e657220616464726573730000000000000000000002000000000000000000000000000000000000c0000000000000000000000000b1084a78c1014ef13d4030c9b0b363596bdbb851e96862befe8bf990c28185ab4e487b7100000000000000000000000000000000000000000000000000000000456e74726f70792061646472657373206e6f742073657400000000000000000000000000000000000000000000000000000000000000000100000000000000008000000000000000000000000000000000000000000000000000000000000000207468652073616d65206c656e677468000000000000000000000000000000004b65797320616e642076616c75657320617272617973206d75737420686176657300000000000000000000000000000000000000000000000000000000000000456163682073657175656e6365206d75737420686176652033206e756d6265724e756d62657273206d757374206265206265747765656e203120616e642031320000000000000000000000000000000000000020000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0cd410b790d1e54fe480e8c88cae6a7a837ac77eae1c8d4c7f796a796e0748a98
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188000000000000000000000000000000000000000000000000000009184e72a000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000030000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188000000000000000000000000858687fd592112f7046e394a3bf10d0c11ff9e630000000000000000000000006cc14824ea2918f5de5c2f75a9da968ad4bd6344
-----Decoded View---------------
Arg [0] : _initialOwner (address): 0x7ea1Bb15c6D91827a37697c75b2Eeee930c0C188
Arg [1] : _prizePool (uint256): 10000000000000
Arg [2] : _hitCost (uint256): 1000000000000
Arg [3] : _creatorFee (uint256): 5
Arg [4] : _platformFee (uint256): 3
Arg [5] : _platformAddress (address): 0x7ea1Bb15c6D91827a37697c75b2Eeee930c0C188
Arg [6] : _entropyAddress (address): 0x858687fD592112f7046E394A3Bf10D0C11fF9e63
Arg [7] : _entropyProvider (address): 0x6CC14824Ea2918f5De5C2f75A9Da968ad4BD6344
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188
Arg [1] : 000000000000000000000000000000000000000000000000000009184e72a000
Arg [2] : 000000000000000000000000000000000000000000000000000000e8d4a51000
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 0000000000000000000000007ea1bb15c6d91827a37697c75b2eeee930c0c188
Arg [6] : 000000000000000000000000858687fd592112f7046e394a3bf10d0c11ff9e63
Arg [7] : 0000000000000000000000006cc14824ea2918f5de5c2f75a9da968ad4bd6344
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.