ETH Price: $2,686.60 (+0.88%)

Token

DigiDaigakuBabyDragons (DIBD)
 

Overview

Max Total Supply

0 DIBD

Holders

925

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
73 DIBD
0xd2b36443fccb1d36af2c180a9244ba8980baad7f
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

DigiDaigaku baby dragons is a collection featuring adorable and whimsical baby dragons. This collection displays vibrant baby dragons that will captivate you! Adopt your very own DigiDaigaku Baby Dragon today!

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DigiDaigakuBabyDragons

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 36 : DigiDaigakuBabyDragons.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
import "@limit-break/presets/BlacklistedTransferWrapperAdventureNFT.sol";
import "./IBurnableToken.sol";
/**
* @title DigiDaigakuBabyDragons
* @author Limit Break, Inc.
*/
contract DigiDaigakuBabyDragons is BlacklistedTransferWrapperAdventureNFT {
error DigiDaigakuBabyDragons__CallerNotOwnerOfDragonEgg();
error DigiDaigakuBabyDragons__CannotSetDragonEggsToZeroAddress();
error DigiDaigakuBabyDragons__MustProvideAtLeastOneTokenId();
error DigiDaigakuBabyDragons__StakeDoesNotAcceptPayment();
constructor(address dragonEggAddress, address royaltyReceiver_, uint96 royaltyFeeNumerator_) ERC721("", "") {
if (dragonEggAddress == address(0)) {
revert DigiDaigakuBabyDragons__CannotSetDragonEggsToZeroAddress();
}
initializeERC721("DigiDaigakuBabyDragons", "DIBD");
initializeURI("https://digidaigaku.com/baby-dragons/metadata/", ".json");
initializeAdventureERC721(100);
initializeRoyalties(royaltyReceiver_, royaltyFeeNumerator_);
initializeOperatorFilterer(address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6), true);
initializeWrapperERC721(dragonEggAddress);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 36 : AdventureERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./IAdventurous.sol";
import "./AdventureWhitelist.sol";
import "../initializable/IAdventureERC721Initializer.sol";
import "../utils/tokens/InitializableERC721.sol";
error AdventureApprovalToCaller();
error AlreadyInitializedAdventureERC721();
error AlreadyOnQuest();
error AnActiveQuestIsPreventingTransfers();
error CallerNotApprovedForAdventure();
error CallerNotTokenOwner();
error MaxSimultaneousQuestsCannotBeZero();
error MaxSimultaneousQuestsExceeded();
error NotOnQuest();
error QuestIdOutOfRange();
error TooManyActiveQuests();
/**
* @title AdventureERC721
* @author Limit Break, Inc.
* @notice Implements the {IAdventurous} token standard for ERC721-compliant tokens.
* Includes a user approval mechanism specific to {IAdventurous} functionality.
* @dev Inherits {InitializableERC721} to provide the option to support EIP-1167.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 36 : AdventureNFT.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./AdventureERC721.sol";
import "../initializable/IRoyaltiesInitializer.sol";
import "../initializable/IURIInitializer.sol";
import "@openzeppelin/contracts/token/common/ERC2981.sol";
error AlreadyInitializedRoyalties();
error AlreadyInitializedURI();
error ExceedsMaxRoyaltyFee();
error NonexistentToken();
/**
* @title AdventureNFT
* @author Limit Break, Inc.
* @notice Standardizes commonly shared boilerplate code that adds base/suffix URI and EIP-2981 royalties to {AdventureERC721} contracts.
*/
abstract contract AdventureNFT is AdventureERC721, ERC2981, IRoyaltiesInitializer, IURIInitializer {
using Strings for uint256;
/// @dev The maximum allowable royalty fee is 100%
uint96 private constant MAX_ROYALTY_FEE_NUMERATOR = 10000;
/// @notice Specifies whether or not the contract is initialized
bool private initializedRoyalties;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 36 : AdventureWhitelist.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./IAdventure.sol";
import "../utils/access/InitializableOwnable.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
error AdventureIsStillWhitelisted();
error AlreadyWhitelisted();
error ArrayIndexOverflowsUint128();
error CallerNotAWhitelistedAdventure();
error InvalidAdventureContract();
error NotWhitelisted();
/**
* @title AdventureWhitelist
* @author Limit Break, Inc.
* @notice Implements the basic security features of the {IAdventurous} token standard for ERC721-compliant tokens.
* This includes a whitelist for trusted Adventure contracts designed to interoperate with this token.
*/
abstract contract AdventureWhitelist is InitializableOwnable {
struct AdventureDetails {
bool isWhitelisted;
uint128 arrayIndex;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 36 : IAdventure.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @title IAdventure
* @author Limit Break, Inc.
* @notice The base interface that all `Adventure` contracts must conform to.
* @dev All contracts that implement the adventure/quest system and interact with an {IAdventurous} token are required to implement this interface.
*/
interface IAdventure is IERC165 {
/**
* @dev Returns whether or not quests on this adventure lock tokens.
* Developers of adventure contract should ensure that this is immutable
* after deployment of the adventure contract. Failure to do so
* can lead to error that deadlock token transfers.
*/
function questsLockTokens() external view returns (bool);
/**
* @dev A callback function that AdventureERC721 must invoke when a quest has been successfully entered.
* Throws if the caller is not an expected AdventureERC721 contract designed to work with the Adventure.
* Not permitted to throw in any other case, as this could lead to tokens being locked in quests.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 36 : IAdventurous.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./Quest.sol";
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @title IAdventurous
* @author Limit Break, Inc.
* @notice The base interface that all `Adventurous` token contracts must conform to in order to support adventures and quests.
* @dev All contracts that support adventures and quests are required to implement this interface.
*/
interface IAdventurous is IERC165 {
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets, for special in-game adventures.
*/
event AdventureApprovalForAll(address indexed tokenOwner, address indexed operator, bool approved);
/**
* @dev Emitted when a token enters or exits a quest
*/
event QuestUpdated(uint256 indexed tokenId, address indexed tokenOwner, address indexed adventure, uint256 questId, bool active, bool booted);
/**
* @notice Transfers a player's token if they have opted into an authorized, whitelisted adventure.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 36 : Quest.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
/**
* @title Quest
* @author Limit Break, Inc.
* @notice Quest data structure for {IAdventurous} contracts.
*/
struct Quest {
bool isActive;
uint32 questId;
uint64 startTimestamp;
uint32 arrayIndex;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 36 : IAdventureERC721Initializer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @title IAdventureERC721Initializer
* @author Limit Break, Inc.
* @notice Allows cloneable contracts to include Adventure ERC721 functionality.
* @dev See https://eips.ethereum.org/EIPS/eip-1167 for details.
*/
interface IAdventureERC721Initializer is IERC165 {
/**
* @notice Initializes parameters of {AdventureERC721} contracts
*/
function initializeAdventureERC721(uint256 maxSimultaneousQuests_) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 36 : IERC721Initializer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
/**
* @title IERC721Initializer
* @author Limit Break, Inc.
* @notice Allows cloneable contracts to include OpenZeppelin ERC721 functionality.
* @dev See https://eips.ethereum.org/EIPS/eip-1167 for details.
*/
interface IERC721Initializer is IERC721 {
/**
* @notice Initializes parameters of {ERC721} contracts
*/
function initializeERC721(string memory name_, string memory symbol_) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 36 : IOperatorFiltererInitializer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
/**
* @title IOperatorFiltererInitializer
* @author Limit Break, Inc.
* @notice Allows cloneable contracts to include OpenSea's OperatorFilterer functionality.
* @dev See https://eips.ethereum.org/EIPS/eip-1167 for details.
*/
interface IOperatorFiltererInitializer {
/**
* @notice Initializes parameters of OperatorFilterer contracts
*/
function initializeOperatorFilterer(address subscriptionOrRegistrantToCopy, bool subscribe) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 36 : IOwnableInitializer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @title IOwnableInitializer
* @author Limit Break, Inc.
* @notice Allows cloneable contracts to include OpenZeppelin Ownable functionality.
* @dev See https://eips.ethereum.org/EIPS/eip-1167 for details.
*/
interface IOwnableInitializer is IERC165 {
/**
* @notice Initializes the contract owner to the specified address
*/
function initializeOwner(address owner_) external;
/**
* @notice Transfers ownership of the contract to the specified owner
*/
function transferOwnership(address newOwner) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 36 : IRoyaltiesInitializer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @title IRoyaltiesInitializer
* @author Limit Break, Inc.
* @notice Allows cloneable contracts to include OpenZeppelin ERC2981 functionality.
* @dev See https://eips.ethereum.org/EIPS/eip-1167 for details.
*/
interface IRoyaltiesInitializer is IERC165 {
/**
* @notice Initializes royalty parameters
*/
function initializeRoyalties(address receiver, uint96 feeNumerator) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 36 : IURIInitializer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
/**
* @title IURIInitializer
* @author Limit Break, Inc.
* @notice Allows cloneable contracts to include a base uri and suffix uri.
* @dev See https://eips.ethereum.org/EIPS/eip-1167 for details.
*/
interface IURIInitializer is IERC165 {
/**
* @notice Initializes uri parameters
*/
function initializeURI(string memory baseURI_, string memory suffixURI_) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 36 : IWrapperERC721Initializer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
/**
* @title IWrapperERC721Initializer
* @author Limit Break, Inc.
* @notice Allows cloneable contracts to include Wrapper ERC721 functionality.
* @dev See https://eips.ethereum.org/EIPS/eip-1167 for details.
*/
interface IWrapperERC721Initializer {
/**
* @notice Initializes parameters of {WrapperERC721} contracts
*/
function initializeWrapperERC721(address wrappedCollection_) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 36 : IOperatorFilterRegistry.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
interface IOperatorFilterRegistry {
function isOperatorAllowed(address registrant, address operator) external view returns (bool);
function register(address registrant) external;
function registerAndSubscribe(address registrant, address subscription) external;
function registerAndCopyEntries(address registrant, address registrantToCopy) external;
function unregister(address addr) external;
function updateOperator(address registrant, address operator, bool filtered) external;
function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
function subscribe(address registrant, address registrantToSubscribe) external;
function unsubscribe(address registrant, bool copyExistingEntries) external;
function subscriptionOf(address addr) external returns (address registrant);
function subscribers(address registrant) external returns (address[] memory);
function subscriberAt(address registrant, uint256 index) external returns (address);
function copyEntriesOf(address registrant, address registrantToCopy) external;
function isOperatorFiltered(address registrant, address operator) external returns (bool);
function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
function filteredOperators(address addr) external returns (address[] memory);
function filteredCodeHashes(address addr) external returns (bytes32[] memory);
function filteredOperatorAt(address registrant, uint256 index) external returns (address);
function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 36 : InitializableDefaultOperatorFilterer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import {InitializableOperatorFilterer} from "./InitializableOperatorFilterer.sol";
/**
* @title InitializableDefaultOperatorFilterer
* @notice Inherits from InitializableOperatorFilterer and automatically subscribes to the default OpenSea subscription during initialization.
*/
abstract contract InitializableDefaultOperatorFilterer is InitializableOperatorFilterer {
/// @dev The default subscription address
address internal constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);
/// @dev The parameters are ignored, and the default subscription values are used instead.
function initializeOperatorFilterer(address /*subscriptionOrRegistrantToCopy*/, bool /*subscribe*/) public virtual override {
super.initializeOperatorFilterer(DEFAULT_SUBSCRIPTION, true);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 36 : InitializableOperatorFilterer.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import {IOperatorFilterRegistry} from "./IOperatorFilterRegistry.sol";
import {IOperatorFiltererInitializer} from "../../initializable/IOperatorFiltererInitializer.sol";
/**
* @title InitializableOperatorFilterer
* @notice Abstract contract whose initializer function automatically registers and optionally subscribes to or copies another
* registrant's entries in the OperatorFilterRegistry.
* @dev This smart contract is meant to be inherited by token contracts so they can use the following:
* - `onlyAllowedOperator` modifier for `transferFrom` and `safeTransferFrom` methods.
* - `onlyAllowedOperatorApproval` modifier for `approve` and `setApprovalForAll` methods.
* This is safe for use in EIP-1167 clones
*/
abstract contract InitializableOperatorFilterer is IOperatorFiltererInitializer {
error OperatorNotAllowed(address operator);
IOperatorFilterRegistry public constant OPERATOR_FILTER_REGISTRY = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
modifier onlyAllowedOperator(address from) virtual {
// Allow spending tokens from addresses with balance
// Note that this still allows listings and marketplaces with escrow to transfer tokens if transferred
// from an EOA.
if (from != msg.sender) {
_checkFilterOperator(msg.sender);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 36 : BlacklistedTransferWrapperAdventureNFT.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./WrapperAdventureNFT.sol";
import "../opensea/operator-filter-registry/InitializableDefaultOperatorFilterer.sol";
/**
* @title BlacklistedTransferWrapperAdventureNFT
* @author Limit Break, Inc.
* @notice Extends AdventureNFT, adding token wrapping and blacklisted transfer mechanisms.
*/
abstract contract BlacklistedTransferWrapperAdventureNFT is WrapperAdventureNFT, InitializableDefaultOperatorFilterer {
function approve(address operator, uint256 tokenId) public virtual override onlyAllowedOperatorApproval(operator) {
super.approve(operator, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override onlyAllowedOperator(from) {
super.safeTransferFrom(from, to, tokenId);
}
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override onlyAllowedOperator(from) {
super.safeTransferFrom(from, to, tokenId, data);
}
function transferFrom(address from, address to, uint256 tokenId) public virtual override onlyAllowedOperator(from) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 36 : WrapperAdventureNFT.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "../adventures/AdventureNFT.sol";
import "../utils/tokens/WrapperERC721.sol";
/**
* @title WrapperAdventureNFT
* @author Limit Break, Inc.
* @notice Extends AdventureNFT, adding token rental mechanisms.
*/
abstract contract WrapperAdventureNFT is WrapperERC721, AdventureNFT {
using Strings for uint256;
function supportsInterface(bytes4 interfaceId) public view virtual override(AdventureNFT, WrapperERC721) returns (bool) {
return super.supportsInterface(interfaceId);
}
/// @notice Returns tokenURI if baseURI is set
function tokenURI(uint256 tokenId) public view virtual override(AdventureNFT, ERC721) returns (string memory) {
if(!_exists(tokenId)) {
revert NonexistentToken();
}
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 36 : WithdrawETH.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./access/InitializableOwnable.sol";
/**
* @title WithdrawETH
* @author Limit Break, Inc.
* @notice A mix-in that can be combined with any ownable contract to enable the contract owner to withdraw ETH from the contract.
*/
abstract contract WithdrawETH is InitializableOwnable {
error AmountMustBeGreaterThanZero();
error RecipientMustBeNonZeroAddress();
error InsufficientBalance();
error WithdrawalUnsuccessful();
/// @notice Allows contract owner to withdraw ETH that has been paid into the contract.
/// This allows inadvertantly lost ETH to be recovered and it also allows the contract owner
/// To collect funds that have been properly paid into the contract over time.
///
/// Throws when caller is not the contract owner.
/// Throws when the specified amount is zero.
/// Throws when the specified recipient is zero address.
/// Throws when the current balance in this contract is less than the specified amount.
/// Throws when the ETH transfer is unsuccessful.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 36 : InitializableOwnable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "../../initializable/IOwnableInitializer.sol";
import "@openzeppelin/contracts/utils/Context.sol";
error CallerIsNotTheContractOwner();
error NewOwnerIsTheZeroAddress();
error OwnerAlreadyInitialized();
/**
* @title InitializableOwnable
* @author Limit Break, Inc. and OpenZeppelin
* @notice A tailored version of the {Ownable} permissions component from OpenZeppelin that is compatible with EIP-1167.
* @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.
*
* Based on OpenZeppelin contracts commit hash 3dac7bbed7b4c0dbf504180c33e8ed8e350b93eb.
*
* 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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 36 : IWrapperERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/utils/introspection/IERC165.sol";
interface IWrapperERC721 is IERC165 {
function getWrappedCollectionAddress() external view returns (address);
function canUnstake(uint256 tokenId) external view returns (bool);
function stake(uint256 tokenId) external payable;
function unstake(uint256 tokenId) external payable;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 36 : InitializableERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "../access/InitializableOwnable.sol";
import "../../initializable/IERC721Initializer.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
error AlreadyInitializedERC721();
/**
* @title InitializableERC721
* @author Limit Break, Inc.
* @notice Wraps OpenZeppelin ERC721 implementation and makes it compatible with EIP-1167.
* @dev Because OpenZeppelin's `_name` and `_symbol` storage variables are private and inaccessible,
* this contract defines two new storage variables `_contractName` and `_contractSymbol` and returns them
* from the `name()` and `symbol()` functions instead.
*/
abstract contract InitializableERC721 is InitializableOwnable, ERC721, IERC721Initializer {
/// @notice Specifies whether or not the contract is initialized
bool private initializedERC721;
// Token name
string internal _contractName;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 36 : WrapperERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./InitializableERC721.sol";
import "./IWrapperERC721.sol";
import "../WithdrawETH.sol";
import "../../initializable/IWrapperERC721Initializer.sol";
error AlreadyInitializedWrapperERC721();
error AmountMustBeGreaterThanZero();
error CallerNotOwnerOfWrappingToken();
error CallerNotOwnerOfWrappedToken();
error DefaultImplementationOfStakeDoesNotAcceptPayment();
error DefaultImplementationOfUnstakeDoesNotAcceptPayment();
error InvalidERC721Collection();
error InsufficientBalance();
error QuantityMustBeGreaterThanZero();
error RecipientMustBeNonZeroAddress();
error WithdrawalUnsuccessful();
abstract contract WrapperERC721 is InitializableERC721, WithdrawETH, IWrapperERC721, IWrapperERC721Initializer {
/// @dev Points to an external ERC721 contract that will be wrapped via staking.
IERC721 private wrappedCollection;
/// @dev Emitted when a user stakes their token to receive a creator token.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 36 : IERC2981.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)
pragma solidity ^0.8.0;
import "../utils/introspection/IERC165.sol";
/**
* @dev Interface for the NFT Royalty Standard.
*
* A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
* support for royalty payments across all NFT marketplaces and ecosystem participants.
*
* _Available since v4.5._
*/
interface IERC2981 is IERC165 {
/**
* @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
* exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
*/
function royaltyInfo(uint256 tokenId, uint256 salePrice)
external
view
returns (address receiver, uint256 royaltyAmount);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 36 : ERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
pragma solidity ^0.8.0;
import "./IERC721.sol";
import "./IERC721Receiver.sol";
import "./extensions/IERC721Metadata.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/Strings.sol";
import "../../utils/introspection/ERC165.sol";
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 27 of 36 : IERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 28 of 36 : IERC721Receiver.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 29 of 36 : IERC721Metadata.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 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);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 30 of 36 : ERC2981.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol)
pragma solidity ^0.8.0;
import "../../interfaces/IERC2981.sol";
import "../../utils/introspection/ERC165.sol";
/**
* @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
*
* Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
* specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
*
* Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
* fee is specified in basis points by default.
*
* IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
* https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
* voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
*
* _Available since v4.5._
*/
abstract contract ERC2981 is IERC2981, ERC165 {
struct RoyaltyInfo {
address receiver;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 31 of 36 : Address.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 32 of 36 : Context.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 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;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 33 of 36 : Strings.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 34 of 36 : ERC165.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 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) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 35 of 36 : IERC165.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 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);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 36 of 36 : IBurnableToken.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// SPDX-License-Identifier: MIT
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
pragma solidity ^0.8.0;
/**
* @title Interface for a Burnable ERC721 Token
*/
interface IBurnableToken is IERC721 {
/**
* @dev Burns `tokenId`. See {ERC721-_burn}.
*
* Requirements:
*
* - The caller must own `tokenId` or be an approved operator.
*/
function burn(uint256 tokenId) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"remappings": [
"@creator-token-contracts/=lib/creator-token-contracts/",
"@hypermint/=lib/hypermint-contracts/",
"@limit-break/=lib/limit-break-contracts/contracts/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"ERC721A/=lib/ERC721A/contracts/",
"creator-token-contracts/=lib/creator-token-contracts/contracts/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc721a/=lib/ERC721A/",
"forge-std/=lib/forge-std/src/",
"hypermint-contracts/=lib/hypermint-contracts/contracts/",
"limit-break-contracts/=lib/limit-break-contracts/contracts/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dragonEggAddress","type":"address"},{"internalType":"address","name":"royaltyReceiver_","type":"address"},{"internalType":"uint96","name":"royaltyFeeNumerator_","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AdventureApprovalToCaller","type":"error"},{"inputs":[],"name":"AdventureIsStillWhitelisted","type":"error"},{"inputs":[],"name":"AlreadyInitializedAdventureERC721","type":"error"},{"inputs":[],"name":"AlreadyInitializedERC721","type":"error"},{"inputs":[],"name":"AlreadyInitializedRoyalties","type":"error"},{"inputs":[],"name":"AlreadyInitializedURI","type":"error"},{"inputs":[],"name":"AlreadyInitializedWrapperERC721","type":"error"},{"inputs":[],"name":"AlreadyOnQuest","type":"error"},{"inputs":[],"name":"AlreadyWhitelisted","type":"error"},{"inputs":[],"name":"AmountMustBeGreaterThanZero","type":"error"},{"inputs":[],"name":"AnActiveQuestIsPreventingTransfers","type":"error"},{"inputs":[],"name":"ArrayIndexOverflowsUint128","type":"error"},{"inputs":[],"name":"CallerIsNotTheContractOwner","type":"error"},{"inputs":[],"name":"CallerNotAWhitelistedAdventure","type":"error"},{"inputs":[],"name":"CallerNotApprovedForAdventure","type":"error"},{"inputs":[],"name":"CallerNotOwnerOfWrappingToken","type":"error"},{"inputs":[],"name":"CallerNotTokenOwner","type":"error"},{"inputs":[],"name":"DefaultImplementationOfStakeDoesNotAcceptPayment","type":"error"},{"inputs":[],"name":"DefaultImplementationOfUnstakeDoesNotAcceptPayment","type":"error"},{"inputs":[],"name":"DigiDaigakuBabyDragons__CallerNotOwnerOfDragonEgg","type":"error"},{"inputs":[],"name":"DigiDaigakuBabyDragons__CannotSetDragonEggsToZeroAddress","type":"error"},{"inputs":[],"name":"DigiDaigakuBabyDragons__MustProvideAtLeastOneTokenId","type":"error"},{"inputs":[],"name":"DigiDaigakuBabyDragons__StakeDoesNotAcceptPayment","type":"error"},{"inputs":[],"name":"ExceedsMaxRoyaltyFee","type":"error"},{"inputs":[],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"InvalidAdventureContract","type":"error"},{"inputs":[],"name":"InvalidERC721Collection","type":"error"},{"inputs":[],"name":"MaxSimultaneousQuestsCannotBeZero","type":"error"},{"inputs":[],"name":"MaxSimultaneousQuestsExceeded","type":"error"},{"inputs":[],"name":"NewOwnerIsTheZeroAddress","type":"error"},{"inputs":[],"name":"NonexistentToken","type":"error"},{"inputs":[],"name":"NotOnQuest","type":"error"},{"inputs":[],"name":"NotWhitelisted","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerAlreadyInitialized","type":"error"},{"inputs":[],"name":"QuestIdOutOfRange","type":"error"},{"inputs":[],"name":"RecipientMustBeNonZeroAddress","type":"error"},{"inputs":[],"name":"TooManyActiveQuests","type":"error"},{"inputs":[],"name":"WithdrawalUnsuccessful","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"AdventureApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"adventure","type":"address"},{"indexed":false,"internalType":"bool","name":"whitelisted","type":"bool"}],"name":"AdventureWhitelistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseTokenURI","type":"string"}],"name":"BaseURISet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"tokenOwner","type":"address"},{"indexed":true,"internalType":"address","name":"adventure","type":"address"},{"indexed":false,"internalType":"uint256","name":"questId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"active","type":"bool"},{"indexed":false,"internalType":"bool","name":"booted","type":"bool"}],"name":"QuestUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"RoyaltySet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"suffixURI","type":"string"}],"name":"SuffixURISet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"Unstaked","type":"event"},{"inputs":[],"name":"OPERATOR_FILTER_REGISTRY","outputs":[{"internalType":"contract IOperatorFilterRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"activeQuestList","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"activeQuestLookup","outputs":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint32","name":"questId","type":"uint32"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"uint32","name":"arrayIndex","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"adventureBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"adventureSafeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"adventureTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"areAdventuresApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"adventure","type":"address"}],"name":"bootFromAllQuests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"canUnstake","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"questId","type":"uint256"}],"name":"enterQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"questId","type":"uint256"}],"name":"exitQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"adventure","type":"address"}],"name":"getActiveQuests","outputs":[{"components":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"uint32","name":"questId","type":"uint32"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"uint32","name":"arrayIndex","type":"uint32"}],"internalType":"struct Quest[]","name":"activeQuests","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"adventure","type":"address"}],"name":"getQuestCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"adventure","type":"address"},{"internalType":"uint256","name":"questId","type":"uint256"}],"name":"getTimeOnQuest","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWrappedCollectionAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSimultaneousQuests_","type":"uint256"}],"name":"initializeAdventureERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"name":"initializeERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"initializeOperatorFilterer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"initializeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"initializeRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"string","name":"suffixURI_","type":"string"}],"name":"initializeURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wrappedCollection_","type":"address"}],"name":"initializeWrapperERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAdventureWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"adventure","type":"address"},{"internalType":"uint256","name":"questId","type":"uint256"}],"name":"isParticipatingInQuest","outputs":[{"internalType":"bool","name":"participatingInQuest","type":"bool"},{"internalType":"uint256","name":"startTimestamp","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSimultaneousQuests","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setAdventuresApprovedForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setRoyaltyInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"suffixURI_","type":"string"}],"name":"setSuffixURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"suffixURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"adventure","type":"address"}],"name":"unwhitelistAdventure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"adventure","type":"address"}],"name":"userExitAllQuests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"adventure","type":"address"},{"internalType":"uint256","name":"questId","type":"uint256"}],"name":"userExitQuest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adventure","type":"address"}],"name":"whitelistAdventure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAdventureList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistedAdventures","outputs":[{"internalType":"bool","name":"isWhitelisted","type":"bool"},{"internalType":"uint128","name":"arrayIndex","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a090815262000028916018919062000889565b503480156200003657600080fd5b5060405162004e3838038062004e3883398101604081905262000059916200094c565b604080516020808201835260008083528351918201909352918252906200008033620001c6565b81516200009590600190602085019062000889565b508051620000ab90600290602084019062000889565b5050506001600160a01b038316620000d6576040516392356e9d60e01b815260040160405180910390fd5b620001396040518060400160405280601681526020017f4469676944616967616b7542616279447261676f6e7300000000000000000000815250604051806040016040528060048152602001631112509160e21b8152506200021660201b60201c565b620001796040518060600160405280602e815260200162004e0a602e9139604080518082019091526005815264173539b7b760d91b602082015262000282565b620001856064620002df565b62000191828262000331565b620001b2733cc6cdda760b79bafa08df41ecfa224f810dceb660016200037d565b620001bd83620003ad565b50505062000a66565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b62000220620004bf565b60075460ff161562000245576040516376f1a0b360e01b815260040160405180910390fd5b81516200025a90600890602085019062000889565b5080516200027090600990602084019062000889565b50506007805460ff1916600117905550565b6200028c620004bf565b601654610100900460ff1615620002b657604051635b79f68360e01b815260040160405180910390fd5b620002c182620004ed565b620002cc8162000549565b50506016805461ff001916610100179055565b620002e9620004bf565b600d5460ff16156200030e57604051630e009cb560e11b815260040160405180910390fd5b62000319816200059a565b600f55600d805460ff19166001908117909155600e55565b6200033b620004bf565b60165460ff16156200036057604051639383013960e01b815260040160405180910390fd5b6200036c8282620005df565b50506016805460ff19166001179055565b620003a9733cc6cdda760b79bafa08df41ecfa224f810dceb660016200067060201b620020361760201c565b5050565b620003b7620004bf565b600a546001600160a01b031615620003e257604051636be9ab9b60e11b815260040160405180910390fd5b60006001600160a01b0382163b156200047d576040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b1580156200043c57600080fd5b505afa9250505080156200046f575060408051601f3d908101601f191682019092526200046c91810190620009a6565b60015b6200047a576200047d565b90505b806200049c57604051634321591760e11b815260040160405180910390fd5b50600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314620004eb5760405163097b5fdb60e31b815260040160405180910390fd5b565b620004f7620004bf565b80516200050c90601790602084019062000889565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6816040516200053e9190620009d1565b60405180910390a150565b62000553620004bf565b80516200056890601890602084019062000889565b507f65ccd57f8a46e7a6cfc4d214d84094e8ba5561ab50fd328f26e4c44052ffeba0816040516200053e9190620009d1565b80620005b95760405163318ccdef60e11b815260040160405180910390fd5b6064811115620005dc57604051639cb75faf60e01b815260040160405180910390fd5b50565b620005e9620004bf565b6127106001600160601b03821611156200061657604051631557c04f60e21b815260040160405180910390fd5b62000622828262000784565b604080516001600160a01b03841681526001600160601b03831660208201527f23813f5ad446622633cb58c75ceef768a2111751b0f30477a63e06fcaedcff60910160405180910390a15050565b6daaeb6d7670e522a718067333cd4e3b15620003a95780156200070157604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015620006e457600080fd5b505af1158015620006f9573d6000803e3d6000fd5b505050505050565b6001600160a01b03821615620007525760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401620006c9565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401620006c9565b6127106001600160601b0382161115620007f85760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620008505760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401620007ef565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217601455565b828054620008979062000a29565b90600052602060002090601f016020900481019282620008bb576000855562000906565b82601f10620008d657805160ff191683800117855562000906565b8280016001018555821562000906579182015b8281111562000906578251825591602001919060010190620008e9565b506200091492915062000918565b5090565b5b8082111562000914576000815560010162000919565b80516001600160a01b03811681146200094757600080fd5b919050565b6000806000606084860312156200096257600080fd5b6200096d846200092f565b92506200097d602085016200092f565b60408501519092506001600160601b03811681146200099b57600080fd5b809150509250925092565b600060208284031215620009b957600080fd5b81518015158114620009ca57600080fd5b9392505050565b600060208083528351808285015260005b8181101562000a0057858101830151858201604001528201620009e2565b8181111562000a13576000604083870101525b50601f01601f1916929092016040019392505050565b600181811c9082168062000a3e57607f821691505b6020821081141562000a6057634e487b7160e01b600052602260045260246000fd5b50919050565b6143948062000a766000396000f3fe6080604052600436106103765760003560e01c80637e10b35b116101d1578063aa6cab5a11610102578063c87b56dd116100a0578063e370ab461161006f578063e370ab4614610b64578063e985e9c514610b84578063f1e923c514610bcd578063f2fde38b14610bed57600080fd5b8063c87b56dd14610aef578063d147c97a14610b0f578063d547cfb714610b2f578063e2989f4c14610b4457600080fd5b8063b3bcea48116100dc578063b3bcea4814610a7a578063b88d4fde14610a8f578063c05e2f4414610aaf578063c61bd21414610acf57600080fd5b8063aa6cab5a146109db578063aca139f714610a3a578063b39fa00014610a5a57600080fd5b8063916237181161016f5780639bc17ea4116101495780639bc17ea41461096a5780639f8ed6051461098a578063a22cb465146109a8578063a694fc3a146109c857600080fd5b8063916237181461091557806395d89b411461093557806395fa0ff51461094a57600080fd5b8063869f9110116101ab578063869f9110146108a25780638be18e57146108b75780638c5f36bb146108d75780638da5cb5b146108f757600080fd5b80637e10b35b146108195780637f1a5ce114610839578063816a15011461088257600080fd5b80632e17de78116102ab57806351dadc28116102495780636352211e116102235780636352211e1461076e578063662cca401461078e578063703fa929146107ae57806370a08231146107eb57600080fd5b806351dadc28146106f957806353401df91461072e57806355f804b31461074e57600080fd5b806341f434341161028557806341f434341461067757806342842e0e146106995780634782f779146106b95780634e02c078146106d957600080fd5b80632e17de781461060b5780632ebb386a1461061e578063301be7401461063e57600080fd5b80631134055711610318578063230f436d116102f2578063230f436d1461057957806323b872dd1461058c578063247946c9146105ac5780632a55205a146105cc57600080fd5b8063113405571461049957806311ad408114610539578063225848cf1461055957600080fd5b8063070cba1711610354578063070cba17146103f4578063081812fc14610414578063095ea7b31461044c5780630f3d911c1461046c57600080fd5b806301ffc9a71461037b57806302fa7c47146103b057806306fdde03146103d2575b600080fd5b34801561038757600080fd5b5061039b610396366004613ae0565b610c0d565b60405190151581526020015b60405180910390f35b3480156103bc57600080fd5b506103d06103cb366004613b12565b610c1e565b005b3480156103de57600080fd5b506103e7610caa565b6040516103a79190613baf565b34801561040057600080fd5b506103d061040f366004613bc2565b610d3c565b34801561042057600080fd5b5061043461042f366004613bdf565b610f42565b6040516001600160a01b0390911681526020016103a7565b34801561045857600080fd5b506103d0610467366004613bf8565b610f69565b34801561047857600080fd5b5061048c610487366004613c24565b610f82565b6040516103a79190613c49565b3480156104a557600080fd5b506105036104b4366004613cc1565b601360209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff61010082048116916001600160401b03600160281b82041691600160681b9091041684565b60408051941515855263ffffffff93841660208601526001600160401b03909216918401919091521660608201526080016103a7565b34801561054557600080fd5b506103d0610554366004613d0c565b611182565b34801561056557600080fd5b506103d0610574366004613d3c565b6111a2565b6103d0610587366004613d6a565b6111c1565b34801561059857600080fd5b506103d06105a7366004613dde565b611230565b3480156105b857600080fd5b506103d06105c7366004613eca565b611255565b3480156105d857600080fd5b506105ec6105e7366004613d0c565b6112ab565b604080516001600160a01b0390931683526020830191909152016103a7565b6103d0610619366004613bdf565b611357565b34801561062a57600080fd5b506103d0610639366004613c24565b611447565b34801561064a57600080fd5b5061039b610659366004613bc2565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561068357600080fd5b506104346daaeb6d7670e522a718067333cd4e81565b3480156106a557600080fd5b506103d06106b4366004613dde565b611465565b3480156106c557600080fd5b506103d06106d4366004613bf8565b61148a565b3480156106e557600080fd5b506103d06106f4366004613f2d565b61156c565b34801561070557600080fd5b50610719610714366004613f2d565b611589565b60405163ffffffff90911681526020016103a7565b34801561073a57600080fd5b506103d0610749366004613d0c565b6115df565b34801561075a57600080fd5b506103d0610769366004613f54565b6115fb565b34801561077a57600080fd5b50610434610789366004613bdf565b611651565b34801561079a57600080fd5b506103d06107a9366004613bc2565b6116b6565b3480156107ba57600080fd5b506107ce6107c9366004613f2d565b6117bd565b6040805193151584526020840192909252908201526060016103a7565b3480156107f757600080fd5b5061080b610806366004613bc2565b611841565b6040519081526020016103a7565b34801561082557600080fd5b506103d0610834366004613bc2565b6118c7565b34801561084557600080fd5b5061039b610854366004613f88565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205460ff1690565b34801561088e57600080fd5b5061080b61089d366004613f2d565b611a80565b3480156108ae57600080fd5b50600f5461080b565b3480156108c357600080fd5b506103d06108d2366004613f54565b611ab5565b3480156108e357600080fd5b506103d06108f2366004613bc2565b611b00565b34801561090357600080fd5b506000546001600160a01b0316610434565b34801561092157600080fd5b5061080b610930366004613c24565b611b36565b34801561094157600080fd5b506103e7611b5e565b34801561095657600080fd5b506103d0610965366004613b12565b611b6d565b34801561097657600080fd5b506103d0610985366004613bdf565b611bb4565b34801561099657600080fd5b50600a546001600160a01b0316610434565b3480156109b457600080fd5b506103d06109c3366004613d3c565b611bdb565b6103d06109d6366004613bdf565b611bef565b3480156109e757600080fd5b50610a1b6109f6366004613bc2565b600c6020526000908152604090205460ff81169061010090046001600160801b031682565b6040805192151583526001600160801b039091166020830152016103a7565b348015610a4657600080fd5b506103d0610a55366004613dde565b611c0a565b348015610a6657600080fd5b506103d0610a75366004613bdf565b611c48565b348015610a8657600080fd5b506103e7611c95565b348015610a9b57600080fd5b506103d0610aaa366004613fb6565b611d23565b348015610abb57600080fd5b506103d0610aca366004613d3c565b611d50565b348015610adb57600080fd5b5061039b610aea366004613bdf565b611de9565b348015610afb57600080fd5b506103e7610b0a366004613bdf565b611e96565b348015610b1b57600080fd5b506103d0610b2a366004613eca565b611f2d565b348015610b3b57600080fd5b506103e7611f92565b348015610b5057600080fd5b50610434610b5f366004613bdf565b611f9f565b348015610b7057600080fd5b506103d0610b7f366004613dde565b611fc9565b348015610b9057600080fd5b5061039b610b9f366004613f88565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610bd957600080fd5b506103d0610be8366004613c24565b611fea565b348015610bf957600080fd5b506103d0610c08366004613bc2565b612007565b6000610c1882612111565b92915050565b610c26612151565b6127106001600160601b0382161115610c5257604051631557c04f60e21b815260040160405180910390fd5b610c5c828261217e565b604080516001600160a01b03841681526001600160601b03831660208201527f23813f5ad446622633cb58c75ceef768a2111751b0f30477a63e06fcaedcff60910160405180910390a15050565b606060088054610cb990614035565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590614035565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b5050505050905090565b610d44612151565b6001600160a01b0381166000908152600c602052604090205460ff16610d7d57604051630b094f2760e31b815260040160405180910390fd5b6001600160a01b0381166000908152600c6020526040812054600b546101009091046001600160801b03169190610db690600190614086565b905080826001600160801b031614610eb257600b8181548110610ddb57610ddb61409d565b600091825260209091200154600b80546001600160a01b03909216916001600160801b038516908110610e1057610e1061409d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600c6000600b856001600160801b031681548110610e5f57610e5f61409d565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546001600160801b03929092166101000270ffffffffffffffffffffffffffffffff00199092169190911790555b600b805480610ec357610ec36140b3565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600c8252604080842080546001600160881b031916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610f4d8261227b565b506000908152600560205260409020546001600160a01b031690565b81610f73816122da565b610f7d83836123a2565b505050565b60606000610f908484611b36565b9050806001600160401b03811115610faa57610faa613e1f565b604051908082528060200260200182016040528015610ffc57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610fc85790505b5060008581526012602090815260408083206001600160a01b038816845282528083208054825181850281018501909352808352949650929390929183018282801561109357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116110565790505b5050505050905060005b828110156111795760008681526013602090815260408083206001600160a01b0389168452909152812083519091908490849081106110de576110de61409d565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff81161515825261010081048516928201929092526001600160401b03600160281b83041692810192909252600160681b90049091166060820152845185908390811061115d5761115d61409d565b602002602001018190525080611172906140c9565b905061109d565b50505092915050565b61118a6124b3565b611193826124d9565b61119e823383612508565b5050565b61119e733cc6cdda760b79bafa08df41ecfa224f810dceb66001612036565b60006111d5600a546001600160a01b031690565b9050816111f55760405163e3a2b34560e01b815260040160405180910390fd5b60005b8281101561122a576112228484838181106112155761121561409d565b90506020020135836128d7565b6001016111f8565b50505050565b826001600160a01b038116331461124a5761124a336122da565b61122a848484612a26565b61125d612151565b601654610100900460ff161561128657604051635b79f68360e01b815260040160405180910390fd5b61128f826115fb565b61129881611ab5565b50506016805461ff001916610100179055565b60008281526015602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916113205750604080518082019091526014546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101516000906127109061133f906001600160601b0316876140e4565b6113499190614119565b915196919550909350505050565b600061136282611651565b90506001600160a01b038116331461138d576040516367788f2960e01b815260040160405180910390fd5b6113978234612a57565b6113a082612a76565b6040516001600160a01b0382169083907f81b0ac4b13aab1ab3b86d524dd62924e99a9d694e94e235f627bb41589717ff790600090a3600a546040516323b872dd60e01b81523060048201526001600160a01b03838116602483015260448201859052909116906323b872dd906064015b600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050505050565b61145081612b1d565b61145982612b57565b61119e82826000612b88565b826001600160a01b038116331461147f5761147f336122da565b61122a848484612e46565b611492612151565b806114b057604051635e85ae7360e01b815260040160405180910390fd5b6001600160a01b0382166114d7576040516344a0326d60e11b815260040160405180910390fd5b804710156114f857604051631e9acf1760e31b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611545576040519150601f19603f3d011682016040523d82523d6000602084013e61154a565b606091505b5050905080610f7d57604051630938e72560e31b815260040160405180910390fd5b61157582612b1d565b61157e83612b57565b610f7d838383612508565b601260205282600052604060002060205281600052604060002081815481106115b157600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6115e76124b3565b6115f0826124d9565b61119e823383612e61565b611603612151565b8051611616906017906020840190613a10565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6816040516116469190613baf565b60405180910390a150565b6000818152600360205260408120546001600160a01b031680610c185760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064015b60405180910390fd5b6116be612151565b600a546001600160a01b0316156116e857604051636be9ab9b60e11b815260040160405180910390fd5b60006001600160a01b0382163b1561177c576040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561174057600080fd5b505afa925050508015611770575060408051601f3d908101601f1916820190925261176d9181019061412d565b60015b6117795761177c565b90505b8061179a57604051634321591760e11b815260040160405180910390fd5b50600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808063ffffffff8411156117e6576040516307f159d160e31b815260040160405180910390fd5b50505060009283526013602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff811692600160281b82046001600160401b031692600160681b90920490911690565b60006001600160a01b0382166118ab5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016116ad565b506001600160a01b031660009081526004602052604090205490565b6118cf612151565b6001600160a01b0381166000908152600c602052604090205460ff16156119095760405163b73e95e160e01b815260040160405180910390fd5b6040516301ffc9a760e01b81526325df830760e21b60048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611987919061412d565b6119a4576040516390c51dd760e01b815260040160405180910390fd5b600b546001600160801b038111156119cf57604051636ab8f7f960e11b815260040160405180910390fd5b6001600160a01b0382166000818152600c60209081526040808320805460016001600160881b03199091166101006001600160801b03891602178117909155600b8054808301825594527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a25050565b6000806000611a908686866117bd565b509150915081611aa1576000611aab565b611aab8142614086565b9695505050505050565b611abd612151565b8051611ad0906018906020840190613a10565b507f65ccd57f8a46e7a6cfc4d214d84094e8ba5561ab50fd328f26e4c44052ffeba0816040516116469190613baf565b6000546001600160a01b031615611b2a57604051631360e86560e31b815260040160405180910390fd5b611b33816130f1565b50565b60009182526012602090815260408084206001600160a01b0393909316845291905290205490565b606060098054610cb990614035565b611b75612151565b60165460ff1615611b9957604051639383013960e01b815260040160405180910390fd5b611ba38282610c1e565b50506016805460ff19166001179055565b611bbc6124b3565b611bc5816124d9565b6002600e55611bd381612a76565b506001600e55565b81611be5816122da565b610f7d8383613141565b611b3381611c05600a546001600160a01b031690565b6128d7565b611c126124b3565b611c1b816124d9565b6002600e81905550611c3e8383836040518060200160405280600081525061314c565b50506001600e5550565b611c50612151565b600d5460ff1615611c7457604051630e009cb560e11b815260040160405180910390fd5b611c7d8161317f565b600f55600d805460ff19166001908117909155600e55565b60188054611ca290614035565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614035565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b505050505081565b836001600160a01b0381163314611d3d57611d3d336122da565b611d49858585856131bf565b5050505050565b336001600160a01b038316811415611d7b576040516353ff677360e11b815260040160405180910390fd5b6001600160a01b03818116600081815260116020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c05691015b60405180910390a3505050565b6000818152600360205260408120546001600160a01b031615158015610c185750600a546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e9060240160206040518083038186803b158015611e4e57600080fd5b505afa158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061414a565b6001600160a01b03161492915050565b6000818152600360205260409020546060906001600160a01b0316611ece5760405163163a09e160e31b815260040160405180910390fd5b6000611ed86131f1565b90506000815111611ef85760405180602001604052806000815250611f26565b80611f0284613200565b6018604051602001611f1693929190614167565b6040516020818303038152906040525b9392505050565b611f35612151565b60075460ff1615611f59576040516376f1a0b360e01b815260040160405180910390fd5b8151611f6c906008906020850190613a10565b508051611f80906009906020840190613a10565b50506007805460ff1916600117905550565b60178054611ca290614035565b600b8181548110611faf57600080fd5b6000918252602090912001546001600160a01b0316905081565b611fd16124b3565b611fda816124d9565b6002600e55611c3e838383613305565b611ff2612151565b611ffb81612b1d565b61119e82826001612b88565b61200f612151565b6001600160a01b038116611b2a5760405163f82d512f60e01b815260040160405180910390fd5b6daaeb6d7670e522a718067333cd4e3b1561119e57801561209157604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe90604401611411565b6001600160a01b038216156120e05760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401611411565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401611411565b60006001600160e01b031982166395fa0ff560e01b148061214257506001600160e01b0319821663247946c960e01b145b80610c185750610c18826134ac565b6000546001600160a01b0316331461217c5760405163097b5fdb60e31b815260040160405180910390fd5b565b6127106001600160601b03821611156121ec5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016116ad565b6001600160a01b0382166122425760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016116ad565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217601455565b6000818152600360205260409020546001600160a01b0316611b335760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016116ad565b6daaeb6d7670e522a718067333cd4e3b15611b3357604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c61711349060440160206040518083038186803b15801561234257600080fd5b505afa158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a919061412d565b611b3357604051633b79c77360e21b81526001600160a01b03821660048201526024016116ad565b60006123ad82611651565b9050806001600160a01b0316836001600160a01b0316141561241b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016116ad565b336001600160a01b038216148061243757506124378133610b9f565b6124a95760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016116ad565b610f7d83836134d1565b6124bc33610659565b61217c57604051639eea455560e01b815260040160405180910390fd5b6124eb6124e582611651565b33610854565b611b33576040516306c5be1b60e31b815260040160405180910390fd5b60008060006125188686866117bd565b9250925092508261253c5760405163107acf8360e11b815260040160405180910390fd5b836000600161254b8989611b36565b6125559190614086565b90508083146126ba5760008881526012602090815260408083206001600160a01b038b16845290915290208054829081106125925761259261409d565b600091825260208083206008830401548b84526012825260408085206001600160a01b038d1686529092529220805460079092166004026101000a90920463ffffffff169190859081106125e8576125e861409d565b600091825260208083206008830401805460079093166004026101000a63ffffffff8181021990941695909316929092029390931790558981526013825260408082206001600160a01b038b168084529084528183208c8452601285528284209184529352812080548693929190859081106126665761266661409d565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805463ffffffff60681b1916600160681b93909216929092021790555b60008881526012602090815260408083206001600160a01b038b16845290915290208054806126eb576126eb6140b3565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a810219909116909155929093558a81526013835260408082206001600160a01b038c1683528452808220928616825291909252812080546001600160881b031916905561275f89611651565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a6000806040516127bd9392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b1580156127fe57600080fd5b505afa158015612812573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612836919061412d565b1561285c57600089815260106020526040812080549091906128579061422b565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50505050505050505050505050565b6040516331a9108f60e11b8152600481018390526000906001600160a01b03831690636352211e9060240160206040518083038186803b15801561291a57600080fd5b505afa15801561292e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612952919061414a565b90506001600160a01b038116331461297d5760405163679e269b60e01b815260040160405180910390fd5b612987833461353f565b6040516001600160a01b0382169084907f6e47dcdd359b6cd69456f0f97d394bd4540a2e7c4adc1b9da076859df53756c790600090a36129c7818461355e565b604051630852cd8d60e31b8152600481018490526001600160a01b038316906342966c6890602401600060405180830381600087803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b50505050505050565b612a3033826136ac565b612a4c5760405162461bcd60e51b81526004016116ad90614242565b610f7d838383613305565b801561119e5760405163fe1b687760e01b815260040160405180910390fd5b6000612a8182611651565b9050612a8f8160008461372a565b612a9a6000836134d1565b6001600160a01b0381166000908152600460205260408120805460019290612ac3908490614086565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166000908152600c602052604090205460ff1615611b335760405163c0f8cffb60e01b815260040160405180910390fd5b33612b6182611651565b6001600160a01b031614611b335760405163b23b68b760e01b815260040160405180910390fd5b6000612b9384611651565b90506000612ba18585611b36565b9050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612bdc57600080fd5b505afa158015612bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c14919061412d565b15612c3d5760008581526010602052604081208054839290612c37908490614086565b90915550505b60005b81811015612e1a5760008681526012602090815260408083206001600160a01b03891684529091528120805483908110612c7c57612c7c61409d565b600091825260208083206008830401548a84526013825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff811615158252958604821681880152600160281b86046001600160401b0316818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526013602090815260408083206001600160a01b038c811680865291845282852063ffffffff891680875294529382902080546001600160881b03191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b158015612df457600080fd5b505af1158015612e08573d6000803e3d6000fd5b50505050836001019350505050612c40565b5060008581526012602090815260408083206001600160a01b03881684529091528120611d4991613a94565b610f7d83838360405180602001604052806000815250611d23565b6000612e6e8484846117bd565b505090508015612e9157604051637f53cfe360e01b815260040160405180910390fd5b6000612e9d8585611b36565b9050600f548110612ec15760405163f8315a8760e01b815260040160405180910390fd5b60008581526012602090815260408083206001600160a01b03881680855290835281842080546001808201835591865284862060088204018054600790921660040261010090810a63ffffffff818102199094168c8516918202179092558c88526013875285882094885293865284872081885290955292852080546cffffffffffffffff00000000ff1916600160281b426001600160401b0316021790911770ffffffff0000000000000000ffffffff0019169190930263ffffffff60681b191617600160681b918516919091021790558390612f9e87611651565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b15801561302c57600080fd5b505afa158015613040573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613064919061412d565b1561307f576000878152601060205260409020805460010190555b60405163688a374160e01b81526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b5050505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61119e338383613757565b613157848484613305565b6131638484848461381e565b61122a5760405162461bcd60e51b81526004016116ad90614290565b8061319d5760405163318ccdef60e11b815260040160405180910390fd5b6064811115611b3357604051639cb75faf60e01b815260040160405180910390fd5b6131c933836136ac565b6131e55760405162461bcd60e51b81526004016116ad90614242565b61122a8484848461314c565b606060178054610cb990614035565b6060816132245750506040805180820190915260018152600360fc1b602082015290565b8160005b811561324e5780613238816140c9565b91506132479050600a83614119565b9150613228565b6000816001600160401b0381111561326857613268613e1f565b6040519080825280601f01601f191660200182016040528015613292576020820181803683370190505b5090505b84156132fd576132a7600183614086565b91506132b4600a866142e2565b6132bf9060306142f6565b60f81b8183815181106132d4576132d461409d565b60200101906001600160f81b031916908160001a9053506132f6600a86614119565b9450613296565b949350505050565b826001600160a01b031661331882611651565b6001600160a01b03161461337c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016116ad565b6001600160a01b0382166133de5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016116ad565b6133e983838361372a565b6133f46000826134d1565b6001600160a01b038316600090815260046020526040812080546001929061341d908490614086565b90915550506001600160a01b038216600090815260046020526040812080546001929061344b9084906142f6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160e01b0319821663152a902d60e11b1480610c185750610c188261392b565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061350682611651565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b801561119e57604051634389878f60e01b815260040160405180910390fd5b6001600160a01b0382166135b45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016116ad565b6000818152600360205260409020546001600160a01b0316156136195760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016116ad565b6136256000838361372a565b6001600160a01b038216600090815260046020526040812080546001929061364e9084906142f6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000806136b883611651565b9050806001600160a01b0316846001600160a01b031614806136ff57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b806132fd5750836001600160a01b031661371884610f42565b6001600160a01b031614949350505050565b60008181526010602052604090205415610f7d576040516302579f0160e61b815260040160405180910390fd5b816001600160a01b0316836001600160a01b031614156137b95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016116ad565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611ddc565b60006001600160a01b0384163b1561392057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061386290339089908890889060040161430e565b602060405180830381600087803b15801561387c57600080fd5b505af19250505080156138ac575060408051601f3d908101601f191682019092526138a991810190614341565b60015b613906573d8080156138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5080516138fe5760405162461bcd60e51b81526004016116ad90614290565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132fd565b506001949350505050565b60006001600160e01b0319821663f9f7ab4160e01b148061395b57506001600160e01b0319821662059cfd60ed1b145b80610c185750610c188260006001600160e01b0319821663d116265360e01b148061399657506001600160e01b03198216630198b32960e61b145b80610c185750610c188260006001600160e01b031982166368a3e4bd60e11b1480610c185750610c188260006001600160e01b031982166380ac58cd60e01b14806139f157506001600160e01b03198216635b5e139f60e01b145b80610c1857506301ffc9a760e01b6001600160e01b0319831614610c18565b828054613a1c90614035565b90600052602060002090601f016020900481019282613a3e5760008555613a84565b82601f10613a5757805160ff1916838001178555613a84565b82800160010185558215613a84579182015b82811115613a84578251825591602001919060010190613a69565b50613a90929150613ab5565b5090565b508054600082556007016008900490600052602060002090810190611b3391905b5b80821115613a905760008155600101613ab6565b6001600160e01b031981168114611b3357600080fd5b600060208284031215613af257600080fd5b8135611f2681613aca565b6001600160a01b0381168114611b3357600080fd5b60008060408385031215613b2557600080fd5b8235613b3081613afd565b915060208301356001600160601b0381168114613b4c57600080fd5b809150509250929050565b60005b83811015613b72578181015183820152602001613b5a565b8381111561122a5750506000910152565b60008151808452613b9b816020860160208601613b57565b601f01601f19169290920160200192915050565b602081526000611f266020830184613b83565b600060208284031215613bd457600080fd5b8135611f2681613afd565b600060208284031215613bf157600080fd5b5035919050565b60008060408385031215613c0b57600080fd5b8235613c1681613afd565b946020939093013593505050565b60008060408385031215613c3757600080fd5b823591506020830135613b4c81613afd565b602080825282518282018190526000919060409081850190868401855b82811015613cb45781518051151585528681015163ffffffff90811688870152868201516001600160401b031687870152606091820151169085015260809093019290850190600101613c66565b5091979650505050505050565b600080600060608486031215613cd657600080fd5b833592506020840135613ce881613afd565b9150604084013563ffffffff81168114613d0157600080fd5b809150509250925092565b60008060408385031215613d1f57600080fd5b50508035926020909101359150565b8015158114611b3357600080fd5b60008060408385031215613d4f57600080fd5b8235613d5a81613afd565b91506020830135613b4c81613d2e565b60008060208385031215613d7d57600080fd5b82356001600160401b0380821115613d9457600080fd5b818501915085601f830112613da857600080fd5b813581811115613db757600080fd5b8660208260051b8501011115613dcc57600080fd5b60209290920196919550909350505050565b600080600060608486031215613df357600080fd5b8335613dfe81613afd565b92506020840135613e0e81613afd565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115613e4f57613e4f613e1f565b604051601f8501601f19908116603f01168101908282118183101715613e7757613e77613e1f565b81604052809350858152868686011115613e9057600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112613ebb57600080fd5b611f2683833560208501613e35565b60008060408385031215613edd57600080fd5b82356001600160401b0380821115613ef457600080fd5b613f0086838701613eaa565b93506020850135915080821115613f1657600080fd5b50613f2385828601613eaa565b9150509250929050565b600080600060608486031215613f4257600080fd5b833592506020840135613e0e81613afd565b600060208284031215613f6657600080fd5b81356001600160401b03811115613f7c57600080fd5b6132fd84828501613eaa565b60008060408385031215613f9b57600080fd5b8235613fa681613afd565b91506020830135613b4c81613afd565b60008060008060808587031215613fcc57600080fd5b8435613fd781613afd565b93506020850135613fe781613afd565b92506040850135915060608501356001600160401b0381111561400957600080fd5b8501601f8101871361401a57600080fd5b61402987823560208401613e35565b91505092959194509250565b600181811c9082168061404957607f821691505b6020821081141561406a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561409857614098614070565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006000198214156140dd576140dd614070565b5060010190565b60008160001904831182151516156140fe576140fe614070565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261412857614128614103565b500490565b60006020828403121561413f57600080fd5b8151611f2681613d2e565b60006020828403121561415c57600080fd5b8151611f2681613afd565b60008451602061417a8285838a01613b57565b85519184019161418d8184848a01613b57565b8554920191600090600181811c90808316806141aa57607f831692505b8583108114156141c857634e487b7160e01b85526022600452602485fd5b8080156141dc57600181146141ed5761421a565b60ff1985168852838801955061421a565b60008b81526020902060005b858110156142125781548a8201529084019088016141f9565b505083880195505b50939b9a5050505050505050505050565b60008161423a5761423a614070565b506000190190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826142f1576142f1614103565b500690565b6000821982111561430957614309614070565b500190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611aab90830184613b83565b60006020828403121561435357600080fd5b8151611f2681613aca56fea26469706673582212201e8b19c3fef9d4a118e3533d18a34e7e96b10d605bfa3711eeda60173f4df39064736f6c6343000809003368747470733a2f2f6469676964616967616b752e636f6d2f626162792d647261676f6e732f6d657461646174612f000000000000000000000000aabc3aef1ce0d23eeaabfc7c6cd9043fcebf7400000000000000000000000000688d6520d7917ed6a6a6fb8f3130b6998d879d0b00000000000000000000000000000000000000000000000000000000000003e8

Deployed Bytecode

0x6080604052600436106103765760003560e01c80637e10b35b116101d1578063aa6cab5a11610102578063c87b56dd116100a0578063e370ab461161006f578063e370ab4614610b64578063e985e9c514610b84578063f1e923c514610bcd578063f2fde38b14610bed57600080fd5b8063c87b56dd14610aef578063d147c97a14610b0f578063d547cfb714610b2f578063e2989f4c14610b4457600080fd5b8063b3bcea48116100dc578063b3bcea4814610a7a578063b88d4fde14610a8f578063c05e2f4414610aaf578063c61bd21414610acf57600080fd5b8063aa6cab5a146109db578063aca139f714610a3a578063b39fa00014610a5a57600080fd5b8063916237181161016f5780639bc17ea4116101495780639bc17ea41461096a5780639f8ed6051461098a578063a22cb465146109a8578063a694fc3a146109c857600080fd5b8063916237181461091557806395d89b411461093557806395fa0ff51461094a57600080fd5b8063869f9110116101ab578063869f9110146108a25780638be18e57146108b75780638c5f36bb146108d75780638da5cb5b146108f757600080fd5b80637e10b35b146108195780637f1a5ce114610839578063816a15011461088257600080fd5b80632e17de78116102ab57806351dadc28116102495780636352211e116102235780636352211e1461076e578063662cca401461078e578063703fa929146107ae57806370a08231146107eb57600080fd5b806351dadc28146106f957806353401df91461072e57806355f804b31461074e57600080fd5b806341f434341161028557806341f434341461067757806342842e0e146106995780634782f779146106b95780634e02c078146106d957600080fd5b80632e17de781461060b5780632ebb386a1461061e578063301be7401461063e57600080fd5b80631134055711610318578063230f436d116102f2578063230f436d1461057957806323b872dd1461058c578063247946c9146105ac5780632a55205a146105cc57600080fd5b8063113405571461049957806311ad408114610539578063225848cf1461055957600080fd5b8063070cba1711610354578063070cba17146103f4578063081812fc14610414578063095ea7b31461044c5780630f3d911c1461046c57600080fd5b806301ffc9a71461037b57806302fa7c47146103b057806306fdde03146103d2575b600080fd5b34801561038757600080fd5b5061039b610396366004613ae0565b610c0d565b60405190151581526020015b60405180910390f35b3480156103bc57600080fd5b506103d06103cb366004613b12565b610c1e565b005b3480156103de57600080fd5b506103e7610caa565b6040516103a79190613baf565b34801561040057600080fd5b506103d061040f366004613bc2565b610d3c565b34801561042057600080fd5b5061043461042f366004613bdf565b610f42565b6040516001600160a01b0390911681526020016103a7565b34801561045857600080fd5b506103d0610467366004613bf8565b610f69565b34801561047857600080fd5b5061048c610487366004613c24565b610f82565b6040516103a79190613c49565b3480156104a557600080fd5b506105036104b4366004613cc1565b601360209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff61010082048116916001600160401b03600160281b82041691600160681b9091041684565b60408051941515855263ffffffff93841660208601526001600160401b03909216918401919091521660608201526080016103a7565b34801561054557600080fd5b506103d0610554366004613d0c565b611182565b34801561056557600080fd5b506103d0610574366004613d3c565b6111a2565b6103d0610587366004613d6a565b6111c1565b34801561059857600080fd5b506103d06105a7366004613dde565b611230565b3480156105b857600080fd5b506103d06105c7366004613eca565b611255565b3480156105d857600080fd5b506105ec6105e7366004613d0c565b6112ab565b604080516001600160a01b0390931683526020830191909152016103a7565b6103d0610619366004613bdf565b611357565b34801561062a57600080fd5b506103d0610639366004613c24565b611447565b34801561064a57600080fd5b5061039b610659366004613bc2565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561068357600080fd5b506104346daaeb6d7670e522a718067333cd4e81565b3480156106a557600080fd5b506103d06106b4366004613dde565b611465565b3480156106c557600080fd5b506103d06106d4366004613bf8565b61148a565b3480156106e557600080fd5b506103d06106f4366004613f2d565b61156c565b34801561070557600080fd5b50610719610714366004613f2d565b611589565b60405163ffffffff90911681526020016103a7565b34801561073a57600080fd5b506103d0610749366004613d0c565b6115df565b34801561075a57600080fd5b506103d0610769366004613f54565b6115fb565b34801561077a57600080fd5b50610434610789366004613bdf565b611651565b34801561079a57600080fd5b506103d06107a9366004613bc2565b6116b6565b3480156107ba57600080fd5b506107ce6107c9366004613f2d565b6117bd565b6040805193151584526020840192909252908201526060016103a7565b3480156107f757600080fd5b5061080b610806366004613bc2565b611841565b6040519081526020016103a7565b34801561082557600080fd5b506103d0610834366004613bc2565b6118c7565b34801561084557600080fd5b5061039b610854366004613f88565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205460ff1690565b34801561088e57600080fd5b5061080b61089d366004613f2d565b611a80565b3480156108ae57600080fd5b50600f5461080b565b3480156108c357600080fd5b506103d06108d2366004613f54565b611ab5565b3480156108e357600080fd5b506103d06108f2366004613bc2565b611b00565b34801561090357600080fd5b506000546001600160a01b0316610434565b34801561092157600080fd5b5061080b610930366004613c24565b611b36565b34801561094157600080fd5b506103e7611b5e565b34801561095657600080fd5b506103d0610965366004613b12565b611b6d565b34801561097657600080fd5b506103d0610985366004613bdf565b611bb4565b34801561099657600080fd5b50600a546001600160a01b0316610434565b3480156109b457600080fd5b506103d06109c3366004613d3c565b611bdb565b6103d06109d6366004613bdf565b611bef565b3480156109e757600080fd5b50610a1b6109f6366004613bc2565b600c6020526000908152604090205460ff81169061010090046001600160801b031682565b6040805192151583526001600160801b039091166020830152016103a7565b348015610a4657600080fd5b506103d0610a55366004613dde565b611c0a565b348015610a6657600080fd5b506103d0610a75366004613bdf565b611c48565b348015610a8657600080fd5b506103e7611c95565b348015610a9b57600080fd5b506103d0610aaa366004613fb6565b611d23565b348015610abb57600080fd5b506103d0610aca366004613d3c565b611d50565b348015610adb57600080fd5b5061039b610aea366004613bdf565b611de9565b348015610afb57600080fd5b506103e7610b0a366004613bdf565b611e96565b348015610b1b57600080fd5b506103d0610b2a366004613eca565b611f2d565b348015610b3b57600080fd5b506103e7611f92565b348015610b5057600080fd5b50610434610b5f366004613bdf565b611f9f565b348015610b7057600080fd5b506103d0610b7f366004613dde565b611fc9565b348015610b9057600080fd5b5061039b610b9f366004613f88565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610bd957600080fd5b506103d0610be8366004613c24565b611fea565b348015610bf957600080fd5b506103d0610c08366004613bc2565b612007565b6000610c1882612111565b92915050565b610c26612151565b6127106001600160601b0382161115610c5257604051631557c04f60e21b815260040160405180910390fd5b610c5c828261217e565b604080516001600160a01b03841681526001600160601b03831660208201527f23813f5ad446622633cb58c75ceef768a2111751b0f30477a63e06fcaedcff60910160405180910390a15050565b606060088054610cb990614035565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590614035565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b5050505050905090565b610d44612151565b6001600160a01b0381166000908152600c602052604090205460ff16610d7d57604051630b094f2760e31b815260040160405180910390fd5b6001600160a01b0381166000908152600c6020526040812054600b546101009091046001600160801b03169190610db690600190614086565b905080826001600160801b031614610eb257600b8181548110610ddb57610ddb61409d565b600091825260209091200154600b80546001600160a01b03909216916001600160801b038516908110610e1057610e1061409d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600c6000600b856001600160801b031681548110610e5f57610e5f61409d565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546001600160801b03929092166101000270ffffffffffffffffffffffffffffffff00199092169190911790555b600b805480610ec357610ec36140b3565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600c8252604080842080546001600160881b031916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610f4d8261227b565b506000908152600560205260409020546001600160a01b031690565b81610f73816122da565b610f7d83836123a2565b505050565b60606000610f908484611b36565b9050806001600160401b03811115610faa57610faa613e1f565b604051908082528060200260200182016040528015610ffc57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610fc85790505b5060008581526012602090815260408083206001600160a01b038816845282528083208054825181850281018501909352808352949650929390929183018282801561109357602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff16815260200190600401906020826003010492830192600103820291508084116110565790505b5050505050905060005b828110156111795760008681526013602090815260408083206001600160a01b0389168452909152812083519091908490849081106110de576110de61409d565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff81161515825261010081048516928201929092526001600160401b03600160281b83041692810192909252600160681b90049091166060820152845185908390811061115d5761115d61409d565b602002602001018190525080611172906140c9565b905061109d565b50505092915050565b61118a6124b3565b611193826124d9565b61119e823383612508565b5050565b61119e733cc6cdda760b79bafa08df41ecfa224f810dceb66001612036565b60006111d5600a546001600160a01b031690565b9050816111f55760405163e3a2b34560e01b815260040160405180910390fd5b60005b8281101561122a576112228484838181106112155761121561409d565b90506020020135836128d7565b6001016111f8565b50505050565b826001600160a01b038116331461124a5761124a336122da565b61122a848484612a26565b61125d612151565b601654610100900460ff161561128657604051635b79f68360e01b815260040160405180910390fd5b61128f826115fb565b61129881611ab5565b50506016805461ff001916610100179055565b60008281526015602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282019290925282916113205750604080518082019091526014546001600160a01b0381168252600160a01b90046001600160601b031660208201525b60208101516000906127109061133f906001600160601b0316876140e4565b6113499190614119565b915196919550909350505050565b600061136282611651565b90506001600160a01b038116331461138d576040516367788f2960e01b815260040160405180910390fd5b6113978234612a57565b6113a082612a76565b6040516001600160a01b0382169083907f81b0ac4b13aab1ab3b86d524dd62924e99a9d694e94e235f627bb41589717ff790600090a3600a546040516323b872dd60e01b81523060048201526001600160a01b03838116602483015260448201859052909116906323b872dd906064015b600060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050505050565b61145081612b1d565b61145982612b57565b61119e82826000612b88565b826001600160a01b038116331461147f5761147f336122da565b61122a848484612e46565b611492612151565b806114b057604051635e85ae7360e01b815260040160405180910390fd5b6001600160a01b0382166114d7576040516344a0326d60e11b815260040160405180910390fd5b804710156114f857604051631e9acf1760e31b815260040160405180910390fd5b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611545576040519150601f19603f3d011682016040523d82523d6000602084013e61154a565b606091505b5050905080610f7d57604051630938e72560e31b815260040160405180910390fd5b61157582612b1d565b61157e83612b57565b610f7d838383612508565b601260205282600052604060002060205281600052604060002081815481106115b157600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6115e76124b3565b6115f0826124d9565b61119e823383612e61565b611603612151565b8051611616906017906020840190613a10565b507ff9c7803e94e0d3c02900d8a90893a6d5e90dd04d32a4cfe825520f82bf9f32f6816040516116469190613baf565b60405180910390a150565b6000818152600360205260408120546001600160a01b031680610c185760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064015b60405180910390fd5b6116be612151565b600a546001600160a01b0316156116e857604051636be9ab9b60e11b815260040160405180910390fd5b60006001600160a01b0382163b1561177c576040516301ffc9a760e01b81526380ac58cd60e01b60048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b15801561174057600080fd5b505afa925050508015611770575060408051601f3d908101601f1916820190925261176d9181019061412d565b60015b6117795761177c565b90505b8061179a57604051634321591760e11b815260040160405180910390fd5b50600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000808063ffffffff8411156117e6576040516307f159d160e31b815260040160405180910390fd5b50505060009283526013602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff811692600160281b82046001600160401b031692600160681b90920490911690565b60006001600160a01b0382166118ab5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016116ad565b506001600160a01b031660009081526004602052604090205490565b6118cf612151565b6001600160a01b0381166000908152600c602052604090205460ff16156119095760405163b73e95e160e01b815260040160405180910390fd5b6040516301ffc9a760e01b81526325df830760e21b60048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b15801561194f57600080fd5b505afa158015611963573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611987919061412d565b6119a4576040516390c51dd760e01b815260040160405180910390fd5b600b546001600160801b038111156119cf57604051636ab8f7f960e11b815260040160405180910390fd5b6001600160a01b0382166000818152600c60209081526040808320805460016001600160881b03199091166101006001600160801b03891602178117909155600b8054808301825594527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a25050565b6000806000611a908686866117bd565b509150915081611aa1576000611aab565b611aab8142614086565b9695505050505050565b611abd612151565b8051611ad0906018906020840190613a10565b507f65ccd57f8a46e7a6cfc4d214d84094e8ba5561ab50fd328f26e4c44052ffeba0816040516116469190613baf565b6000546001600160a01b031615611b2a57604051631360e86560e31b815260040160405180910390fd5b611b33816130f1565b50565b60009182526012602090815260408084206001600160a01b0393909316845291905290205490565b606060098054610cb990614035565b611b75612151565b60165460ff1615611b9957604051639383013960e01b815260040160405180910390fd5b611ba38282610c1e565b50506016805460ff19166001179055565b611bbc6124b3565b611bc5816124d9565b6002600e55611bd381612a76565b506001600e55565b81611be5816122da565b610f7d8383613141565b611b3381611c05600a546001600160a01b031690565b6128d7565b611c126124b3565b611c1b816124d9565b6002600e81905550611c3e8383836040518060200160405280600081525061314c565b50506001600e5550565b611c50612151565b600d5460ff1615611c7457604051630e009cb560e11b815260040160405180910390fd5b611c7d8161317f565b600f55600d805460ff19166001908117909155600e55565b60188054611ca290614035565b80601f0160208091040260200160405190810160405280929190818152602001828054611cce90614035565b8015611d1b5780601f10611cf057610100808354040283529160200191611d1b565b820191906000526020600020905b815481529060010190602001808311611cfe57829003601f168201915b505050505081565b836001600160a01b0381163314611d3d57611d3d336122da565b611d49858585856131bf565b5050505050565b336001600160a01b038316811415611d7b576040516353ff677360e11b815260040160405180910390fd5b6001600160a01b03818116600081815260116020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c05691015b60405180910390a3505050565b6000818152600360205260408120546001600160a01b031615158015610c185750600a546040516331a9108f60e11b81526004810184905230916001600160a01b031690636352211e9060240160206040518083038186803b158015611e4e57600080fd5b505afa158015611e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e86919061414a565b6001600160a01b03161492915050565b6000818152600360205260409020546060906001600160a01b0316611ece5760405163163a09e160e31b815260040160405180910390fd5b6000611ed86131f1565b90506000815111611ef85760405180602001604052806000815250611f26565b80611f0284613200565b6018604051602001611f1693929190614167565b6040516020818303038152906040525b9392505050565b611f35612151565b60075460ff1615611f59576040516376f1a0b360e01b815260040160405180910390fd5b8151611f6c906008906020850190613a10565b508051611f80906009906020840190613a10565b50506007805460ff1916600117905550565b60178054611ca290614035565b600b8181548110611faf57600080fd5b6000918252602090912001546001600160a01b0316905081565b611fd16124b3565b611fda816124d9565b6002600e55611c3e838383613305565b611ff2612151565b611ffb81612b1d565b61119e82826001612b88565b61200f612151565b6001600160a01b038116611b2a5760405163f82d512f60e01b815260040160405180910390fd5b6daaeb6d7670e522a718067333cd4e3b1561119e57801561209157604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe90604401611411565b6001600160a01b038216156120e05760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af290390604401611411565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401611411565b60006001600160e01b031982166395fa0ff560e01b148061214257506001600160e01b0319821663247946c960e01b145b80610c185750610c18826134ac565b6000546001600160a01b0316331461217c5760405163097b5fdb60e31b815260040160405180910390fd5b565b6127106001600160601b03821611156121ec5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084016116ad565b6001600160a01b0382166122425760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016116ad565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217601455565b6000818152600360205260409020546001600160a01b0316611b335760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016116ad565b6daaeb6d7670e522a718067333cd4e3b15611b3357604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c61711349060440160206040518083038186803b15801561234257600080fd5b505afa158015612356573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237a919061412d565b611b3357604051633b79c77360e21b81526001600160a01b03821660048201526024016116ad565b60006123ad82611651565b9050806001600160a01b0316836001600160a01b0316141561241b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016116ad565b336001600160a01b038216148061243757506124378133610b9f565b6124a95760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016116ad565b610f7d83836134d1565b6124bc33610659565b61217c57604051639eea455560e01b815260040160405180910390fd5b6124eb6124e582611651565b33610854565b611b33576040516306c5be1b60e31b815260040160405180910390fd5b60008060006125188686866117bd565b9250925092508261253c5760405163107acf8360e11b815260040160405180910390fd5b836000600161254b8989611b36565b6125559190614086565b90508083146126ba5760008881526012602090815260408083206001600160a01b038b16845290915290208054829081106125925761259261409d565b600091825260208083206008830401548b84526012825260408085206001600160a01b038d1686529092529220805460079092166004026101000a90920463ffffffff169190859081106125e8576125e861409d565b600091825260208083206008830401805460079093166004026101000a63ffffffff8181021990941695909316929092029390931790558981526013825260408082206001600160a01b038b168084529084528183208c8452601285528284209184529352812080548693929190859081106126665761266661409d565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805463ffffffff60681b1916600160681b93909216929092021790555b60008881526012602090815260408083206001600160a01b038b16845290915290208054806126eb576126eb6140b3565b60008281526020808220600860001990940193840401805463ffffffff600460078716026101000a810219909116909155929093558a81526013835260408082206001600160a01b038c1683528452808220928616825291909252812080546001600160881b031916905561275f89611651565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a6000806040516127bd9392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b1580156127fe57600080fd5b505afa158015612812573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612836919061412d565b1561285c57600089815260106020526040812080549091906128579061422b565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50505050505050505050505050565b6040516331a9108f60e11b8152600481018390526000906001600160a01b03831690636352211e9060240160206040518083038186803b15801561291a57600080fd5b505afa15801561292e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612952919061414a565b90506001600160a01b038116331461297d5760405163679e269b60e01b815260040160405180910390fd5b612987833461353f565b6040516001600160a01b0382169084907f6e47dcdd359b6cd69456f0f97d394bd4540a2e7c4adc1b9da076859df53756c790600090a36129c7818461355e565b604051630852cd8d60e31b8152600481018490526001600160a01b038316906342966c6890602401600060405180830381600087803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b50505050505050565b612a3033826136ac565b612a4c5760405162461bcd60e51b81526004016116ad90614242565b610f7d838383613305565b801561119e5760405163fe1b687760e01b815260040160405180910390fd5b6000612a8182611651565b9050612a8f8160008461372a565b612a9a6000836134d1565b6001600160a01b0381166000908152600460205260408120805460019290612ac3908490614086565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166000908152600c602052604090205460ff1615611b335760405163c0f8cffb60e01b815260040160405180910390fd5b33612b6182611651565b6001600160a01b031614611b335760405163b23b68b760e01b815260040160405180910390fd5b6000612b9384611651565b90506000612ba18585611b36565b9050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612bdc57600080fd5b505afa158015612bf0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c14919061412d565b15612c3d5760008581526010602052604081208054839290612c37908490614086565b90915550505b60005b81811015612e1a5760008681526012602090815260408083206001600160a01b03891684529091528120805483908110612c7c57612c7c61409d565b600091825260208083206008830401548a84526013825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff811615158252958604821681880152600160281b86046001600160401b0316818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526013602090815260408083206001600160a01b038c811680865291845282852063ffffffff891680875294529382902080546001600160881b03191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b158015612df457600080fd5b505af1158015612e08573d6000803e3d6000fd5b50505050836001019350505050612c40565b5060008581526012602090815260408083206001600160a01b03881684529091528120611d4991613a94565b610f7d83838360405180602001604052806000815250611d23565b6000612e6e8484846117bd565b505090508015612e9157604051637f53cfe360e01b815260040160405180910390fd5b6000612e9d8585611b36565b9050600f548110612ec15760405163f8315a8760e01b815260040160405180910390fd5b60008581526012602090815260408083206001600160a01b03881680855290835281842080546001808201835591865284862060088204018054600790921660040261010090810a63ffffffff818102199094168c8516918202179092558c88526013875285882094885293865284872081885290955292852080546cffffffffffffffff00000000ff1916600160281b426001600160401b0316021790911770ffffffff0000000000000000ffffffff0019169190930263ffffffff60681b191617600160681b918516919091021790558390612f9e87611651565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b15801561302c57600080fd5b505afa158015613040573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613064919061412d565b1561307f576000878152601060205260409020805460010190555b60405163688a374160e01b81526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b1580156130d057600080fd5b505af11580156130e4573d6000803e3d6000fd5b5050505050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61119e338383613757565b613157848484613305565b6131638484848461381e565b61122a5760405162461bcd60e51b81526004016116ad90614290565b8061319d5760405163318ccdef60e11b815260040160405180910390fd5b6064811115611b3357604051639cb75faf60e01b815260040160405180910390fd5b6131c933836136ac565b6131e55760405162461bcd60e51b81526004016116ad90614242565b61122a8484848461314c565b606060178054610cb990614035565b6060816132245750506040805180820190915260018152600360fc1b602082015290565b8160005b811561324e5780613238816140c9565b91506132479050600a83614119565b9150613228565b6000816001600160401b0381111561326857613268613e1f565b6040519080825280601f01601f191660200182016040528015613292576020820181803683370190505b5090505b84156132fd576132a7600183614086565b91506132b4600a866142e2565b6132bf9060306142f6565b60f81b8183815181106132d4576132d461409d565b60200101906001600160f81b031916908160001a9053506132f6600a86614119565b9450613296565b949350505050565b826001600160a01b031661331882611651565b6001600160a01b03161461337c5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016116ad565b6001600160a01b0382166133de5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016116ad565b6133e983838361372a565b6133f46000826134d1565b6001600160a01b038316600090815260046020526040812080546001929061341d908490614086565b90915550506001600160a01b038216600090815260046020526040812080546001929061344b9084906142f6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160e01b0319821663152a902d60e11b1480610c185750610c188261392b565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061350682611651565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b801561119e57604051634389878f60e01b815260040160405180910390fd5b6001600160a01b0382166135b45760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016116ad565b6000818152600360205260409020546001600160a01b0316156136195760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016116ad565b6136256000838361372a565b6001600160a01b038216600090815260046020526040812080546001929061364e9084906142f6565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000806136b883611651565b9050806001600160a01b0316846001600160a01b031614806136ff57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b806132fd5750836001600160a01b031661371884610f42565b6001600160a01b031614949350505050565b60008181526010602052604090205415610f7d576040516302579f0160e61b815260040160405180910390fd5b816001600160a01b0316836001600160a01b031614156137b95760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016116ad565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101611ddc565b60006001600160a01b0384163b1561392057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061386290339089908890889060040161430e565b602060405180830381600087803b15801561387c57600080fd5b505af19250505080156138ac575060408051601f3d908101601f191682019092526138a991810190614341565b60015b613906573d8080156138da576040519150601f19603f3d011682016040523d82523d6000602084013e6138df565b606091505b5080516138fe5760405162461bcd60e51b81526004016116ad90614290565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506132fd565b506001949350505050565b60006001600160e01b0319821663f9f7ab4160e01b148061395b57506001600160e01b0319821662059cfd60ed1b145b80610c185750610c188260006001600160e01b0319821663d116265360e01b148061399657506001600160e01b03198216630198b32960e61b145b80610c185750610c188260006001600160e01b031982166368a3e4bd60e11b1480610c185750610c188260006001600160e01b031982166380ac58cd60e01b14806139f157506001600160e01b03198216635b5e139f60e01b145b80610c1857506301ffc9a760e01b6001600160e01b0319831614610c18565b828054613a1c90614035565b90600052602060002090601f016020900481019282613a3e5760008555613a84565b82601f10613a5757805160ff1916838001178555613a84565b82800160010185558215613a84579182015b82811115613a84578251825591602001919060010190613a69565b50613a90929150613ab5565b5090565b508054600082556007016008900490600052602060002090810190611b3391905b5b80821115613a905760008155600101613ab6565b6001600160e01b031981168114611b3357600080fd5b600060208284031215613af257600080fd5b8135611f2681613aca565b6001600160a01b0381168114611b3357600080fd5b60008060408385031215613b2557600080fd5b8235613b3081613afd565b915060208301356001600160601b0381168114613b4c57600080fd5b809150509250929050565b60005b83811015613b72578181015183820152602001613b5a565b8381111561122a5750506000910152565b60008151808452613b9b816020860160208601613b57565b601f01601f19169290920160200192915050565b602081526000611f266020830184613b83565b600060208284031215613bd457600080fd5b8135611f2681613afd565b600060208284031215613bf157600080fd5b5035919050565b60008060408385031215613c0b57600080fd5b8235613c1681613afd565b946020939093013593505050565b60008060408385031215613c3757600080fd5b823591506020830135613b4c81613afd565b602080825282518282018190526000919060409081850190868401855b82811015613cb45781518051151585528681015163ffffffff90811688870152868201516001600160401b031687870152606091820151169085015260809093019290850190600101613c66565b5091979650505050505050565b600080600060608486031215613cd657600080fd5b833592506020840135613ce881613afd565b9150604084013563ffffffff81168114613d0157600080fd5b809150509250925092565b60008060408385031215613d1f57600080fd5b50508035926020909101359150565b8015158114611b3357600080fd5b60008060408385031215613d4f57600080fd5b8235613d5a81613afd565b91506020830135613b4c81613d2e565b60008060208385031215613d7d57600080fd5b82356001600160401b0380821115613d9457600080fd5b818501915085601f830112613da857600080fd5b813581811115613db757600080fd5b8660208260051b8501011115613dcc57600080fd5b60209290920196919550909350505050565b600080600060608486031215613df357600080fd5b8335613dfe81613afd565b92506020840135613e0e81613afd565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b0380841115613e4f57613e4f613e1f565b604051601f8501601f19908116603f01168101908282118183101715613e7757613e77613e1f565b81604052809350858152868686011115613e9057600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112613ebb57600080fd5b611f2683833560208501613e35565b60008060408385031215613edd57600080fd5b82356001600160401b0380821115613ef457600080fd5b613f0086838701613eaa565b93506020850135915080821115613f1657600080fd5b50613f2385828601613eaa565b9150509250929050565b600080600060608486031215613f4257600080fd5b833592506020840135613e0e81613afd565b600060208284031215613f6657600080fd5b81356001600160401b03811115613f7c57600080fd5b6132fd84828501613eaa565b60008060408385031215613f9b57600080fd5b8235613fa681613afd565b91506020830135613b4c81613afd565b60008060008060808587031215613fcc57600080fd5b8435613fd781613afd565b93506020850135613fe781613afd565b92506040850135915060608501356001600160401b0381111561400957600080fd5b8501601f8101871361401a57600080fd5b61402987823560208401613e35565b91505092959194509250565b600181811c9082168061404957607f821691505b6020821081141561406a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561409857614098614070565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006000198214156140dd576140dd614070565b5060010190565b60008160001904831182151516156140fe576140fe614070565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261412857614128614103565b500490565b60006020828403121561413f57600080fd5b8151611f2681613d2e565b60006020828403121561415c57600080fd5b8151611f2681613afd565b60008451602061417a8285838a01613b57565b85519184019161418d8184848a01613b57565b8554920191600090600181811c90808316806141aa57607f831692505b8583108114156141c857634e487b7160e01b85526022600452602485fd5b8080156141dc57600181146141ed5761421a565b60ff1985168852838801955061421a565b60008b81526020902060005b858110156142125781548a8201529084019088016141f9565b505083880195505b50939b9a5050505050505050505050565b60008161423a5761423a614070565b506000190190565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000826142f1576142f1614103565b500690565b6000821982111561430957614309614070565b500190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611aab90830184613b83565b60006020828403121561435357600080fd5b8151611f2681613aca56fea26469706673582212201e8b19c3fef9d4a118e3533d18a34e7e96b10d605bfa3711eeda60173f4df39064736f6c63430008090033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000aabc3aef1ce0d23eeaabfc7c6cd9043fcebf7400000000000000000000000000688d6520d7917ed6a6a6fb8f3130b6998d879d0b00000000000000000000000000000000000000000000000000000000000003e8

-----Decoded View---------------
Arg [0] : dragonEggAddress (address): 0xAABC3AEf1CE0d23eEAABfC7C6Cd9043FCEbf7400
Arg [1] : royaltyReceiver_ (address): 0x688D6520d7917eD6a6A6fB8F3130b6998d879D0B
Arg [2] : royaltyFeeNumerator_ (uint96): 1000

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000aabc3aef1ce0d23eeaabfc7c6cd9043fcebf7400
Arg [1] : 000000000000000000000000688d6520d7917ed6a6a6fb8f3130b6998d879d0b
Arg [2] : 00000000000000000000000000000000000000000000000000000000000003e8


Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.