Contract
0x91a2cca9b378618e13535c93d5182cab5ae7ddf4
1
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
OVERVIEW
Dockmaster Bubba users to Voyage.Contract Source Code Verified (Exact Match)
Contract Name:
DPSDocks
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.15; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/utils/ERC721Holder.sol"; import "@openzeppelin/contracts/token/ERC1155/utils/ERC1155Holder.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "./interfaces/DPSStructs.sol"; import "./interfaces/DPSInterfaces.sol"; import "hardhat/console.sol"; contract DPSDocks is ERC721Holder, ERC1155Holder, Ownable { using EnumerableSet for EnumerableSet.AddressSet; DPSQRNGI public random; DPSPirateFeaturesI public dpsFeatures; DPSSupportShipI public supportShips; IERC1155 public artifact; DPSCartographerI public cartographer; DPSGameSettingsI public gameSettings; DPSGameEngineI public gameEngine; DPSChestsIV2 public chest; /** * @notice list of voyages started by wallet */ mapping(address => mapping(uint256 => LockedVoyageV2)) private lockedVoyages; /** * @notice list of voyages finished by wallet */ mapping(address => mapping(uint256 => LockedVoyageV2)) private finishedVoyages; /** * @notice list of voyages ids started by wallet */ mapping(address => uint256[]) private lockedVoyagesIds; /** * @notice list of voyages ids finished by wallet */ mapping(address => uint256[]) private finishedVoyagesIds; /** * @notice finished voyages results voyageId=>results */ mapping(uint256 => VoyageResult) public voyageResults; /** * @notice we can have multiple voyages, we keep an array of voyages we want to use and their type, if it's v1 or v2 */ EnumerableSet.AddressSet private _voyages; /** * @notice we can have multiple collections acting as pirates */ EnumerableSet.AddressSet private _pirates; /** * @notice we can have multiple collections acting as flagships */ EnumerableSet.AddressSet private _flagships; uint256 public randomRequestIndex; uint256 private nonReentrant = 1; /** * @notice list of locked voyages and their owners id => wallet */ mapping(uint256 => address) public ownerOfLockedVoyages; /** * @notice list of finished voyages and their owners id => wallet */ mapping(uint256 => address) public ownerOfFinishedVoyages; event LockVoyage( uint256 indexed _voyageId, uint256 indexed _dpsId, uint256 indexed _flagshipId, uint8[9] _supportShipIds, uint16[13] _artifactIds, uint256 _lockedAt ); event ClaimVoyageRewards( uint256 indexed _voyageId, uint16 _noOfChests, uint8[9] _destroyedSupportShips, uint16 _healthDamage, uint16[] _interactionRNGs, uint8[] _interactionResults, uint256 _claimedAt ); event SetContract(uint256 _target, address _contract); event TokenRecovered(address indexed _token, bytes _data); constructor() {} struct VoyageData { LockedVoyageV2[] lockedVoyages; DPSVoyageIV2 voyage; IERC721Metadata pirate; DPSFlagshipI flagship; } /** * @notice used to lock multiple voyages at once * @param _voyagesParam parameters for sailing */ function lockVoyagesItems(VoyageData[] calldata _voyagesParam) external { if (nonReentrant == 2) revert Unauthorized(); nonReentrant = 2; gameSettings.isPausedNonReentrant(4); uint256 i; for (i; i < _voyagesParam.length; ++i) { lockVoyageItems( _voyagesParam[i].lockedVoyages, _voyagesParam[i].voyage, _voyagesParam[i].pirate, _voyagesParam[i].flagship ); } nonReentrant = 1; } /** * @notice Locking a voyage * @param _lockedVoyages array of objects that contains: * - voyageId * - dpsId (Pirate) * - flagshipId * - supportShips - list of support ships ids, an array of 9 corresponding with the support ship types, a value at a certain position means a support ship sent to sail * - totalSupportShips * - artifactId * the rest of the params are ignored * @param _voyage the voyage address we lock the items for * @param _pirate the pirate used to lock the voyages * @param _flagship the flagship used to lock the voyages */ function lockVoyageItems( LockedVoyageV2[] calldata _lockedVoyages, DPSVoyageIV2 _voyage, IERC721Metadata _pirate, DPSFlagshipI _flagship ) private { if ( !_voyages.contains(address(_voyage)) || !_pirates.contains(address(_pirate)) || !_flagships.contains(address(_flagship)) ) revert Unauthorized(); for (uint256 index; index < _lockedVoyages.length; ++index) { LockedVoyageV2 memory lockedVoyage = _lockedVoyages[index]; VoyageConfigV2 memory voyageConfig = cartographer.viewVoyageConfiguration(lockedVoyage.voyageId, _voyage); uint256 totalSupportShips; for (uint256 i; i < lockedVoyage.supportShips.length; ) { totalSupportShips += lockedVoyage.supportShips[i]; unchecked { ++i; } } gameEngine.sanityCheckLockVoyages( lockedVoyages[msg.sender][lockedVoyage.voyageId], finishedVoyages[msg.sender][lockedVoyage.voyageId], lockedVoyage, voyageConfig, totalSupportShips, _flagship ); bytes memory uniqueId = abi.encode(msg.sender, "LOCK_VOYAGE_", randomRequestIndex++, block.timestamp); // randomRequestIndex++; random.makeRequestUint256(uniqueId); lockedVoyage.lockedBlock = block.number; lockedVoyage.lockedTimestamp = block.timestamp; lockedVoyage.claimedTime = 0; lockedVoyage.navigation = 0; lockedVoyage.luck = 0; lockedVoyage.strength = 0; lockedVoyage.sequence = voyageConfig.sequence; lockedVoyage.totalSupportShips = uint8(totalSupportShips); lockedVoyage.voyageType = voyageConfig.typeOfVoyage; lockedVoyage.uniqueId = uniqueId; lockedVoyage.voyage = _voyage; lockedVoyage.pirate = _pirate; lockedVoyage.flagship = _flagship; lockedVoyages[msg.sender][lockedVoyage.voyageId] = lockedVoyage; lockedVoyagesIds[msg.sender].push(lockedVoyage.voyageId); ownerOfLockedVoyages[lockedVoyage.voyageId] = msg.sender; _pirate.safeTransferFrom(msg.sender, address(this), lockedVoyage.dpsId); _flagship.safeTransferFrom(msg.sender, address(this), lockedVoyage.flagshipId); unchecked { for (uint256 i; i < 9; ++i) { if (lockedVoyage.supportShips[i] > 0) { supportShips.safeTransferFrom(msg.sender, address(this), i, lockedVoyage.supportShips[i], ""); } } } unchecked { for (uint256 i = 1; i < 13; ++i) { if (lockedVoyage.artifactIds[i] > 0) { artifact.safeTransferFrom(msg.sender, address(this), i, lockedVoyage.artifactIds[i], ""); } } } _voyage.safeTransferFrom(msg.sender, address(this), lockedVoyage.voyageId); emit LockVoyage( lockedVoyage.voyageId, lockedVoyage.dpsId, lockedVoyage.flagshipId, lockedVoyage.supportShips, lockedVoyage.artifactIds, block.timestamp ); } } /** * @notice Claiming rewards with params retrieved from the random future blocks * @param _voyageIds - ids of the voyages */ function claimRewards(uint256[] calldata _voyageIds) external { if (nonReentrant == 2) revert Unauthorized(); nonReentrant = 2; gameSettings.isPausedNonReentrant(5); // params not ok for (uint256 i; i < _voyageIds.length; ++i) { uint256 voyageId = _voyageIds[i]; // we get the owner of the voyage it be different than buyer in case nft sold on marketplaces address voyageOwner = ownerOfLockedVoyages[voyageId]; if (voyageOwner == address(0)) revert AddressZero(); LockedVoyageV2 memory lockedVoyage = lockedVoyages[voyageOwner][voyageId]; VoyageConfigV2 memory voyageConfig = lockedVoyage.voyage.getVoyageConfig(voyageId); if (!gameEngine.checkIfViableClaimer(msg.sender, lockedVoyage, voyageOwner)) revert NotViableClaimer(); voyageConfig.sequence = lockedVoyage.sequence; if ( lockedVoyage.lockedTimestamp + voyageConfig.noOfInteractions * voyageConfig.gapBetweenInteractions > block.timestamp ) revert WrongState(4); uint256 randomNumber = random.getRandomResult(lockedVoyage.uniqueId); if (randomNumber == 0) revert NotFulfilled(); VoyageResult memory voyageResult = gameEngine.computeVoyageState( lockedVoyage, voyageConfig.sequence, randomNumber ); lockedVoyage.claimedTime = block.timestamp; lockedVoyages[voyageOwner][voyageId] = lockedVoyage; finishedVoyages[voyageOwner][lockedVoyage.voyageId] = lockedVoyage; finishedVoyagesIds[voyageOwner].push(lockedVoyage.voyageId); ownerOfFinishedVoyages[lockedVoyage.voyageId] = voyageOwner; voyageResults[voyageId] = voyageResult; cleanLockedVoyage(lockedVoyage.voyageId, voyageOwner); awardRewards(voyageResult, voyageConfig.typeOfVoyage, lockedVoyage, voyageOwner); emit ClaimVoyageRewards( voyageId, voyageResult.awardedChests, voyageResult.destroyedSupportShips, voyageResult.healthDamage, voyageResult.interactionRNGs, voyageResult.interactionResults, block.timestamp ); } nonReentrant = 1; } /** * @notice checking voyage state between start start and finish sail, it uses causality parameters to determine the outcome of interactions * @param _voyageId - id of the voyage */ function checkVoyageState(uint256 _voyageId) external view returns (VoyageResult memory voyageResult) { LockedVoyageV2 storage lockedVoyage = lockedVoyages[ownerOfLockedVoyages[_voyageId]][_voyageId]; if (lockedVoyage.voyageId == 0) { lockedVoyage = finishedVoyages[ownerOfFinishedVoyages[_voyageId]][_voyageId]; } // not started if (lockedVoyage.voyageId == 0) revert WrongState(1); VoyageConfigV2 memory voyageConfig = lockedVoyage.voyage.getVoyageConfig(_voyageId); voyageConfig.sequence = lockedVoyage.sequence; uint256 randomNumber = random.getRandomResult(lockedVoyage.uniqueId); if (randomNumber == 0) revert NotFulfilled(); if ((block.timestamp - lockedVoyage.lockedTimestamp) <= voyageConfig.gapBetweenInteractions) revert WrongState(1); uint256 interactions = (block.timestamp - lockedVoyage.lockedTimestamp) / voyageConfig.gapBetweenInteractions; if (interactions > voyageConfig.sequence.length) interactions = voyageConfig.sequence.length; uint256 length = voyageConfig.sequence.length; for (uint256 i; i < length - interactions; i++) { voyageConfig.sequence[length - i - 1] = 0; } return gameEngine.computeVoyageState(lockedVoyage, voyageConfig.sequence, randomNumber); } /** * @notice awards the voyage (if any) and transfers back the assets that were locked into the voyage * to the owners, also if support ship destroyed, it burns them, if health damage taken then apply effect on flagship * @param _voyageResult - the result of the voyage that is used to award and apply effects * @param _typeOfVoyage - used to mint the chests types accordingly with the voyage type * @param _lockedVoyage - locked voyage object used to get the locked items that needs to be transferred back * @param _owner - the owner of the voyage that will receive rewards + items back * */ function awardRewards( VoyageResult memory _voyageResult, uint16 _typeOfVoyage, LockedVoyageV2 memory _lockedVoyage, address _owner ) private { chest.mint(_owner, uint256(_typeOfVoyage), _voyageResult.awardedChests); _lockedVoyage.pirate.safeTransferFrom(address(this), _owner, _lockedVoyage.dpsId); if (_voyageResult.healthDamage > 0) _lockedVoyage.flagship.upgradePart( FLAGSHIP_PART.HEALTH, _lockedVoyage.flagshipId, 100 - _voyageResult.healthDamage ); _lockedVoyage.flagship.safeTransferFrom(address(this), _owner, _lockedVoyage.flagshipId); for (uint256 i; i < 9; ++i) { if (_voyageResult.destroyedSupportShips[i] > 0) { supportShips.burn(address(this), i, _voyageResult.destroyedSupportShips[i]); } if (_lockedVoyage.supportShips[i] > _voyageResult.destroyedSupportShips[i]) supportShips.safeTransferFrom( address(this), _owner, i, _lockedVoyage.supportShips[i] - _voyageResult.destroyedSupportShips[i], "" ); } for (uint256 i = 1; i < 13; ++i) { if (_lockedVoyage.artifactIds[i] == 0) continue; artifact.safeTransferFrom(address(this), _owner, i, _lockedVoyage.artifactIds[i], ""); } _lockedVoyage.voyage.burn(_lockedVoyage.voyageId); } /** * @notice cleans a locked voyage, usually once it's finished * @param _voyageId - voyage id * @param _owner - owner of the voyage */ function cleanLockedVoyage(uint256 _voyageId, address _owner) private { uint256[] storage voyagesForOwner = lockedVoyagesIds[_owner]; for (uint256 i; i < voyagesForOwner.length; ++i) { if (voyagesForOwner[i] == _voyageId) { voyagesForOwner[i] = voyagesForOwner[voyagesForOwner.length - 1]; voyagesForOwner.pop(); } } delete ownerOfLockedVoyages[_voyageId]; delete lockedVoyages[_owner][_voyageId]; } function onERC721Received( address _operator, address, uint256, bytes memory ) public view override returns (bytes4) { if (_operator != address(this)) revert Unauthorized(); return this.onERC721Received.selector; } function onERC1155Received( address _operator, address, uint256, uint256, bytes memory ) public view override returns (bytes4) { if (_operator != address(this)) revert Unauthorized(); return this.onERC1155Received.selector; } /** * @notice used to recover tokens using call. This will be used so we can save some contract sizes * @param _token the token address * @param _data encoded with abi.encodeWithSignature(signatureString, arg); of transferFrom, transfer methods */ function recoverToken(address _token, bytes calldata _data) external onlyOwner { (bool success, ) = _token.call{value: 0}(_data); if (!success) revert NotEnoughTokens(); emit TokenRecovered(_token, _data); } function cleanVoyageResults(uint256 _voyageId) external onlyOwner { delete voyageResults[_voyageId]; } /** * SETTERS & GETTERS */ function setContract( address _contract, uint256 _target, bool _enabled ) external onlyOwner { if (_target == 1) { if (_enabled) { _voyages.add(address(DPSVoyageIV2(_contract))); } else { _voyages.remove(address(DPSVoyageIV2(_contract))); } } else if (_target == 2) { random = DPSQRNGI(_contract); } else if (_target == 3) { if (_enabled) { _pirates.add(address(IERC721Metadata(_contract))); } else { _pirates.remove(address(IERC721Metadata(_contract))); } } else if (_target == 4) { if (_enabled) { _flagships.add(address(DPSFlagshipI(_contract))); } else { _flagships.remove(address(DPSFlagshipI(_contract))); } } else if (_target == 5) { supportShips = DPSSupportShipI(_contract); } else if (_target == 6) { artifact = IERC1155(_contract); } else if (_target == 7) { gameSettings = DPSGameSettingsI(_contract); } else if (_target == 8) { cartographer = DPSCartographerI(_contract); } else if (_target == 9) { chest = DPSChestsIV2(_contract); } else if (_target == 10) { gameEngine = DPSGameEngineI(_contract); } emit SetContract(_target, _contract); } function getLockedVoyagesForOwner( address _owner, uint256 _start, uint256 _stop ) external view returns (LockedVoyageV2[] memory locked) { unchecked { uint256 length = lockedVoyagesIds[_owner].length; if (_stop > length) _stop = length; locked = new LockedVoyageV2[](length); for (uint256 i = _start; i < _stop; ++i) { locked[i - _start] = lockedVoyages[_owner][lockedVoyagesIds[_owner][i]]; } } } function getFinishedVoyagesForOwner( address _owner, uint256 _start, uint256 _stop ) external view returns (LockedVoyageV2[] memory finished) { unchecked { uint256 length = finishedVoyagesIds[_owner].length; if (_stop > length) _stop = length; finished = new LockedVoyageV2[](length); for (uint256 i = _start; i < _stop; ++i) { finished[i - _start] = finishedVoyages[_owner][finishedVoyagesIds[_owner][i]]; } } } function voyagesLength(address _owner, bool _locked) external view returns (uint256) { if (_locked) return lockedVoyagesIds[_owner].length; return finishedVoyagesIds[_owner].length; } function voyages() external view returns (address[] memory) { return _voyages.values(); } function voyages(address voyageAddress) external view returns (bool) { return _pirates.contains(voyageAddress); } function pirates() external view returns (address[] memory) { return _pirates.values(); } function pirates(address piratesAddress) external view returns (bool) { return _pirates.contains(piratesAddress); } function flagships() external view returns (address[] memory) { return _flagships.values(); } function flagships(address flagshipAddress) external view returns (bool) { return _flagships.contains(flagshipAddress); } }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.13; import "./DPSInterfaces.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; enum VOYAGE_TYPE { EASY, MEDIUM, HARD, LEGENDARY, CUSTOM } enum SUPPORT_SHIP_TYPE { SLOOP_STRENGTH, SLOOP_LUCK, SLOOP_NAVIGATION, CARAVEL_STRENGTH, CARAVEL_LUCK, CARAVEL_NAVIGATION, GALLEON_STRENGTH, GALLEON_LUCK, GALLEON_NAVIGATION } enum ARTIFACT_TYPE { NONE, COMMON_STRENGTH, COMMON_LUCK, COMMON_NAVIGATION, RARE_STRENGTH, RARE_LUCK, RARE_NAVIGATION, EPIC_STRENGTH, EPIC_LUCK, EPIC_NAVIGATION, LEGENDARY_STRENGTH, LEGENDARY_LUCK, LEGENDARY_NAVIGATION } enum INTERACTION { NONE, CHEST, STORM, ENEMY } enum FLAGSHIP_PART { HEALTH, CANNON, HULL, SAILS, HELM, FLAG, FIGUREHEAD } enum SKILL_TYPE { LUCK, STRENGTH, NAVIGATION } struct VoyageConfig { VOYAGE_TYPE typeOfVoyage; uint8 noOfInteractions; uint16 noOfBlockJumps; // 1 - Chest 2 - Storm 3 - Enemy uint8[] sequence; uint256 boughtAt; uint256 gapBetweenInteractions; } struct VoyageConfigV2 { uint16 typeOfVoyage; uint8 noOfInteractions; // 1 - Chest 2 - Storm 3 - Enemy uint8[] sequence; uint256 boughtAt; uint256 gapBetweenInteractions; bytes uniqueId; } struct CartographerConfig { uint8 minNoOfChests; uint8 maxNoOfChests; uint8 minNoOfStorms; uint8 maxNoOfStorms; uint8 minNoOfEnemies; uint8 maxNoOfEnemies; uint8 totalInteractions; uint256 gapBetweenInteractions; } struct RandomInteractions { uint256 randomNoOfChests; uint256 randomNoOfStorms; uint256 randomNoOfEnemies; uint8 generatedChests; uint8 generatedStorms; uint8 generatedEnemies; uint256[] positionsForGeneratingInteractions; uint256 randomPosition; } struct CausalityParams { uint256[] blockNumber; bytes32[] hash1; bytes32[] hash2; uint256[] timestamp; bytes[] signature; } struct LockedVoyage { uint8 totalSupportShips; VOYAGE_TYPE voyageType; ARTIFACT_TYPE artifactId; uint8[9] supportShips; //this should be an array for each type, expressing the quantities he took on a trip uint8[] sequence; uint16 navigation; uint16 luck; uint16 strength; uint256 voyageId; uint256 dpsId; uint256 flagshipId; uint256 lockedBlock; uint256 lockedTimestamp; uint256 claimedTime; } struct LockedVoyageV2 { uint8 totalSupportShips; uint16 voyageType; uint16[13] artifactIds; uint8[9] supportShips; //this should be an array for each type, expressing the quantities he took on a trip uint8[] sequence; uint16 navigation; uint16 luck; uint16 strength; uint256 voyageId; uint256 dpsId; uint256 flagshipId; uint256 lockedBlock; uint256 lockedTimestamp; uint256 claimedTime; bytes uniqueId; DPSVoyageIV2 voyage; IERC721Metadata pirate; DPSFlagshipI flagship; } struct VoyageResult { uint16 awardedChests; uint8[9] destroyedSupportShips; uint8 totalSupportShipsDestroyed; uint8 healthDamage; uint16 skippedInteractions; uint16[] interactionRNGs; uint8[] interactionResults; uint8[] intDestroyedSupportShips; } struct VoyageStatusCache { uint256 strength; uint256 luck; uint256 navigation; string entropy; } error AddressZero(); error Paused(); error WrongParams(uint256 _location); error WrongState(uint256 _state); error Unauthorized(); error NotEnoughTokens(); error Unhealthy(); error ExternalCallFailed(); error NotFulfilled(); error NotViableClaimer();
//SPDX-License-Identifier: MIT pragma solidity >=0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "@openzeppelin/contracts/token/ERC1155/IERC1155.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "./DPSStructs.sol"; interface DPSVoyageI is IERC721Enumerable { function mint( address _owner, uint256 _tokenId, VoyageConfig calldata config ) external; function burn(uint256 _tokenId) external; function getVoyageConfig(uint256 _voyageId) external view returns (VoyageConfig memory config); function tokensOfOwner(address _owner) external view returns (uint256[] memory); function exists(uint256 _tokenId) external view returns (bool); function maxMintedId() external view returns (uint256); function maxMintedId(uint16 _voyageType) external view returns (uint256); } interface DPSVoyageIV2 is IERC721Enumerable { function mint( address _owner, uint256 _tokenId, VoyageConfigV2 calldata config ) external; function burn(uint256 _tokenId) external; function getVoyageConfig(uint256 _voyageId) external view returns (VoyageConfigV2 memory config); function tokensOfOwner(address _owner) external view returns (uint256[] memory); function exists(uint256 _tokenId) external view returns (bool); function maxMintedId() external view returns (uint256); function maxMintedId(uint16 _voyageType) external view returns (uint256); } interface DPSRandomI { function getRandomBatch( address _address, uint256[] memory _blockNumber, bytes32[] memory _hash1, bytes32[] memory _hash2, uint256[] memory _timestamp, bytes[] calldata _signature, string[] calldata _entropy, uint256 _min, uint256 _max ) external view returns (uint256[] memory randoms); function getRandomUnverifiedBatch( address _address, uint256[] memory _blockNumber, bytes32[] memory _hash1, bytes32[] memory _hash2, uint256[] memory _timestamp, string[] calldata _entropy, uint256 _min, uint256 _max ) external pure returns (uint256[] memory randoms); function getRandom( address _address, uint256 _blockNumber, bytes32 _hash1, bytes32 _hash2, uint256 _timestamp, bytes calldata _signature, string calldata _entropy, uint256 _min, uint256 _max ) external view returns (uint256 randoms); function getRandomUnverified( address _address, uint256 _blockNumber, bytes32 _hash1, bytes32 _hash2, uint256 _timestamp, string calldata _entropy, uint256 _min, uint256 _max ) external pure returns (uint256 randoms); function checkCausalityParams( CausalityParams calldata _causalityParams, VoyageConfigV2 calldata _voyageConfig, LockedVoyageV2 calldata _lockedVoyage ) external pure; } interface DPSGameSettingsI { function voyageConfigPerType(uint256 _type) external view returns (CartographerConfig memory); function maxSkillsCap() external view returns (uint16); function maxRollCap() external view returns (uint16); function flagshipBaseSkills() external view returns (uint16); function maxOpenLockBoxes() external view returns (uint256); function getSkillsPerFlagshipParts() external view returns (uint16[7] memory skills); function getSkillTypeOfEachFlagshipPart() external view returns (uint8[7] memory skillTypes); function tmapPerVoyage(uint256 _type) external view returns (uint256); function gapBetweenVoyagesCreation() external view returns (uint256); function isPaused(uint8 _component) external returns (uint8); function isPausedNonReentrant(uint8 _component) external view; function tmapPerDoubloon() external view returns (uint256); function repairFlagshipCost() external view returns (uint256); function doubloonPerFlagshipUpgradePerLevel(uint256 _level) external view returns (uint256); function voyageDebuffs(uint256 _type) external view returns (uint16); function maxArtifactsPerVoyage(uint16 _type) external view returns (uint256); function chestDoubloonRewards(uint256 _type) external view returns (uint256); function doubloonsPerSupportShipType(SUPPORT_SHIP_TYPE _type) external view returns (uint256); function supportShipsSkillBoosts(SUPPORT_SHIP_TYPE _type) external view returns (uint16); function maxSupportShipsPerVoyageType(uint256 _type) external view returns (uint8); function maxRollPerChest(uint256 _type) external view returns (uint256); function maxRollCapLockBoxes() external view returns (uint16); function lockBoxesDistribution(ARTIFACT_TYPE _type) external view returns (uint16[2] memory); function getLockBoxesDistribution(ARTIFACT_TYPE _type) external view returns (uint16[2] memory); function artifactsSkillBoosts(ARTIFACT_TYPE _type) external view returns (uint16); } interface DPSGameEngineI { function sanityCheckLockVoyages( LockedVoyageV2 memory existingVoyage, LockedVoyageV2 memory finishedVoyage, LockedVoyageV2 memory lockedVoyage, VoyageConfigV2 memory voyageConfig, uint256 totalSupportShips, DPSFlagshipI _flagship ) external view; function computeVoyageState( LockedVoyageV2 memory _lockedVoyage, uint8[] memory _sequence, uint256 _randomNumber ) external view returns (VoyageResult memory); function rewardChest( uint256 _randomNumber, uint256 _amount, uint256 _voyageType, address _owner ) external; function rewardLockedBox( uint256 _randomNumber, uint256 _amount, address _owner ) external; function checkIfViableClaimer( address _claimer, LockedVoyageV2 memory _lockedVoyage, address _ownerOfVoyage ) external view returns (bool); } interface DPSPirateFeaturesI { function getTraitsAndSkills(uint16 _dpsId) external view returns (string[8] memory, uint16[3] memory); } interface DPSSupportShipI is IERC1155 { function burn( address _from, uint256 _type, uint256 _amount ) external; function mint( address _owner, uint256 _type, uint256 _amount ) external; } interface DPSFlagshipI is IERC721 { function mint(address _owner, uint256 _id) external; function burn(uint256 _id) external; function upgradePart( FLAGSHIP_PART _trait, uint256 _tokenId, uint8 _level ) external; function getPartsLevel(uint256 _flagshipId) external view returns (uint8[7] memory); function tokensOfOwner(address _owner) external view returns (uint256[] memory); function exists(uint256 _tokenId) external view returns (bool); } interface DPSCartographerI { function viewVoyageConfiguration(uint256 _voyageId, DPSVoyageIV2 _voyage) external view returns (VoyageConfigV2 memory voyageConfig); function buyers(uint256 _voyageId) external view returns (address); } interface DPSChestsI is IERC1155 { function mint( address _to, uint16 _voyageType, uint256 _amount ) external; function burn( address _from, uint16 _voyageType, uint256 _amount ) external; } interface DPSChestsIV2 is IERC1155 { function mint( address _to, uint256 _type, uint256 _amount ) external; function burn( address _from, uint256 _type, uint256 _amount ) external; } interface MintableBurnableIERC1155 is IERC1155 { function mint( address _to, uint256 _type, uint256 _amount ) external; function burn( address _from, uint256 _type, uint256 _amount ) external; } interface DPSDocksI { function getFinishedVoyagesForOwner( address _owner, uint256 _start, uint256 _stop ) external view returns (LockedVoyageV2[] memory finished); function getLockedVoyagesForOwner( address _owner, uint256 _start, uint256 _stop ) external view returns (LockedVoyageV2[] memory locked); } interface DPSQRNGI { function makeRequestUint256(bytes calldata _uniqueId) external; function makeRequestUint256Array(uint256 _size, bytes32 _uniqueId) external; function getRandomResult(bytes calldata _uniqueId) external view returns (uint256); function getRandomResultArray(bytes32 _uniqueId) external view returns (uint256[] memory); function getRandomNumber( uint256 _randomNumber, uint256 _blockNumber, string calldata _entropy, uint256 _min, uint256 _max ) external pure returns (uint256); } interface DPSCrewForCoinI { struct Asset { uint32 targetId; bool borrowed; address borrower; uint32 epochs; address lender; uint64 startTime; uint64 endTime; uint256 doubloonsPerEpoch; } function isDPSInMarket(uint256 _tokenId) external view returns (Asset memory); function isFlagshipInMarket(uint256 _tokenId) external view returns (Asset memory); } interface DPSDoubloonMinterI { function mintDoubloons(address _to, uint256 _amount) external; function burnDoubloons(address _from, uint256 _amount) external; }
// SPDX-License-Identifier: MIT pragma solidity >= 0.4.22 <0.9.0; library console { address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67); function _sendLogPayload(bytes memory payload) private view { uint256 payloadLength = payload.length; address consoleAddress = CONSOLE_ADDRESS; assembly { let payloadStart := add(payload, 32) let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0) } } function log() internal view { _sendLogPayload(abi.encodeWithSignature("log()")); } function logInt(int256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(int256)", p0)); } function logUint(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function logString(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function logBool(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function logAddress(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function logBytes(bytes memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes)", p0)); } function logBytes1(bytes1 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0)); } function logBytes2(bytes2 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0)); } function logBytes3(bytes3 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0)); } function logBytes4(bytes4 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0)); } function logBytes5(bytes5 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0)); } function logBytes6(bytes6 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0)); } function logBytes7(bytes7 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0)); } function logBytes8(bytes8 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0)); } function logBytes9(bytes9 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0)); } function logBytes10(bytes10 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0)); } function logBytes11(bytes11 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0)); } function logBytes12(bytes12 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0)); } function logBytes13(bytes13 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0)); } function logBytes14(bytes14 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0)); } function logBytes15(bytes15 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0)); } function logBytes16(bytes16 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0)); } function logBytes17(bytes17 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0)); } function logBytes18(bytes18 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0)); } function logBytes19(bytes19 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0)); } function logBytes20(bytes20 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0)); } function logBytes21(bytes21 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0)); } function logBytes22(bytes22 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0)); } function logBytes23(bytes23 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0)); } function logBytes24(bytes24 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0)); } function logBytes25(bytes25 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0)); } function logBytes26(bytes26 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0)); } function logBytes27(bytes27 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0)); } function logBytes28(bytes28 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0)); } function logBytes29(bytes29 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0)); } function logBytes30(bytes30 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0)); } function logBytes31(bytes31 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0)); } function logBytes32(bytes32 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0)); } function log(uint256 p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256)", p0)); } function log(string memory p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(string)", p0)); } function log(bool p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool)", p0)); } function log(address p0) internal view { _sendLogPayload(abi.encodeWithSignature("log(address)", p0)); } function log(uint256 p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1)); } function log(uint256 p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1)); } function log(uint256 p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1)); } function log(uint256 p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1)); } function log(string memory p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1)); } function log(string memory p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1)); } function log(string memory p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1)); } function log(string memory p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1)); } function log(bool p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1)); } function log(bool p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1)); } function log(bool p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1)); } function log(bool p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1)); } function log(address p0, uint256 p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1)); } function log(address p0, string memory p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1)); } function log(address p0, bool p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1)); } function log(address p0, address p1) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1)); } function log(uint256 p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2)); } function log(uint256 p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2)); } function log(uint256 p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2)); } function log(uint256 p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2)); } function log(uint256 p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2)); } function log(uint256 p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2)); } function log(uint256 p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2)); } function log(uint256 p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2)); } function log(uint256 p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2)); } function log(uint256 p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2)); } function log(uint256 p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2)); } function log(uint256 p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2)); } function log(uint256 p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2)); } function log(string memory p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2)); } function log(string memory p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2)); } function log(string memory p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2)); } function log(string memory p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2)); } function log(string memory p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2)); } function log(string memory p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2)); } function log(string memory p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2)); } function log(string memory p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2)); } function log(string memory p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2)); } function log(string memory p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2)); } function log(string memory p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2)); } function log(string memory p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2)); } function log(string memory p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2)); } function log(string memory p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2)); } function log(string memory p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2)); } function log(string memory p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2)); } function log(bool p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2)); } function log(bool p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2)); } function log(bool p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2)); } function log(bool p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2)); } function log(bool p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2)); } function log(bool p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2)); } function log(bool p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2)); } function log(bool p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2)); } function log(bool p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2)); } function log(bool p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2)); } function log(bool p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2)); } function log(bool p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2)); } function log(bool p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2)); } function log(bool p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2)); } function log(bool p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2)); } function log(bool p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2)); } function log(address p0, uint256 p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2)); } function log(address p0, uint256 p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2)); } function log(address p0, uint256 p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2)); } function log(address p0, uint256 p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2)); } function log(address p0, string memory p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2)); } function log(address p0, string memory p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2)); } function log(address p0, string memory p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2)); } function log(address p0, string memory p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2)); } function log(address p0, bool p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2)); } function log(address p0, bool p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2)); } function log(address p0, bool p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2)); } function log(address p0, bool p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2)); } function log(address p0, address p1, uint256 p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2)); } function log(address p0, address p1, string memory p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2)); } function log(address p0, address p1, bool p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2)); } function log(address p0, address p1, address p2) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2)); } function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3)); } function log(uint256 p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3)); } function log(string memory p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3)); } function log(bool p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3)); } function log(bool p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3)); } function log(bool p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3)); } function log(bool p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3)); } function log(address p0, uint256 p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3)); } function log(address p0, string memory p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3)); } function log(address p0, bool p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, uint256 p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, string memory p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, bool p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, uint256 p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, string memory p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, bool p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3)); } function log(address p0, address p1, address p2, address p3) internal view { _sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3)); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/utils/ERC721Holder.sol) pragma solidity ^0.8.0; import "../IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address, address, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/utils/ERC1155Holder.sol) pragma solidity ^0.8.0; import "./ERC1155Receiver.sol"; /** * Simple implementation of `ERC1155Receiver` that will allow a contract to hold ERC1155 tokens. * * IMPORTANT: When inheriting this contract, you must include a way to use the received tokens, otherwise they will be * stuck. * * @dev _Available since v3.1._ */ contract ERC1155Holder is ERC1155Receiver { function onERC1155Received( address, address, uint256, uint256, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived( address, address, uint256[] memory, uint256[] memory, bytes memory ) public virtual override returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC1155/utils/ERC1155Receiver.sol) pragma solidity ^0.8.0; import "../IERC1155Receiver.sol"; import "../../../utils/introspection/ERC165.sol"; /** * @dev _Available since v3.1._ */ abstract contract ERC1155Receiver is ERC165, IERC1155Receiver { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155Receiver).interfaceId || super.supportsInterface(interfaceId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
{ "metadata": { "bytecodeHash": "none", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddressZero","type":"error"},{"inputs":[],"name":"NotEnoughTokens","type":"error"},{"inputs":[],"name":"NotFulfilled","type":"error"},{"inputs":[],"name":"NotViableClaimer","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[{"internalType":"uint256","name":"_state","type":"uint256"}],"name":"WrongState","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_voyageId","type":"uint256"},{"indexed":false,"internalType":"uint16","name":"_noOfChests","type":"uint16"},{"indexed":false,"internalType":"uint8[9]","name":"_destroyedSupportShips","type":"uint8[9]"},{"indexed":false,"internalType":"uint16","name":"_healthDamage","type":"uint16"},{"indexed":false,"internalType":"uint16[]","name":"_interactionRNGs","type":"uint16[]"},{"indexed":false,"internalType":"uint8[]","name":"_interactionResults","type":"uint8[]"},{"indexed":false,"internalType":"uint256","name":"_claimedAt","type":"uint256"}],"name":"ClaimVoyageRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_voyageId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_dpsId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_flagshipId","type":"uint256"},{"indexed":false,"internalType":"uint8[9]","name":"_supportShipIds","type":"uint8[9]"},{"indexed":false,"internalType":"uint16[13]","name":"_artifactIds","type":"uint16[13]"},{"indexed":false,"internalType":"uint256","name":"_lockedAt","type":"uint256"}],"name":"LockVoyage","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":"uint256","name":"_target","type":"uint256"},{"indexed":false,"internalType":"address","name":"_contract","type":"address"}],"name":"SetContract","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_token","type":"address"},{"indexed":false,"internalType":"bytes","name":"_data","type":"bytes"}],"name":"TokenRecovered","type":"event"},{"inputs":[],"name":"artifact","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cartographer","outputs":[{"internalType":"contract DPSCartographerI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voyageId","type":"uint256"}],"name":"checkVoyageState","outputs":[{"components":[{"internalType":"uint16","name":"awardedChests","type":"uint16"},{"internalType":"uint8[9]","name":"destroyedSupportShips","type":"uint8[9]"},{"internalType":"uint8","name":"totalSupportShipsDestroyed","type":"uint8"},{"internalType":"uint8","name":"healthDamage","type":"uint8"},{"internalType":"uint16","name":"skippedInteractions","type":"uint16"},{"internalType":"uint16[]","name":"interactionRNGs","type":"uint16[]"},{"internalType":"uint8[]","name":"interactionResults","type":"uint8[]"},{"internalType":"uint8[]","name":"intDestroyedSupportShips","type":"uint8[]"}],"internalType":"struct VoyageResult","name":"voyageResult","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chest","outputs":[{"internalType":"contract DPSChestsIV2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_voyageIds","type":"uint256[]"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voyageId","type":"uint256"}],"name":"cleanVoyageResults","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dpsFeatures","outputs":[{"internalType":"contract DPSPirateFeaturesI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flagships","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"flagshipAddress","type":"address"}],"name":"flagships","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameEngine","outputs":[{"internalType":"contract DPSGameEngineI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gameSettings","outputs":[{"internalType":"contract DPSGameSettingsI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_stop","type":"uint256"}],"name":"getFinishedVoyagesForOwner","outputs":[{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2[]","name":"finished","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_start","type":"uint256"},{"internalType":"uint256","name":"_stop","type":"uint256"}],"name":"getLockedVoyagesForOwner","outputs":[{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2[]","name":"locked","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"uint8","name":"totalSupportShips","type":"uint8"},{"internalType":"uint16","name":"voyageType","type":"uint16"},{"internalType":"uint16[13]","name":"artifactIds","type":"uint16[13]"},{"internalType":"uint8[9]","name":"supportShips","type":"uint8[9]"},{"internalType":"uint8[]","name":"sequence","type":"uint8[]"},{"internalType":"uint16","name":"navigation","type":"uint16"},{"internalType":"uint16","name":"luck","type":"uint16"},{"internalType":"uint16","name":"strength","type":"uint16"},{"internalType":"uint256","name":"voyageId","type":"uint256"},{"internalType":"uint256","name":"dpsId","type":"uint256"},{"internalType":"uint256","name":"flagshipId","type":"uint256"},{"internalType":"uint256","name":"lockedBlock","type":"uint256"},{"internalType":"uint256","name":"lockedTimestamp","type":"uint256"},{"internalType":"uint256","name":"claimedTime","type":"uint256"},{"internalType":"bytes","name":"uniqueId","type":"bytes"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct LockedVoyageV2[]","name":"lockedVoyages","type":"tuple[]"},{"internalType":"contract DPSVoyageIV2","name":"voyage","type":"address"},{"internalType":"contract IERC721Metadata","name":"pirate","type":"address"},{"internalType":"contract DPSFlagshipI","name":"flagship","type":"address"}],"internalType":"struct DPSDocks.VoyageData[]","name":"_voyagesParam","type":"tuple[]"}],"name":"lockVoyagesItems","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOfFinishedVoyages","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOfLockedVoyages","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirates","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"piratesAddress","type":"address"}],"name":"pirates","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"random","outputs":[{"internalType":"contract DPSQRNGI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomRequestIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"recoverToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"},{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"supportShips","outputs":[{"internalType":"contract DPSSupportShipI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"voyageResults","outputs":[{"internalType":"uint16","name":"awardedChests","type":"uint16"},{"internalType":"uint8","name":"totalSupportShipsDestroyed","type":"uint8"},{"internalType":"uint8","name":"healthDamage","type":"uint8"},{"internalType":"uint16","name":"skippedInteractions","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voyages","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"voyageAddress","type":"address"}],"name":"voyages","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"bool","name":"_locked","type":"bool"}],"name":"voyagesLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260016015553480156200001657600080fd5b50620000223362000028565b62000078565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6154fd80620000886000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063647aba301161011a578063b7297cf3116100ad578063d970d60f1161007c578063d970d60f14610501578063de0777f614610514578063e533627614610527578063f23a6e611461053a578063f2fde38b1461054d57600080fd5b8063b7297cf3146104bc578063bc197c81146104cf578063ce07695b14610387578063d2892fac146104ee57600080fd5b80638da5cb5b116100e95780638da5cb5b1461045c578063944018cf1461046d57806395cdfb4b146104965780639b610b0a146104a957600080fd5b8063647aba301461040e578063715018a61461042157806373312a4f146104295780637bc53f3e1461043c57600080fd5b8063424de3271161019d5780635bfd2a271161016c5780635bfd2a27146103a25780635eac6239146103c25780635ec01e4d146103d557806362c2fd6b146103e857806364026ac0146103fb57600080fd5b8063424de327146102f857806348ec459c1461030f578063499c3fe8146103875780635975a90c1461039a57600080fd5b806320482fd2116101d957806320482fd21461028957806328d40dff1461029c5780632e0fdf1e146102af5780633d0da5ba146102b757600080fd5b806301ffc9a71461020b57806304010c3f14610233578063150b7a02146102485780631791133814610274575b600080fd5b61021e610219366004613606565b610560565b60405190151581526020015b60405180910390f35b61023b610597565b60405161022a9190613630565b61025b6102563660046137e6565b6105a8565b6040516001600160e01b0319909116815260200161022a565b610287610282366004613851565b6105e3565b005b61028761029736600461386a565b610648565b6102876102aa366004613939565b61071b565b61023b610897565b6102e06102c5366004613851565b6017602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161022a565b61030160145481565b60405190815260200161022a565b61035461031d366004613851565b600d602052600090815260409020805460029091015461ffff9182169160ff80831692610100810490911691620100009091041684565b60405161022a949392919061ffff948516815260ff93841660208201529190921660408201529116606082015260800190565b61021e61039536600461397a565b6108a3565b61023b6108b0565b6103b56103b0366004613851565b6108bc565b60405161022a9190613a35565b6102876103d0366004613939565b610c3b565b6001546102e0906001600160a01b031681565b6004546102e0906001600160a01b031681565b6008546102e0906001600160a01b031681565b6005546102e0906001600160a01b031681565b6102876116f7565b6003546102e0906001600160a01b031681565b61044f61044a366004613aee565b61170b565b60405161022a9190613cd7565b6000546001600160a01b03166102e0565b6102e061047b366004613851565b6016602052600090815260409020546001600160a01b031681565b6103016104a4366004613d47565b611a95565b61044f6104b7366004613aee565b611ad9565b6006546102e0906001600160a01b031681565b61025b6104dd366004613e09565b63bc197c8160e01b95945050505050565b61021e6104fc36600461397a565b611e5a565b6002546102e0906001600160a01b031681565b610287610522366004613eb6565b611e67565b6007546102e0906001600160a01b031681565b61025b610548366004613ef8565b61203b565b61028761055b36600461397a565b612077565b60006001600160e01b03198216630271189760e51b148061059157506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606105a3600e6120f0565b905090565b60006001600160a01b03851630146105d2576040516282b42960e81b815260040160405180910390fd5b50630a85bd0160e11b949350505050565b6105eb612104565b6000818152600d60205260408120805461ffff19168155600181018290559060028201805463ffffffff19169055610627600383016000613239565b61063560048301600061325e565b61064360058301600061325e565b505050565b610650612104565b6000836001600160a01b03166000848460405161066e929190613f60565b60006040518083038185875af1925050503d80600081146106ab576040519150601f19603f3d011682016040523d82523d6000602084013e6106b0565b606091505b50509050806106d2576040516308aeed0f60e21b815260040160405180910390fd5b836001600160a01b03167f1a220fe4bd914e6a0feadfe838ea2660505afe80ab0ce47d8bdc2ac1525166b7848460405161070d929190613f70565b60405180910390a250505050565b60155460020361073d576040516282b42960e81b815260040160405180910390fd5b6002601555600654604051630c0e27e360e01b81526004808201526001600160a01b0390911690630c0e27e39060240160006040518083038186803b15801561078557600080fd5b505afa158015610799573d6000803e3d6000fd5b5050505060005b8181101561088d5761087d8383838181106107bd576107bd613f9f565b90506020028101906107cf9190613fb5565b6107d99080613fd5565b8585858181106107eb576107eb613f9f565b90506020028101906107fd9190613fb5565b61080e90604081019060200161397a565b86868681811061082057610820613f9f565b90506020028101906108329190613fb5565b61084390606081019060400161397a565b87878781811061085557610855613f9f565b90506020028101906108679190613fb5565b61087890608081019060600161397a565b61215e565b61088681614044565b90506107a0565b5050600160155550565b60606105a360106120f0565b6000610591601083612976565b60606105a360126120f0565b6108c4613283565b6000828152601660209081526040808320546001600160a01b03168352600982528083208584529091528120600581015490910361092a57506000828152601760209081526040808320546001600160a01b03168352600a825280832085845290915290205b8060050154600003610957576040516328d7be8d60e11b8152600160048201526024015b60405180910390fd5b600c8101546040516352a701e360e01b8152600481018590526000916001600160a01b0316906352a701e390602401600060405180830381865afa1580156109a3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109cb9190810190614143565b60038301805460408051602080840282018101909252828152939450830182828015610a3457602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610a055790505b5050505060408084019290925250600154905163078c4d3560e51b81526000916001600160a01b03169063f189a6a090610a7590600b8701906004016142c0565b602060405180830381865afa158015610a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ab691906142d3565b905080600003610ad9576040516303de361f60e11b815260040160405180910390fd5b60808201516009840154610aed90426142ec565b11610b0e576040516328d7be8d60e11b81526001600482015260240161094e565b60008260800151846009015442610b2591906142ec565b610b2f91906142ff565b9050826040015151811115610b4657506040820151515b60408301515160005b610b5983836142ec565b811015610bb25760408501516000906001610b7484866142ec565b610b7e91906142ec565b81518110610b8e57610b8e613f9f565b60ff9092166020928302919091019091015280610baa81614044565b915050610b4f565b50600754604080860151905163bc89416960e01b81526001600160a01b039092169163bc89416991610beb918991908890600401614c15565b600060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c309190810190614d09565b979650505050505050565b601554600203610c5d576040516282b42960e81b815260040160405180910390fd5b6002601555600654604051630c0e27e360e01b8152600560048201526001600160a01b0390911690630c0e27e39060240160006040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b5050505060005b8181101561088d576000838383818110610cdd57610cdd613f9f565b6020908102929092013560008181526016909352604090922054919250506001600160a01b031680610d2257604051639fabe1c160e01b815260040160405180910390fd5b6001600160a01b03811660009081526009602090815260408083208584528252808320815161024081018352815460ff81168252610100900461ffff169381019390935281516101a0810180845291928401916001840190600d908288855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411610d815750505092845250506040805161012081019182905260209093019291506002840190600990826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610de15790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015610e8557602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610e565790505b5050509183525050600482015461ffff80821660208401526201000082048116604084015264010000000090910416606082015260058201546080820152600682015460a0820152600782015460c0820152600882015460e08201526009820154610100820152600a820154610120820152600b8201805461014090920191610f0d90614209565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3990614209565b8015610f865780601f10610f5b57610100808354040283529160200191610f86565b820191906000526020600020905b815481529060010190602001808311610f6957829003601f168201915b5050509183525050600c8201546001600160a01b039081166020830152600d8301548116604080840191909152600e9093015481166060909201919091526101e083015191516352a701e360e01b8152600481018790529293506000929116906352a701e390602401600060405180830381865afa15801561100c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110349190810190614143565b60075460405163c5e815c760e01b81529192506001600160a01b03169063c5e815c79061106990339086908890600401614e1a565b602060405180830381865afa158015611086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110aa9190614e4f565b6110c757604051631636af3760e11b815260040160405180910390fd5b6080808301516040830152810151602082015142916110e89160ff16614e6c565b8361018001516110f89190614e83565b1115611119576040516328d7be8d60e11b815260048181015260240161094e565b6001546101c083015160405163078c4d3560e51b81526000926001600160a01b03169163f189a6a09161114f9190600401614e96565b602060405180830381865afa15801561116c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119091906142d3565b9050806000036111b3576040516303de361f60e11b815260040160405180910390fd5b600754604080840151905163bc89416960e01b81526000926001600160a01b03169163bc894169916111eb9188918790600401614ea9565b600060405180830381865afa158015611208573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112309190810190614d09565b426101a08601526001600160a01b03861660009081526009602090815260408083208a8452825291829020875181549289015161ffff166101000262ffffff1990931660ff90911617919091178155908601519192508591611298906001830190600d6132dc565b5060608201516112ae9060028301906009613372565b50608082015180516112ca9160038401916020909101906133f3565b5060a082015160048201805460c085015160e086015161ffff9081166401000000000265ffff0000000019928216620100000263ffffffff1990941691909516179190911716919091179055610100820151600582015561012082015160068201556101408201516007820155610160820151600882015561018082015160098201556101a0820151600a8201556101c0820151600b82019061136d9082614f02565b506101e0820151600c820180546001600160a01b039283166001600160a01b031991821617909155610200840151600d80850180549285169284169290921790915561022090940151600e9093018054938316939091169290921790915586166000908152600a602090815260408083206101008981015185529083529281902088518154938a015161ffff1690940262ffffff1990931660ff9094169390931791909117825586015186926114279160018401916132dc565b50606082015161143d9060028301906009613372565b50608082015180516114599160038401916020909101906133f3565b5060a082015160048201805460c085015160e086015161ffff9081166401000000000265ffff0000000019928216620100000263ffffffff1990941691909516179190911716919091179055610100820151600582015561012082015160068201556101408201516007820155610160820151600882015561018082015160098201556101a0820151600a8201556101c0820151600b8201906114fc9082614f02565b506101e0820151600c82810180546001600160a01b03199081166001600160a01b0394851617909155610200850151600d808601805484169286169290921790915561022090950151600e90940180548216948416949094179093559088166000818152602092835260408082206101008b01805182546001818101855593865287862001555183526017855281832080549096169093179094558a8152938252919092208351815461ffff191661ffff909116178155918301518392916115c991908301906009613372565b5060408201516002820180546060850151608086015161ffff16620100000263ffff00001960ff9283166101000261ffff199094169290951691909117919091179290921691909117905560a0820151805161162f916003840191602090910190613459565b5060c0820151805161164b9160048401916020909101906133f3565b5060e082015180516116679160058401916020909101906133f3565b5090505061167a84610100015186612998565b61168a8184600001518688612b3e565b857fdc1dda0cf54208fd9e79bd79cf307bd77513a34429e54c94e91619dd58883fd38260000151836020015184606001518560a001518660c00151426040516116d896959493929190614fc1565b60405180910390a2505050505050806116f090614044565b9050610cc1565b6116ff612104565b6117096000613021565b565b6001600160a01b0383166000908152600b602052604090205460609080831115611733578092505b806001600160401b0381111561174b5761174b613692565b60405190808252806020026020018201604052801561178457816020015b6117716134c1565b8152602001906001900390816117695790505b509150835b83811015611a8c576001600160a01b0386166000908152600960209081526040808320600b90925282208054919291849081106117c8576117c8613f9f565b60009182526020808320919091015483528281019390935260409182018120825161024081018452815460ff81168252610100900461ffff169481019490945282516101a08101808552919385019290916001850191600d91908390855b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116118265750505092845250506040805161012081019182905260209093019291506002840190600990826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611886579050505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561192a57602002820191906000526020600020906000905b825461010083900a900460ff168152602060019283018181049485019490930390920291018084116118fb5790505b5050509183525050600482015461ffff80821660208401526201000082048116604084015264010000000090910416606082015260058201546080820152600682015460a0820152600782015460c0820152600882015460e08201526009820154610100820152600a820154610120820152600b82018054610140909201916119b290614209565b80601f01602080910402602001604051908101604052809291908181526020018280546119de90614209565b8015611a2b5780601f10611a0057610100808354040283529160200191611a2b565b820191906000526020600020905b815481529060010190602001808311611a0e57829003601f168201915b5050509183525050600c8201546001600160a01b039081166020830152600d83015481166040830152600e9092015490911660609091015283518490878403908110611a7957611a79613f9f565b6020908102919091010152600101611789565b50509392505050565b60008115611abc57506001600160a01b0382166000908152600b6020526040902054610591565b50506001600160a01b03166000908152600c602052604090205490565b6001600160a01b0383166000908152600c602052604090205460609080831115611b01578092505b806001600160401b03811115611b1957611b19613692565b604051908082528060200260200182016040528015611b5257816020015b611b3f6134c1565b815260200190600190039081611b375790505b509150835b83811015611a8c576001600160a01b0386166000908152600a60209081526040808320600c9092528220805491929184908110611b9657611b96613f9f565b60009182526020808320919091015483528281019390935260409182018120825161024081018452815460ff81168252610100900461ffff169481019490945282516101a08101808552919385019290916001850191600d91908390855b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611bf45750505092845250506040805161012081019182905260209093019291506002840190600990826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611c545790505050505050815260200160038201805480602002602001604051908101604052809291908181526020018280548015611cf857602002820191906000526020600020906000905b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611cc95790505b5050509183525050600482015461ffff80821660208401526201000082048116604084015264010000000090910416606082015260058201546080820152600682015460a0820152600782015460c0820152600882015460e08201526009820154610100820152600a820154610120820152600b8201805461014090920191611d8090614209565b80601f0160208091040260200160405190810160405280929190818152602001828054611dac90614209565b8015611df95780601f10611dce57610100808354040283529160200191611df9565b820191906000526020600020905b815481529060010190602001808311611ddc57829003601f168201915b5050509183525050600c8201546001600160a01b039081166020830152600d83015481166040830152600e9092015490911660609091015283518490878403908110611e4757611e47613f9f565b6020908102919091010152600101611b57565b6000610591601283612976565b611e6f612104565b81600103611e99578015611e8e57611e88600e84613071565b50611ff5565b611e88600e84613086565b81600203611ec157600180546001600160a01b0319166001600160a01b038516179055611ff5565b81600303611ee5578015611eda57611e88601084613071565b611e88601084613086565b81600403611f09578015611efe57611e88601284613071565b611e88601284613086565b81600503611f3157600380546001600160a01b0319166001600160a01b038516179055611ff5565b81600603611f5957600480546001600160a01b0319166001600160a01b038516179055611ff5565b81600703611f8157600680546001600160a01b0319166001600160a01b038516179055611ff5565b81600803611fa957600580546001600160a01b0319166001600160a01b038516179055611ff5565b81600903611fd157600880546001600160a01b0319166001600160a01b038516179055611ff5565b81600a03611ff557600780546001600160a01b0319166001600160a01b0385161790555b604080518381526001600160a01b03851660208201527fd58da2325ce084e36b92ea4c1a90706ffa665d07ec064f887de9dbb8f15f4995910160405180910390a1505050565b60006001600160a01b0386163014612065576040516282b42960e81b815260040160405180910390fd5b5063f23a6e6160e01b95945050505050565b61207f612104565b6001600160a01b0381166120e45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161094e565b6120ed81613021565b50565b606060006120fd8361309b565b9392505050565b6000546001600160a01b031633146117095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161094e565b612169600e84612976565b158061217d575061217b601083612976565b155b80612190575061218e601282612976565b155b156121ad576040516282b42960e81b815260040160405180910390fd5b60005b8481101561296e5760008686838181106121cc576121cc613f9f565b90506020028101906121de9190615021565b6121e790615177565b60055461010082015160405163548cb80160e01b815260048101919091526001600160a01b0388811660248301529293506000929091169063548cb80190604401600060405180830381865afa158015612245573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261226d9190810190614143565b90506000805b60098110156122ae578360600151816009811061229257612292613f9f565b60200201516122a49060ff1683614e83565b9150600101612273565b50600754336000818152600960209081526040808320610100890180518552908352818420948452600a835281842090518452909152908190209051630996b79560e31b81526001600160a01b0390931692634cb5bca89261231c9290918890889088908d906004016152e4565b60006040518083038186803b15801561233457600080fd5b505afa158015612348573d6000803e3d6000fd5b50506014805460009350339250908361236083614044565b90915550604080516001600160a01b0390931660208401526080908301819052600c60a08401526b4c4f434b5f564f594147455f60a01b60c08401526060830191909152429082015260e00160408051601f198184030181529082905260015463123a60e960e01b83529092506001600160a01b03169063123a60e9906123eb908490600401614e96565b600060405180830381600087803b15801561240557600080fd5b505af1158015612419573d6000803e3d6000fd5b50504361016087015250504261018085015260006101a0850181905260a0850181905260c0850181905260e08501819052604080850151608087015260ff8085168752855161ffff9081166020808a019182526101c08a018790526001600160a01b03808f166101e08c01528d81166102008c01528c166102208b015233865260098152848620610100808c0151885291529484902089518154925190931690950262ffffff1990911691909216171782558501518591906124e1906001830190600d6132dc565b5060608201516124f79060028301906009613372565b50608082015180516125139160038401916020909101906133f3565b5060a082015160048201805460c085015160e086015161ffff9081166401000000000265ffff0000000019928216620100000263ffffffff1990941691909516179190911716919091179055610100820151600582015561012082015160068201556101408201516007820155610160820151600882015561018082015160098201556101a0820151600a8201556101c0820151600b8201906125b69082614f02565b506101e0820151600c820180546001600160a01b03199081166001600160a01b0393841617909155610200840151600d84018054831691841691909117905561022090930151600e9092018054841692821692909217909155336000818152600b602090815260408083206101008b018051825460018101845592865284862090920191909155518352601690915290819020805490941682179093556101208701519251632142170760e11b8152918a16926342842e0e9261267e929130916004016153a2565b600060405180830381600087803b15801561269857600080fd5b505af11580156126ac573d6000803e3d6000fd5b505050610140850151604051632142170760e11b81526001600160a01b03891692506342842e0e916126e491339130916004016153a2565b600060405180830381600087803b1580156126fe57600080fd5b505af1158015612712573d6000803e3d6000fd5b5050505060005b60098110156127d85760008560600151826009811061273a5761273a613f9f565b602002015160ff1611156127d05760035460608601516001600160a01b039091169063f242432a90339030908590816009811061277957612779613f9f565b60200201516040518563ffffffff1660e01b815260040161279d94939291906153c6565b600060405180830381600087803b1580156127b757600080fd5b505af11580156127cb573d6000803e3d6000fd5b505050505b600101612719565b5060015b600d81101561289c576000856040015182600d81106127fd576127fd613f9f565b602002015161ffff1611156128945760045460408601516001600160a01b039091169063f242432a9033903090859081600d811061283d5761283d613f9f565b60200201516040518563ffffffff1660e01b81526004016128619493929190615400565b600060405180830381600087803b15801561287b57600080fd5b505af115801561288f573d6000803e3d6000fd5b505050505b6001016127dc565b50610100840151604051632142170760e11b81526001600160a01b038a16916342842e0e916128d29133913091906004016153a2565b600060405180830381600087803b1580156128ec57600080fd5b505af1158015612900573d6000803e3d6000fd5b505050508361014001518461012001518561010001517f9ecc21bfb2907107e0cdf19c0ddb1c94949ae7c7124d941d50efac5603c3d86c87606001518860400151426040516129519392919061543b565b60405180910390a4505050508061296790614044565b90506121b0565b505050505050565b6001600160a01b038116600090815260018301602052604081205415156120fd565b6001600160a01b0381166000908152600b60205260408120905b8154811015612a6057838282815481106129ce576129ce613f9f565b906000526020600020015403612a5057815482906129ee906001906142ec565b815481106129fe576129fe613f9f565b9060005260206000200154828281548110612a1b57612a1b613f9f565b906000526020600020018190555081805480612a3957612a39615488565b600190038181906000526020600020016000905590555b612a5981614044565b90506129b2565b50600083815260166020908152604080832080546001600160a01b03191690556001600160a01b0385168352600982528083208684529091528120805462ffffff19168155600181018290559060006002830155612ac260038301600061325e565b60048201805465ffffffffffff1916905560006005830181905560068301819055600783018190556008830181905560098301819055600a8301819055612b0d90600b84019061357d565b50600c810180546001600160a01b0319908116909155600d8201805482169055600e90910180549091169055505050565b6008548451604051630ab714fb60e11b81526001600160a01b03848116600483015261ffff8781166024840152909216604482015291169063156e29f690606401600060405180830381600087803b158015612b9957600080fd5b505af1158015612bad573d6000803e3d6000fd5b505050508161020001516001600160a01b03166342842e0e30838561012001516040518463ffffffff1660e01b8152600401612beb939291906153a2565b600060405180830381600087803b158015612c0557600080fd5b505af1158015612c19573d6000803e3d6000fd5b50505050606084015160ff1615612ca8578161022001516001600160a01b0316639a555839600084610140015187606001516064612c57919061549e565b6040518463ffffffff1660e01b8152600401612c75939291906154b7565b600060405180830381600087803b158015612c8f57600080fd5b505af1158015612ca3573d6000803e3d6000fd5b505050505b610220820151610140830151604051632142170760e11b81526001600160a01b03909216916342842e0e91612ce391309186916004016153a2565b600060405180830381600087803b158015612cfd57600080fd5b505af1158015612d11573d6000803e3d6000fd5b5050505060005b6009811015612ee457600085602001518260098110612d3957612d39613f9f565b602002015160ff161115612de55760035460208601516001600160a01b039091169063f5298aca90309084908160098110612d7657612d76613f9f565b60200201516040516001600160e01b031960e086901b1681526001600160a01b039093166004840152602483019190915260ff166044820152606401600060405180830381600087803b158015612dcc57600080fd5b505af1158015612de0573d6000803e3d6000fd5b505050505b84602001518160098110612dfb57612dfb613f9f565b602002015160ff1683606001518260098110612e1957612e19613f9f565b602002015160ff161115612ed45760035460208601516001600160a01b039091169063f242432a903090859085908160098110612e5857612e58613f9f565b602002015188606001518760098110612e7357612e73613f9f565b6020020151612e82919061549e565b6040518563ffffffff1660e01b8152600401612ea194939291906153c6565b600060405180830381600087803b158015612ebb57600080fd5b505af1158015612ecf573d6000803e3d6000fd5b505050505b612edd81614044565b9050612d18565b5060015b600d811015612fad57826040015181600d8110612f0757612f07613f9f565b602002015161ffff1615612f9d5760045460408401516001600160a01b039091169063f242432a9030908590859081600d8110612f4657612f46613f9f565b60200201516040518563ffffffff1660e01b8152600401612f6a9493929190615400565b600060405180830381600087803b158015612f8457600080fd5b505af1158015612f98573d6000803e3d6000fd5b505050505b612fa681614044565b9050612ee8565b506101e0820151610100830151604051630852cd8d60e31b81526001600160a01b03909216916342966c6891612fe99160040190815260200190565b600060405180830381600087803b15801561300357600080fd5b505af1158015613017573d6000803e3d6000fd5b5050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006120fd836001600160a01b0384166130f7565b60006120fd836001600160a01b038416613146565b6060816000018054806020026020016040519081016040528092919081815260200182805480156130eb57602002820191906000526020600020905b8154815260200190600101908083116130d7575b50505050509050919050565b600081815260018301602052604081205461313e57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610591565b506000610591565b6000818152600183016020526040812054801561322f57600061316a6001836142ec565b855490915060009061317e906001906142ec565b90508181146131e357600086600001828154811061319e5761319e613f9f565b90600052602060002001549050808760000184815481106131c1576131c1613f9f565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806131f4576131f4615488565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610591565b6000915050610591565b50805460008255600f0160109004906000526020600020908101906120ed91906135b3565b50805460008255601f0160209004906000526020600020908101906120ed91906135b3565b604051806101000160405280600061ffff1681526020016132a26135c8565b8152602001600060ff168152602001600060ff168152602001600061ffff1681526020016060815260200160608152602001606081525090565b6001830191839082156133625791602002820160005b8382111561333257835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026132f2565b80156133605782816101000a81549061ffff0219169055600201602081600101049283019260010302613332565b505b5061336e9291506135b3565b5090565b6001830191839082156133625791602002820160005b838211156133c657835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302613388565b80156133605782816101000a81549060ff02191690556001016020816000010492830192600103026133c6565b82805482825590600052602060002090601f01602090048101928215613362579160200282016000838211156133c657835183826101000a81548160ff021916908360ff1602179055509260200192600101602081600001049283019260010302613388565b82805482825590600052602060002090600f016010900481019282156133625791602002820160008382111561333257835183826101000a81548161ffff021916908361ffff16021790555092602001926002016020816001010492830192600103026132f2565b6040805161024081018252600080825260208201529081016134e16135e7565b81526020016134ee6135c8565b815260200160608152602001600061ffff168152602001600061ffff168152602001600061ffff1681526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b50805461358990614209565b6000825580601f10613599575050565b601f0160209004906000526020600020908101906120ed91905b5b8082111561336e57600081556001016135b4565b6040518061012001604052806009906020820280368337509192915050565b604051806101a00160405280600d906020820280368337509192915050565b60006020828403121561361857600080fd5b81356001600160e01b0319811681146120fd57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156136715783516001600160a01b03168352928401929184019160010161364c565b50909695505050505050565b6001600160a01b03811681146120ed57600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160c081016001600160401b03811182821017156136ca576136ca613692565b60405290565b60405161010081016001600160401b03811182821017156136ca576136ca613692565b60405161024081016001600160401b03811182821017156136ca576136ca613692565b60405161012081016001600160401b03811182821017156136ca576136ca613692565b604051601f8201601f191681016001600160401b038111828210171561376157613761613692565b604052919050565b60006001600160401b0382111561378257613782613692565b50601f01601f191660200190565b600082601f8301126137a157600080fd5b81356137b46137af82613769565b613739565b8181528460208386010111156137c957600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080608085870312156137fc57600080fd5b84356138078161367d565b935060208501356138178161367d565b92506040850135915060608501356001600160401b0381111561383957600080fd5b61384587828801613790565b91505092959194509250565b60006020828403121561386357600080fd5b5035919050565b60008060006040848603121561387f57600080fd5b833561388a8161367d565b925060208401356001600160401b03808211156138a657600080fd5b818601915086601f8301126138ba57600080fd5b8135818111156138c957600080fd5b8760208285010111156138db57600080fd5b6020830194508093505050509250925092565b60008083601f84011261390057600080fd5b5081356001600160401b0381111561391757600080fd5b6020830191508360208260051b850101111561393257600080fd5b9250929050565b6000806020838503121561394c57600080fd5b82356001600160401b0381111561396257600080fd5b61396e858286016138ee565b90969095509350505050565b60006020828403121561398c57600080fd5b81356120fd8161367d565b8060005b60098110156139bd57815160ff1684526020938401939091019060010161399b565b50505050565b600081518084526020808501945080840160005b838110156139f757815161ffff16875295820195908201906001016139d7565b509495945050505050565b600081518084526020808501945080840160005b838110156139f757815160ff1687529582019590820190600101613a16565b60208152613a4a60208201835161ffff169052565b60006020830151613a5e6040840182613997565b50604083015160ff908116610160840152606084015116610180830152608083015161ffff166101a083015260a08301516102006101c08401819052613aa86102208501836139c3565b915060c0850151601f1980868503016101e0870152613ac78483613a02565b935060e0870151915080868503018387015250613ae48382613a02565b9695505050505050565b600080600060608486031215613b0357600080fd5b8335613b0e8161367d565b95602085013595506040909401359392505050565b8060005b600d8110156139bd57815161ffff16845260209384019390910190600101613b27565b60005b83811015613b65578181015183820152602001613b4d565b50506000910152565b60008151808452613b86816020860160208601613b4a565b601f01601f19169290920160200192915050565b805160ff16825260006104c06020830151613bbb602086018261ffff169052565b506040830151613bce6040860182613b23565b5060608301516101e0613be381870183613997565b6080850151915082610300870152613bfd83870183613a02565b925060a08501519150613c1761032087018361ffff169052565b60c085015161ffff90811661034088015260e0860151166103608701526101008501516103808701526101208501516103a08701526101408501516103c08701526101608501516103e08701526101808501516104008701526101a08501516104208701526101c08501518684036104408801529150613c978383613b6e565b908501516001600160a01b0390811661046088015261020086015181166104808801526102208601519081166104a088015290925090505b509392505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613d2c57603f19888603018452613d1a858351613b9a565b94509285019290850190600101613cfe565b5092979650505050505050565b80151581146120ed57600080fd5b60008060408385031215613d5a57600080fd5b8235613d658161367d565b91506020830135613d7581613d39565b809150509250929050565b60006001600160401b03821115613d9957613d99613692565b5060051b60200190565b600082601f830112613db457600080fd5b81356020613dc46137af83613d80565b82815260059290921b84018101918181019086841115613de357600080fd5b8286015b84811015613dfe5780358352918301918301613de7565b509695505050505050565b600080600080600060a08688031215613e2157600080fd5b8535613e2c8161367d565b94506020860135613e3c8161367d565b935060408601356001600160401b0380821115613e5857600080fd5b613e6489838a01613da3565b94506060880135915080821115613e7a57600080fd5b613e8689838a01613da3565b93506080880135915080821115613e9c57600080fd5b50613ea988828901613790565b9150509295509295909350565b600080600060608486031215613ecb57600080fd5b8335613ed68161367d565b9250602084013591506040840135613eed81613d39565b809150509250925092565b600080600080600060a08688031215613f1057600080fd5b8535613f1b8161367d565b94506020860135613f2b8161367d565b9350604086013592506060860135915060808601356001600160401b03811115613f5457600080fd5b613ea988828901613790565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b60008235607e19833603018112613fcb57600080fd5b9190910192915050565b6000808335601e19843603018112613fec57600080fd5b8301803591506001600160401b0382111561400657600080fd5b6020019150600581901b360382131561393257600080fd5b80356140298161367d565b919050565b634e487b7160e01b600052601160045260246000fd5b6000600182016140565761405661402e565b5060010190565b61ffff811681146120ed57600080fd5b80516140298161405d565b60ff811681146120ed57600080fd5b805161402981614078565b600082601f8301126140a357600080fd5b815160206140b36137af83613d80565b82815260059290921b840181019181810190868411156140d257600080fd5b8286015b84811015613dfe5780516140e981614078565b83529183019183016140d6565b600082601f83011261410757600080fd5b81516141156137af82613769565b81815284602083860101111561412a57600080fd5b61413b826020830160208701613b4a565b949350505050565b60006020828403121561415557600080fd5b81516001600160401b038082111561416c57600080fd5b9083019060c0828603121561418057600080fd5b6141886136a8565b6141918361406d565b815261419f60208401614087565b60208201526040830151828111156141b657600080fd5b6141c287828601614092565b604083015250606083015160608201526080830151608082015260a0830151828111156141ee57600080fd5b6141fa878286016140f6565b60a08301525095945050505050565b600181811c9082168061421d57607f821691505b60208210810361423d57634e487b7160e01b600052602260045260246000fd5b50919050565b6000815461425081614209565b80855260206001838116801561426d5760018114614287576142b5565b60ff1985168884015283151560051b8801830195506142b5565b866000528260002060005b858110156142ad5781548a8201860152908301908401614292565b890184019650505b505050505092915050565b6020815260006120fd6020830184614243565b6000602082840312156142e557600080fd5b5051919050565b818103818111156105915761059161402e565b60008261431c57634e487b7160e01b600052601260045260246000fd5b500490565b805461ffff8082168452601082901c8116602085015261434c60408501828460201c1661ffff169052565b61436160608501828460301c1661ffff169052565b61437660808501828460401c1661ffff169052565b61438b60a08501828460501c1661ffff169052565b6143a060c08501828460601c1661ffff169052565b6143b560e08501828460701c1661ffff169052565b6143cb6101008501828460801c1661ffff169052565b6143e16101208501828460901c1661ffff169052565b6143f76101408501828460a01c1661ffff169052565b61440d6101608501828460b01c1661ffff169052565b6139bd6101808501828460c01c1661ffff169052565b805460ff8082168452600882901c81166020850152601082901c81166040850152601882901c8116606085015261446460808501828460201c1660ff169052565b61447860a08501828460281c1660ff169052565b61448c60c08501828460301c1660ff169052565b6144a060e08501828460381c1660ff169052565b6139bd6101008501828460401c1660ff169052565b805480835260008281526020808220940193909190825b82601f8201101561475357815460ff808216885260206144f5818a01838560081c1660ff169052565b604061450a818b01848660101c1660ff169052565b606061451f818c01858760181c1660ff169052565b6080614533818d018688871c1660ff169052565b60a0935061454a848d01868860281c1660ff169052565b60c061455f818e01878960301c1660ff169052565b60e0614574818f01888a60381c1660ff169052565b60ff88861c8816166101008f01526145976101208f01888a60481c1660ff169052565b6145ac6101408f01888a60501c1660ff169052565b6145c16101608f01888a60581c1660ff169052565b60ff88851c8816166101808f01526145e46101a08f01888a60681c1660ff169052565b6145f96101c08f01888a60701c1660ff169052565b61460e6101e08f01888a60781c1660ff169052565b60ff88841c8816166102008f01526146316102208f01888a60881c1660ff169052565b6146466102408f01888a60901c1660ff169052565b61465b6102608f01888a60981c1660ff169052565b60ff88871c8816166102808f015261467e6102a08f01888a60a81c1660ff169052565b6146936102c08f01888a60b01c1660ff169052565b6146a86102e08f01888a60b81c1660ff169052565b60ff88831c8816166103008f01526146cb6103208f01888a60c81c1660ff169052565b6146e06103408f01888a60d01c1660ff169052565b6146f56103608f01888a60d81c1660ff169052565b60ff88821c8816166103808f015250505050505061471e6103a08901828460e81c1660ff169052565b6147336103c08901828460f01c1660ff169052565b5060f81c6103e087015261040090950194600191909101906020016144cc565b9054908281101561476e5760ff821686526020909501946001015b8281101561478a5760ff600883901c1686526020909501946001015b828110156147a65760ff601083901c1686526020909501946001015b828110156147c25760ff601883901c1686526020909501946001015b828110156147df57602082901c60ff168652602095909501946001015b828110156147fb5760ff602883901c1686526020909501946001015b828110156148175760ff603083901c1686526020909501946001015b828110156148335760ff603883901c1686526020909501946001015b8281101561484f5760ff604083901c1686526020909501946001015b8281101561486b5760ff604883901c1686526020909501946001015b828110156148875760ff605083901c1686526020909501946001015b828110156148a35760ff605883901c1686526020909501946001015b828110156148bf5760ff606083901c1686526020909501946001015b828110156148db5760ff606883901c1686526020909501946001015b828110156148f75760ff607083901c1686526020909501946001015b828110156149135760ff607883901c1686526020909501946001015b8281101561492f5760ff608083901c1686526020909501946001015b8281101561494b5760ff608883901c1686526020909501946001015b828110156149675760ff609083901c1686526020909501946001015b828110156149835760ff609883901c1686526020909501946001015b8281101561499f5760ff60a083901c1686526020909501946001015b828110156149bb5760ff60a883901c1686526020909501946001015b828110156149d75760ff60b083901c1686526020909501946001015b828110156149f35760ff60b883901c1686526020909501946001015b82811015614a0f5760ff60c083901c1686526020909501946001015b82811015614a2b5760ff60c883901c1686526020909501946001015b82811015614a475760ff60d083901c1686526020909501946001015b82811015614a635760ff60d883901c1686526020909501946001015b82811015614a7f5760ff60e083901c1686526020909501946001015b82811015614a9b5760ff60e883901c1686526020909501946001015b82811015614ab75760ff60f083901c1686526020909501946001015b82811015614acd5760f882901c86526020860195505b5093949350505050565b805460ff811683526000906104c09061ffff600882901c81166020870152614b056040870160018701614321565b614b166101e0870160028701614423565b82610300870152614b2c838701600387016144b5565b925060048501549150614b48610320870182841661ffff169052565b614b5e6103408701828460101c1661ffff169052565b614b746103608701828460201c1661ffff169052565b5050600583015461038085015260068301546103a085015260078301546103c085015260088301546103e08501526009830154610400850152600a830154610420850152838103610440850152614bce81600b8501614243565b9050614be4600c8401546001600160a01b031690565b6001600160a01b03908116610460860152600d8401548116610480860152600e840154166104a08501819052613ccf565b606081526000614c286060830186614ad7565b8281036020840152614c3a8186613a02565b915050826040830152949350505050565b600082601f830112614c5c57600080fd5b614c64613716565b80610120840185811115614c7757600080fd5b845b81811015614c9a578051614c8c81614078565b845260209384019301614c79565b509095945050505050565b600082601f830112614cb657600080fd5b81516020614cc66137af83613d80565b82815260059290921b84018101918181019086841115614ce557600080fd5b8286015b84811015613dfe578051614cfc8161405d565b8352918301918301614ce9565b600060208284031215614d1b57600080fd5b81516001600160401b0380821115614d3257600080fd5b908301906102008286031215614d4757600080fd5b614d4f6136d0565b614d588361406d565b8152614d678660208501614c4b565b6020820152614d796101408401614087565b6040820152614d8b6101608401614087565b6060820152614d9d610180840161406d565b60808201526101a083015182811115614db557600080fd5b614dc187828601614ca5565b60a0830152506101c083015182811115614dda57600080fd5b614de687828601614092565b60c0830152506101e083015182811115614dff57600080fd5b614e0b87828601614092565b60e08301525095945050505050565b600060018060a01b03808616835260606020840152614e3c6060840186613b9a565b9150808416604084015250949350505050565b600060208284031215614e6157600080fd5b81516120fd81613d39565b80820281158282048414176105915761059161402e565b808201808211156105915761059161402e565b6020815260006120fd6020830184613b6e565b606081526000614c286060830186613b9a565b601f82111561064357600081815260208120601f850160051c81016020861015614ee35750805b601f850160051c820191505b8181101561296e57828155600101614eef565b81516001600160401b03811115614f1b57614f1b613692565b614f2f81614f298454614209565b84614ebc565b602080601f831160018114614f645760008415614f4c5750858301515b600019600386901b1c1916600185901b17855561296e565b600085815260208120601f198616915b82811015614f9357888601518255948401946001909101908401614f74565b5085821015614fb15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006101c061ffff89168352614fda6020840189613997565b60ff871661014084015280610160840152614ff7818401876139c3565b905082810361018084015261500c8186613a02565b915050826101a0830152979650505050505050565b600082356104be19833603018112613fcb57600080fd5b803561402981614078565b80356140298161405d565b600082601f83011261505f57600080fd5b6040516101a08082018281106001600160401b038211171561508357615083613692565b6040528301818582111561509657600080fd5b845b828110156150b95780356150ab8161405d565b825260209182019101615098565b509195945050505050565b600082601f8301126150d557600080fd5b6150dd613716565b806101208401858111156150f057600080fd5b845b81811015614c9a57803561510581614078565b8452602093840193016150f2565b600082601f83011261512457600080fd5b813560206151346137af83613d80565b82815260059290921b8401810191818101908684111561515357600080fd5b8286015b84811015613dfe57803561516a81614078565b8352918301918301615157565b60006104c0823603121561518a57600080fd5b6151926136f3565b61519b83615038565b81526151a960208401615043565b60208201526151bb366040850161504e565b60408201526101e06151cf368286016150c4565b60608301526103008401356001600160401b03808211156151ef57600080fd5b6151fb36838801615113565b608085015261520d6103208701615043565b60a085015261521f6103408701615043565b60c08501526152316103608701615043565b60e08501526103808601356101008501526103a08601356101208501526103c08601356101408501526103e08601356101608501526104008601356101808501526104208601356101a085015261044086013591508082111561529357600080fd5b506152a036828701613790565b6101c0840152506152b4610460850161401e565b908201526152c5610480840161401e565b6102008201526152d86104a0840161401e565b61022082015292915050565b60c0815260006152f760c0830189614ad7565b82810360208401526153098189614ad7565b9050828103604084015261531d8188613b9a565b9050828103606084015261ffff865116815260ff6020870151166020820152604086015160c0604083015261535560c0830182613a02565b9050606087015160608301526080870151608083015260a087015182820360a08401526153828282613b6e565b9350505050836080830152610c3060a08301846001600160a01b03169052565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039485168152929093166020830152604082015260ff909116606082015260a06080820181905260009082015260c00190565b6001600160a01b039485168152929093166020830152604082015261ffff909116606082015260a06080820181905260009082015260c00190565b6102e0810161544a8286613997565b61012082018460005b600d81101561547657815161ffff16835260209283019290910190600101615453565b505050826102c0830152949350505050565b634e487b7160e01b600052603160045260246000fd5b60ff82811682821603908111156105915761059161402e565b60608101600785106154d957634e487b7160e01b600052602160045260246000fd5b938152602081019290925260ff166040909101529056fea164736f6c6343000811000a
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.