[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "CurrencyTransferLibFailedNativeTransfer", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NFTMetadataFrozen", "type": "error" }, { "inputs": [], "name": "NFTMetadataInvalidUrl", "type": "error" }, { "inputs": [], "name": "NFTMetadataUnauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "_toTokenId", "type": "uint256" } ], "name": "BatchMetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newRoyaltyBps", "type": "uint256" } ], "name": "DefaultRoyalty", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "flatFee", "type": "uint256" } ], "name": "FlatPlatformFeeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MetadataFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "prevOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "platformFeeRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "platformFeeBps", "type": "uint256" } ], "name": "PlatformFeeInfoUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "enum IPlatformFee.PlatformFeeType", "name": "feeType", "type": "uint8" } ], "name": "PlatformFeeTypeUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" } ], "name": "PrimarySaleRecipientUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "royaltyBps", "type": "uint256" } ], "name": "RoyaltyForToken", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" } ], "name": "TokensMinted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "mintedTo", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" }, { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "indexed": false, "internalType": "struct ITokenERC721.MintRequest", "name": "mintRequest", "type": "tuple" } ], "name": "TokensMintedWithSignature", "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" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "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" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractType", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDefaultRoyaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPlatformFeeInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getRoyaltyInfoForToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultAdmin", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "internalType": "address[]", "name": "_trustedForwarders", "type": "address[]" }, { "internalType": "address", "name": "_saleRecipient", "type": "address" }, { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint128", "name": "_royaltyBps", "type": "uint128" }, { "internalType": "uint128", "name": "_platformFeeBps", "type": "uint128" }, { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "mintTo", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC721.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "mintWithSignature", "outputs": [ { "internalType": "uint256", "name": "tokenIdMinted", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextTokenIdToMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "platformFeeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "primarySaleRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "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": [ { "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": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "_royaltyBps", "type": "uint256" } ], "name": "setDefaultRoyaltyInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_newOwner", "type": "address" } ], "name": "setOwner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_platformFeeRecipient", "type": "address" }, { "internalType": "uint256", "name": "_platformFeeBps", "type": "uint256" } ], "name": "setPlatformFeeInfo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_saleRecipient", "type": "address" } ], "name": "setPrimarySaleRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_bps", "type": "uint256" } ], "name": "setRoyaltyInfoForToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "string", "name": "_uri", "type": "string" } ], "name": "setTokenURI", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "uriFrozen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "address", "name": "royaltyRecipient", "type": "address" }, { "internalType": "uint256", "name": "royaltyBps", "type": "uint256" }, { "internalType": "address", "name": "primarySaleRecipient", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "uint256", "name": "price", "type": "uint256" }, { "internalType": "address", "name": "currency", "type": "address" }, { "internalType": "uint128", "name": "validityStartTimestamp", "type": "uint128" }, { "internalType": "uint128", "name": "validityEndTimestamp", "type": "uint128" }, { "internalType": "bytes32", "name": "uid", "type": "bytes32" } ], "internalType": "struct ITokenERC721.MintRequest", "name": "_req", "type": "tuple" }, { "internalType": "bytes", "name": "_signature", "type": "bytes" } ], "name": "verify", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" }, { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff1615808015620000335750600054600160ff909116105b806200004f5750303b1580156200004f575060005460ff166001145b620000b75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840160405180910390fd5b6000805460ff191660011790558015620000db576000805461ff0019166101001790555b801562000122576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50614f8980620001336000396000f3fe60806040526004361061025e5760003560e01c80636f4f2837116101405780636f4f2837146105ee57806370a082311461060e57806384b0196e1461062e5780638da5cb5b146106565780639010d07c1461066b57806391d148541461068b578063938e3d7b146106ab57806395d89b41146106cb5780639bcf7a15146106e0578063a0a8e46014610700578063a217fddf1461071c578063a22cb46514610731578063ac9650d814610751578063b24f2d391461077e578063b88d4fde146107ad578063c87b56dd146107cd578063ca15c873146107ed578063cb2ef6f71461080d578063d111515d1461082e578063d45573f614610843578063d547741f14610879578063de90377414610899578063e1591634146108d8578063e8a3d485146108f8578063e985e9c51461090d578063eb13554f1461092d57600080fd5b806275a3171461026357806301ffc9a71461029657806306fdde03146102c6578063079fe40e146102e8578063081812fc14610321578063095ea7b31461034157806313af403514610363578063162094c41461038357806318160ddd146103a35780631e7ac488146103b957806323b872dd146103d9578063248a9ca3146103f9578063274e4a1d146104195780632a55205a146104345780632c4510f8146104625780632f2ff15d146104755780632f745c591461049557806336568abe146104b55780633b1475a7146104d557806342842e0e146104ec57806342966c681461050c5780634cc157df1461052c5780634f6ccce71461056e578063572b6c051461058e578063600dd5ea146105ae5780636352211e146105ce575b600080fd5b34801561026f57600080fd5b5061028361027e366004613efd565b61094e565b6040519081526020015b60405180910390f35b3480156102a257600080fd5b506102b66102b1366004613f65565b61098e565b604051901515815260200161028d565b3480156102d257600080fd5b506102db6109ba565b60405161028d9190613fd2565b3480156102f457600080fd5b506101c954610309906001600160a01b031681565b6040516001600160a01b03909116815260200161028d565b34801561032d57600080fd5b5061030961033c366004613ff2565b610a4d565b34801561034d57600080fd5b5061036161035c36600461400b565b610a75565b005b34801561036f57600080fd5b5061036161037e366004614035565b610ba1565b34801561038f57600080fd5b5061036161039e36600461410d565b610c55565b3480156103af57600080fd5b5061019554610283565b3480156103c557600080fd5b506103616103d436600461400b565b610cb0565b3480156103e557600080fd5b506103616103f4366004614153565b610d56565b34801561040557600080fd5b50610283610414366004613ff2565b610d8e565b34801561042557600080fd5b506101c5546102b69060ff1681565b34801561044057600080fd5b5061045461044f36600461418f565b610da3565b60405161028d9291906141b1565b6102836104703660046141ca565b610de0565b34801561048157600080fd5b5061036161049036600461422e565b610f04565b3480156104a157600080fd5b506102836104b036600461400b565b610f20565b3480156104c157600080fd5b506103616104d036600461422e565b610fb7565b3480156104e157600080fd5b506102836101c85481565b3480156104f857600080fd5b50610361610507366004614153565b611041565b34801561051857600080fd5b50610361610527366004613ff2565b61105c565b34801561053857600080fd5b5061054c610547366004613ff2565b6110d8565b604080516001600160a01b03909316835261ffff90911660208301520161028d565b34801561057a57600080fd5b50610283610589366004613ff2565b611148565b34801561059a57600080fd5b506102b66105a9366004614035565b6111dd565b3480156105ba57600080fd5b506103616105c936600461400b565b6111fb565b3480156105da57600080fd5b506103096105e9366004613ff2565b611293565b3480156105fa57600080fd5b50610361610609366004614035565b6112c7565b34801561061a57600080fd5b50610283610629366004614035565b61131e565b34801561063a57600080fd5b506106436113a5565b60405161028d979695949392919061425a565b34801561066257600080fd5b50610309611443565b34801561067757600080fd5b5061030961068636600461418f565b61147b565b34801561069757600080fd5b506102b66106a636600461422e565b611494565b3480156106b757600080fd5b506103616106c63660046142f3565b6114bf565b3480156106d757600080fd5b506102db6114de565b3480156106ec57600080fd5b506103616106fb366004614334565b6114ee565b34801561070c57600080fd5b506040516001815260200161028d565b34801561072857600080fd5b50610283600081565b34801561073d57600080fd5b5061036161074c366004614367565b6115a2565b34801561075d57600080fd5b5061077161076c36600461439e565b6115b4565b60405161028d9190614412565b34801561078a57600080fd5b506101cb546101cc546001600160a01b03909116906001600160801b031661054c565b3480156107b957600080fd5b506103616107c8366004614476565b611730565b3480156107d957600080fd5b506102db6107e8366004613ff2565b611769565b3480156107f957600080fd5b50610283610808366004613ff2565b61180c565b34801561081957600080fd5b506a546f6b656e45524337323160a81b610283565b34801561083a57600080fd5b50610361611824565b34801561084f57600080fd5b506101ca546101cc546001600160a01b0390911690600160801b90046001600160801b031661054c565b34801561088557600080fd5b5061036161089436600461422e565b611882565b3480156108a557600080fd5b506108b96108b43660046141ca565b61189e565b6040805192151583526001600160a01b0390911660208301520161028d565b3480156108e457600080fd5b506103616108f3366004614583565b6118f5565b34801561090457600080fd5b506102db611c79565b34801561091957600080fd5b506102b6610928366004614695565b611d08565b34801561093957600080fd5b506101ca54610309906001600160a01b031681565b6000610958611d37565b600080516020614f1483398151915261097081611d90565b61097b858585611da1565b91505061098760018055565b9392505050565b600061099982611e90565b806109b457506001600160e01b0319821663152a902d60e11b145b92915050565b606061016180546109ca906146bf565b80601f01602080910402602001604051908101604052809291908181526020018280546109f6906146bf565b8015610a435780601f10610a1857610100808354040283529160200191610a43565b820191906000526020600020905b815481529060010190602001808311610a2657829003601f168201915b5050505050905090565b6000610a5882611eb5565b50600090815261016560205260409020546001600160a01b031690565b6000610a8082611293565b9050806001600160a01b0316836001600160a01b031603610af25760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b806001600160a01b0316610b04611eda565b6001600160a01b03161480610b205750610b2081610928611eda565b610b925760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610ae9565b610b9c8383611ee4565b505050565b6000610bac81611d90565b610bb7600083611494565b610c015760405162461bcd60e51b815260206004820152601b60248201527a3732bb9037bbb732b9103737ba1036b7b23ab6329030b236b4b71760291b6044820152606401610ae9565b6101c780546001600160a01b038481166001600160a01b0319831681179093556040519116919082907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a3505050565b610c5d611f53565b610c7a576040516318c4c13760e21b815260040160405180910390fd5b6101c55460ff1615610ca2576040516393dafeb760e01b815260048101839052602401610ae9565b610cac8282611f6f565b5050565b6000610cbb81611d90565b612710821115610cdd5760405162461bcd60e51b8152600401610ae9906146f9565b6101cc80546001600160801b03166001600160401b038416600160801b021790556101ca80546001600160a01b0319166001600160a01b0385169081179091556040518381527fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f18304906020015b60405180910390a2505050565b610d67610d61611eda565b82611fe2565b610d835760405162461bcd60e51b8152600401610ae990614722565b610b9c838383612041565b600090815260fd602052604090206001015490565b600080600080610db2866110d8565b90945084925061ffff169050612710610dcb8287614785565b610dd5919061479c565b925050509250929050565b6000610dea611d37565b6000610df78585856121a3565b90506000610e086020870187614035565b9050610e2081610e1b60808901896147be565b611da1565b92506000610e346040880160208901614035565b6001600160a01b031614610ea4576040518060400160405280876020016020810190610e609190614035565b6001600160a01b03908116825260408981013560209384015260008781526101cf845220835181546001600160a01b03191692169190911781559101516001909101555b610ead866122fe565b82816001600160a01b0316836001600160a01b03167f110d160a1bedeea919a88fbc4b2a9fb61b7e664084391b6ca2740db66fef80fe89604051610ef19190614872565b60405180910390a4505061098760018055565b610f0d82610d8e565b610f1681611d90565b610b9c83836124da565b6000610f2b8361131e565b8210610f8d5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610ae9565b506001600160a01b0391909116600090815261019360209081526040808320938352929052205490565b610fbf611eda565b6001600160a01b0316816001600160a01b0316146110375760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ae9565b610cac82826124fd565b610b9c83838360405180602001604052806000815250611730565b611067610d61611eda565b6110cc5760405162461bcd60e51b815260206004820152603060248201527f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760448201526f1b995c881b9bdc88185c1c1c9bdd995960821b6064820152608401610ae9565b6110d581612520565b50565b60008181526101cf60209081526040808320815180830190925280546001600160a01b031680835260019091015492820192909252829115611120578051602082015161113e565b6101cb546101cc546001600160a01b03909116906001600160801b03165b9250925050915091565b60006111546101955490565b82106111b75760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610ae9565b61019582815481106111cb576111cb614974565b90600052602060002001549050919050565b6001600160a01b031660009081526099602052604090205460ff1690565b600061120681611d90565b6127108211156112285760405162461bcd60e51b8152600401610ae99061498a565b6101cb80546001600160a01b0319166001600160a01b0385169081179091556101cc80546001600160801b0319166001600160801b0385161790556040518381527f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb90602001610d49565b60008061129f836125b4565b90506001600160a01b0381166109b45760405162461bcd60e51b8152600401610ae9906149b6565b60006112d281611d90565b6101c980546001600160a01b0319166001600160a01b0384169081179091556040517f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a25050565b60006001600160a01b0382166113885760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610ae9565b506001600160a01b03166000908152610164602052604090205490565b6000606080600080600060606033546000801b1480156113c55750603454155b6114095760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610ae9565b6114116125d0565b6114196125df565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6101c75460009061145e9082906001600160a01b0316611494565b6114685750600090565b6101c7546001600160a01b03165b905090565b600082815261012f6020526040812061098790836125ee565b600091825260fd602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006114ca81611d90565b6101cd6114d8838583614a4d565b50505050565b606061016280546109ca906146bf565b60006114f981611d90565b61271082111561151b5760405162461bcd60e51b8152600401610ae99061498a565b6040805180820182526001600160a01b03858116808352602080840187815260008a81526101cf8352869020945185546001600160a01b031916941693909317845591516001909301929092559151848152909186917f7365cf4122f072a3365c20d54eff9b38d73c096c28e1892ec8f5b0e403a0f12d910160405180910390a350505050565b610cac6115ad611eda565b83836125fa565b6060816001600160401b038111156115ce576115ce614050565b60405190808252806020026020018201604052801561160157816020015b60608152602001906001900390816115ec5790505b509050600061160e611eda565b9050336001600160a01b038216141560005b8481101561172757811561169f5761167d3087878481811061164457611644614974565b905060200281019061165691906147be565b8660405160200161166993929190614b06565b6040516020818303038152906040526126c5565b84828151811061168f5761168f614974565b602002602001018190525061171f565b611701308787848181106116b5576116b5614974565b90506020028101906116c791906147be565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506126c592505050565b84828151811061171357611713614974565b60200260200101819052505b600101611620565b50505092915050565b61174161173b611eda565b83611fe2565b61175d5760405162461bcd60e51b8152600401610ae990614722565b6114d8848484846126ea565b60008181526101c660205260409020805460609190611787906146bf565b80601f01602080910402602001604051908101604052809291908181526020018280546117b3906146bf565b80156118005780601f106117d557610100808354040283529160200191611800565b820191906000526020600020905b8154815290600101906020018083116117e357829003601f168201915b50505050509050919050565b600081815261012f602052604081206109b49061271d565b61182c611f53565b611849576040516318c4c13760e21b815260040160405180910390fd5b6101c5805460ff191660011790556040517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d716490600090a1565b61188b82610d8e565b61189481611d90565b610b9c83836124fd565b60008060006118ae868686612727565b61012087013560009081526101ce602052604090205490915060ff161580156118ea57506118ea600080516020614f1483398151915282611494565b969095509350505050565b600054610100900460ff16158080156119155750600054600160ff909116105b80611936575061192430612783565b158015611936575060005460ff166001145b6119995760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ae9565b6000805460ff1916600117905580156119bc576000805461ff0019166101001790555b6119c4612792565b611a0a6040518060400160405280600b81526020016a546f6b656e45524337323160a81b815250604051806040016040528060018152602001603160f81b8152506127c3565b611a13876127f4565b611a1d8a8a61282c565b6101cb80546001600160a01b03199081166001600160a01b03888116919091179092556101cc80546001600160801b0319166001600160801b0388161790556101ca805482168584161790556101c980549091169188169190911790556101cd611a878982614b27565b50612710836001600160801b03161115611ab35760405162461bcd60e51b8152600401610ae9906146f9565b6101cc80546001600160801b03808616600160801b0291161790556101c780546001600160a01b038d166001600160a01b0319909116179055611af760008c61285d565b611b0f600080516020614f148339815191528c61285d565b611b27600080516020614ecd8339815191528c61285d565b611b3f600080516020614ecd83398151915280612867565b611b57600080516020614ead8339815191528c61285d565b611b70600080516020614ead833981519152600061285d565b6040516001600160a01b038716907f299d17e95023f496e0ffc4909cff1a61f74bb5eb18de6f900f4155bfa1b3b33390600090a2816001600160a01b03167fe2497bd806ec41a6e0dd992c29a72efc0ef8fec9092d1978fd4a1e00b2f1830484604051611bdd9190614be0565b60405180910390a2846001600160a01b03167f90d7ec04bcb8978719414f82e52e4cb651db41d0e6f8cea6118c2191e6183adb85604051611c1e9190614be0565b60405180910390a28015611c6c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050505050565b6101cd8054611c87906146bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb3906146bf565b8015611d005780601f10611cd557610100808354040283529160200191611d00565b820191906000526020600020905b815481529060010190602001808311611ce357829003601f168201915b505050505081565b6001600160a01b0391821660009081526101666020908152604080832093909416825291909152205460ff1690565b600260015403611d895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610ae9565b6002600155565b6110d581611d9c611eda565b6128ba565b6101c88054906001906000611db68385614bf4565b909155505081611df55760405162461bcd60e51b815260206004820152600a60248201526932b6b83a3c903ab9349760b11b6044820152606401610ae9565b611e358184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f6f92505050565b611e3f8482612913565b80846001600160a01b03167f9d89e36eadf856db0ad9ffb5a569e07f95634dddd9501141ecf04820484ad0dc8585604051611e7b929190614c07565b60405180910390a39392505050565b60018055565b60006001600160e01b0319821663780e9d6360e01b14806109b457506109b48261292d565b611ebe8161296d565b6110d55760405162461bcd60e51b8152600401610ae9906149b6565b600061147661298a565b60008181526101656020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611f1a82611293565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611476600080516020614ecd8339815191526106a6611eda565b8051600003611f915760405163a094836b60e01b815260040160405180910390fd5b60008281526101c660205260409020611faa8282614b27565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b600080611fee83611293565b9050806001600160a01b0316846001600160a01b0316148061201557506120158185611d08565b806120395750836001600160a01b031661202e84610a4d565b6001600160a01b0316145b949350505050565b826001600160a01b031661205482611293565b6001600160a01b03161461207a5760405162461bcd60e51b8152600401610ae990614c1b565b6001600160a01b0382166120dc5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ae9565b6120e983838360016129ac565b826001600160a01b03166120fc82611293565b6001600160a01b0316146121225760405162461bcd60e51b8152600401610ae990614c1b565b60008181526101656020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865261016485528386208054600019019055908716808652838620805460010190558686526101639094528285208054909216841790915590518493600080516020614f3483398151915291a4505050565b60008060006121b386868661189e565b91509150816121f85760405162461bcd60e51b8152602060048201526011602482015270696e76616c6964207369676e617475726560781b6044820152606401610ae9565b4261220a610100880160e08901614c60565b6001600160801b03161115801561223b57504261222f61012088016101008901614c60565b6001600160801b031610155b6122795760405162461bcd60e51b815260206004820152600f60248201526e1c995c5d595cdd08195e1c1a5c9959608a1b6044820152606401610ae9565b60006122886020880188614035565b6001600160a01b0316036122d45760405162461bcd60e51b81526020600482015260136024820152721c9958da5c1a595b9d081d5b9919599a5b9959606a1b6044820152606401610ae9565b61012086013560009081526101ce60205260409020805460ff191660011790559150509392505050565b8060a001356000036123415734156110d55760405162461bcd60e51b81526020600482015260066024820152652156616c756560d01b6044820152606401610ae9565b6101cc5460a0820135906000906127109061236c90600160801b90046001600160801b031684614785565b612376919061479c565b905073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61239d60e0850160c08601614035565b6001600160a01b0316036123f8578134146123f35760405162461bcd60e51b815260206004820152601660248201527536bab9ba1039b2b732103a37ba30b610383934b1b29760511b6044820152606401610ae9565b61243b565b341561243b5760405162461bcd60e51b81526020600482015260126024820152716d73672076616c7565206e6f74207a65726f60701b6044820152606401610ae9565b60008061244e6080860160608701614035565b6001600160a01b0316146124715761246c6080850160608601614035565b61247f565b6101c9546001600160a01b03165b90506124af61249460e0860160c08701614035565b61249c611eda565b6101ca546001600160a01b031685612a8d565b6114d86124c260e0860160c08701614035565b6124ca611eda565b836124d58688614c7b565b612a8d565b6124e48282612ad3565b600082815261012f60205260409020610b9c9082612b5a565b6125078282612b6f565b600082815261012f60205260409020610b9c9082612bf4565b600061252b82611293565b905061253b8160008460016129ac565b61254482611293565b60008381526101656020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526101648452828520805460001901905587855261016390935281842080549091169055519293508492600080516020614f34833981519152908390a45050565b600090815261016360205260409020546001600160a01b031690565b6060603580546109ca906146bf565b6060603680546109ca906146bf565b60006109878383612c09565b816001600160a01b0316836001600160a01b0316036126575760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610ae9565b6001600160a01b0383811660008181526101666020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60606109878383604051806060016040528060278152602001614eed60279139612c33565b6126f5848484612041565b61270184848484612cab565b6114d85760405162461bcd60e51b8152600401610ae990614c8e565b60006109b4825490565b600061203983838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061277d92506127719150889050612dba565b80519060200120612ef4565b90612f21565b6001600160a01b03163b151590565b600054610100900460ff166127b95760405162461bcd60e51b8152600401610ae990614ce0565b6127c1612f45565b565b600054610100900460ff166127ea5760405162461bcd60e51b8152600401610ae990614ce0565b610cac8282612f6c565b600054610100900460ff1661281b5760405162461bcd60e51b8152600401610ae990614ce0565b612823612fbb565b6110d581612fe2565b600054610100900460ff166128535760405162461bcd60e51b8152600401610ae990614ce0565b610cac8282613067565b610cac82826124da565b600061287283610d8e565b600084815260fd6020526040808220600101859055519192508391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6128c48282611494565b610cac576128d1816130a9565b6128dc8360206130bb565b6040516020016128ed929190614d2b565b60408051601f198184030181529082905262461bcd60e51b8252610ae991600401613fd2565b610cac828260405180602001604052806000815250613256565b60006001600160e01b031982166380ac58cd60e01b148061295e57506001600160e01b03198216635b5e139f60e01b145b806109b457506109b482613289565b600080612979836125b4565b6001600160a01b0316141592915050565b6000612995336111dd565b156129a7575060131936013560601c90565b503390565b6129b8848484846132ae565b6129d1600080516020614ead8339815191526000611494565b1580156129e657506001600160a01b03841615155b80156129fa57506001600160a01b03831615155b156114d857612a17600080516020614ead83398151915285611494565b80612a355750612a35600080516020614ead83398151915284611494565b6114d85760405162461bcd60e51b815260206004820152602360248201527f7265737472696374656420746f205452414e534645525f524f4c4520686f6c6460448201526265727360e81b6064820152608401610ae9565b80156114d85773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03851601612ac757612ac282826133e4565b6114d8565b6114d88484848461345c565b612add8282611494565b610cac57600082815260fd602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b16611eda565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610987836001600160a01b0384166134af565b612b798282611494565b15610cac57600082815260fd602090815260408083206001600160a01b03851684529091529020805460ff19169055612bb0611eda565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b6000610987836001600160a01b0384166134fe565b6000826000018281548110612c2057612c20614974565b9060005260206000200154905092915050565b6060600080856001600160a01b031685604051612c509190614d9a565b600060405180830381855af49150503d8060008114612c8b576040519150601f19603f3d011682016040523d82523d6000602084013e612c90565b606091505b5091509150612ca1868383876135f1565b9695505050505050565b6000612cbf846001600160a01b0316612783565b15612daf57836001600160a01b031663150b7a02612cdb611eda565b8786866040518563ffffffff1660e01b8152600401612cfd9493929190614db6565b6020604051808303816000875af1925050508015612d38575060408051601f3d908101601f19168201909252612d3591810190614de9565b60015b612d95573d808015612d66576040519150601f19603f3d011682016040523d82523d6000602084013e612d6b565b606091505b508051600003612d8d5760405162461bcd60e51b8152600401610ae990614c8e565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612039565b506001949350505050565b60607f86633b4ffa94b7c3d316ca70d7d2700f3fdfa7a7806efd31499b513d9176692e612dea6020840184614035565b612dfa6040850160208601614035565b6040850135612e0f6080870160608801614035565b612e1c60808801886147be565b604051612e2a929190614e06565b60405190819003902060a0880135612e4860e08a0160c08b01614035565b612e596101008b0160e08c01614c60565b612e6b6101208c016101008d01614c60565b60408051602081019b909b526001600160a01b03998a16908b015296881660608a0152608089019590955292861660a088015260c087019190915260e08601529092166101008401526001600160801b03918216610120808501919091529116610140830152830135610160820152610180016040516020818303038152906040529050919050565b60006109b4612f01613668565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000612f308585613672565b91509150612f3d816136b7565b509392505050565b600054610100900460ff16611e8a5760405162461bcd60e51b8152600401610ae990614ce0565b600054610100900460ff16612f935760405162461bcd60e51b8152600401610ae990614ce0565b6035612f9f8382614b27565b506036612fac8282614b27565b50506000603381905560345550565b600054610100900460ff166127c15760405162461bcd60e51b8152600401610ae990614ce0565b600054610100900460ff166130095760405162461bcd60e51b8152600401610ae990614ce0565b60005b8151811015610cac5760016099600084848151811061302d5761302d614974565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161300c565b600054610100900460ff1661308e5760405162461bcd60e51b8152600401610ae990614ce0565b61016161309b8382614b27565b50610162610b9c8282614b27565b60606109b46001600160a01b03831660145b606060006130ca836002614785565b6130d5906002614bf4565b6001600160401b038111156130ec576130ec614050565b6040519080825280601f01601f191660200182016040528015613116576020820181803683370190505b509050600360fc1b8160008151811061313157613131614974565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061316057613160614974565b60200101906001600160f81b031916908160001a9053506000613184846002614785565b61318f906001614bf4565b90505b6001811115613207576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106131c3576131c3614974565b1a60f81b8282815181106131d9576131d9614974565b60200101906001600160f81b031916908160001a90535060049490941c9361320081614e16565b9050613192565b5083156109875760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ae9565b61326083836137fc565b61326d6000848484612cab565b610b9c5760405162461bcd60e51b8152600401610ae990614c8e565b60006001600160e01b03198216635a05180f60e01b14806109b457506109b482613907565b600181111561331d5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610ae9565b816001600160a01b03851661337b57613376816101958054600083815261019660205260408120829055600182018355919091527f54034dca961b61bc2a3147cc0c1986762915b42723ed64155364f17a2e2967700155565b61339e565b836001600160a01b0316856001600160a01b03161461339e5761339e858261393c565b6001600160a01b0384166133ba576133b5816139de565b6133dd565b846001600160a01b0316846001600160a01b0316146133dd576133dd8482613a93565b5050505050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613431576040519150601f19603f3d011682016040523d82523d6000602084013e613436565b606091505b5050905080610b9c578282604051635fdc4ec160e11b8152600401610ae99291906141b1565b816001600160a01b0316836001600160a01b031603156114d857306001600160a01b0384160361349a57612ac26001600160a01b0385168383613ad9565b6114d86001600160a01b038516848484613b2f565b60008181526001830160205260408120546134f6575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556109b4565b5060006109b4565b600081815260018301602052604081205480156135e7576000613522600183614c7b565b855490915060009061353690600190614c7b565b905081811461359b57600086600001828154811061355657613556614974565b906000526020600020015490508087600001848154811061357957613579614974565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806135ac576135ac614e2d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506109b4565b60009150506109b4565b6060831561365e5782516000036136575761360b85612783565b6136575760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae9565b5081612039565b6120398383613b67565b6000611476613b91565b60008082516041036136a85760208301516040840151606085015160001a61369c87828585613c05565b945094505050506136b0565b506000905060025b9250929050565b60008160048111156136cb576136cb614e43565b036136d35750565b60018160048111156136e7576136e7614e43565b0361372f5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610ae9565b600281600481111561374357613743614e43565b036137905760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610ae9565b60038160048111156137a4576137a4614e43565b036110d55760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610ae9565b6001600160a01b0382166138525760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ae9565b61385b8161296d565b156138785760405162461bcd60e51b8152600401610ae990614e59565b6138866000838360016129ac565b61388f8161296d565b156138ac5760405162461bcd60e51b8152600401610ae990614e59565b6001600160a01b0382166000818152610164602090815260408083208054600101905584835261016390915280822080546001600160a01b031916841790555183929190600080516020614f34833981519152908290a45050565b60006001600160e01b03198216637965db0b60e01b14806109b457506301ffc9a760e01b6001600160e01b03198316146109b4565b600060016139498461131e565b6139539190614c7b565b600083815261019460205260409020549091508082146139a9576001600160a01b038416600090815261019360209081526040808320858452825280832054848452818420819055835261019490915290208190555b506000918252610194602090815260408084208490556001600160a01b03909416835261019381528383209183525290812055565b610195546000906139f190600190614c7b565b600083815261019660205260408120546101958054939450909284908110613a1b57613a1b614974565b90600052602060002001549050806101958381548110613a3d57613a3d614974565b60009182526020808320909101929092558281526101969091526040808220849055858252812055610195805480613a7757613a77614e2d565b6001900381819060005260206000200160009055905550505050565b6000613a9e8361131e565b6001600160a01b0390931660009081526101936020908152604080832086845282528083208590559382526101949052919091209190915550565b610b9c8363a9059cbb60e01b8484604051602401613af89291906141b1565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613cbf565b6040516001600160a01b03808516602483015283166044820152606481018290526114d89085906323b872dd60e01b90608401613af8565b815115613b775781518083602001fd5b8060405162461bcd60e51b8152600401610ae99190613fd2565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613bbc613d91565b613bc4613dea565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115613c325750600090506003613cb6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015613c86573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116613caf57600060019250925050613cb6565b9150600090505b94509492505050565b6000613d14826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613e1b9092919063ffffffff16565b805190915015610b9c5780806020019051810190613d329190614e8f565b610b9c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ae9565b600080613d9c6125d0565b805190915015613db3578051602090910120919050565b6033548015613dc25792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080613df56125df565b805190915015613e0c578051602090910120919050565b6034548015613dc25792915050565b6060612039848460008585600080866001600160a01b03168587604051613e429190614d9a565b60006040518083038185875af1925050503d8060008114613e7f576040519150601f19603f3d011682016040523d82523d6000602084013e613e84565b606091505b5091509150613e95878383876135f1565b979650505050505050565b80356001600160a01b0381168114613eb757600080fd5b919050565b60008083601f840112613ece57600080fd5b5081356001600160401b03811115613ee557600080fd5b6020830191508360208285010111156136b057600080fd5b600080600060408486031215613f1257600080fd5b613f1b84613ea0565b925060208401356001600160401b03811115613f3657600080fd5b613f4286828701613ebc565b9497909650939450505050565b6001600160e01b0319811681146110d557600080fd5b600060208284031215613f7757600080fd5b813561098781613f4f565b60005b83811015613f9d578181015183820152602001613f85565b50506000910152565b60008151808452613fbe816020860160208601613f82565b601f01601f19169290920160200192915050565b6020815260006109876020830184613fa6565b6001600160a01b03169052565b60006020828403121561400457600080fd5b5035919050565b6000806040838503121561401e57600080fd5b61402783613ea0565b946020939093013593505050565b60006020828403121561404757600080fd5b61098782613ea0565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561408e5761408e614050565b604052919050565b60006001600160401b038311156140af576140af614050565b6140c2601f8401601f1916602001614066565b90508281528383830111156140d657600080fd5b828260208301376000602084830101529392505050565b600082601f8301126140fe57600080fd5b61098783833560208501614096565b6000806040838503121561412057600080fd5b8235915060208301356001600160401b0381111561413d57600080fd5b614149858286016140ed565b9150509250929050565b60008060006060848603121561416857600080fd5b61417184613ea0565b925061417f60208501613ea0565b9150604084013590509250925092565b600080604083850312156141a257600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b6000806000604084860312156141df57600080fd5b83356001600160401b03808211156141f657600080fd5b90850190610140828803121561420b57600080fd5b9093506020850135908082111561422157600080fd5b50613f4286828701613ebc565b6000806040838503121561424157600080fd5b8235915061425160208401613ea0565b90509250929050565b60ff60f81b881681526000602060e0602084015261427b60e084018a613fa6565b838103604085015261428d818a613fa6565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156142e1578351835292840192918401916001016142c5565b50909c9b505050505050505050505050565b6000806020838503121561430657600080fd5b82356001600160401b0381111561431c57600080fd5b61432885828601613ebc565b90969095509350505050565b60008060006060848603121561434957600080fd5b8335925061417f60208501613ea0565b80151581146110d557600080fd5b6000806040838503121561437a57600080fd5b61438383613ea0565b9150602083013561439381614359565b809150509250929050565b600080602083850312156143b157600080fd5b82356001600160401b03808211156143c857600080fd5b818501915085601f8301126143dc57600080fd5b8135818111156143eb57600080fd5b8660208260051b850101111561440057600080fd5b60209290920196919550909350505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561446957603f19888603018452614457858351613fa6565b9450928501929085019060010161443b565b5092979650505050505050565b6000806000806080858703121561448c57600080fd5b61449585613ea0565b93506144a360208601613ea0565b92506040850135915060608501356001600160401b038111156144c557600080fd5b8501601f810187136144d657600080fd5b6144e587823560208401614096565b91505092959194509250565b600082601f83011261450257600080fd5b813560206001600160401b0382111561451d5761451d614050565b8160051b61452c828201614066565b928352848101820192828101908785111561454657600080fd5b83870192505b84831015613e955761455d83613ea0565b8252918301919083019061454c565b80356001600160801b0381168114613eb757600080fd5b6000806000806000806000806000806101408b8d0312156145a357600080fd5b6145ac8b613ea0565b995060208b01356001600160401b03808211156145c857600080fd5b6145d48e838f016140ed565b9a5060408d01359150808211156145ea57600080fd5b6145f68e838f016140ed565b995060608d013591508082111561460c57600080fd5b6146188e838f016140ed565b985060808d013591508082111561462e57600080fd5b5061463b8d828e016144f1565b96505061464a60a08c01613ea0565b945061465860c08c01613ea0565b935061466660e08c0161456c565b92506146756101008c0161456c565b91506146846101208c01613ea0565b90509295989b9194979a5092959850565b600080604083850312156146a857600080fd5b6146b183613ea0565b915061425160208401613ea0565b600181811c908216806146d357607f821691505b6020821081036146f357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252600f908201526e65786365656473204d41585f42505360881b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109b4576109b461476f565b6000826147b957634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e198436030181126147d557600080fd5b8301803591506001600160401b038211156147ef57600080fd5b6020019150368190038213156136b057600080fd5b6000808335601e1984360301811261481b57600080fd5b83016020810192503590506001600160401b0381111561483a57600080fd5b8036038213156136b057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815261488b6020820161488684613ea0565b613fe5565b600061489960208401613ea0565b6148a66040840182613fe5565b50604083013560608301526148bd60608401613ea0565b6148ca6080840182613fe5565b506148d86080840184614804565b6101408060a08601526148f061016086018385614849565b925060a086013560c086015261490860c08701613ea0565b915061491760e0860183613fe5565b61492360e0870161456c565b915061010061493c818701846001600160801b03169052565b61494781880161456c565b925050610120614961818701846001600160801b03169052565b9590950135939094019290925250919050565b634e487b7160e01b600052603260045260246000fd5b60208082526012908201527165786365656420726f79616c74792062707360701b604082015260600190565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b601f821115610b9c576000816000526020600020601f850160051c81016020861015614a115750805b601f850160051c820191505b81811015614a3057828155600101614a1d565b505050505050565b600019600383901b1c191660019190911b1790565b6001600160401b03831115614a6457614a64614050565b614a7883614a7283546146bf565b836149e8565b6000601f841160018114614aa65760008515614a945750838201355b614a9e8682614a38565b8455506133dd565b600083815260209020601f19861690835b82811015614ad75786850135825560209485019460019092019101614ab7565b5086821015614af45760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8284823760609190911b6001600160601b0319169101908152601401919050565b81516001600160401b03811115614b4057614b40614050565b614b5481614b4e84546146bf565b846149e8565b602080601f831160018114614b835760008415614b715750858301515b614b7b8582614a38565b865550614a30565b600085815260208120601f198616915b82811015614bb257888601518255948401946001909101908401614b93565b5085821015614bd05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160801b0391909116815260200190565b808201808211156109b4576109b461476f565b602081526000612039602083018486614849565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600060208284031215614c7257600080fd5b6109878261456c565b818103818111156109b4576109b461476f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614d5d816017850160208801613f82565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614d8e816028840160208801613f82565b01602801949350505050565b60008251614dac818460208701613f82565b9190910192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612ca190830184613fa6565b600060208284031215614dfb57600080fd5b815161098781613f4f565b8183823760009101908152919050565b600081614e2557614e2561476f565b506000190190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b600060208284031215614ea157600080fd5b81516109878161435956fe8502233096d909befbda0999bb8ea2f3a6be3c138b9fbf003752a4c8bce86f6c6bd6b5318a46e5fff572d5e4258a20774aab40cc35ac7680654b9081fcc82f80416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65649f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212204646125830aee1151cc414385694d16977b9e1c599dcaddf193e94d84f7baa3564736f6c63430008170033