[ { "inputs": [ { "internalType": "string", "name": "baseUri_", "type": "string" }, { "internalType": "uint256", "name": "priceUsd_", "type": "uint256" }, { "internalType": "uint256", "name": "endDate_", "type": "uint256" }, { "internalType": "address", "name": "relayerAddress_", "type": "address" }, { "internalType": "address", "name": "feedAddress_", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyPaid", "type": "error" }, { "inputs": [], "name": "AlreadyRedeemed", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "FreeMintLimit", "type": "error" }, { "inputs": [], "name": "InsufficientAmount", "type": "error" }, { "inputs": [], "name": "InsufficientPaided", "type": "error" }, { "inputs": [], "name": "InvalidHash", "type": "error" }, { "inputs": [], "name": "InvalidQueryRange", "type": "error" }, { "inputs": [], "name": "InvalidSignature", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "NoRewardManager", "type": "error" }, { "inputs": [], "name": "NotInTime", "type": "error" }, { "inputs": [], "name": "NotOwner", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "PriceNotSet", "type": "error" }, { "inputs": [], "name": "TokenIsStablecoin", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "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": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "address", "name": "tokenAddress", "type": "address" } ], "internalType": "struct NFTCollection", "name": "collection", "type": "tuple" } ], "indexed": false, "internalType": "struct NFT", "name": "nft", "type": "tuple" } ], "name": "NFTRedeemed", "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": "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": "MAX_FREEMINT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "addStablecoin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseUri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_priceUsd", "type": "uint256" }, { "internalType": "uint8", "name": "decimals", "type": "uint8" } ], "name": "calcNativePrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "countFreemint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "endDate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "explicitOwnershipOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721A.TokenOwnership", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "explicitOwnershipsOf", "outputs": [ { "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { "internalType": "uint64", "name": "startTimestamp", "type": "uint64" }, { "internalType": "bool", "name": "burned", "type": "bool" }, { "internalType": "uint24", "name": "extraData", "type": "uint24" } ], "internalType": "struct IERC721A.TokenOwnership[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, { "internalType": "bytes", "name": "signature", "type": "bytes" }, { "internalType": "uint256", "name": "numberOfMints", "type": "uint256" } ], "name": "freeMint", "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": "getLatestPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "getTokenPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getTotalPrice", "outputs": [ { "internalType": "uint256", "name": "total", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getUserInfos", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" }, { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "address", "name": "tokenAddress", "type": "address" } ], "internalType": "struct NFTCollection", "name": "collection", "type": "tuple" } ], "internalType": "struct NFT[]", "name": "", "type": "tuple[]" } ], "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": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "nftById", "outputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "address", "name": "tokenAddress", "type": "address" } ], "internalType": "struct NFTCollection", "name": "collection", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "orderPayed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "priceUsd", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "upgradeId", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "address", "name": "tokenAddress", "type": "address" } ], "internalType": "struct NFTCollection", "name": "collection", "type": "tuple" } ], "internalType": "struct NFT", "name": "nft", "type": "tuple" }, { "internalType": "bool", "name": "payReward", "type": "bool" } ], "internalType": "struct NFTBase.OrderItem[]", "name": "orderItems", "type": "tuple[]" } ], "name": "redeem", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "orderId", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "upgradeId", "type": "uint256" }, { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "address", "name": "tokenAddress", "type": "address" } ], "internalType": "struct NFTCollection", "name": "collection", "type": "tuple" } ], "internalType": "struct NFT", "name": "nft", "type": "tuple" }, { "internalType": "bool", "name": "payReward", "type": "bool" } ], "internalType": "struct NFTBase.OrderItem[]", "name": "orderItems", "type": "tuple[]" }, { "internalType": "address", "name": "token", "type": "address" } ], "name": "redeemToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "relayer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "removeStablecoin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "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": "payable", "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": "payable", "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": "setBaseUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "payoutAddress", "type": "address" } ], "name": "setPayoutAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "setPrice", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "relayer_", "type": "address" } ], "name": "setRelayer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardManagerAddress", "type": "address" } ], "name": "setRewardManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "price", "type": "uint256" } ], "name": "setTokenPrice", "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": "owner", "type": "address" } ], "name": "tokensOfOwner", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "stop", "type": "uint256" } ], "name": "tokensOfOwnerIn", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a060405260056080523480156200001657600080fd5b5060405162003ce438038062003ce48339810160408190526200003991620001ba565b6040518060400160405280600e81526020016d47454e4553495320484f4f44494560901b81525060405180604001604052806005815260200164504859303160d81b81525086858786868184828989816002908162000099919062000357565b506003620000a8828262000357565b5050600160005550620000bb3362000135565b600c80546001600160a01b03199081166001600160a01b0393841617909155600992909255600d80549092169216919091179055600f620000fd868262000357565b505050600e555050600854601080546001600160a01b0319166001600160a01b03909216919091179055506200042395505050505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001b557600080fd5b919050565b600080600080600060a08688031215620001d357600080fd5b85516001600160401b0380821115620001eb57600080fd5b818801915088601f8301126200020057600080fd5b81518181111562000215576200021562000187565b604051601f8201601f19908116603f0116810190838211818310171562000240576200024062000187565b81604052828152602093508b848487010111156200025d57600080fd5b600091505b8282101562000281578482018401518183018501529083019062000262565b6000848483010152809950505050808801519550505060408601519250620002ac606087016200019d565b9150620002bc608087016200019d565b90509295509295909350565b600181811c90821680620002dd57607f821691505b602082108103620002fe57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200035257600081815260208120601f850160051c810160208610156200032d5750805b601f850160051c820191505b818110156200034e5782815560010162000339565b5050505b505050565b81516001600160401b0381111562000373576200037362000187565b6200038b81620003848454620002c8565b8462000304565b602080601f831160018114620003c35760008415620003aa5750858301515b600019600386901b1c1916600185901b1785556200034e565b600085815260208120601f198616915b82811015620003f457888601518255948401946001909101908401620003d3565b5085821015620004135787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805161389e620004466000396000818161082e01526118da015261389e6000f3fe60806040526004361061027d5760003560e01c80638da5cb5b1161014f578063b88d4fde116100c1578063dd6b41331161007a578063dd6b4133146107fc578063e3c820a21461081c578063e8a3d48514610850578063e985e9c514610865578063f2fde38b146108ae578063f9a0abf7146108ce57600080fd5b8063b88d4fde14610722578063c23dc68f14610735578063c24a0f8b14610762578063c87b56dd14610778578063cc56f58114610798578063d02641a0146107c657600080fd5b80639abc8320116101135780639abc83201461060d5780639cff1939146106225780639e60119714610692578063a0bcfc7f146106b2578063a22cb465146106d2578063b6d79688146106f257600080fd5b80638da5cb5b146105855780638e15f473146105a357806391b7f5ed146105b857806395d89b41146105d857806399a2557a146105ed57600080fd5b806338a939d5116101f35780636548e9bc116101ac5780636548e9bc146104cd57806370a08231146104ed578063715018a61461050d5780638406c079146105225780638462151c146105425780638b3948bd1461056f57600080fd5b806338a939d51461040d5780633b947d2b1461042d57806342842e0e1461044d578063431f63c9146104605780635bbb2177146104805780636352211e146104ad57600080fd5b8063153ee55411610245578063153ee5541461034657806318160ddd146103665780631cd69a181461038d57806323b872dd146103ba578063313146a2146103cd57806333ea51a8146103ed57600080fd5b806301ffc9a7146102825780630418945a146102b757806306fdde03146102d9578063081812fc146102fb578063095ea7b314610333575b600080fd5b34801561028e57600080fd5b506102a261029d366004612aec565b6108e1565b60405190151581526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d2366004612b25565b610933565b005b3480156102e557600080fd5b506102ee61095f565b6040516102ae9190612b90565b34801561030757600080fd5b5061031b610316366004612ba3565b6109f1565b6040516001600160a01b0390911681526020016102ae565b6102d7610341366004612bbc565b610a35565b34801561035257600080fd5b506102d7610361366004612b25565b610ad5565b34801561037257600080fd5b5060015460005403600019015b6040519081526020016102ae565b34801561039957600080fd5b5061037f6103a8366004612b25565b60146020526000908152604090205481565b6102d76103c8366004612be6565b610aff565b3480156103d957600080fd5b506102d76103e8366004612dfb565b610c98565b3480156103f957600080fd5b506102d7610408366004612b25565b611101565b34801561041957600080fd5b5061037f610428366004612bbc565b61112b565b34801561043957600080fd5b506102d7610448366004612b25565b611288565b6102d761045b366004612be6565b6112b1565b34801561046c57600080fd5b506102d761047b366004612bbc565b6112d1565b34801561048c57600080fd5b506104a061049b366004612e51565b61132f565b6040516102ae9190612f01565b3480156104b957600080fd5b5061031b6104c8366004612ba3565b6113fa565b3480156104d957600080fd5b506102d76104e8366004612b25565b611405565b3480156104f957600080fd5b5061037f610508366004612b25565b61142f565b34801561051957600080fd5b506102d761147d565b34801561052e57600080fd5b50600d5461031b906001600160a01b031681565b34801561054e57600080fd5b5061056261055d366004612b25565b611491565b6040516102ae9190612f7e565b34801561057b57600080fd5b5061037f60095481565b34801561059157600080fd5b506008546001600160a01b031661031b565b3480156105af57600080fd5b5061037f611599565b3480156105c457600080fd5b506102d76105d3366004612ba3565b61162e565b3480156105e457600080fd5b506102ee61163b565b3480156105f957600080fd5b50610562610608366004612f91565b61164a565b34801561061957600080fd5b506102ee6117d1565b34801561062e57600080fd5b5061068461063d366004612ba3565b6012602090815260009182526040918290208054835180850190945260019091015463ffffffff8116845264010000000090046001600160a01b0316918301919091529082565b6040516102ae929190612fc4565b34801561069e57600080fd5b506102d76106ad366004613068565b61185f565b3480156106be57600080fd5b506102d76106cd3660046130b7565b61193f565b3480156106de57600080fd5b506102d76106ed3660046130ff565b611957565b3480156106fe57600080fd5b506102a261070d366004612ba3565b60136020526000908152604090205460ff1681565b6102d7610730366004613136565b6119c3565b34801561074157600080fd5b50610755610750366004612ba3565b611a0d565b6040516102ae919061319d565b34801561076e57600080fd5b5061037f600e5481565b34801561078457600080fd5b506102ee610793366004612ba3565b611a95565b3480156107a457600080fd5b506107b86107b3366004612b25565b611b18565b6040516102ae9291906131d4565b3480156107d257600080fd5b5061037f6107e1366004612b25565b6001600160a01b03166000908152600a602052604090205490565b34801561080857600080fd5b5061037f610817366004613237565b611c9c565b34801561082857600080fd5b5061037f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561085c57600080fd5b506102ee611cc5565b34801561087157600080fd5b506102a261088036600461325c565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b3480156108ba57600080fd5b506102d76108c9366004612b25565b611cd4565b6102d76108dc36600461328f565b611d52565b60006301ffc9a760e01b6001600160e01b03198316148061091257506380ac58cd60e01b6001600160e01b03198316145b8061092d5750635b5e139f60e01b6001600160e01b03198316145b92915050565b61093b6120b9565b6001600160a01b03166000908152600b60205260409020805460ff19166001179055565b60606002805461096e906132d5565b80601f016020809104026020016040519081016040528092919081815260200182805461099a906132d5565b80156109e75780601f106109bc576101008083540402835291602001916109e7565b820191906000526020600020905b8154815290600101906020018083116109ca57829003601f168201915b5050505050905090565b60006109fc82612113565b610a19576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b6000610a40826113fa565b9050336001600160a01b03821614610a7957610a5c8133610880565b610a79576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610add6120b9565b601180546001600160a01b0319166001600160a01b0392909216919091179055565b6000610b0a82612148565b9050836001600160a01b0316816001600160a01b031614610b3d5760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417610b8a57610b6d8633610880565b610b8a57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038516610bb157604051633a954ecd60e21b815260040160405180910390fd5b8015610bbc57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003610c4e57600184016000818152600460205260408120549003610c4c576000548114610c4c5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b60008381526013602052604090205460ff1615610cc857604051630d70a0e360e41b815260040160405180910390fd5b6000610cd582845161112b565b6040516323b872dd60e01b8152336004820152306024820152604481018290529091506001600160a01b038316906323b872dd906064016020604051808303816000875af1158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061330f565b506000610d5d83600161112b565b90506000805b8551811015611050576000868281518110610d8057610d8061332c565b60200260200101519050610d958833836121b7565b80604001511561103d576011546001600160a01b0316610dc857604051636f98876960e01b815260040160405180910390fd5b601154604051630814a8a360e01b815260048101869052600060248201819052916001600160a01b031690630814a8a390604401602060405180830381865afa158015610e19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3d9190613342565b601154604051630814a8a360e01b815260048101889052600160248201529192506000916001600160a01b0390911690630814a8a390604401602060405180830381865afa158015610e93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb79190613342565b6011549091506001600160a01b03808a169163095ea7b39116610eda8486613371565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610f25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f49919061330f565b506011546020840151604051636cf103b360e11b81526001600160a01b039092169163d9e2076691610f84916000908d908890600401613384565b600060405180830381600087803b158015610f9e57600080fd5b505af1158015610fb2573d6000803e3d6000fd5b50506011546020860151604051636cf103b360e11b81526001600160a01b03909216935063d9e207669250610ff0916001908d908790600401613384565b600060405180830381600087803b15801561100a57600080fd5b505af115801561101e573d6000803e3d6000fd5b50505050808261102e9190613371565b6110389086613371565b945050505b5080611048816133b6565b915050610d63565b506010546001600160a01b038086169163a9059cbb911661107184876133cf565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156110bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e0919061330f565b5050506000938452505060136020525060409020805460ff19166001179055565b6111096120b9565b601080546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b03831661117b576509184e72a000826111506009546012611c9c565b61115a91906133e2565b611164919061340f565b611174906509184e72a0006133e2565b905061092d565b6001600160a01b0383166000908152600b602052604090205460ff161561122d57816002846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112019190613423565b61120b9190613440565b61121690600a61353d565b60095461122391906133e2565b61117491906133e2565b6001600160a01b0383166000908152600a60205260409020541561126f576001600160a01b0383166000908152600a60205260409020546111749083906133e2565b6040516313a8ad7d60e11b815260040160405180910390fd5b6112906120b9565b6001600160a01b03166000908152600b60205260409020805460ff19169055565b6112cc838383604051806020016040528060008152506119c3565b505050565b6112d96120b9565b6001600160a01b0382166000908152600b602052604090205460ff16156113135760405163c1343a3760e01b815260040160405180910390fd5b6001600160a01b039091166000908152600a6020526040902055565b6060816000816001600160401b0381111561134c5761134c612c22565b60405190808252806020026020018201604052801561139e57816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161136a5790505b50905060005b8281146113f1576113cc8686838181106113c0576113c061332c565b90506020020135611a0d565b8282815181106113de576113de61332c565b60209081029190910101526001016113a4565b50949350505050565b600061092d82612148565b61140d6120b9565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b038216611458576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6114856120b9565b61148f60006123a5565b565b606060008060006114a18561142f565b90506000816001600160401b038111156114bd576114bd612c22565b6040519080825280602002602001820160405280156114e6578160200160208202803683370190505b50905061151360408051608081018252600080825260208201819052918101829052606081019190915290565b60015b83861461158d57611526816123f7565b915081604001516115855781516001600160a01b03161561154657815194505b876001600160a01b0316856001600160a01b03160361158557808387806001019850815181106115785761157861332c565b6020026020010181815250505b600101611516565b50909695505050505050565b600080600c60009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156115ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116139190613566565b505050915050620f42408161162891906135b6565b91505090565b6116366120b9565b600955565b60606003805461096e906132d5565b606081831061166c57604051631960ccad60e11b815260040160405180910390fd5b60008061167860005490565b9050600185101561168857600194505b80841115611694578093505b600061169f8761142f565b9050848610156116be57858503818110156116b8578091505b506116c2565b5060005b6000816001600160401b038111156116dc576116dc612c22565b604051908082528060200260200182016040528015611705578160200160208202803683370190505b5090508160000361171b5793506117ca92505050565b600061172688611a0d565b905060008160400151611737575080515b885b8881141580156117495750848714155b156117be57611757816123f7565b925082604001516117b65782516001600160a01b03161561177757825191505b8a6001600160a01b0316826001600160a01b0316036117b657808488806001019950815181106117a9576117a961332c565b6020026020010181815250505b600101611739565b50505092835250909150505b9392505050565b600f80546117de906132d5565b80601f016020809104026020016040519081016040528092919081815260200182805461180a906132d5565b80156118575780601f1061182c57610100808354040283529160200191611857565b820191906000526020600020905b81548152906001019060200180831161183a57829003601f168201915b505050505081565b600e5442106118815760405163f5ca718360e01b815260040160405180910390fd5b336000818152601460209081526040918290205482519182019390935230818301526060808201939093528151808203909301835260800190526118c89084908490612433565b336000908152601460205260409020547f0000000000000000000000000000000000000000000000000000000000000000908201111561191b5760405163b9c43c9160e01b815260040160405180910390fd5b61192533826124eb565b336000908152601460205260409020805490910190555050565b6119476120b9565b600f611953828261362a565b5050565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6119ce848484610aff565b6001600160a01b0383163b15611a07576119ea84848484612505565b611a07576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b6040805160808101825260008082526020820181905291810182905260608101919091526040805160808101825260008082526020820181905291810182905260608101919091526001831080611a6657506000548310155b15611a715792915050565b611a7a836123f7565b9050806040015115611a8c5792915050565b6117ca836125f1565b6060611aa082612113565b611abd57604051630a14c4b560e41b815260040160405180910390fd5b6000611ac7611cc5565b90508051600003611ae757604051806020016040528060008152506117ca565b80611af184612626565b604051602001611b029291906136e9565b6040516020818303038152906040529392505050565b604051632118854760e21b81526001600160a01b038216600482015260609081906000903090638462151c90602401600060405180830381865afa158015611b64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b8c9190810190613718565b9050600081516001600160401b03811115611ba957611ba9612c22565b604051908082528060200260200182016040528015611be257816020015b611bcf612a93565b815260200190600190039081611bc75790505b50905060005b8251811015611c915760126000848381518110611c0757611c0761332c565b60209081029190910181015182528181019290925260409081016000208151808301835281548152825180840190935260019091015463ffffffff8116835264010000000090046001600160a01b031682840152918201528251839083908110611c7357611c7361332c565b60200260200101819052508080611c89906133b6565b915050611be8565b509094909350915050565b6000611ca6611599565b611cb183600a61353d565b611cbb90856133e2565b6117ca919061340f565b6060600f805461096e906132d5565b611cdc6120b9565b6001600160a01b038116611d465760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b611d4f816123a5565b50565b600e544210611d745760405163f5ca718360e01b815260040160405180910390fd5b60008281526013602052604090205460ff1615611da457604051630d70a0e360e41b815260040160405180910390fd5b346103f2611db46000845161112b565b611dc0906103e86133e2565b611dca919061340f565b10611de857604051631da089a160e31b815260040160405180910390fd5b6000815134611df7919061340f565b90506000805b8351811015612058576000848281518110611e1a57611e1a61332c565b60200260200101519050611e2f8633836121b7565b806040015115612045576011546001600160a01b0316611e6257604051636f98876960e01b815260040160405180910390fd5b601154604051630814a8a360e01b815260048101869052600060248201819052916001600160a01b031690630814a8a390604401602060405180830381865afa158015611eb3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ed79190613342565b6011546020840151604051635448a72760e01b81529293506001600160a01b0390911691635448a727918491611f1391906000906004016137a8565b6000604051808303818588803b158015611f2c57600080fd5b505af1158015611f40573d6000803e3d6000fd5b5050601154604051630814a8a360e01b8152600481018a905260016024820152600094506001600160a01b039091169250630814a8a39150604401602060405180830381865afa158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613342565b6011546020850151604051635448a72760e01b81529293506001600160a01b0390911691635448a727918491611ff891906001906004016137a8565b6000604051808303818588803b15801561201157600080fd5b505af1158015612025573d6000803e3d6000fd5b505050505080826120369190613371565b6120409086613371565b945050505b5080612050816133b6565b915050611dfd565b506010546001600160a01b03166108fc61207283346133cf565b6040518115909202916000818181858888f1935050505015801561209a573d6000803e3d6000fd5b505050600091825250601360205260409020805460ff19166001179055565b6008546001600160a01b0316331461148f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611d3d565b600081600111158015612127575060005482105b801561092d575050600090815260046020526040902054600160e01b161590565b6000818060011161219e5760005481101561219e5760008181526004602052604081205490600160e01b8216900361219c575b806000036117ca57506000190160008181526004602052604090205461217b565b505b604051636f96cda160e11b815260040160405180910390fd5b80516000036122b1576011546001600160a01b03166121e957604051636f98876960e01b815260040160405180910390fd5b6121f48260016124eb565b80602001516012600061220a6000546000190190565b8152602080820192909252604001600020825181559181015180516001909301805491909201516001600160a01b0316640100000000026001600160c01b031990911663ffffffff909316929092179190911790557f0a45b0c26bf14889e8d36212297814c77812c46012b644a828a48c8dc1e5c71c838361228f6000546000190190565b84602001516040516122a494939291906137c5565b60405180910390a1505050565b816001600160a01b03166122c882600001516113fa565b6001600160a01b0316146122ef576040516330cd747160e01b815260040160405180910390fd5b6020818101518251600090815260128352604080822083518155928401518051600194850180549287015163ffffffff9092166001600160c01b0319909316929092176401000000006001600160a01b0392831602179091558616825260149093529182208054919290916123659084906133cf565b9091555050805160208201516040517f0a45b0c26bf14889e8d36212297814c77812c46012b644a828a48c8dc1e5c71c926122a4928792879291906137c5565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051608081018252600080825260208201819052918101829052606081019190915260008281526004602052604090205461092d9061266a565b805160208201208314612458576040516257c03760e51b815260040160405180910390fd5b600d546001600160a01b03166124c46124be856040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b846126b1565b6001600160a01b0316146112cc57604051638baa579f60e01b815260040160405180910390fd5b6119538282604051806020016040528060008152506126d5565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061253a9033908990889088906004016137f8565b6020604051808303816000875af1925050508015612575575060408051601f3d908101601f1916820190925261257291810190613835565b60015b6125d3573d8080156125a3576040519150601f19603f3d011682016040523d82523d6000602084013e6125a8565b606091505b5080516000036125cb576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b60408051608081018252600080825260208201819052918101829052606081019190915261092d61262183612148565b61266a565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a9004806126405750819003601f19909101908152919050565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b60008060006126c08585612742565b915091506126cd81612787565b509392505050565b6126df83836128d1565b6001600160a01b0383163b156112cc576000548281035b6127096000868380600101945086612505565b612726576040516368d2bf6b60e11b815260040160405180910390fd5b8181106126f657816000541461273b57600080fd5b5050505050565b60008082516041036127785760208301516040840151606085015160001a61276c878285856129cf565b94509450505050612780565b506000905060025b9250929050565b600081600481111561279b5761279b613852565b036127a35750565b60018160048111156127b7576127b7613852565b036128045760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611d3d565b600281600481111561281857612818613852565b036128655760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611d3d565b600381600481111561287957612879613852565b03611d4f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611d3d565b60008054908290036128f65760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146129a557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161296d565b50816000036129c657604051622e076360e81b815260040160405180910390fd5b60005550505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612a065750600090506003612a8a565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a5a573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a8357600060019250925050612a8a565b9150600090505b94509492505050565b604051806040016040528060008152602001612ad16040518060400160405280600063ffffffff16815260200160006001600160a01b031681525090565b905290565b6001600160e01b031981168114611d4f57600080fd5b600060208284031215612afe57600080fd5b81356117ca81612ad6565b80356001600160a01b0381168114612b2057600080fd5b919050565b600060208284031215612b3757600080fd5b6117ca82612b09565b60005b83811015612b5b578181015183820152602001612b43565b50506000910152565b60008151808452612b7c816020860160208601612b40565b601f01601f19169290920160200192915050565b6020815260006117ca6020830184612b64565b600060208284031215612bb557600080fd5b5035919050565b60008060408385031215612bcf57600080fd5b612bd883612b09565b946020939093013593505050565b600080600060608486031215612bfb57600080fd5b612c0484612b09565b9250612c1260208501612b09565b9150604084013590509250925092565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715612c5a57612c5a612c22565b60405290565b604080519081016001600160401b0381118282101715612c5a57612c5a612c22565b604051601f8201601f191681016001600160401b0381118282101715612caa57612caa612c22565b604052919050565b60006001600160401b03821115612ccb57612ccb612c22565b5060051b60200190565b8015158114611d4f57600080fd5b8035612b2081612cd5565b600082601f830112612cff57600080fd5b81356020612d14612d0f83612cb2565b612c82565b82815260a09283028501820192828201919087851115612d3357600080fd5b8387015b85811015612dee5780890382811215612d505760008081fd5b612d58612c38565b82358152606080601f1984011215612d705760008081fd5b612d78612c60565b888501358152604080603f1986011215612d925760008081fd5b612d9a612c60565b94508086013563ffffffff81168114612db35760008081fd5b8552612dc0868401612b09565b8a860152848a830152818a850152612dda60808701612ce3565b908401525050855250928401928101612d37565b5090979650505050505050565b600080600060608486031215612e1057600080fd5b8335925060208401356001600160401b03811115612e2d57600080fd5b612e3986828701612cee565b925050612e4860408501612b09565b90509250925092565b60008060208385031215612e6457600080fd5b82356001600160401b0380821115612e7b57600080fd5b818501915085601f830112612e8f57600080fd5b813581811115612e9e57600080fd5b8660208260051b8501011115612eb357600080fd5b60209290920196919550909350505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b8181101561158d57612f30838551612ec5565b9284019260809290920191600101612f1d565b600081518084526020808501945080840160005b83811015612f7357815187529582019590820190600101612f57565b509495945050505050565b6020815260006117ca6020830184612f43565b600080600060608486031215612fa657600080fd5b612faf84612b09565b95602085013595506040909401359392505050565b828152606081016117ca6020830184805163ffffffff1682526020908101516001600160a01b0316910152565b60006001600160401b0383111561300a5761300a612c22565b61301d601f8401601f1916602001612c82565b905082815283838301111561303157600080fd5b828260208301376000602084830101529392505050565b600082601f83011261305957600080fd5b6117ca83833560208501612ff1565b60008060006060848603121561307d57600080fd5b8335925060208401356001600160401b0381111561309a57600080fd5b6130a686828701613048565b925050604084013590509250925092565b6000602082840312156130c957600080fd5b81356001600160401b038111156130df57600080fd5b8201601f810184136130f057600080fd5b6125e984823560208401612ff1565b6000806040838503121561311257600080fd5b61311b83612b09565b9150602083013561312b81612cd5565b809150509250929050565b6000806000806080858703121561314c57600080fd5b61315585612b09565b935061316360208601612b09565b92506040850135915060608501356001600160401b0381111561318557600080fd5b61319187828801613048565b91505092959194509250565b6080810161092d8284612ec5565b80518252602090810151805163ffffffff168284015201516001600160a01b0316604090910152565b6040815260006131e76040830185612f43565b82810360208481019190915284518083528582019282019060005b81811015612dee576132158386516131ab565b9383019360609290920191600101613202565b60ff81168114611d4f57600080fd5b6000806040838503121561324a57600080fd5b82359150602083013561312b81613228565b6000806040838503121561326f57600080fd5b61327883612b09565b915061328660208401612b09565b90509250929050565b600080604083850312156132a257600080fd5b8235915060208301356001600160401b038111156132bf57600080fd5b6132cb85828601612cee565b9150509250929050565b600181811c908216806132e957607f821691505b60208210810361330957634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561332157600080fd5b81516117ca81612cd5565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561335457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561092d5761092d61335b565b60c0810161339282876131ab565b93151560608201526001600160a01b0392909216608083015260a090910152919050565b6000600182016133c8576133c861335b565b5060010190565b8181038181111561092d5761092d61335b565b808202811582820484141761092d5761092d61335b565b634e487b7160e01b600052601260045260246000fd5b60008261341e5761341e6133f9565b500490565b60006020828403121561343557600080fd5b81516117ca81613228565b60ff828116828216039081111561092d5761092d61335b565b600181815b8085111561349457816000190482111561347a5761347a61335b565b8085161561348757918102915b93841c939080029061345e565b509250929050565b6000826134ab5750600161092d565b816134b85750600061092d565b81600181146134ce57600281146134d8576134f4565b600191505061092d565b60ff8411156134e9576134e961335b565b50506001821b61092d565b5060208310610133831016604e8410600b8410161715613517575081810a61092d565b6135218383613459565b80600019048211156135355761353561335b565b029392505050565b60006117ca60ff84168361349c565b805169ffffffffffffffffffff81168114612b2057600080fd5b600080600080600060a0868803121561357e57600080fd5b6135878661354c565b94506020860151935060408601519250606086015191506135aa6080870161354c565b90509295509295909350565b6000826135c5576135c56133f9565b600160ff1b8214600019841416156135df576135df61335b565b500590565b601f8211156112cc57600081815260208120601f850160051c8101602086101561360b5750805b601f850160051c820191505b81811015610c9057828155600101613617565b81516001600160401b0381111561364357613643612c22565b6136578161365184546132d5565b846135e4565b602080601f83116001811461368c57600084156136745750858301515b600019600386901b1c1916600185901b178555610c90565b600085815260208120601f198616915b828110156136bb5788860151825594840194600190910190840161369c565b50858210156136d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600083516136fb818460208801612b40565b83519083019061370f818360208801612b40565b01949350505050565b6000602080838503121561372b57600080fd5b82516001600160401b0381111561374157600080fd5b8301601f8101851361375257600080fd5b8051613760612d0f82612cb2565b81815260059190911b8201830190838101908783111561377f57600080fd5b928401925b8284101561379d57835182529284019290840190613784565b979650505050505050565b608081016137b682856131ab565b82151560608301529392505050565b8481526001600160a01b03841660208201526040810183905260c081016137ef60608301846131ab565b95945050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061382b90830184612b64565b9695505050505050565b60006020828403121561384757600080fd5b81516117ca81612ad6565b634e487b7160e01b600052602160045260246000fdfea2646970667358221220378e8735eb96742cb6d704097000c77c824c5e1a9a221adc67bc73fd08cafd0664736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000642757e0000000000000000000000000000000000000000000000000000000000000614400000000000000000000000040314c0a645a1f25b501a61ce0795550a0b886c10000000000000000000000000a77230d17318075983913bc2145db16c7366156000000000000000000000000000000000000000000000000000000000000003b68747470733a2f2f6465762d2d706879676966792e6e65746c6966792e6170702f6e66742f686f6f6469652f34333131342f6d657461646174612f0000000000