{
  "_format": "hh-sol-artifact-1",
  "contractName": "AdventureERC721CWithReassignableMinterRoyalties",
  "sourceName": "contracts/examples/adventure-erc721c/AdventureERC721CWithReassignableMinterRoyalties.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "royaltyFeeNumerator_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "royaltyRightsNFTReference_",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "maxSimultaneousQuests_",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AdventureApprovalToCaller",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AlreadyOnQuest",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__AnActiveQuestIsPreventingTransfers",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__CallerNotApprovedForAdventure",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__CallerNotTokenOwner",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__MaxSimultaneousQuestsCannotBeZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__MaxSimultaneousQuestsExceeded",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__NotOnQuest",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__QuestIdOutOfRange",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureERC721__TooManyActiveQuests",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__AdventureIsStillWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__AlreadyWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__ArrayIndexOverflowsUint128",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__CallerNotAWhitelistedAdventure",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__InvalidAdventureContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "AdventureWhitelist__NotWhitelisted",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__InvalidTransferValidatorContract",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "CreatorTokenBase__SetTransferValidatorFirst",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinterRoyaltiesReassignableRightsNFT__MinterCannotBeZeroAddress",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "MinterRoyaltiesReassignableRightsNFT__RoyaltyFeeWillExceedSalePrice",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ShouldNotMintToBurnAddress",
      "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": 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": 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": false,
          "internalType": "address",
          "name": "oldValidator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newValidator",
          "type": "address"
        }
      ],
      "name": "TransferValidatorUpdated",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_OPERATOR_WHITELIST_ID",
      "outputs": [
        {
          "internalType": "uint120",
          "name": "",
          "type": "uint120"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_SECURITY_LEVEL",
      "outputs": [
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DEFAULT_TRANSFER_VALIDATOR",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "FEE_DENOMINATOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "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": "to",
          "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": [
        {
          "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": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": [],
      "name": "getPermittedContractReceivers",
      "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": [],
      "name": "getSecurityPolicy",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum TransferSecurityLevels",
              "name": "transferSecurityLevel",
              "type": "uint8"
            },
            {
              "internalType": "uint120",
              "name": "operatorWhitelistId",
              "type": "uint120"
            },
            {
              "internalType": "uint120",
              "name": "permittedContractReceiversId",
              "type": "uint120"
            }
          ],
          "internalType": "struct CollectionSecurityPolicy",
          "name": "",
          "type": "tuple"
        }
      ],
      "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": "getTransferValidator",
      "outputs": [
        {
          "internalType": "contract ICreatorTokenTransferValidator",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getWhitelistedOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "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": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "isContractReceiverPermitted",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isOperatorWhitelisted",
      "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": [
        {
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "isTransferAllowed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "maxSimultaneousQuests",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "royaltyFeeNumerator",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "royaltyRightsNFT",
      "outputs": [
        {
          "internalType": "contract ICloneableRoyaltyRightsERC721",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeMint",
      "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": "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": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "validator",
          "type": "address"
        },
        {
          "internalType": "enum TransferSecurityLevels",
          "name": "level",
          "type": "uint8"
        },
        {
          "internalType": "uint120",
          "name": "operatorWhitelistId",
          "type": "uint120"
        },
        {
          "internalType": "uint120",
          "name": "permittedContractReceiversAllowlistId",
          "type": "uint120"
        }
      ],
      "name": "setToCustomValidatorAndSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setToDefaultSecurityPolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "transferValidator_",
          "type": "address"
        }
      ],
      "name": "setTransferValidator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "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"
    }
  ],
  "bytecode": "0x60e06040523480156200001157600080fd5b5060405162004fe238038062004fe2833981016040819052620000349162000470565b84848484846040518060200160405280600081525060405180602001604052806000815250620000736200006d6200017960201b60201c565b6200017d565b815162000088906009906020850190620002fd565b5080516200009e90600a906020840190620002fd565b505050620000b38282620001cd60201b60201c565b50620000c1905081620001fd565b608052612710821115620000e85760405163574f72a160e11b815260040160405180910390fd5b8160a08181525050600062000108826200021260201b620024e41760201c565b9050806001600160a01b031663321f16136040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200014657600080fd5b505af11580156200015b573d6000803e3d6000fd5b505050506001600160a01b031660c052506200054c95505050505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8151620001e290600f906020850190620002fd565b508051620001f8906010906020840190620002fd565b505050565b6200020881620002b8565b6003556001600455565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116620002b35760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c656400000000000000000000604482015260640160405180910390fd5b919050565b80620002d75760405163ed21f5e560e01b815260040160405180910390fd5b6064811115620002fa5760405163dbb0ece360e01b815260040160405180910390fd5b50565b8280546200030b906200050f565b90600052602060002090601f0160209004810192826200032f57600085556200037a565b82601f106200034a57805160ff19168380011785556200037a565b828001600101855582156200037a579182015b828111156200037a5782518255916020019190600101906200035d565b50620003889291506200038c565b5090565b5b808211156200038857600081556001016200038d565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003cb57600080fd5b81516001600160401b0380821115620003e857620003e8620003a3565b604051601f8301601f19908116603f01168101908282118183101715620004135762000413620003a3565b816040528381526020925086838588010111156200043057600080fd5b600091505b8382101562000454578582018301518183018401529082019062000435565b83821115620004665760008385830101525b9695505050505050565b600080600080600060a086880312156200048957600080fd5b855160208701519095506001600160a01b0381168114620004a957600080fd5b6040870151606088015191955093506001600160401b0380821115620004ce57600080fd5b620004dc89838a01620003b9565b93506080880151915080821115620004f357600080fd5b506200050288828901620003b9565b9150509295509295909350565b600181811c908216806200052457607f821691505b602082108114156200054657634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c051614a436200059f60003960008181610514015281816111e6015281816138f90152613bd00152600081816107ba015261128f0152600081816107de01526131f80152614a436000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063703fa929116101e9578063a9fc664e1161010f578063d007af5c116100ad578063e985e9c51161007c578063e985e9c5146109ac578063f1e923c5146109e8578063f2fde38b146109fb578063fd762d9214610a0e57600080fd5b8063d007af5c14610975578063d73792a91461097d578063e2989f4c14610986578063e370ab461461099957600080fd5b8063b88d4fde116100e9578063b88d4fde14610927578063be537f431461093a578063c05e2f441461094f578063c87b56dd1461096257600080fd5b8063a9fc664e1461089d578063aa6cab5a146108b0578063aca139f71461091457600080fd5b8063869f9110116101875780639bc17ea4116101565780639bc17ea4146108515780639d645a4414610864578063a144819414610877578063a22cb4651461088a57600080fd5b8063869f9110146107dc5780638da5cb5b14610802578063916237181461081357806395d89b411461084957600080fd5b80637e10b35b116101c35780637e10b35b146107535780637f1a5ce114610766578063816a1501146107a257806381ddcc1f146107b557600080fd5b8063703fa929146106fa57806370a082311461072a578063715018a61461074b57600080fd5b80632a55205a116102ce578063495c8bf91161026c5780635d4c1d461161023b5780635d4c1d46146106a457806361347162146106cc5780636352211e146106df5780636c3b8699146106f257600080fd5b8063495c8bf9146106415780634e02c0781461065657806351dadc281461066957806353401df91461069157600080fd5b8063301be740116102a8578063301be740146105dc57806340c10f191461060857806342842e0e1461061b57806342966c681461062e57600080fd5b80632a55205a146105845780632e8da829146105b65780632ebb386a146105c957600080fd5b80630f3d911c1161033b57806311ad40811161031557806311ad4081146105365780631b25b077146105495780631c33b3281461055c57806323b872dd1461057157600080fd5b80630f3d911c146104585780631134055714610478578063115767561461050f57600080fd5b8063070cba1711610377578063070cba171461040c578063081812fc14610421578063095ea7b314610434578063098144d41461044757600080fd5b8063014635461461039e57806301ffc9a7146103d457806306fdde03146103f7575b600080fd5b6103b771721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6103e76103e236600461413c565b610a21565b60405190151581526020016103cb565b6103ff610a32565b6040516103cb91906141b1565b61041f61041a3660046141d9565b610ac4565b005b6103b761042f3660046141f6565b610d27565b61041f61044236600461420f565b610d4e565b6011546001600160a01b03166103b7565b61046b61046636600461423b565b610e85565b6040516103cb919061426b565b6104d86104863660046142e4565b600860209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff610100820481169167ffffffffffffffff6501000000000082041691600160681b9091041684565b60408051941515855263ffffffff938416602086015267ffffffffffffffff909216918401919091521660608201526080016103cb565b6103b77f000000000000000000000000000000000000000000000000000000000000000081565b61041f61054436600461432f565b61109f565b6103e7610557366004614351565b6110bf565b610564600181565b6040516103cb91906143b3565b61041f61057f3660046143c1565b611158565b61059761059236600461432f565b6111df565b604080516001600160a01b0390931683526020830191909152016103cb565b6103e76105c43660046141d9565b6112ca565b61041f6105d736600461423b565b6113fc565b6103e76105ea3660046141d9565b6001600160a01b031660009081526002602052604090205460ff1690565b61041f61061636600461420f565b61141a565b61041f6106293660046143c1565b611424565b61041f61063c3660046141f6565b61143f565b61064961144b565b6040516103cb9190614402565b61041f61066436600461444f565b611582565b61067c61067736600461444f565b61159f565b60405163ffffffff90911681526020016103cb565b61041f61069f36600461432f565b6115f5565b6106ac600181565b6040516effffffffffffffffffffffffffffff90911681526020016103cb565b61041f6106da3660046144a0565b611611565b6103b76106ed3660046141f6565b6117b6565b61041f61181b565b61070d61070836600461444f565b611913565b6040805193151584526020840192909252908201526060016103cb565b61073d6107383660046141d9565b6119b3565b6040519081526020016103cb565b61041f611a4d565b61041f6107613660046141d9565b611a61565b6103e76107743660046144e0565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61073d6107b036600461444f565b611c9a565b61073d7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061073d565b6000546001600160a01b03166103b7565b61073d61082136600461423b565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b6103ff611ccf565b61041f61085f3660046141f6565b611cde565b6103e76108723660046141d9565b611d05565b61041f61088536600461420f565b611de4565b61041f61089836600461451c565b611dee565b61041f6108ab3660046141d9565b611df9565b6108ec6108be3660046141d9565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b6040805192151583526fffffffffffffffffffffffffffffffff9091166020830152016103cb565b61041f6109223660046143c1565b611f46565b61041f610935366004614591565b611f84565b61094261200c565b6040516103cb9190614655565b61041f61095d36600461451c565b6120d6565b6103ff6109703660046141f6565b612188565b6106496121fb565b61073d61271081565b6103b76109943660046141f6565b6122cb565b61041f6109a73660046143c1565b6122f5565b6103e76109ba3660046144e0565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205460ff1690565b61041f6109f636600461423b565b612316565b61041f610a093660046141d9565b612333565b61041f610a1c366004614699565b6123c0565b6000610a2c82612585565b92915050565b6060600f8054610a41906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6d906146f5565b8015610aba5780601f10610a8f57610100808354040283529160200191610aba565b820191906000526020600020905b815481529060010190602001808311610a9d57829003601f168201915b5050505050905090565b610acc6125c3565b6001600160a01b03811660009081526002602052604090205460ff16610b1e576040517f385f0cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812054600180546101009092046fffffffffffffffffffffffffffffffff169291610b5f9190614746565b905080826fffffffffffffffffffffffffffffffff1614610c8d5760018181548110610b8d57610b8d61475d565b600091825260209091200154600180546001600160a01b03909216916fffffffffffffffffffffffffffffffff8516908110610bcb57610bcb61475d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600260006001856fffffffffffffffffffffffffffffffff1681548110610c2357610c2361475d565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546fffffffffffffffffffffffffffffffff92909216610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9092169190911790555b6001805480610c9e57610c9e614773565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600282526040808420805470ffffffffffffffffffffffffffffffffff1916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610d32826125cb565b506000908152600d60205260409020546001600160a01b031690565b6000610d59826117b6565b9050806001600160a01b0316836001600160a01b03161415610de85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610e045750610e0481336109ba565b610e765760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610ddf565b610e80838361262f565b505050565b60008281526007602090815260408083206001600160a01b03851684529091529020546060908067ffffffffffffffff811115610ec457610ec461454a565b604051908082528060200260200182016040528015610f1657816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610ee25790505b5060008581526007602090815260408083206001600160a01b0388168452825280832080548251818502810185019093528083529496509293909291830182828015610fad57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f705790505b5050505050905060005b828110156110965760008681526008602090815260408083206001600160a01b038916845290915281208351909190849084908110610ff857610ff861475d565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff811615158252610100810485169282019290925267ffffffffffffffff6501000000000083041692810192909252600160681b90049091166060820152845185908390811061107a5761107a61475d565b60200260200101819052508061108f90614789565b9050610fb7565b50505092915050565b6110a761269d565b6110b0826126dc565b6110bb823383612724565b5050565b6011546000906001600160a01b03161561114d5760115460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561112857600080fd5b505afa925050508015611139575060015b61114557506000611151565b506001611151565b5060015b9392505050565b6111623382612b4f565b6111d45760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610ddf565b610e80838383612bce565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b815260040161123291815260200190565b60206040518083038186803b15801561124a57600080fd5b505afa92505050801561127a575060408051601f3d908101601f19168201909252611277918101906147a4565b60015b61128357611286565b90505b806127106112b47f0000000000000000000000000000000000000000000000000000000000000000876147c1565b6112be91906147e0565b92509250509250929050565b6011546000906001600160a01b0316156113f457601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113619190614802565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b1580156113bc57600080fd5b505afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190614874565b506000919050565b61140581612ddc565b61140e82612e2f565b6110bb82826000612e79565b6110bb8282613164565b610e8083838360405180602001604052806000815250611f84565b61144881613178565b50565b6011546060906001600160a01b03161561156f57601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b1580156114aa57600080fd5b505afa1580156114be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e29190614802565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261156a9190810190614891565b905090565b5060408051600081526020810190915290565b61158b82612ddc565b61159483612e2f565b610e80838383612724565b600760205282600052604060002060205281600052604060002081815481106115c757600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6115fd61269d565b611606826126dc565b6110bb82338361318a565b6116196125c3565b600061162d6011546001600160a01b031690565b90506001600160a01b03811661166f576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c09061169d9030908890600401614943565b600060405180830381600087803b1580156116b757600080fd5b505af11580156116cb573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561179857600080fd5b505af11580156117ac573d6000803e3d6000fd5b5050505050505050565b6000818152600b60205260408120546001600160a01b031680610a2c5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ddf565b6118236125c3565b61183e71721c310194ccfc01e523fc93c9cccfa2a0ac611df9565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090611876903090600190600401614943565b600060405180830381600087803b15801561189057600080fd5b505af11580156118a4573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156118f957600080fd5b505af115801561190d573d6000803e3d6000fd5b50505050565b6000808063ffffffff841115611955576040517f0b2530f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060009283526008602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff81169265010000000000820467ffffffffffffffff1692600160681b90920490911690565b60006001600160a01b038216611a315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610ddf565b506001600160a01b03166000908152600c602052604090205490565b611a556134c7565b611a5f6000613521565b565b611a696125c3565b6001600160a01b03811660009081526002602052604090205460ff1615611abc576040517fd8110a5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516301ffc9a760e01b81527f977e0c1c0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611b1b57600080fd5b505afa158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b539190614874565b611b89576040517fb50e580c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546fffffffffffffffffffffffffffffffff811115611bd6576040517f6daf72d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526002602090815260408083208054600170ffffffffffffffffffffffffffffffffff199091166101006fffffffffffffffffffffffffffffffff89160217811790915580548082018255938190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a25050565b6000806000611caa868686611913565b509150915081611cbb576000611cc5565b611cc58142614746565b9695505050505050565b606060108054610a41906146f5565b611ce661269d565b611cef816126dc565b6002600455611cfd8161143f565b506001600455565b6011546000906001600160a01b0316156113f457601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b158015611d6457600080fd5b505afa158015611d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9c9190614802565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044016113a4565b6110bb8282613571565b6110bb33838361358b565b611e016125c3565b60006001600160a01b0382163b15611e8f576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b158015611e5357600080fd5b505afa925050508015611e83575060408051601f3d908101601f19168201909252611e8091810190614874565b60015b611e8c57611e8f565b90505b6001600160a01b03821615801590611ea5575080155b15611edc576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601154604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150601180546001600160a01b0319166001600160a01b0392909216919091179055565b611f4e61269d565b611f57816126dc565b6002600481905550611f7a83838360405180602001604052806000815250612000565b5050600160045550565b611f8e3383612b4f565b6120005760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610ddf565b61190d84848484613652565b60408051606081018252600080825260208201819052918101919091526011546001600160a01b0316156120b557601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561207d57600080fd5b505afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156a9190614802565b50604080516060810182526000808252602082018190529181019190915290565b336001600160a01b03831681141561211a576040517fc934974800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03818116600081815260066020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c05691015b60405180910390a3505050565b6060612193826125cb565b60006121aa60408051602081019091526000815290565b905060008151116121ca5760405180602001604052806000815250611151565b806121d4846136db565b6040516020016121e5929190614960565b6040516020818303038152906040529392505050565b6011546060906001600160a01b03161561156f57601154604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561225a57600080fd5b505afa15801561226e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122929190614802565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401611516565b600181815481106122db57600080fd5b6000918252602090912001546001600160a01b0316905081565b6122fd61269d565b612306816126dc565b6002600455611f7a8383836111d4565b61231e6125c3565b61232781612ddc565b6110bb82826001612e79565b61233b6134c7565b6001600160a01b0381166123b75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ddf565b61144881613521565b6123c86125c3565b6123d184611df9565b604051630368065360e61b81526001600160a01b0385169063da0194c0906123ff9030908790600401614943565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d744314915060440161177e565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166125805760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610ddf565b919050565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610a2c5750610a2c82613785565b611a5f6134c7565b6000818152600b60205260409020546001600160a01b03166114485760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ddf565b6000818152600d6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612664826117b6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6126a6336105ea565b611a5f576040517ff4b8028800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126ee6126e8826137c3565b33610774565b611448576040517fdb07237500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000612734868686611913565b92509250925082612771576040517f85fceded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526007602090815260408083206001600160a01b03891684529091528120548591906127a390600190614746565b90508083146129285760008881526007602090815260408083206001600160a01b038b16845290915290208054829081106127e0576127e061475d565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16600760008a81526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020848154811061284d5761284d61475d565b600091825260208083206008808404909101805463ffffffff96871660046007968716026101000a90810297021916959095179094558b835292835260408083206001600160a01b038c168085529085528184208d855292855281842090845290935291812080548693929190859081106128ca576128ca61475d565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805470ffffffff000000000000000000000000001916600160681b93909216929092021790555b60008881526007602090815260408083206001600160a01b038b168452909152902080548061295957612959614773565b600082815260208082206008600019909401848104909101805463ffffffff600460078516026101000a81021990911690915594558b825291825260408082206001600160a01b038c1683528352808220938616825292909152908120805470ffffffffffffffffffffffffffffffffff191690556129d7896137c3565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a600080604051612a359392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7657600080fd5b505afa158015612a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aae9190614874565b15612ad45760008981526005602052604081208054909190612acf9061498f565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b158015612b2c57600080fd5b505af1158015612b40573d6000803e3d6000fd5b50505050505050505050505050565b600080612b5b836117b6565b9050806001600160a01b0316846001600160a01b03161480612ba257506001600160a01b038082166000908152600e602090815260408083209388168352929052205460ff165b80612bc65750836001600160a01b0316612bbb84610d27565b6001600160a01b0316145b949350505050565b826001600160a01b0316612be1826117b6565b6001600160a01b031614612c455760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610ddf565b6001600160a01b038216612cc05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ddf565b612ccd83838360016137ce565b826001600160a01b0316612ce0826117b6565b6001600160a01b031614612d445760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610ddf565b6000818152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600c8552838620805460001901905590871680865283862080546001019055868652600b90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610e808383836001613853565b6001600160a01b03811660009081526002602052604090205460ff1615611448576040517fb6708d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612e39826137c3565b6001600160a01b031614611448576040517fb1160e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e84846137c3565b60008581526007602090815260408083206001600160a01b038816845290915281205491925050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612ee457600080fd5b505afa158015612ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1c9190614874565b15612f455760008581526005602052604081208054839290612f3f908490614746565b90915550505b60005b818110156131315760008681526007602090815260408083206001600160a01b03891684529091528120805483908110612f8457612f8461475d565b600091825260208083206008808404909101548b855290825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff81161515825295860482168188015265010000000000860467ffffffffffffffff16818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526008602090815260408083206001600160a01b038c811680865291845282852063ffffffff8916808752945293829020805470ffffffffffffffffffffffffffffffffff191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b15801561310b57600080fd5b505af115801561311f573d6000803e3d6000fd5b50505050836001019350505050612f48565b5060008581526007602090815260408083206001600160a01b0388168452909152812061315d916140ed565b5050505050565b61316e828261387a565b6110bb8282613951565b61318181613af4565b61144881613ba1565b6000613197848484611913565b5050905080156131d3576040517fbf2bc3b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526007602090815260408083206001600160a01b03871684529091529020547f0000000000000000000000000000000000000000000000000000000000000000811061324f576040517f026a381300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526007602081815260408084206001600160a01b038916808652908352818520805460018082018355918752848720600880830490910180549290971660040261010090810a63ffffffff818102199094168d8516918202179098558d895290865284882093885292855283872086885290945291852080547fffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff0016650100000000004267ffffffffffffffff1602179092177fffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000ff16930270ffffffff00000000000000000000000000191692909217600160681b91851691909102179055839061335b876137c3565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e957600080fd5b505afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190614874565b1561343c576000878152600560205260409020805460010190555b6040517f688a37410000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b1580156134a657600080fd5b505af11580156134ba573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b03163314611a5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ddf565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6110bb828260405180602001604052806000815250613c30565b816001600160a01b0316836001600160a01b031614156135ed5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ddf565b6001600160a01b038381166000818152600e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910161217b565b61365d848484612bce565b61366984848484613cb9565b61190d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ddf565b606060006136e883613e1c565b600101905060008167ffffffffffffffff8111156137085761370861454a565b6040519080825280601f01601f191660200182016040528015613732576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846137785761377d565b61373c565b509392505050565b60006001600160e01b031982167f86455d28000000000000000000000000000000000000000000000000000000001480610a2c5750610a2c82613efe565b6000610a2c826117b6565b6000805b8281101561384b576137e481856149a6565b6000818152600560205260409020549092501561382d576040517fe49dac6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600454141561384357613843868684613f3c565b6001016137d2565b505050505050565b60005b8181101561315d57613872858561386d84876149a6565b613f98565b600101613856565b6001600160a01b0382166138ba576040517fa3d450ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801561393d57600080fd5b505af115801561384b573d6000803e3d6000fd5b6001600160a01b0382166139a75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ddf565b6000818152600b60205260409020546001600160a01b031615613a0c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ddf565b613a1a6000838360016137ce565b6000818152600b60205260409020546001600160a01b031615613a7f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ddf565b6001600160a01b0382166000818152600c6020908152604080832080546001019055848352600b90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46110bb600083836001613853565b6000613aff826117b6565b9050613b0f8160008460016137ce565b613b18826117b6565b6000838152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552600c84528285208054600019019055878552600b909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46110bb816000846001613853565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015613c1c57600080fd5b505af115801561315d573d6000803e3d6000fd5b613c3a8383613164565b613c476000848484613cb9565b610e805760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ddf565b60006001600160a01b0384163b15613e1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613cfd9033908990889088906004016149be565b602060405180830381600087803b158015613d1757600080fd5b505af1925050508015613d47575060408051601f3d908101601f19168201909252613d44918101906149f0565b60015b613df7573d808015613d75576040519150601f19603f3d011682016040523d82523d6000602084013e613d7a565b606091505b508051613def5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ddf565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612bc6565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613e65577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613e91576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613eaf57662386f26fc10000830492506010015b6305f5e1008310613ec7576305f5e100830492506008015b6127108310613edb57612710830492506004015b60648310613eed576064830492506002015b600a8310610a2c5760010192915050565b60006001600160e01b031982167ff9f7ab41000000000000000000000000000000000000000000000000000000001480610a2c5750610a2c82613fe6565b6001600160a01b038381161590831615818015613f565750805b15613f7457604051635cbd944160e01b815260040160405180910390fd5b8115613f80575b61315d565b8015613f8b57613f7b565b61315d3386868634614068565b6001600160a01b038381161590831615818015613fb25750805b15613fd057604051635cbd944160e01b815260040160405180910390fd5b8115613fdb57613f7b565b8015613f7b57613f7b565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061404957506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a2c57506301ffc9a760e01b6001600160e01b0319831614610a2c565b6011546001600160a01b03161561315d5760115460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b1580156140ce57600080fd5b505afa1580156140e2573d6000803e3d6000fd5b505050505050505050565b50805460008255600701600890049060005260206000209081019061144891905b80821115614122576000815560010161410e565b5090565b6001600160e01b03198116811461144857600080fd5b60006020828403121561414e57600080fd5b813561115181614126565b60005b8381101561417457818101518382015260200161415c565b8381111561190d5750506000910152565b6000815180845261419d816020860160208601614159565b601f01601f19169290920160200192915050565b6020815260006111516020830184614185565b6001600160a01b038116811461144857600080fd5b6000602082840312156141eb57600080fd5b8135611151816141c4565b60006020828403121561420857600080fd5b5035919050565b6000806040838503121561422257600080fd5b823561422d816141c4565b946020939093013593505050565b6000806040838503121561424e57600080fd5b823591506020830135614260816141c4565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156142d75781518051151585528681015163ffffffff908116888701528682015167ffffffffffffffff1687870152606091820151169085015260809093019290850190600101614288565b5091979650505050505050565b6000806000606084860312156142f957600080fd5b83359250602084013561430b816141c4565b9150604084013563ffffffff8116811461432457600080fd5b809150509250925092565b6000806040838503121561434257600080fd5b50508035926020909101359150565b60008060006060848603121561436657600080fd5b8335614371816141c4565b92506020840135614381816141c4565b91506040840135614324816141c4565b600781106143af57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a2c8284614391565b6000806000606084860312156143d657600080fd5b83356143e1816141c4565b925060208401356143f1816141c4565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156144435783516001600160a01b03168352928401929184019160010161441e565b50909695505050505050565b60008060006060848603121561446457600080fd5b8335925060208401356143f1816141c4565b6007811061144857600080fd5b6effffffffffffffffffffffffffffff8116811461144857600080fd5b6000806000606084860312156144b557600080fd5b83356144c081614476565b925060208401356144d081614483565b9150604084013561432481614483565b600080604083850312156144f357600080fd5b82356144fe816141c4565b91506020830135614260816141c4565b801515811461144857600080fd5b6000806040838503121561452f57600080fd5b823561453a816141c4565b915060208301356142608161450e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145895761458961454a565b604052919050565b600080600080608085870312156145a757600080fd5b84356145b2816141c4565b93506020858101356145c3816141c4565b935060408601359250606086013567ffffffffffffffff808211156145e757600080fd5b818801915088601f8301126145fb57600080fd5b81358181111561460d5761460d61454a565b61461f601f8201601f19168501614560565b9150808252898482850101111561463557600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050614668828451614391565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080600080608085870312156146af57600080fd5b84356146ba816141c4565b935060208501356146ca81614476565b925060408501356146da81614483565b915060608501356146ea81614483565b939692955090935050565b600181811c9082168061470957607f821691505b6020821081141561472a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561475857614758614730565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561479d5761479d614730565b5060010190565b6000602082840312156147b657600080fd5b8151611151816141c4565b60008160001904831182151516156147db576147db614730565b500290565b6000826147fd57634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561481457600080fd5b6040516060810181811067ffffffffffffffff821117156148375761483761454a565b604052825161484581614476565b8152602083015161485581614483565b6020820152604083015161486881614483565b60408201529392505050565b60006020828403121561488657600080fd5b81516111518161450e565b600060208083850312156148a457600080fd5b825167ffffffffffffffff808211156148bc57600080fd5b818501915085601f8301126148d057600080fd5b8151818111156148e2576148e261454a565b8060051b91506148f3848301614560565b818152918301840191848101908884111561490d57600080fd5b938501935b838510156149375784519250614927836141c4565b8282529385019390850190614912565b98975050505050505050565b6001600160a01b0383168152604081016111516020830184614391565b60008351614972818460208801614159565b835190830190614986818360208801614159565b01949350505050565b60008161499e5761499e614730565b506000190190565b600082198211156149b9576149b9614730565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611cc56080830184614185565b600060208284031215614a0257600080fd5b81516111518161412656fea26469706673582212204009608c262201d30f6d09736d224bf79209df063e39cf10c5df4541e0e1e51164736f6c63430008090033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106103995760003560e01c8063703fa929116101e9578063a9fc664e1161010f578063d007af5c116100ad578063e985e9c51161007c578063e985e9c5146109ac578063f1e923c5146109e8578063f2fde38b146109fb578063fd762d9214610a0e57600080fd5b8063d007af5c14610975578063d73792a91461097d578063e2989f4c14610986578063e370ab461461099957600080fd5b8063b88d4fde116100e9578063b88d4fde14610927578063be537f431461093a578063c05e2f441461094f578063c87b56dd1461096257600080fd5b8063a9fc664e1461089d578063aa6cab5a146108b0578063aca139f71461091457600080fd5b8063869f9110116101875780639bc17ea4116101565780639bc17ea4146108515780639d645a4414610864578063a144819414610877578063a22cb4651461088a57600080fd5b8063869f9110146107dc5780638da5cb5b14610802578063916237181461081357806395d89b411461084957600080fd5b80637e10b35b116101c35780637e10b35b146107535780637f1a5ce114610766578063816a1501146107a257806381ddcc1f146107b557600080fd5b8063703fa929146106fa57806370a082311461072a578063715018a61461074b57600080fd5b80632a55205a116102ce578063495c8bf91161026c5780635d4c1d461161023b5780635d4c1d46146106a457806361347162146106cc5780636352211e146106df5780636c3b8699146106f257600080fd5b8063495c8bf9146106415780634e02c0781461065657806351dadc281461066957806353401df91461069157600080fd5b8063301be740116102a8578063301be740146105dc57806340c10f191461060857806342842e0e1461061b57806342966c681461062e57600080fd5b80632a55205a146105845780632e8da829146105b65780632ebb386a146105c957600080fd5b80630f3d911c1161033b57806311ad40811161031557806311ad4081146105365780631b25b077146105495780631c33b3281461055c57806323b872dd1461057157600080fd5b80630f3d911c146104585780631134055714610478578063115767561461050f57600080fd5b8063070cba1711610377578063070cba171461040c578063081812fc14610421578063095ea7b314610434578063098144d41461044757600080fd5b8063014635461461039e57806301ffc9a7146103d457806306fdde03146103f7575b600080fd5b6103b771721c310194ccfc01e523fc93c9cccfa2a0ac81565b6040516001600160a01b0390911681526020015b60405180910390f35b6103e76103e236600461413c565b610a21565b60405190151581526020016103cb565b6103ff610a32565b6040516103cb91906141b1565b61041f61041a3660046141d9565b610ac4565b005b6103b761042f3660046141f6565b610d27565b61041f61044236600461420f565b610d4e565b6011546001600160a01b03166103b7565b61046b61046636600461423b565b610e85565b6040516103cb919061426b565b6104d86104863660046142e4565b600860209081526000938452604080852082529284528284209052825290205460ff81169063ffffffff610100820481169167ffffffffffffffff6501000000000082041691600160681b9091041684565b60408051941515855263ffffffff938416602086015267ffffffffffffffff909216918401919091521660608201526080016103cb565b6103b77f000000000000000000000000000000000000000000000000000000000000000081565b61041f61054436600461432f565b61109f565b6103e7610557366004614351565b6110bf565b610564600181565b6040516103cb91906143b3565b61041f61057f3660046143c1565b611158565b61059761059236600461432f565b6111df565b604080516001600160a01b0390931683526020830191909152016103cb565b6103e76105c43660046141d9565b6112ca565b61041f6105d736600461423b565b6113fc565b6103e76105ea3660046141d9565b6001600160a01b031660009081526002602052604090205460ff1690565b61041f61061636600461420f565b61141a565b61041f6106293660046143c1565b611424565b61041f61063c3660046141f6565b61143f565b61064961144b565b6040516103cb9190614402565b61041f61066436600461444f565b611582565b61067c61067736600461444f565b61159f565b60405163ffffffff90911681526020016103cb565b61041f61069f36600461432f565b6115f5565b6106ac600181565b6040516effffffffffffffffffffffffffffff90911681526020016103cb565b61041f6106da3660046144a0565b611611565b6103b76106ed3660046141f6565b6117b6565b61041f61181b565b61070d61070836600461444f565b611913565b6040805193151584526020840192909252908201526060016103cb565b61073d6107383660046141d9565b6119b3565b6040519081526020016103cb565b61041f611a4d565b61041f6107613660046141d9565b611a61565b6103e76107743660046144e0565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61073d6107b036600461444f565b611c9a565b61073d7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061073d565b6000546001600160a01b03166103b7565b61073d61082136600461423b565b60009182526007602090815260408084206001600160a01b0393909316845291905290205490565b6103ff611ccf565b61041f61085f3660046141f6565b611cde565b6103e76108723660046141d9565b611d05565b61041f61088536600461420f565b611de4565b61041f61089836600461451c565b611dee565b61041f6108ab3660046141d9565b611df9565b6108ec6108be3660046141d9565b60026020526000908152604090205460ff81169061010090046fffffffffffffffffffffffffffffffff1682565b6040805192151583526fffffffffffffffffffffffffffffffff9091166020830152016103cb565b61041f6109223660046143c1565b611f46565b61041f610935366004614591565b611f84565b61094261200c565b6040516103cb9190614655565b61041f61095d36600461451c565b6120d6565b6103ff6109703660046141f6565b612188565b6106496121fb565b61073d61271081565b6103b76109943660046141f6565b6122cb565b61041f6109a73660046143c1565b6122f5565b6103e76109ba3660046144e0565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205460ff1690565b61041f6109f636600461423b565b612316565b61041f610a093660046141d9565b612333565b61041f610a1c366004614699565b6123c0565b6000610a2c82612585565b92915050565b6060600f8054610a41906146f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6d906146f5565b8015610aba5780601f10610a8f57610100808354040283529160200191610aba565b820191906000526020600020905b815481529060010190602001808311610a9d57829003601f168201915b5050505050905090565b610acc6125c3565b6001600160a01b03811660009081526002602052604090205460ff16610b1e576040517f385f0cec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038116600090815260026020526040812054600180546101009092046fffffffffffffffffffffffffffffffff169291610b5f9190614746565b905080826fffffffffffffffffffffffffffffffff1614610c8d5760018181548110610b8d57610b8d61475d565b600091825260209091200154600180546001600160a01b03909216916fffffffffffffffffffffffffffffffff8516908110610bcb57610bcb61475d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600260006001856fffffffffffffffffffffffffffffffff1681548110610c2357610c2361475d565b60009182526020808320909101546001600160a01b03168352820192909252604001902080546fffffffffffffffffffffffffffffffff92909216610100027fffffffffffffffffffffffffffffff00000000000000000000000000000000ff9092169190911790555b6001805480610c9e57610c9e614773565b60008281526020808220600019908401810180546001600160a01b03191690559092019092556001600160a01b038516808352600282526040808420805470ffffffffffffffffffffffffffffffffff1916905551928352917fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a2505050565b6000610d32826125cb565b506000908152600d60205260409020546001600160a01b031690565b6000610d59826117b6565b9050806001600160a01b0316836001600160a01b03161415610de85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b336001600160a01b0382161480610e045750610e0481336109ba565b610e765760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610ddf565b610e80838361262f565b505050565b60008281526007602090815260408083206001600160a01b03851684529091529020546060908067ffffffffffffffff811115610ec457610ec461454a565b604051908082528060200260200182016040528015610f1657816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610ee25790505b5060008581526007602090815260408083206001600160a01b0388168452825280832080548251818502810185019093528083529496509293909291830182828015610fad57602002820191906000526020600020906000905b82829054906101000a900463ffffffff1663ffffffff1681526020019060040190602082600301049283019260010382029150808411610f705790505b5050505050905060005b828110156110965760008681526008602090815260408083206001600160a01b038916845290915281208351909190849084908110610ff857610ff861475d565b60209081029190910181015163ffffffff90811683528282019390935260409182016000208251608081018452905460ff811615158252610100810485169282019290925267ffffffffffffffff6501000000000083041692810192909252600160681b90049091166060820152845185908390811061107a5761107a61475d565b60200260200101819052508061108f90614789565b9050610fb7565b50505092915050565b6110a761269d565b6110b0826126dc565b6110bb823383612724565b5050565b6011546000906001600160a01b03161561114d5760115460405163050bf71960e31b81526001600160a01b038681166004830152858116602483015284811660448301529091169063285fb8c89060640160006040518083038186803b15801561112857600080fd5b505afa925050508015611139575060015b61114557506000611151565b506001611151565b5060015b9392505050565b6111623382612b4f565b6111d45760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610ddf565b610e80838383612bce565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e866040518263ffffffff1660e01b815260040161123291815260200190565b60206040518083038186803b15801561124a57600080fd5b505afa92505050801561127a575060408051601f3d908101601f19168201909252611277918101906147a4565b60015b61128357611286565b90505b806127106112b47f0000000000000000000000000000000000000000000000000000000000000000876147c1565b6112be91906147e0565b92509250509250929050565b6011546000906001600160a01b0316156113f457601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063d72dde5e90829063b95545529060240160606040518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113619190614802565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044015b60206040518083038186803b1580156113bc57600080fd5b505afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2c9190614874565b506000919050565b61140581612ddc565b61140e82612e2f565b6110bb82826000612e79565b6110bb8282613164565b610e8083838360405180602001604052806000815250611f84565b61144881613178565b50565b6011546060906001600160a01b03161561156f57601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690633fe5df9990829063b95545529060240160606040518083038186803b1580156114aa57600080fd5b505afa1580156114be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e29190614802565b602001516040516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526024015b60006040518083038186803b15801561152e57600080fd5b505afa158015611542573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261156a9190810190614891565b905090565b5060408051600081526020810190915290565b61158b82612ddc565b61159483612e2f565b610e80838383612724565b600760205282600052604060002060205281600052604060002081815481106115c757600080fd5b906000526020600020906008918282040191900660040292509250509054906101000a900463ffffffff1681565b6115fd61269d565b611606826126dc565b6110bb82338361318a565b6116196125c3565b600061162d6011546001600160a01b031690565b90506001600160a01b03811661166f576040517f39ffc7ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051630368065360e61b81526001600160a01b0382169063da0194c09061169d9030908890600401614943565b600060405180830381600087803b1580156116b757600080fd5b505af11580156116cb573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff861660248201526001600160a01b0384169250632304aa029150604401600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0384169250638d74431491506044015b600060405180830381600087803b15801561179857600080fd5b505af11580156117ac573d6000803e3d6000fd5b5050505050505050565b6000818152600b60205260408120546001600160a01b031680610a2c5760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ddf565b6118236125c3565b61183e71721c310194ccfc01e523fc93c9cccfa2a0ac611df9565b604051630368065360e61b815271721c310194ccfc01e523fc93c9cccfa2a0ac9063da0194c090611876903090600190600401614943565b600060405180830381600087803b15801561189057600080fd5b505af11580156118a4573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526001602482015271721c310194ccfc01e523fc93c9cccfa2a0ac9250632304aa029150604401600060405180830381600087803b1580156118f957600080fd5b505af115801561190d573d6000803e3d6000fd5b50505050565b6000808063ffffffff841115611955576040517f0b2530f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505060009283526008602090815260408085206001600160a01b0394909416855292815282842063ffffffff9283168552905291205460ff81169265010000000000820467ffffffffffffffff1692600160681b90920490911690565b60006001600160a01b038216611a315760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610ddf565b506001600160a01b03166000908152600c602052604090205490565b611a556134c7565b611a5f6000613521565b565b611a696125c3565b6001600160a01b03811660009081526002602052604090205460ff1615611abc576040517fd8110a5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040516301ffc9a760e01b81527f977e0c1c0000000000000000000000000000000000000000000000000000000060048201526001600160a01b038216906301ffc9a79060240160206040518083038186803b158015611b1b57600080fd5b505afa158015611b2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b539190614874565b611b89576040517fb50e580c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546fffffffffffffffffffffffffffffffff811115611bd6576040517f6daf72d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03821660008181526002602090815260408083208054600170ffffffffffffffffffffffffffffffffff199091166101006fffffffffffffffffffffffffffffffff89160217811790915580548082018255938190527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf690930180546001600160a01b03191685179055519182527fe152843d7324c2cb58e95865f2b78d38f2dab6ce9eadf09438ec2c41e78c705e910160405180910390a25050565b6000806000611caa868686611913565b509150915081611cbb576000611cc5565b611cc58142614746565b9695505050505050565b606060108054610a41906146f5565b611ce661269d565b611cef816126dc565b6002600455611cfd8161143f565b506001600455565b6011546000906001600160a01b0316156113f457601154604051635caaa2a960e11b81523060048201526001600160a01b0390911690639445f53090829063b95545529060240160606040518083038186803b158015611d6457600080fd5b505afa158015611d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9c9190614802565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff90911660048201526001600160a01b03851660248201526044016113a4565b6110bb8282613571565b6110bb33838361358b565b611e016125c3565b60006001600160a01b0382163b15611e8f576040516301ffc9a760e01b8152600060048201526001600160a01b038316906301ffc9a79060240160206040518083038186803b158015611e5357600080fd5b505afa925050508015611e83575060408051601f3d908101601f19168201909252611e8091810190614874565b60015b611e8c57611e8f565b90505b6001600160a01b03821615801590611ea5575080155b15611edc576040517f32483afb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601154604080516001600160a01b03928316815291841660208301527fcc5dc080ff977b3c3a211fa63ab74f90f658f5ba9d3236e92c8f59570f442aac910160405180910390a150601180546001600160a01b0319166001600160a01b0392909216919091179055565b611f4e61269d565b611f57816126dc565b6002600481905550611f7a83838360405180602001604052806000815250612000565b5050600160045550565b611f8e3383612b4f565b6120005760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610ddf565b61190d84848484613652565b60408051606081018252600080825260208201819052918101919091526011546001600160a01b0316156120b557601154604051635caaa2a960e11b81523060048201526001600160a01b039091169063b95545529060240160606040518083038186803b15801561207d57600080fd5b505afa158015612091573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156a9190614802565b50604080516060810182526000808252602082018190529181019190915290565b336001600160a01b03831681141561211a576040517fc934974800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03818116600081815260066020908152604080832094881680845294825291829020805460ff191687151590811790915591519182527f83347dcc77580bb841ae3bac834b5b8ac5ccd2326276d265e638987eb6b2c05691015b60405180910390a3505050565b6060612193826125cb565b60006121aa60408051602081019091526000815290565b905060008151116121ca5760405180602001604052806000815250611151565b806121d4846136db565b6040516020016121e5929190614960565b6040516020818303038152906040529392505050565b6011546060906001600160a01b03161561156f57601154604051635caaa2a960e11b81523060048201526001600160a01b03909116906317e94a6c90829063b95545529060240160606040518083038186803b15801561225a57600080fd5b505afa15801561226e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122929190614802565b60409081015190516001600160e01b031960e084901b1681526effffffffffffffffffffffffffffff9091166004820152602401611516565b600181815481106122db57600080fd5b6000918252602090912001546001600160a01b0316905081565b6122fd61269d565b612306816126dc565b6002600455611f7a8383836111d4565b61231e6125c3565b61232781612ddc565b6110bb82826001612e79565b61233b6134c7565b6001600160a01b0381166123b75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ddf565b61144881613521565b6123c86125c3565b6123d184611df9565b604051630368065360e61b81526001600160a01b0385169063da0194c0906123ff9030908790600401614943565b600060405180830381600087803b15801561241957600080fd5b505af115801561242d573d6000803e3d6000fd5b5050604051631182550160e11b81523060048201526effffffffffffffffffffffffffffff851660248201526001600160a01b0387169250632304aa029150604401600060405180830381600087803b15801561248957600080fd5b505af115801561249d573d6000803e3d6000fd5b505060405163235d10c560e21b81523060048201526effffffffffffffffffffffffffffff841660248201526001600160a01b0387169250638d744314915060440161177e565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b0381166125805760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c6564000000000000000000006044820152606401610ddf565b919050565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610a2c5750610a2c82613785565b611a5f6134c7565b6000818152600b60205260409020546001600160a01b03166114485760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610ddf565b6000818152600d6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612664826117b6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6126a6336105ea565b611a5f576040517ff4b8028800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126ee6126e8826137c3565b33610774565b611448576040517fdb07237500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806000612734868686611913565b92509250925082612771576040517f85fceded00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008681526007602090815260408083206001600160a01b03891684529091528120548591906127a390600190614746565b90508083146129285760008881526007602090815260408083206001600160a01b038b16845290915290208054829081106127e0576127e061475d565b90600052602060002090600891828204019190066004029054906101000a900463ffffffff16600760008a81526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020848154811061284d5761284d61475d565b600091825260208083206008808404909101805463ffffffff96871660046007968716026101000a90810297021916959095179094558b835292835260408083206001600160a01b038c168085529085528184208d855292855281842090845290935291812080548693929190859081106128ca576128ca61475d565b6000918252602080832060088304015460079092166004026101000a90910463ffffffff90811684529083019390935260409091019020805470ffffffff000000000000000000000000001916600160681b93909216929092021790555b60008881526007602090815260408083206001600160a01b038b168452909152902080548061295957612959614773565b600082815260208082206008600019909401848104909101805463ffffffff600460078516026101000a81021990911690915594558b825291825260408082206001600160a01b038c1683528352808220938616825292909152908120805470ffffffffffffffffffffffffffffffffff191690556129d7896137c3565b9050876001600160a01b0316816001600160a01b03168a7f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee8a600080604051612a359392919092835290151560208301521515604082015260600190565b60405180910390a4876001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612a7657600080fd5b505afa158015612a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aae9190614874565b15612ad45760008981526005602052604081208054909190612acf9061498f565b909155505b604051636d4229c960e01b81526001600160a01b038281166004830152602482018b90526044820189905260648201879052891690636d4229c990608401600060405180830381600087803b158015612b2c57600080fd5b505af1158015612b40573d6000803e3d6000fd5b50505050505050505050505050565b600080612b5b836117b6565b9050806001600160a01b0316846001600160a01b03161480612ba257506001600160a01b038082166000908152600e602090815260408083209388168352929052205460ff165b80612bc65750836001600160a01b0316612bbb84610d27565b6001600160a01b0316145b949350505050565b826001600160a01b0316612be1826117b6565b6001600160a01b031614612c455760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610ddf565b6001600160a01b038216612cc05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610ddf565b612ccd83838360016137ce565b826001600160a01b0316612ce0826117b6565b6001600160a01b031614612d445760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610ddf565b6000818152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600c8552838620805460001901905590871680865283862080546001019055868652600b90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4610e808383836001613853565b6001600160a01b03811660009081526002602052604090205460ff1615611448576040517fb6708d9a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33612e39826137c3565b6001600160a01b031614611448576040517fb1160e7100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612e84846137c3565b60008581526007602090815260408083206001600160a01b038816845290915281205491925050836001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b158015612ee457600080fd5b505afa158015612ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1c9190614874565b15612f455760008581526005602052604081208054839290612f3f908490614746565b90915550505b60005b818110156131315760008681526007602090815260408083206001600160a01b03891684529091528120805483908110612f8457612f8461475d565b600091825260208083206008808404909101548b855290825260408085206001600160a01b038c8116808852918552828720600790961660040261010090810a90940463ffffffff9081168089529686528388208451608081018652905460ff81161515825295860482168188015265010000000000860467ffffffffffffffff16818601819052600160681b9096049091166060808301919091528451888152968701989098528c151593860193909352949650909491939092908916918c917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee910160405180910390a460008981526008602090815260408083206001600160a01b038c811680865291845282852063ffffffff8916808752945293829020805470ffffffffffffffffffffffffffffffffff191690559051636d4229c960e01b81529289166004840152602483018c905260448301919091526064820183905290636d4229c990608401600060405180830381600087803b15801561310b57600080fd5b505af115801561311f573d6000803e3d6000fd5b50505050836001019350505050612f48565b5060008581526007602090815260408083206001600160a01b0388168452909152812061315d916140ed565b5050505050565b61316e828261387a565b6110bb8282613951565b61318181613af4565b61144881613ba1565b6000613197848484611913565b5050905080156131d3576040517fbf2bc3b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008481526007602090815260408083206001600160a01b03871684529091529020547f0000000000000000000000000000000000000000000000000000000000000000811061324f576040517f026a381300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526007602081815260408084206001600160a01b038916808652908352818520805460018082018355918752848720600880830490910180549290971660040261010090810a63ffffffff818102199094168d8516918202179098558d895290865284882093885292855283872086885290945291852080547fffffffffffffffffffffffffffffffffffffff0000000000000000ffffffff0016650100000000004267ffffffffffffffff1602179092177fffffffffffffffffffffffffffffff00000000ffffffffffffffff00000000ff16930270ffffffff00000000000000000000000000191692909217600160681b91851691909102179055839061335b876137c3565b604080518781526001602082015260008183015290519192506001600160a01b0388811692908416918a917f1171d71105bda3fa01f863317a96e01684416ccb1e5416de7c09510bdfbe6aee9181900360600190a4856001600160a01b03166392b612946040518163ffffffff1660e01b815260040160206040518083038186803b1580156133e957600080fd5b505afa1580156133fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134219190614874565b1561343c576000878152600560205260409020805460010190555b6040517f688a37410000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152602482018990526044820187905287169063688a374190606401600060405180830381600087803b1580156134a657600080fd5b505af11580156134ba573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b03163314611a5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ddf565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6110bb828260405180602001604052806000815250613c30565b816001600160a01b0316836001600160a01b031614156135ed5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ddf565b6001600160a01b038381166000818152600e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910161217b565b61365d848484612bce565b61366984848484613cb9565b61190d5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ddf565b606060006136e883613e1c565b600101905060008167ffffffffffffffff8111156137085761370861454a565b6040519080825280601f01601f191660200182016040528015613732576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85049450846137785761377d565b61373c565b509392505050565b60006001600160e01b031982167f86455d28000000000000000000000000000000000000000000000000000000001480610a2c5750610a2c82613efe565b6000610a2c826117b6565b6000805b8281101561384b576137e481856149a6565b6000818152600560205260409020549092501561382d576040517fe49dac6100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600454141561384357613843868684613f3c565b6001016137d2565b505050505050565b60005b8181101561315d57613872858561386d84876149a6565b613f98565b600101613856565b6001600160a01b0382166138ba576040517fa3d450ca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990604401600060405180830381600087803b15801561393d57600080fd5b505af115801561384b573d6000803e3d6000fd5b6001600160a01b0382166139a75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ddf565b6000818152600b60205260409020546001600160a01b031615613a0c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ddf565b613a1a6000838360016137ce565b6000818152600b60205260409020546001600160a01b031615613a7f5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ddf565b6001600160a01b0382166000818152600c6020908152604080832080546001019055848352600b90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46110bb600083836001613853565b6000613aff826117b6565b9050613b0f8160008460016137ce565b613b18826117b6565b6000838152600d6020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552600c84528285208054600019019055878552600b909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a46110bb816000846001613853565b6040517f42966c68000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015613c1c57600080fd5b505af115801561315d573d6000803e3d6000fd5b613c3a8383613164565b613c476000848484613cb9565b610e805760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ddf565b60006001600160a01b0384163b15613e1157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613cfd9033908990889088906004016149be565b602060405180830381600087803b158015613d1757600080fd5b505af1925050508015613d47575060408051601f3d908101601f19168201909252613d44918101906149f0565b60015b613df7573d808015613d75576040519150601f19603f3d011682016040523d82523d6000602084013e613d7a565b606091505b508051613def5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610ddf565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612bc6565b506001949350505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310613e65577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310613e91576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613eaf57662386f26fc10000830492506010015b6305f5e1008310613ec7576305f5e100830492506008015b6127108310613edb57612710830492506004015b60648310613eed576064830492506002015b600a8310610a2c5760010192915050565b60006001600160e01b031982167ff9f7ab41000000000000000000000000000000000000000000000000000000001480610a2c5750610a2c82613fe6565b6001600160a01b038381161590831615818015613f565750805b15613f7457604051635cbd944160e01b815260040160405180910390fd5b8115613f80575b61315d565b8015613f8b57613f7b565b61315d3386868634614068565b6001600160a01b038381161590831615818015613fb25750805b15613fd057604051635cbd944160e01b815260040160405180910390fd5b8115613fdb57613f7b565b8015613f7b57613f7b565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061404957506001600160e01b031982167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610a2c57506301ffc9a760e01b6001600160e01b0319831614610a2c565b6011546001600160a01b03161561315d5760115460405163050bf71960e31b81526001600160a01b038781166004830152868116602483015285811660448301529091169063285fb8c89060640160006040518083038186803b1580156140ce57600080fd5b505afa1580156140e2573d6000803e3d6000fd5b505050505050505050565b50805460008255600701600890049060005260206000209081019061144891905b80821115614122576000815560010161410e565b5090565b6001600160e01b03198116811461144857600080fd5b60006020828403121561414e57600080fd5b813561115181614126565b60005b8381101561417457818101518382015260200161415c565b8381111561190d5750506000910152565b6000815180845261419d816020860160208601614159565b601f01601f19169290920160200192915050565b6020815260006111516020830184614185565b6001600160a01b038116811461144857600080fd5b6000602082840312156141eb57600080fd5b8135611151816141c4565b60006020828403121561420857600080fd5b5035919050565b6000806040838503121561422257600080fd5b823561422d816141c4565b946020939093013593505050565b6000806040838503121561424e57600080fd5b823591506020830135614260816141c4565b809150509250929050565b602080825282518282018190526000919060409081850190868401855b828110156142d75781518051151585528681015163ffffffff908116888701528682015167ffffffffffffffff1687870152606091820151169085015260809093019290850190600101614288565b5091979650505050505050565b6000806000606084860312156142f957600080fd5b83359250602084013561430b816141c4565b9150604084013563ffffffff8116811461432457600080fd5b809150509250925092565b6000806040838503121561434257600080fd5b50508035926020909101359150565b60008060006060848603121561436657600080fd5b8335614371816141c4565b92506020840135614381816141c4565b91506040840135614324816141c4565b600781106143af57634e487b7160e01b600052602160045260246000fd5b9052565b60208101610a2c8284614391565b6000806000606084860312156143d657600080fd5b83356143e1816141c4565b925060208401356143f1816141c4565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156144435783516001600160a01b03168352928401929184019160010161441e565b50909695505050505050565b60008060006060848603121561446457600080fd5b8335925060208401356143f1816141c4565b6007811061144857600080fd5b6effffffffffffffffffffffffffffff8116811461144857600080fd5b6000806000606084860312156144b557600080fd5b83356144c081614476565b925060208401356144d081614483565b9150604084013561432481614483565b600080604083850312156144f357600080fd5b82356144fe816141c4565b91506020830135614260816141c4565b801515811461144857600080fd5b6000806040838503121561452f57600080fd5b823561453a816141c4565b915060208301356142608161450e565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156145895761458961454a565b604052919050565b600080600080608085870312156145a757600080fd5b84356145b2816141c4565b93506020858101356145c3816141c4565b935060408601359250606086013567ffffffffffffffff808211156145e757600080fd5b818801915088601f8301126145fb57600080fd5b81358181111561460d5761460d61454a565b61461f601f8201601f19168501614560565b9150808252898482850101111561463557600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000606082019050614668828451614391565b60208301516effffffffffffffffffffffffffffff8082166020850152806040860151166040850152505092915050565b600080600080608085870312156146af57600080fd5b84356146ba816141c4565b935060208501356146ca81614476565b925060408501356146da81614483565b915060608501356146ea81614483565b939692955090935050565b600181811c9082168061470957607f821691505b6020821081141561472a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561475857614758614730565b500390565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060001982141561479d5761479d614730565b5060010190565b6000602082840312156147b657600080fd5b8151611151816141c4565b60008160001904831182151516156147db576147db614730565b500290565b6000826147fd57634e487b7160e01b600052601260045260246000fd5b500490565b60006060828403121561481457600080fd5b6040516060810181811067ffffffffffffffff821117156148375761483761454a565b604052825161484581614476565b8152602083015161485581614483565b6020820152604083015161486881614483565b60408201529392505050565b60006020828403121561488657600080fd5b81516111518161450e565b600060208083850312156148a457600080fd5b825167ffffffffffffffff808211156148bc57600080fd5b818501915085601f8301126148d057600080fd5b8151818111156148e2576148e261454a565b8060051b91506148f3848301614560565b818152918301840191848101908884111561490d57600080fd5b938501935b838510156149375784519250614927836141c4565b8282529385019390850190614912565b98975050505050505050565b6001600160a01b0383168152604081016111516020830184614391565b60008351614972818460208801614159565b835190830190614986818360208801614159565b01949350505050565b60008161499e5761499e614730565b506000190190565b600082198211156149b9576149b9614730565b500190565b60006001600160a01b03808716835280861660208401525083604083015260806060830152611cc56080830184614185565b600060208284031215614a0257600080fd5b81516111518161412656fea26469706673582212204009608c262201d30f6d09736d224bf79209df063e39cf10c5df4541e0e1e51164736f6c63430008090033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
