[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "DNAlreadyInitialized", "type": "error" }, { "inputs": [], "name": "DNNotInitialized", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "FnSelectorNotRecognized", "type": "error" }, { "inputs": [], "name": "InsufficientAllowance", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "InvalidUnit", "type": "error" }, { "inputs": [], "name": "LinkMirrorContractFailed", "type": "error" }, { "inputs": [], "name": "MirrorAddressIsZero", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "inputs": [], "name": "SenderNotMirror", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TotalSupplyOverflow", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "newBaseUri", "type": "string" } ], "name": "BaseUriChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "buyer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "creatorFee", "type": "uint256" } ], "name": "Buy", "type": "event" }, { "anonymous": false, "inputs": [], "name": "CreatorFeeFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newCreatorFeePercentage", "type": "uint256" } ], "name": "CreatorFeePercentageChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "creatorFee", "type": "uint256" } ], "name": "DeflationarySell", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MetadataFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "PaymentReceived", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "seller", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "price", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "protocolFee", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "creatorFee", "type": "uint256" } ], "name": "Sell", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "SkipNFTSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newTokenUriContract", "type": "address" } ], "name": "TokenUriContractChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [], "name": "WhitelistDisabled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newWhitelistMintLimit", "type": "uint256" } ], "name": "WhitelistMintLimitChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "indexed": false, "internalType": "bool", "name": "isWhitelisted", "type": "bool" } ], "name": "WhitelistModified", "type": "event" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "BLAST", "outputs": [ { "internalType": "contract IBlast", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_NAME_LENGTH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_NFT_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_SYMBOL_LENGTH", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_UNITS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "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": [], "name": "blastPoints", "outputs": [ { "internalType": "contract IBlastPoints", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bondingCurveFreeze", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bondingCurveSpecs", "outputs": [ { "internalType": "uint256", "name": "factor", "type": "uint256" }, { "internalType": "uint256", "name": "exponent", "type": "uint256" }, { "internalType": "uint256", "name": "c", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bondingCurveSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "nftAmount", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "buy", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipientOfGas", "type": "address" } ], "name": "claimAllGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipientOfYield", "type": "address" } ], "name": "claimAllYield", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipientOfGas", "type": "address" }, { "internalType": "uint256", "name": "gasToClaim", "type": "uint256" }, { "internalType": "uint256", "name": "gasSecondsToConsume", "type": "uint256" } ], "name": "claimGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipientOfGas", "type": "address" }, { "internalType": "uint256", "name": "minClaimRateBips", "type": "uint256" } ], "name": "claimGasAtMinClaimRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipientOfGas", "type": "address" } ], "name": "claimMaxGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipientOfYield", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "claimYield", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "creatorFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "creatorVault", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "deflationBurnCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds_", "type": "uint256[]" } ], "name": "deflationarySell", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "disableWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "freezeCreatorFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "freezeMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "gasClaimer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "getBuyPriceExclusiveFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "getBuyPriceInclFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "supply", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getProtocolFeePercentage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "getSellPriceExclusiveFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "getSellPriceInclFees", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "getSkipNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "components": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "uint256", "name": "units_", "type": "uint256" }, { "internalType": "string", "name": "baseUri_", "type": "string" }, { "internalType": "address", "name": "tokenUriContract_", "type": "address" }, { "internalType": "uint256", "name": "maxNftSupply_", "type": "uint256" }, { "internalType": "bool", "name": "useWhitelist_", "type": "bool" }, { "internalType": "uint256", "name": "whitelistMintLimit_", "type": "uint256" }, { "internalType": "bool", "name": "isDeflationary_", "type": "bool" } ], "internalType": "struct CollectionSpecs", "name": "collectionSpecs", "type": "tuple" }, { "internalType": "address", "name": "tokenUriFallbackContract", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "factor", "type": "uint256" }, { "internalType": "uint256", "name": "exponent", "type": "uint256" }, { "internalType": "uint256", "name": "c", "type": "uint256" } ], "internalType": "struct BondingCurveSpecs", "name": "bondingCurveSpecs", "type": "tuple" }, { "internalType": "address", "name": "creatorVault", "type": "address" }, { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "address", "name": "router", "type": "address" }, { "internalType": "address", "name": "gasClaimer", "type": "address" }, { "internalType": "address", "name": "yieldClaimer", "type": "address" }, { "internalType": "address", "name": "pointsOperator", "type": "address" }, { "internalType": "contract IBlastPoints", "name": "blastPoints", "type": "address" }, { "internalType": "address", "name": "dn404Mirror", "type": "address" } ], "internalType": "struct ICollectionImpl.InitializeParams", "name": "params", "type": "tuple" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isDeflationary", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isWhitelistEnabled", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadataFreeze", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mirrorERC721", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "addresses_", "type": "address[]" }, { "internalType": "bool", "name": "isWhitelisted_", "type": "bool" } ], "name": "modifyWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pointsOperator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "router", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds_", "type": "uint256[]" }, { "internalType": "uint256", "name": "minPrice_", "type": "uint256" }, { "internalType": "uint256", "name": "deadline_", "type": "uint256" } ], "name": "sell", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseUri_", "type": "string" } ], "name": "setBaseUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract IBlastPoints", "name": "blastPoints_", "type": "address" } ], "name": "setBlastPoints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "creatorFeePercentage_", "type": "uint256" } ], "name": "setCreatorFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "gasClaimer_", "type": "address" } ], "name": "setGasClaimer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pointsOperator_", "type": "address" } ], "name": "setPointsOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "skipNFT", "type": "bool" } ], "name": "setSkipNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenUriContract_", "type": "address" } ], "name": "setTokenUriContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "whitelistMintLimit_", "type": "uint256" } ], "name": "setWhitelistMintLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "yieldClaimer_", "type": "address" } ], "name": "setYieldClaimer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenUriContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenUriFallbackContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "units", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "whitelistMintLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelistMinted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "yieldClaimer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61597a80620000e66000396000f3fe6080604052600436106104095760003560e01c806395d89b4111610213578063c693b9b811610123578063d6febde8116100ab578063e3d891711161007a578063e3d8917114610f28578063f210ace414610f3d578063f2fde38b14610f5d578063f887ea4014610f7d578063fe889e0e14610f9d57610448565b8063d6febde814610ea0578063d8b5138a14610eb3578063dd62ed3e14610ed3578063ddd1783a14610f1257610448565b8063d111515d116100f2578063d111515d14610e20578063d1e8308b14610e35578063d570deff14610e55578063d5abeb0114610e75578063d6b0f48414610e8b57610448565b8063c693b9b814610daa578063c6d2cc9414610dca578063c8cc517514610de0578063cd2002f514610e0057610448565b8063a1c32725116101a6578063b2bd6b5011610175578063b2bd6b5014610d12578063b5077f4414610d32578063bcd2bf2514610d4a578063c2d94aec14610d6a578063c3c5658414610d8a57610448565b8063a1c3272514610c9c578063a4cfbe4d14610cbc578063a9059cbb14610cd2578063b1f63c3814610cf257610448565b806398a8cffe116101e257806398a8cffe14610c0a5780639abc832014610c375780639b19251a14610c4c578063a0bcfc7f14610c7c57610448565b806395d89b4114610ba4578063976a843514610bb957806397d7577614610bcf5780639869e07214610bea57610448565b80633d24557111610319578063706d9f78116102a157806384bfcb621161027057806384bfcb6214610af85780638607498514610b18578063870b08ac14610b2d5780638da5cb5b14610b4d5780638e8c10a214610b8a57610448565b8063706d9f7814610a6057806370a0823114610a75578063715018a614610ac357806378e808d514610ad857610448565b806349ad7e0b116102e857806349ad7e0b146109c55780634ac5a1e6146109e55780634babc79b146109fa5780634ef41efc14610a1a5780635cf4ee9114610a4057610448565b80633d2455711461092c5780634077ec301461094b57806344048e3d1461098557806347fb4553146109a557610448565b806323b872dd1161039c5780632a6a935d1161036b5780632a6a935d1461089a5780632b8a30d2146108ba578063313ce567146108d0578063381b965c146108ec5780633c0ae2c71461090c57610448565b806323b872dd1461081a578063272b13231461083a578063274e430b1461085a578063292691441461087a57610448565b806318160ddd116103d857806318160ddd1461078b578063184d69ab146107c25780631869ebda146107dc5780632163837f146107fc57610448565b806306fdde03146106d6578063095ea7b3146107015780630dd16fd5146107315780631760d1cd1461075357610448565b3661044857604080513381523460208201527f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be770910160405180910390a1005b68a20d6e21d0e525530860003560e01c63e5eb36c88190036104af5760018201546001600160a01b031633146104915760405163ce5a776b60e01b815260040160405180910390fd5b6104a5600435602435604435606435610fb7565b6104af6001611342565b8063813500fc0361051b5760018201546001600160a01b031633146104e75760405163ce5a776b60e01b815260040160405180910390fd5b600435602890815260443560145268a20d6e21d0e525530b60009081526048812091526024351515905561051b6001611342565b8063e985e9c50361054557600061053660043560243561134c565b9050610543811515611342565b505b80636352211e0361056c5761056c61055e600435611375565b6001600160a01b0316611342565b806324359879036105855761058561055e6004356113a2565b8063d10b6e0c036105e65760018201546001600160a01b031633146105bd5760405163ce5a776b60e01b815260040160405180910390fd5b60006105d06004356024356044356113fe565b90506105e4816001600160a01b0316611342565b505b8063081812fc036105ff576105ff61055e6004356114e2565b8063f5b100ea03610643576001600160a01b0360043516600090815268a20d6e21d0e5255313602052604090205461064390600160801b900463ffffffff16611342565b8063e2c792810361066f5768a20d6e21d0e52553085461066f90600160801b900463ffffffff16611342565b8063c87b56dd036106a857602060405101604052600061069661069160043590565b61152e565b90506020810360208152815160600181f35b8063b7a94eb8036106bd576106bd6001611342565b604051631e085ca760e11b815260040160405180910390fd5b3480156106e257600080fd5b506106eb61163f565b6040516106f89190614c0e565b60405180910390f35b34801561070d57600080fd5b5061072161071c366004614c61565b6116d1565b60405190151581526020016106f8565b34801561073d57600080fd5b5061075161074c366004614c8d565b6116e7565b005b34801561075f57600080fd5b50600054610773906001600160a01b031681565b6040516001600160a01b0390911681526020016106f8565b34801561079757600080fd5b5068a20d6e21d0e525530854600160a01b90046001600160601b03165b6040519081526020016106f8565b3480156107ce57600080fd5b506010546107219060ff1681565b3480156107e857600080fd5b506107b46107f7366004614c61565b611820565b34801561080857600080fd5b506107b469152d02c7e14af680000081565b34801561082657600080fd5b50610721610835366004614ca6565b6118d3565b34801561084657600080fd5b506107b4610855366004614ce7565b611941565b34801561086657600080fd5b50610721610875366004614ce7565b6119e4565b34801561088657600080fd5b50600754610773906001600160a01b031681565b3480156108a657600080fd5b506107216108b5366004614d14565b611a2d565b3480156108c657600080fd5b506107b460145481565b3480156108dc57600080fd5b50604051601281526020016106f8565b3480156108f857600080fd5b50610751610907366004614c8d565b611a41565b34801561091857600080fd5b50610751610927366004614ce7565b611aa0565b34801561093857600080fd5b5060155461072190610100900460ff1681565b34801561095757600080fd5b5060045460055460065461096a92919083565b604080519384526020840192909252908201526060016106f8565b34801561099157600080fd5b506107516109a0366004614ce7565b611b3f565b3480156109b157600080fd5b50600354610773906001600160a01b031681565b3480156109d157600080fd5b506107516109e0366004614ce7565b611b8b565b3480156109f157600080fd5b50610751611bd7565b348015610a0657600080fd5b506107b4610a15366004614c8d565b611c19565b348015610a2657600080fd5b5068a20d6e21d0e5255309546001600160a01b0316610773565b348015610a4c57600080fd5b506107b4610a5b366004614d2f565b611ca2565b348015610a6c57600080fd5b506107b4611d1a565b348015610a8157600080fd5b506107b4610a90366004614ce7565b6001600160a01b0316600090815268a20d6e21d0e52553136020526040902054600160a01b90046001600160601b031690565b348015610acf57600080fd5b50610751611d2a565b348015610ae457600080fd5b50600154610773906001600160a01b031681565b348015610b0457600080fd5b50600e54610773906001600160a01b031681565b348015610b2457600080fd5b506107b4601e81565b348015610b3957600080fd5b50610751610b48366004614e06565b611d3e565b348015610b5957600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610773565b348015610b9657600080fd5b506017546107219060ff1681565b348015610bb057600080fd5b506106eb611e03565b348015610bc557600080fd5b506107b460095481565b348015610bdb57600080fd5b506107736002604360981b0181565b348015610bf657600080fd5b50610751610c0536600461506f565b611e12565b348015610c1657600080fd5b506107b4610c25366004614ce7565b60136020526000908152604090205481565b348015610c4357600080fd5b506106eb612215565b348015610c5857600080fd5b50610721610c67366004614ce7565b60116020526000908152604090205460ff1681565b348015610c8857600080fd5b50610751610c9736600461518f565b6122a3565b348015610ca857600080fd5b506107b4610cb73660046151c3565b61233a565b348015610cc857600080fd5b506107b460165481565b348015610cde57600080fd5b50610721610ced366004614c61565b6123ea565b348015610cfe57600080fd5b506107b4610d0d366004614c8d565b6123f7565b348015610d1e57600080fd5b50600254610773906001600160a01b031681565b348015610d3e57600080fd5b506107b463fffffffe81565b348015610d5657600080fd5b506107b4610d65366004614c61565b612408565b348015610d7657600080fd5b506107b4610d85366004614ce7565b612473565b348015610d9657600080fd5b506107b4610da5366004614c8d565b6124d9565b348015610db657600080fd5b50610751610dc536600461525e565b61254f565b348015610dd657600080fd5b506107b460185481565b348015610dec57600080fd5b50600d54610773906001600160a01b031681565b348015610e0c57600080fd5b506107b4610e1b366004614ce7565b61277e565b348015610e2c57600080fd5b506107516127e2565b348015610e4157600080fd5b50610751610e50366004615292565b612822565b348015610e6157600080fd5b506107b4610e70366004614c8d565b612ab0565b348015610e8157600080fd5b506107b4600f5481565b348015610e9757600080fd5b50610751612ac4565b610751610eae366004614d2f565b612b01565b348015610ebf57600080fd5b50610751610ece366004614ce7565b612e88565b348015610edf57600080fd5b506107b4610eee3660046152df565b602890815260149190915268a20d6e21d0e525530f60009081526048812091525490565b348015610f1e57600080fd5b506107b460125481565b348015610f3457600080fd5b506107b4600681565b348015610f4957600080fd5b50610751610f58366004614ce7565b612ed4565b348015610f6957600080fd5b50610751610f78366004614ce7565b612f7d565b348015610f8957600080fd5b50600854610773906001600160a01b031681565b348015610fa957600080fd5b506015546107219060ff1681565b6001600160a01b038316610fde57604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b031661101a5760405163040739bf60e41b815260040160405180910390fd5b600a81016002820160006110638361103f600160201b891089025b6000190160011b90565b60008160031c8360601b0180546007841660051b1c63ffffffff1691505092915050565b63ffffffff1681526020810191909152604001600020546001600160a01b038781169116146110a45760405162a1148160e81b815260040160405180910390fd5b856001600160a01b0316836001600160a01b031614611105576110c7868461134c565b61110557826001600160a01b03166110de856114e2565b6001600160a01b03161461110557604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b038087166000908152600b84016020526040808220928816825281209061113260095490565b83549091506008860190600160a01b90046001600160601b03168083111561116d57604051631e9acf1760e31b815260040160405180910390fd5b84546001600160601b03918490038216600160a01b9081026001600160a01b039283161787558554818104841686019093160291161783556005860160601b600889901c015460ff89161c600116156111f9576005860160601b600889901c018054600160ff8b161b191690556000888152600487016020526040902080546001600160a01b03191690555b6001600160a01b038a166000908152602082905260408120855460001963ffffffff600160801b80840482169290920180821690920263ffffffff60801b19909316929092178855600381901c631fffffff16606084901b015492939260059190911b60e0161c1690506000611279886000198d01600190811b0161103f565b905061128c838263ffffffff1684612fb8565b6112a78860001963ffffffff851601600190811b0183612fb8565b5050835463ffffffff60801b198116600160801b9182900463ffffffff908116600181019091169092021785556001600160a01b038b1660009081526020849052604090209091506112fa90828b612fb8565b61130f868a611309878e612fe3565b84613070565b50816000528860601b60601c8a60601b60601c60008051602061590583398151915260206000a350505050505050505050565b8060005260206000f35b6028818152601483905268a20d6e21d0e525530b60009081526048812091525415155b92915050565b6000611380826130b2565b61139d5760405163677510db60e11b815260040160405180910390fd5b61136f825b600068a20d6e21d0e525530868a20d6e21d0e525530a826113d768a20d6e21d0e525531261103f600160201b88108802611035565b63ffffffff1681526020810191909152604001600020546001600160a01b03169392505050565b600068a20d6e21d0e525530868a20d6e21d0e525530a8261143368a20d6e21d0e525531261103f600160201b89108902611035565b63ffffffff1681526020810191909152604001600020546001600160a01b0390811692508316821461148657611469828461134c565b611486576040516367d9dca160e11b815260040160405180910390fd5b6000848152600482016020526040902080546001600160a01b0319166001600160a01b0387169081179091556005820160601b600886901c018054600160ff881690811b1991909116921515901b919091179055509392505050565b60006114ed826130b2565b61150a5760405163677510db60e11b815260040160405180910390fd5b50600090815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b600d546060906001600160a01b0316156115ba57600d54604051638c4c1b2f60e01b8152600481018490523060248201526001600160a01b0390911690638c4c1b2f906044015b600060405180830381865afa158015611592573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261136f9190810190615318565b6000600c80546115c99061538e565b9050111561160357600c6115dc836130cf565b6040516020016115ed9291906153c8565b6040516020818303038152906040529050919050565b600e54604051638c4c1b2f60e01b8152600481018490523060248201526001600160a01b0390911690638c4c1b2f90604401611575565b919050565b6060600a805461164e9061538e565b80601f016020809104026020016040519081016040528092919081815260200182805461167a9061538e565b80156116c75780601f1061169c576101008083540402835291602001916116c7565b820191906000526020600020905b8154815290600101906020018083116116aa57829003601f168201915b5050505050905090565b60006116de338484613161565b50600192915050565b6116ef6131c3565b678ac7230489e8000081111561176a5760405162461bcd60e51b815260206004820152603560248201527f436f6c6c656374696f6e496d706c3a2063726561746f72206665652070657263604482015274656e74616765206d757374206265203c3d2031302560581b60648201526084015b60405180910390fd5b601554610100900460ff16156117e4576016548111156117e45760405162461bcd60e51b815260206004820152602f60248201527f436f6c6c656374696f6e496d706c3a2063726561746f72206665652063616e2060448201526e1bdb9b1e481899481b1bddd95c9959608a1b6064820152608401611761565b60168190556040518181527fd6df3a3a25b6e5e3b73e2423ea8f25c123fa5a25323c0710b1cf5a53d4989999906020015b60405180910390a150565b6001546000906001600160a01b0316331461184d5760405162461bcd60e51b81526004016117619061544f565b604051637cb8cb3160e11b81523060048201526001600160a01b0384166024820152604481018390526002604360981b019063f9719662906064015b6020604051808303816000875af11580156118a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118cc91906154a3565b9392505050565b336028908152601484905268a20d6e21d0e525530f600090815260488120918190528154909190600019811461192a5780841115611924576040516313be252b60e01b815260040160405180910390fd5b83810382555b61193586868661321e565b50600195945050505050565b600080546001600160a01b0316331461196c5760405162461bcd60e51b8152600401611761906154bc565b604051634aa7d2f760e11b81523060048201526001600160a01b03831660248201526002604360981b019063954fa5ee906044015b6020604051808303816000875af11580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f91906154a3565b6001600160a01b038116600090815268a20d6e21d0e5255313602052604081208054600160581b9004600116611a1a5750503b90565b54600160581b9004600216151592915050565b6000611a393383613a5b565b506001919050565b611a496131c3565b60105460ff16611a6b5760405162461bcd60e51b81526004016117619061550e565b60128190556040518181527fc08f23ef53ad3e7cd7e650449b137cb29989ae6c48a726335a0bb752386c1fc790602001611815565b6003546001600160a01b03163314611aca5760405162461bcd60e51b815260040161176190615556565b600280546001600160a01b0319166001600160a01b038381169182179092556003546040516336b91f2b60e01b815292166004830152906336b91f2b90602401600060405180830381600087803b158015611b2457600080fd5b505af1158015611b38573d6000803e3d6000fd5b5050505050565b6003546001600160a01b03163314611b695760405162461bcd60e51b815260040161176190615556565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611bb55760405162461bcd60e51b8152600401611761906154bc565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b611bdf6131c3565b6015805461ff0019166101001790556040517f8a429ef5a9bbe6aea08f490ef3e4b48370e9d27b5e24750cacf12257fa4ea9ce90600090a1565b60145460009081611c33611c2d85846155c2565b85611ca2565b90506000670de0b6b3a7640000611c48611d1a565b611c5290846155d5565b611c5c9190615602565b90506000670de0b6b3a764000060165484611c7791906155d5565b611c819190615602565b905080611c8e83856155c2565b611c9891906155c2565b9695505050505050565b6005546000908190611cb5906001615624565b600654909150611cc69084906155d5565b6004548290611cd5828861571b565b84611ce0888a615624565b611cea919061571b565b611cf491906155c2565b611cfe91906155d5565b611d089190615602565b611d129190615624565b949350505050565b6000611d24613ad9565b51919050565b611d326131c3565b611d3c6000613b5d565b565b611d466131c3565b60105460ff16611d685760405162461bcd60e51b81526004016117619061550e565b60005b8251811015611dc5578160116000858481518110611d8b57611d8b615727565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101611d6b565b507f472ed91ec2873cb9136458d49b242345999ac352f37d8709666738d9cba32ac18282604051611df792919061573d565b60405180910390a15050565b6060600b805461164e9061538e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015611e575750825b90506000826001600160401b03166001148015611e735750303b155b905081158015611e81575080155b15611e9f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611ec957845460ff60401b1916600160401b1785555b855151518015801590611edd5750601e8111155b611f1f5760405162461bcd60e51b8152602060048201526013602482015272092dcecc2d8d2c840dcc2daca40d8cadccee8d606b1b6044820152606401611761565b865160200151518015801590611f36575060068111155b611f7a5760405162461bcd60e51b8152602060048201526015602482015274092dcecc2d8d2c840e6f2dac4ded840d8cadccee8d605b1b6044820152606401611761565b875151600a90611f8a90826157d7565b50875160200151600b90611f9e90826157d7565b5087516040015115801590611fc2575087516040015169152d02c7e14af680000010155b61200e5760405162461bcd60e51b815260206004820152601d60248201527f436f6c6c656374696f6e496d706c3a20696e76616c696420756e6974730000006044820152606401611761565b875160400151600955608088015161202590613bce565b6120438860c0015189608001518a61012001518b6101000151613bdf565b61204b613d48565b61205c6000808a6101400151613d58565b875160600151600c9061206f90826157d7565b5087516080810151600d80546001600160a01b03199081166001600160a01b03938416179091556020808c0151600e805484169185169190911790556040808d0151805160045591820151600555015160065560608b015160078054831691841691909117905560a0808c015160088054909316931692909217905566b1a2bc2ec5000060165501511561217c57875160a0015163fffffffe10156121615760405162461bcd60e51b815260206004820152602260248201527f436f6c6c656374696f6e496d706c3a206d6178537570706c7920746f6f2068696044820152610ced60f31b6064820152608401611761565b600954885160a0015161217491906155d5565b600f55612191565b60095461218d9063fffffffe6155d5565b600f555b5050855160c08101516010805491151560ff1992831617905560e0820151601255610100909101516017805491151591909216179055831561220d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b600c80546122229061538e565b80601f016020809104026020016040519081016040528092919081815260200182805461224e9061538e565b801561229b5780601f106122705761010080835404028352916020019161229b565b820191906000526020600020905b81548152906001019060200180831161227e57829003601f168201915b505050505081565b6122ab6131c3565b60155460ff16156122fe5760405162461bcd60e51b815260206004820152601f60248201527f436f6c6c656374696f6e496d706c3a206d6574616461746120667265657a65006044820152606401611761565b600c61230a82826157d7565b507f87cdeaffd8e70903d6ce7cc983fac3b09ca79e83818124c98e47a1d70f8027d6816040516118159190614c0e565b600080546001600160a01b031633146123655760405162461bcd60e51b8152600401611761906154bc565b604051637d7e71cf60e11b81523060048201526001600160a01b038516602482015260448101849052606481018390526002604360981b019063fafce39e906084016020604051808303816000875af11580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d1291906154a3565b60006116de33848461321e565b60145460009081611d128285611ca2565b600080546001600160a01b031633146124335760405162461bcd60e51b8152600401611761906154bc565b604051630951888f60e01b81523060048201526001600160a01b0384166024820152604481018390526002604360981b0190630951888f90606401611889565b6001546000906001600160a01b031633146124a05760405162461bcd60e51b81526004016117619061544f565b60405163430021db60e11b81523060048201526001600160a01b03831660248201526002604360981b019063860043b6906044016119a1565b601454600090816124ea8285611ca2565b90506000670de0b6b3a76400006124ff611d1a565b61250990846155d5565b6125139190615602565b90506000670de0b6b3a76400006016548461252e91906155d5565b6125389190615602565b9050806125458385615624565b611c989190615624565b612557613f16565b60175460ff166125a95760405162461bcd60e51b815260206004820181905260248201527f436f6c6c656374696f6e496d706c3a206e6f74206465666c6174696f6e6172796044820152606401611761565b8051806125f85760405162461bcd60e51b815260206004820152601b60248201527f436f6c6c656374696f6e496d706c3a206e6f20746f6b656e49647300000000006044820152606401611761565b60648111156126495760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c656374696f6e496d706c3a206d61782031303020746f6b656e7300006044820152606401611761565b600061265760185483611ca2565b90506000612663613ad9565b90506000670de0b6b3a764000082600001518461268091906155d5565b61268a9190615602565b90506000670de0b6b3a7640000601654856126a591906155d5565b6126af9190615602565b90506126ba86613f4e565b8551601860008282546126cd9190615624565b909155505060208301516126e19083613fde565b6007546126f7906001600160a01b031682613fde565b612715338261270685886155c2565b61271091906155c2565b613fde565b60408051868152602081018690529081018390526060810182905233907fbceaeba7c52fa63737171b74007ed07a5e53917edfb2c775793e5c4480d4de149060800160405180910390a2505050505061277b600160008051602061592583398151915255565b50565b600080546001600160a01b031633146127a95760405162461bcd60e51b8152600401611761906154bc565b60405163662aa11d60e01b81523060048201526001600160a01b03831660248201526002604360981b019063662aa11d906044016119a1565b6127ea6131c3565b6015805460ff191660011790556040517feef043febddf4e1d1cf1f72ff1407b84e036e805aa0934418cb82095da8d716490600090a1565b61282a613f16565b8251806128795760405162461bcd60e51b815260206004820152601b60248201527f436f6c6c656374696f6e496d706c3a206e6f20746f6b656e49647300000000006044820152606401611761565b60648111156128ca5760405162461bcd60e51b815260206004820152601e60248201527f436f6c6c656374696f6e496d706c3a206d61782031303020746f6b656e7300006044820152606401611761565b8142111561291a5760405162461bcd60e51b815260206004820152601f60248201527f436f6c6c656374696f6e496d706c3a20646561646c696e6520706173736564006044820152606401611761565b60006129338260145461292d91906155c2565b83611ca2565b9050600061293f613ad9565b90506000670de0b6b3a764000082600001518461295c91906155d5565b6129669190615602565b90506000670de0b6b3a76400006016548561298191906155d5565b61298b9190615602565b9050868161299984876155c2565b6129a391906155c2565b10156129f15760405162461bcd60e51b815260206004820152601d60248201527f436f6c6c656374696f6e496d706c3a20707269636520746f6f206c6f770000006044820152606401611761565b8460146000828254612a0391906155c2565b90915550612a12905088613f4e565b612a20836020015183613fde565b600754612a36906001600160a01b031682613fde565b612a45338261270685886155c2565b60408051868152602081018690529081018390526060810182905233907f483f8aec0fd892ac72ad1ba8d0e9c9e73db59c12d263fd71de480b5b3deeae3c9060800160405180910390a25050505050612aab600160008051602061592583398151915255565b505050565b60145460009081611d12611c2d85846155c2565b612acc6131c3565b6010805460ff191690556040517f212c6e1d3045c9581ef0adf2504dbb1d137f52f38162ccf77a16c69d14eba5c390600090a1565b612b09613f16565b60008211612b645760405162461bcd60e51b815260206004820152602260248201527f436f6c6c656374696f6e496d706c3a20616d6f756e74206d757374206265203e604482015261020360f41b6064820152608401611761565b60105460ff1615612c7c573360009081526011602052604090205460ff16612bce5760405162461bcd60e51b815260206004820152601f60248201527f436f6c6c656374696f6e496d706c3a206e6f742077686974656c6973746564006044820152606401611761565b60125415612c7c5760125433600090815260136020526040902054612bf4908490615624565b1115612c575760405162461bcd60e51b815260206004820152602c60248201527f436f6c6c656374696f6e496d706c3a2077686974656c697374206d696e74206c60448201526b1a5b5a5d081c995858da195960a21b6064820152608401611761565b3360009081526013602052604081208054849290612c76908490615624565b90915550505b80421115612ccc5760405162461bcd60e51b815260206004820152601f60248201527f436f6c6c656374696f6e496d706c3a20646561646c696e6520706173736564006044820152606401611761565b6000612cda60145484611ca2565b90506000612ce6613ad9565b90506000670de0b6b3a7640000826000015184612d0391906155d5565b612d0d9190615602565b90506000670de0b6b3a764000060165485612d2891906155d5565b612d329190615602565b905080612d3f8386615624565b612d499190615624565b341015612da45760405162461bcd60e51b815260206004820152602360248201527f436f6c6c656374696f6e496d706c3a206e6f7420656e6f756768206574682073604482015262195b9d60ea1b6064820152608401611761565b8560146000828254612db69190615624565b90915550612dc690503387614089565b612dd4836020015183613fde565b600754612dea906001600160a01b031682613fde565b60008183612df887346155c2565b612e0291906155c2565b612e0c91906155c2565b90508015612e1e57612e1e3382613fde565b60408051888152602081018790529081018490526060810183905233907f064fb1933e186be0b289a87e98518dc18cc9856ecbc9f1353d1a138ddf733ec59060800160405180910390a25050505050612e84600160008051602061592583398151915255565b5050565b6001546001600160a01b03163314612eb25760405162461bcd60e51b81526004016117619061544f565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b612edc6131c3565b60155460ff1615612f2f5760405162461bcd60e51b815260206004820152601f60248201527f436f6c6c656374696f6e496d706c3a206d6574616461746120667265657a65006044820152606401611761565b600d80546001600160a01b0319166001600160a01b0383169081179091556040519081527fcb93ebca008843e5202d69a674d3212675c9de55e9446c71da481f6b4f76d46490602001611815565b612f856131c3565b6001600160a01b038116612faf57604051631e4fbdf760e01b815260006004820152602401611761565b61277b81613b5d565b8160031c8360601b016007831660051b815480821c841863ffffffff16821b81188355505050505050565b8154600160601b900463ffffffff1668a20d6e21d0e52553088161306957805463ffffffff198116600163ffffffff928316019182169081178355855463ffffffff60601b1916600160601b82021786556000818152600284016020526040902080546001600160a01b0319166001600160a01b03871617905590925061306957600080fd5b5092915050565b600183038060021c8560601b0180546003831660061b92508463ffffffff168460201b178082851c186001600160401b0316841b821883555050505050505050565b6000806130be836113a2565b6001600160a01b0316141592915050565b606060006130dc8361414c565b60010190506000816001600160401b038111156130fb576130fb614d51565b6040519080825280601f01601f191660200182016040528015613125576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461312f57509392505050565b6028828152601484905268a20d6e21d0e525530f600090815260488120915281905560008181526001600160a01b0380841691908516907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a3505050565b336131f57f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614611d3c5760405163118cdaa760e01b8152336004820152602401611761565b6001600160a01b03821661324557604051633a954ecd60e21b815260040160405180910390fd5b6001600160a01b038316600090815268a20d6e21d0e52553136020526040812068a20d6e21d0e52553089161327985614224565b60018401549091506001600160a01b03166132a75760405163040739bf60e41b815260040160405180910390fd5b61330960405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff16815260200160008152602001600063ffffffff1681525090565b825463ffffffff600160801b808304821660408501528454041660608301526001600160601b03600160a01b909104168086111561335a57604051631e9acf1760e31b815260040160405180910390fd5b83546001600160601b0391879003828116600160a01b9081026001600160a01b03938416178755855481810485168a01948516909102921691909117845560408301519091906133c5906133ad60095490565b84816133bb576133bb6155ec565b0480821191030290565b83528354600160581b900460021661342d57876001600160a01b0316896001600160a01b0316036133fe57825160408401510360608401525b61342761340a60095490565b8281613418576134186155ec565b04846060015180821191030290565b60208401525b5050613437600190565b15613610576000613469826040015161345e84600001518560200151808218908211021890565b808218908211021890565b9050806134765750613610565b8151819003825260208201805182900390526001600160a01b03808816908916036134ab576060820180519091019052613610565b60006134b8828a8a61428d565b6001600160a01b03808b166000908152600889016020526040808220928c1682529020919250906134e9868b612fe3565b63ffffffff1660e08601526060850151938401935b6040860180516000190190819052600381901c606085901b015460009160051b60e0161c63ffffffff1663ffffffff16905061353b838383612fb8565b61354e8a600a01828960e0015185613070565b84518181526020018552600881901c60058b0160601b015460ff82161c600116156135ac5760058a0160601b600882901c018054600160ff84161b19169055600081815260048b016020526040902080546001600160a01b03191690555b508481600101915081036134fe5760608601819052865463ffffffff808316600160801b90810263ffffffff60801b19938416178a5560408901518b549216029116178855600189015461360a9085906001600160a01b03166142ea565b50505050505b80516020820151855463ffffffff600160801b80830482168401859003608087018190529091160263ffffffff60801b19909116178655600a8601916000916136599101614319565b8654600160601b900463ffffffff166101208501528351909150156137ea57606089901b6001176020828101919091526001600160a01b038a166000908152600888019091526040808220908501518551810360a08701819052885463ffffffff909116600160801b0263ffffffff60801b199091161788556101208601515b60001991909101600381901c606084901b0154909190600583901b60e0161c63ffffffff1661370b8782600080613070565b8551602080880151600884901b17825201865260068b0160601b600882901c018054600160ff84161b191690558415613758576137588b6009018380600101945063ffffffff1683612fb8565b600881901c60058c0160601b015460ff82161c600116156137ac5760058b0160601b600882901c018054600160ff84161b19169055600081815260048c016020526040902080546001600160a01b03191690555b508660a0015182036136d95783156137e55763ffffffff811661012088018190528a5463ffffffff60601b1916600160601b909102178a555b505050505b602083015115613a0657606088901b60208201526001600160a01b03881660009081526008870160205260409020613822858a612fe3565b63ffffffff1660e0850152600061383860095490565b8854600160a01b90046001600160601b031681613857576138576155ec565b89549190049150600160201b900463ffffffff1681811180159091021761010086015260608501516020860151810160c08701819052875463ffffffff60801b1916600160801b63ffffffff928316021788558954600160401b9004165b600087610120015163ffffffff168263ffffffff16146139055760098b0160601b631fffffff600384901c160154600183019260e060059190911b161c63ffffffff1663ffffffff169050613964565b506101008701515b61391e87600019830160011b61103f565b63ffffffff16156139505761394961393d8c6006018360010187614360565b85811180159091021790565b905061390d565b600181018481118015909102176101008901525b600881901c60068c0160601b018054600160ff84161b801990911617905561398d858483612fb8565b6139a387828a60e0015186806001019750613070565b8551602080880151600884901b178252018652508660c0015182036138b557895461010088015163ffffffff908116600160201b0267ffffffff000000001991909316600160401b02166bffffffffffffffff0000000019909116171789555050505b60408101515115613a2a576001860154613a2a9082906001600160a01b0316614445565b5050846000528560601b60601c8760601b60601c60008051602061590583398151915260206000a350505050505050565b6000613a6683614224565b8054909150600160581b9004600216151582151514613aa157805460ff600160581b80830482166002189091160260ff60581b199091161781555b8115156000528260601b60601c7fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039360206000a2505050565b604080518082019091526000808252602082015260085460408051639b86528560e01b815281516001600160a01b0390931692639b865285926004808401939192918290030181865afa158015613b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b589190615896565b905090565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b613bd6614481565b61277b816144ca565b613be7614481565b600080546001600160a01b038087166001600160a01b0319928316178355600180549187169190921617905560408051634e606c4760e01b815290516002604360981b0192634e606c47926004808201939182900301818387803b158015613c4e57600080fd5b505af1158015613c62573d6000803e3d6000fd5b505050506002604360981b016001600160a01b031663f098767a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613ca857600080fd5b505af1158015613cbc573d6000803e3d6000fd5b5050600280546001600160a01b03199081166001600160a01b03878116918217909355600380549092169286169283179091556040516336b91f2b60e01b8152600481019290925292506336b91f2b9150602401600060405180830381600087803b158015613d2a57600080fd5b505af1158015613d3e573d6000803e3d6000fd5b5050505050505050565b613d50614481565b611d3c6144d2565b60095468a20d6e21d0e5255308906001600160601b03906001900310613d915760405163265f13bd60e21b815260040160405180910390fd5b60018101546001600160a01b031615613dbd57604051633ab534b960e21b815260040160405180910390fd5b6001600160a01b038216613de4576040516339a84a7b60e01b815260040160405180910390fd5b630f4599e560005233602052602060006024601c6000865af160016000511416613e165763d125259c6000526004601cfd5b805467ffffffff000000001916600160201b1781556001810180546001600160a01b0384166001600160a01b03199091161790558315613f10576001600160a01b038316613e7757604051633a954ecd60e21b815260040160405180910390fd5b613e80846144da565b15613e9e5760405163e5cfe95760e01b815260040160405180910390fd5b80546001600160a01b0316600160a01b6001600160601b038616021781556000613ec784614224565b80546001600160601b038716600160a01b026001600160a01b039182161782556000878152919250851690600080516020615905833981519152602082a3611b38846001613a5b565b50505050565b600080516020615925833981519152805460011901613f4857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b60005b8151811015613fbf576000828281518110613f6e57613f6e615727565b602002602001015190506000613f9c848481518110613f8f57613f8f615727565b6020026020010151611375565b9050613faa813084336144ff565b50508080613fb7906158eb565b915050613f51565b5061277b30613fcd60095490565b8351613fd991906155d5565b614548565b804710156140015760405163cd78605960e01b8152306004820152602401611761565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461404e576040519150601f19603f3d011682016040523d82523d6000602084013e614053565b606091505b5050905080612aab57604051630a12f52160e11b815260040160405180910390fd5b600160008051602061592583398151915255565b600061409460095490565b61409e90836155d5565b9050600f54816140ad60095490565b6018546140ba91906155d5565b68a20d6e21d0e525530854600160a01b90046001600160601b03166140df9190615624565b6140e99190615624565b11156141425760405162461bcd60e51b815260206004820152602260248201527f436f6c6c656374696f6e496d706c3a206d617820737570706c79207265616368604482015261195960f21b6064820152608401611761565b612aab8382614810565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061418b5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106141b7576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106141d557662386f26fc10000830492506010015b6305f5e10083106141ed576305f5e100830492506008015b612710831061420157612710830492506004015b60648310614213576064830492506002015b600a831061136f5760010192915050565b6001600160a01b038116600090815268a20d6e21d0e5255313602052604090208054600160581b900460011661163a5760006002833b1515614266565b151590565b83546001929091029190911760ff16600160581b0260ff60581b1990911617825550919050565b6040805180820182526000815260606020808301828152845163144027d381526001600160a01b03978816928101929092529490951685840152848101526080840185815260a060059690961b8501860190925291529101815290565b6020820151805160051b60840160808203915060208282601c85016000875af1600183511416613f1057600082fd5b61433d60405180606001604052806000815260200160008152602001606081525090565b604051828152806020018360051b81016040528183604001528083525050919050565b6000801990508360601b8360081c81018054198560ff161c8560ff161b806143b5578460081c83015b600183019250825419915080831182171561438957808311156143b35760ff86191691821b90911c905b505b801561443b5782820360081b7e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b1503160405821960010183166fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1790811c63d76453e004601f169190911a1717858111878210176000031793505b5050509392505050565b60408201516040810363263c69d68152602080820152815160051b604401915060208183601c84016000875af1600182511416613f1057600081fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611d3c57604051631afcd79f60e31b815260040160405180910390fd5b612f85614481565b614075614481565b6000806144e660095490565b606084901c930463fffffffe1092909217151592915050565b61450b84848484610fb7565b68a20d6e21d0e525530860006145236001878761428d565b805185815260200181529050600182015461220d9082906001600160a01b03166142ea565b68a20d6e21d0e52553095468a20d6e21d0e5255308906001600160a01b03166145845760405163040739bf60e41b815260040160405180910390fd5b6001600160a01b0383166000908152600b8201602052604090208054600160a01b90046001600160601b0316808411156145d157604051631e9acf1760e31b815260040160405180910390fd5b81546001600160601b0391859003828116600160a01b9081026001600160a01b0393841617855585548181048516889003948516909102908316178555908616600090815260088501602052604081208454929392909163ffffffff600160801b90920491909116906146558261464760095490565b87816133bb576133bb6155ec565b905080156147e257600061466882614319565b600160608c901b176020820152885463ffffffff600160801b80830482168690038216810263ffffffff60801b19938416178c558a54909216858703808316909302178a558a54929350600092600a8c019291600160601b909104165b60001996909601600381901c606089901b0154909690600588901b60e0161c63ffffffff166146f78482600080613070565b8551602080880151600884901b17825201865260068d0160601b600882901c018054600160ff84161b191690558415614744576147448d6009018380600101945063ffffffff1683612fb8565b600881901c60058e0160601b015460ff82161c600116156147985760058d0160601b600882901c018054600160ff84161b19169055600081815260048e016020526040902080546001600160a01b03191690555b508187036146c55783156147c3578b5463ffffffff60601b1916600160601b63ffffffff831602178c555b60018c01546147dc9086906001600160a01b0316614445565b50505050505b505050600085815290506001600160a01b038616600080516020615905833981519152602083a35050505050565b6001600160a01b03821661483757604051633a954ecd60e21b815260040160405180910390fd5b600061484283614224565b68a20d6e21d0e52553095490915068a20d6e21d0e5255308906001600160a01b03166148815760405163040739bf60e41b815260040160405180910390fd5b60408051608081018252600080825260208201819052918101829052606081019190915282546001600160a01b038116600160a01b918290046001600160601b03908116870190811690920217845560095481816148e1576148e16155ec565b0460408301525081546001600160601b03600160a01b80830482168701918216026001600160a01b0390921691909117835560009081614923614261836144da565b90508682108117156149485760405163e5cfe95760e01b815260040160405180910390fd5b6009548281614959576149596155ec565b875491900493506149759250600160581b900460021690501590565b15614bbf576001600160a01b03861660009081526008840160205260408082208654918501519092600a870192600160801b900463ffffffff16916149c09083810390841002614319565b9050806040015151600014614bba5760608a901b602082015260408082015151885463ffffffff600160801b80830482169093018116830263ffffffff60801b19928316178b55928901518b5493169091029116178855614a21888b612fe3565b63ffffffff90811660608801528754600160601b810482166020890152600160201b810482168781118015909102178852600160401b9004165b6000876020015163ffffffff168263ffffffff1614614aaa576009890160601b631fffffff600384901c160154600183019260e060059190911b161c63ffffffff1663ffffffff169050614b01565b5086515b614abf85600019830160011b61103f565b63ffffffff1615614af157614aea614ade8a600601836001018a614360565b88811180159091021790565b9050614aae565b6001810187811180159091021788525b600881901c60068a0160601b018054600160ff84161b8019909116179055614b2a868583612fb8565b614b4085828a6060015187806001019850613070565b8251602080850151600884901b1782520183525086604001518303614a5b578651885463ffffffff838116600160401b026bffffffff00000000000000001991909316600160201b02166bffffffffffffffff0000000019909116171788556001880154614bb89083906001600160a01b0316614445565b505b505050505b60008581526001600160a01b03871690600080516020615905833981519152602082a3505050505050565b60005b83811015614c05578181015183820152602001614bed565b50506000910152565b6020815260008251806020840152614c2d816040850160208701614bea565b601f01601f19169190910160400192915050565b6001600160a01b038116811461277b57600080fd5b803561163a81614c41565b60008060408385031215614c7457600080fd5b8235614c7f81614c41565b946020939093013593505050565b600060208284031215614c9f57600080fd5b5035919050565b600080600060608486031215614cbb57600080fd5b8335614cc681614c41565b92506020840135614cd681614c41565b929592945050506040919091013590565b600060208284031215614cf957600080fd5b81356118cc81614c41565b8035801515811461163a57600080fd5b600060208284031215614d2657600080fd5b6118cc82614d04565b60008060408385031215614d4257600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614d8a57614d8a614d51565b60405290565b60405161016081016001600160401b0381118282101715614d8a57614d8a614d51565b604051601f8201601f191681016001600160401b0381118282101715614ddb57614ddb614d51565b604052919050565b60006001600160401b03821115614dfc57614dfc614d51565b5060051b60200190565b60008060408385031215614e1957600080fd5b82356001600160401b03811115614e2f57600080fd5b8301601f81018513614e4057600080fd5b80356020614e55614e5083614de3565b614db3565b82815260059290921b83018101918181019088841115614e7457600080fd5b938201935b83851015614e9b578435614e8c81614c41565b82529382019390820190614e79565b9550614eaa9050868201614d04565b93505050509250929050565b60006001600160401b03821115614ecf57614ecf614d51565b50601f01601f191660200190565b600082601f830112614eee57600080fd5b8135614efc614e5082614eb6565b818152846020838601011115614f1157600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208284031215614f4157600080fd5b614f49614d67565b905081356001600160401b0380821115614f6257600080fd5b614f6e85838601614edd565b83526020840135915080821115614f8457600080fd5b614f9085838601614edd565b6020840152604084013560408401526060840135915080821115614fb357600080fd5b50614fc084828501614edd565b606083015250614fd260808301614c56565b608082015260a082013560a0820152614fed60c08301614d04565b60c082015260e082013560e082015261010061500a818401614d04565b9082015292915050565b60006060828403121561502657600080fd5b604051606081018181106001600160401b038211171561504857615048614d51565b80604052508091508235815260208301356020820152604083013560408201525092915050565b60006020828403121561508157600080fd5b81356001600160401b038082111561509857600080fd5b908301906101a082860312156150ad57600080fd5b6150b5614d90565b8235828111156150c457600080fd5b6150d087828601614f2e565b8252506150df60208401614c56565b60208201526150f18660408501615014565b604082015261510260a08401614c56565b606082015261511360c08401614c56565b608082015261512460e08401614c56565b60a08201526101009150615139828401614c56565b60c082015261012061514c818501614c56565b60e083015261014061515f818601614c56565b848401526151706101608601614c56565b828401526151816101808601614c56565b908301525095945050505050565b6000602082840312156151a157600080fd5b81356001600160401b038111156151b757600080fd5b611d1284828501614edd565b6000806000606084860312156151d857600080fd5b83356151e381614c41565b95602085013595506040909401359392505050565b600082601f83011261520957600080fd5b81356020615219614e5083614de3565b82815260059290921b8401810191818101908684111561523857600080fd5b8286015b84811015615253578035835291830191830161523c565b509695505050505050565b60006020828403121561527057600080fd5b81356001600160401b0381111561528657600080fd5b611d12848285016151f8565b6000806000606084860312156152a757600080fd5b83356001600160401b038111156152bd57600080fd5b6152c9868287016151f8565b9660208601359650604090950135949350505050565b600080604083850312156152f257600080fd5b82356152fd81614c41565b9150602083013561530d81614c41565b809150509250929050565b60006020828403121561532a57600080fd5b81516001600160401b0381111561534057600080fd5b8201601f8101841361535157600080fd5b805161535f614e5082614eb6565b81815285602083850101111561537457600080fd5b615385826020830160208601614bea565b95945050505050565b600181811c908216806153a257607f821691505b6020821081036153c257634e487b7160e01b600052602260045260246000fd5b50919050565b60008084546153d68161538e565b600182811680156153ee576001811461540357615432565b60ff1984168752821515830287019450615432565b8860005260208060002060005b858110156154295781548a820152908401908201615410565b50505082870194505b505050508351615446818360208801614bea565b01949350505050565b60208082526034908201527f426c617374426173655570677261646561626c653a2063616c6c6572206973206040820152733737ba103a3432903cb4b2b63221b630b4b6b2b960611b606082015260800190565b6000602082840312156154b557600080fd5b5051919050565b60208082526032908201527f426c617374426173655570677261646561626c653a2063616c6c6572206973206040820152713737ba103a34329033b0b9a1b630b4b6b2b960711b606082015260800190565b60208082526028908201527f436f6c6c656374696f6e496d706c3a2077686974656c697374206973206e6f7460408201526708195b98589b195960c21b606082015260800190565b60208082526036908201527f426c617374426173655570677261646561626c653a2063616c6c6572206973206040820152753737ba103a3432903837b4b73a39a7b832b930ba37b960511b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561136f5761136f6155ac565b808202811582820484141761136f5761136f6155ac565b634e487b7160e01b600052601260045260246000fd5b60008261561f57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561136f5761136f6155ac565b600181815b80851115615672578160001904821115615658576156586155ac565b8085161561566557918102915b93841c939080029061563c565b509250929050565b6000826156895750600161136f565b816156965750600061136f565b81600181146156ac57600281146156b6576156d2565b600191505061136f565b60ff8411156156c7576156c76155ac565b50506001821b61136f565b5060208310610133831016604e8410600b84101617156156f5575081810a61136f565b6156ff8383615637565b8060001904821115615713576157136155ac565b029392505050565b60006118cc838361567a565b634e487b7160e01b600052603260045260246000fd5b604080825283519082018190526000906020906060840190828701845b8281101561577f5781516001600160a01b03168452928401929084019060010161575a565b50505093151592019190915250919050565b601f821115612aab57600081815260208120601f850160051c810160208610156157b85750805b601f850160051c820191505b8181101561220d578281556001016157c4565b81516001600160401b038111156157f0576157f0614d51565b615804816157fe845461538e565b84615791565b602080601f83116001811461583957600084156158215750858301515b600019600386901b1c1916600185901b17855561220d565b600085815260208120601f198616915b8281101561586857888601518255948401946001909101908401615849565b50858210156158865787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000604082840312156158a857600080fd5b604051604081018181106001600160401b03821117156158ca576158ca614d51565b6040528251815260208301516158df81614c41565b60208201529392505050565b6000600182016158fd576158fd6155ac565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220186428e1747cc92674418481ae53cd3613608c0a76c5962fcffe6f1d7d7425c164736f6c63430008140033