[ { "inputs": [ { "internalType": "uint256", "name": "startNumber", "type": "uint256" }, { "internalType": "uint256", "name": "endNumber", "type": "uint256" }, { "internalType": "uint256", "name": "startLimit", "type": "uint256" }, { "internalType": "address", "name": "licenseAddress", "type": "address" }, { "internalType": "address", "name": "chypcV1Address", "type": "address" }, { "internalType": "address", "name": "swapV2Address", "type": "address" }, { "internalType": "address", "name": "hypcAddress", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "CantCreateSharesBeyondShareLimit", "type": "error" }, { "inputs": [], "name": "CantTransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "EndShareNumberWouldOverflow", "type": "error" }, { "inputs": [], "name": "InvalidCHYPCTokenLevel", "type": "error" }, { "inputs": [], "name": "InvalidCHYPCV1Address", "type": "error" }, { "inputs": [], "name": "InvalidHYPCAddress", "type": "error" }, { "inputs": [], "name": "InvalidLicenseAddress", "type": "error" }, { "inputs": [], "name": "InvalidShareNumberRange", "type": "error" }, { "inputs": [], "name": "InvalidStartingLimit", "type": "error" }, { "inputs": [], "name": "InvalidSwapV2Address", "type": "error" }, { "inputs": [], "name": "LicenseMustHaveCHYPCBacking", "type": "error" }, { "inputs": [], "name": "MustBeShareOwner", "type": "error" }, { "inputs": [], "name": "MustBurnSomeRevenueTokens", "type": "error" }, { "inputs": [], "name": "MustBurnSomeWealthTokens", "type": "error" }, { "inputs": [], "name": "MustClaimRevenueToBurnTokens", "type": "error" }, { "inputs": [], "name": "NoRevenueToClaim", "type": "error" }, { "inputs": [], "name": "NoRevenueTokensForThisShare", "type": "error" }, { "inputs": [], "name": "NotEnoughRevenueTokensOwned", "type": "error" }, { "inputs": [], "name": "NotEnoughWealthTokensOwned", "type": "error" }, { "inputs": [], "name": "NothingToWithdraw", "type": "error" }, { "inputs": [], "name": "PendingDepositMustExist", "type": "error" }, { "inputs": [], "name": "ShareDoesntExist", "type": "error" }, { "inputs": [], "name": "ShareLimitIncreasedTooMuch", "type": "error" }, { "inputs": [], "name": "ShareMinDurationHasNotPassed", "type": "error" }, { "inputs": [], "name": "ShareMustBeActive", "type": "error" }, { "inputs": [], "name": "ShareMustBeEnded", "type": "error" }, { "inputs": [], "name": "UnlockingRevenueTooEarly", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "chypcNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "licenseNumber", "type": "uint256" } ], "name": "CancelledSharedTokens", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "claimer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ClaimRevenue", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "licenseNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "chypcNumber", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "bool", "name": "chypcTokenHeld", "type": "bool" } ], "name": "CreateShare", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "claimer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "EarningsWithdrawal", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "IncreaseShareLimit", "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": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newDelay", "type": "uint256" } ], "name": "PendingRevenueDelayChange", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "index", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "PendingRevenueDeposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" } ], "name": "RevenueDeposited", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "message", "type": "string" } ], "name": "ShareMessageChangedTo", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" } ], "name": "ShareOwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "inputs": [], "name": "MIN_SHARE_DURATION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RATIO_DECIMALS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REVENUE_TOKEN_MAX_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "WEALTH_TOKEN_MAX_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnRevenueTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "burnWealthTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "cancelShareTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "uint256", "name": "newDelay", "type": "uint256" } ], "name": "changePendingRevenueDelay", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "claimAndWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "claimRevenue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "licenseNumber", "type": "uint256" }, { "internalType": "uint256", "name": "chypcNumber", "type": "uint256" }, { "internalType": "bool", "name": "chypcTokenHeld", "type": "bool" }, { "internalType": "string", "name": "startingMessage", "type": "string" }, { "internalType": "uint256", "name": "revenueDepositDelay", "type": "uint256" } ], "name": "createShareTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "currentShareNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "uint256", "name": "amt", "type": "uint256" } ], "name": "depositRevenue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "endShareNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getPendingDeposit", "outputs": [ { "components": [ { "internalType": "uint256", "name": "availableAtTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "internalType": "struct IHyperCycleShareTokens.PendingDeposit", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getPendingDepositsLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getRevenueTokenTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareCHyPCId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareLicenseId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareMessage", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareRevenueTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareStartTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareTotalRevenue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getShareWealthTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "getWealthTokenTotalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "number", "type": "uint256" } ], "name": "increaseShareLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "isShareActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "lastShareClaimRevenue", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "licenseToShareNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "pendingDeposits", "outputs": [ { "internalType": "uint256", "name": "availableAtTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "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": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "values", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "string", "name": "message", "type": "string" } ], "name": "setShareMessage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "shareCreated", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "shareData", "outputs": [ { "internalType": "uint256", "name": "licenseId", "type": "uint256" }, { "internalType": "uint256", "name": "chypcId", "type": "uint256" }, { "internalType": "enum HyperCycleShareTokensV2.Status", "name": "status", "type": "uint8" }, { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "rTokenNumber", "type": "uint256" }, { "internalType": "uint256", "name": "wTokenNumber", "type": "uint256" }, { "internalType": "uint256", "name": "rTokenSupply", "type": "uint256" }, { "internalType": "uint256", "name": "wTokenSupply", "type": "uint256" }, { "internalType": "uint256", "name": "startTimestamp", "type": "uint256" }, { "internalType": "uint256", "name": "revenueDeposited", "type": "uint256" }, { "internalType": "uint256", "name": "revenueDepositDelay", "type": "uint256" }, { "internalType": "string", "name": "message", "type": "string" }, { "internalType": "bool", "name": "chypcTokenHeld", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "shareLimitNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "startShareNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalDeposited", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "transferShareOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "unlockRevenue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shareNumber", "type": "uint256" } ], "name": "withdrawEarnings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "withdrawableAmounts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
6101006040523480156200001257600080fd5b50604051620047d9380380620047d983398101604081905262000035916200025f565b6040805160208101909152600081526200004f81620001de565b506200005b33620001f0565b60016004556002600160ff1b038610620000885760405163136bb8a560e01b815260040160405180910390fd5b8662000096600288620002d9565b10620000b55760405163135abbd360e01b815260040160405180910390fd5b86861015620000d75760405163135abbd360e01b815260040160405180910390fd5b6001600160a01b038416620000ff576040516373cfb64f60e11b815260040160405180910390fd5b6001600160a01b0382166200012757604051633f60e15960e21b815260040160405180910390fd5b6001600160a01b0381166200014f57604051632a40136360e01b815260040160405180910390fd5b6001600160a01b0383166200017757604051632df1ad8d60e21b815260040160405180910390fd5b868510806200018557508585115b15620001a457604051630b85b2a360e31b815260040160405180910390fd5b600a879055600b95909555600c93909355600d949094556001600160a01b0393841660a05290831660c052821660e052166080526200046d565b6002620001ec8282620003a1565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b80516001600160a01b03811681146200025a57600080fd5b919050565b600080600080600080600060e0888a0312156200027b57600080fd5b8751965060208801519550604088015194506200029b6060890162000242565b9350620002ab6080890162000242565b9250620002bb60a0890162000242565b9150620002cb60c0890162000242565b905092959891949750929550565b600082620002f757634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200032757607f821691505b6020821081036200034857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200039c57600081815260208120601f850160051c81016020861015620003775750805b601f850160051c820191505b81811015620003985782815560010162000383565b5050505b505050565b81516001600160401b03811115620003bd57620003bd620002fc565b620003d581620003ce845462000312565b846200034e565b602080601f8311600181146200040d5760008415620003f45750858301515b600019600386901b1c1916600185901b17855562000398565b600085815260208120601f198616915b828110156200043e578886015182559484019460019091019084016200041d565b50858210156200045d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a05160c05160e0516142ec620004ed60003960008181610da10152818161110201526125f6015260008181610ca301528181610d1c0152818161119201528181611218015281816123010152818161238f015281816124b10152612537015260006124410152600081816109f80152612a5701526142ec6000f3fe608060405234801561001057600080fd5b50600436106103265760003560e01c8063637c77f1116101b85780639d18e54211610104578063f242432a116100a2578063f62b46c91161007c578063f62b46c914610812578063f7ce46b714610825578063fc247f5214610838578063ff50abdc1461084b57600080fd5b8063f242432a146107c4578063f2fde38b146107d7578063f458f568146107ea57600080fd5b8063a83622e0116100de578063a83622e014610746578063c4fd622414610752578063d04720cd14610775578063e985e9c51461078857600080fd5b80639d18e542146106fd578063a22cb46514610710578063a266bcf21461072357600080fd5b806380a62256116101715780638a82f2401161014b5780638a82f2401461069b5780638da5cb5b146106c65780639732d56f146106d75780639c50ff74146106ea57600080fd5b806380a622561461067657806381e0aaa41461067f5780638792290e1461068857600080fd5b8063637c77f1146106095780636da58de31461062c5780636e70096e146106355780636f7286c21461064857806370b394a61461065b578063715018a61461066e57600080fd5b806337a8dd981161027757806352aa9932116102305780635b5bc9431161020a5780635b5bc943146105a55780635c3db6e2146105ae5780635d2938b4146105b857806362d28bfd146105db57600080fd5b806352aa99321461054757806352f66b841461057257806359a6b0361461058557600080fd5b806337a8dd98146104b2578063389fe464146104955780633a340c92146104c557806347e154e2146104d85780634c106406146105045780634e1273f41461052757600080fd5b8063150b7a02116102e45780631aeb776c116102be5780631aeb776c1461046f5780631cb536ed146104825780632916b8b3146104955780632eb2c2d61461049f57600080fd5b8063150b7a02146103dc578063160e553614610413578063181965971461042657600080fd5b8062fdd58e1461032b57806301ffc9a7146103515780630269c589146103745780630cae7afc146103945780630e89341c146103a957806314443549146103c9575b600080fd5b61033e6103393660046134e3565b610854565b6040519081526020015b60405180910390f35b61036461035f366004613523565b6108ed565b6040519015158152602001610348565b61033e610382366004613540565b60086020526000908152604090205481565b6103a76103a2366004613559565b61093d565b005b6103bc6103b7366004613540565b610ad9565b60405161034891906135cb565b6103a76103d7366004613540565b610b6d565b6103fa6103ea3660046136a3565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610348565b6103bc610421366004613540565b610e60565b610457610434366004613540565b60009081526005602052604090206002015461010090046001600160a01b031690565b6040516001600160a01b039091168152602001610348565b6103a761047d366004613718565b610e80565b6103a7610490366004613540565b611339565b61033e6208000081565b6103a76104ad366004613816565b6113eb565b6103a76104c0366004613540565b6114b5565b6103a76104d33660046138bf565b61153a565b6104eb6104e6366004613540565b61161e565b6040516103489d9c9b9a9998979695949392919061391b565b61033e610512366004613540565b60009081526005602052604090206008015490565b61053a6105353660046139c6565b611716565b6040516103489190613ac1565b61033e610555366004613ad4565b600760209081526000928352604080842090915290825290205481565b61033e610580366004613540565b61183f565b61033e610593366004613540565b60009081526005602052604090205490565b61033e600b5481565b61033e6201518081565b61033e6105c6366004613540565b60009081526005602052604090206007015490565b6105ee6105e9366004613559565b6118a3565b60408051825181526020928301519281019290925201610348565b61033e610617366004613540565b60009081526005602052604090206001015490565b61033e600d5481565b6103a7610643366004613540565b61193f565b610364610656366004613540565b61194b565b6103a7610669366004613559565b61197d565b6103a7611a93565b61033e600a5481565b61033e600c5481565b6103a7610696366004613559565b611aa7565b61033e6106a9366004613ad4565b600660209081526000928352604080842090915290825290205481565b6003546001600160a01b0316610457565b6103a76106e5366004613ad4565b611cd8565b61033e6106f8366004613540565b611df2565b61036461070b366004613540565b611e53565b6103a761071e366004613b00565b611e85565b61033e610731366004613540565b60009081526005602052604090206003015490565b61033e64e8d4a5100081565b61033e610760366004613540565b60009081526005602052604090206004015490565b6103a7610783366004613559565b611e90565b610364610796366004613b37565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6103a76107d2366004613b61565b611fa4565b6103a76107e5366004613bc5565b612030565b6107fd6107f8366004613559565b6120a6565b60408051928352602083019190915201610348565b6103a7610820366004613540565b6120e2565b6103a7610833366004613559565b612149565b61033e610846366004613540565b61221d565b61033e600e5481565b60006001600160a01b0383166108c45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061091e57506001600160e01b031982166303a24d0760e21b145b806108e757506301ffc9a760e01b6001600160e01b03198316146108e7565b816001600082815260056020526040902060029081015460ff169081111561096757610967613905565b14610985576040516324ca9b7560e11b815260040160405180910390fd5b600083815260096020818152604080842081518083018352600590935293209091015481906109b49042613bf6565b8152602090810185905282546001818101855560009485529382902083516002909202019081559101519101556040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90610a3190339030908790600401613c09565b6020604051808303816000875af1158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a749190613c2d565b506000838152600960205260409020547f8d3add996cf7244e1103c44d6abcc43c1fd55a709738ae15dbe04e8a33c58eaa908490610ab490600190613c4a565b60408051928352602083019190915281018490526060015b60405180910390a1505050565b606060028054610ae890613c5d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1490613c5d565b8015610b615780601f10610b3657610100808354040283529160200191610b61565b820191906000526020600020905b815481529060010190602001808311610b4457829003601f168201915b50505050509050919050565b600081815260056020526040902060020154819061010090046001600160a01b03163314610bae5760405163e2b2255d60e01b815260040160405180910390fd5b816001600082815260056020526040902060029081015460ff1690811115610bd857610bd8613905565b14610bf6576040516324ca9b7560e11b815260040160405180910390fd5b610bfe61227a565b6000838152600560205260409020600701544290610c20906201518090613bf6565b1115610c3f5760405163db34e39960e01b815260040160405180910390fd5b600083815260056020908152604080832080546001820154600b8301546002938401805460ff19169094179093558186526008909452918420939093559160ff168015610d8a5760405163f682c34960e01b815260048101839052600060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f682c34990604401600060405180830381600087803b158015610cef57600080fd5b505af1158015610d03573d6000803e3d6000fd5b5050604051632142170760e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001692506342842e0e9150610d5790309033908790600401613c09565b600060405180830381600087803b158015610d7157600080fd5b505af1158015610d85573d6000803e3d6000fd5b505050505b604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e90610dda90309033908890600401613c09565b600060405180830381600087803b158015610df457600080fd5b505af1158015610e08573d6000803e3d6000fd5b505060408051898152602081018690529081018690527fee9fe7deda64d74e417c336ae700a03e73fdf6bc96cb92c7187a3b1fe76e05109250606001905060405180910390a1505050610e5b6001600455565b505050565b6000818152600560205260409020600a01805460609190610ae890613c5d565b610e8861227a565b600c54600d541115610ead57604051634171432d60e11b815260040160405180910390fd5b82610ebc57610ebc84866122d3565b610ec584612498565b610ece866125dd565b1115610eed57604051631b74b8cf60e31b815260040160405180910390fd5b600d5433906000610eff826002613c91565b90506000610f0e836002613c91565b610f19906001613bf6565b90506000610f268a6125dd565b90506001600d6000828254610f3b9190613bf6565b9091555050604080516101a0810182528b8152602081018b905290810160018152602001866001600160a01b03168152602001848152602001838152602001826013610f879190613c4a565b610f92906002613d8c565b610f9f9062080000613dae565b8152602001610faf836013613c4a565b610fba906002613d8c565b610fc79062080000613dae565b81526020014281526020016000815260200187815260200188815260200189151581525060056000868152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548160ff0219169083600281111561103c5761103c613905565b02179055506060820151600282018054610100600160a81b0319166101006001600160a01b0390931683021790556080830151600383015560a0830151600483015560c0830151600583015560e08301516006830155820151600782015561012082015160088201556101408201516009820155610160820151600a8201906110c59082613e08565b506101809190910151600b909101805460ff191691151591909117905560008a8152600860205260409081902085905551632142170760e11b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342842e0e9061114390889030908f90600401613c09565b600060405180830381600087803b15801561115d57600080fd5b505af1158015611171573d6000803e3d6000fd5b50505050871561127f57604051632142170760e11b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342842e0e906111cb90889030908e90600401613c09565b600060405180830381600087803b1580156111e557600080fd5b505af11580156111f9573d6000803e3d6000fd5b505060405163f682c34960e01b8152600481018c9052602481018d90527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316925063f682c3499150604401600060405180830381600087803b15801561126657600080fd5b505af115801561127a573d6000803e3d6000fd5b505050505b6112bc858461128f846013613c4a565b61129a906002613d8c565b6112a79062080000613dae565b60405180602001604052806000815250612672565b6112cc858361128f846013613c4a565b604080518b8152602081018b90526001600160a01b0387168183015260608101869052891515608082015290517fb80ad1ed7f488a2ff9837465e2694eafd9981e90b78b920e83b8adedf9217b5e9181900360a00190a150505050506113326001600455565b5050505050565b8060008082815260056020526040902060029081015460ff169081111561136257611362613905565b0361138057604051631aa7900f60e21b815260040160405180910390fd5b60008281526005602052604090206003015461139d903390610854565b6000036113bd57604051632032648b60e01b815260040160405180910390fd5b6113c78233612786565b6000036113e7576040516374d4d10160e11b815260040160405180910390fd5b5050565b60005b83518110156114a757600084828151811061140b5761140b613ec7565b602002602001015190506002816114229190613edd565b600003611496576000611436600283613dae565b905060008082815260056020526040902060029081015460ff169081111561146057611460613905565b0361147e57604051631aa7900f60e21b815260040160405180910390fd5b6114888189612786565b506114938188612786565b50505b506114a081613ef1565b90506113ee565b5061133285858585856128f3565b6114bd612938565b600b5481600c546114ce9190613bf6565b11156114ed57604051639b5abc5160e01b815260040160405180910390fd5b80600c60008282546114ff9190613bf6565b90915550506040518181527f1b735d12f447802826825c2519a6c37142c4d6a71ed6e0f5d30b447e11359ad89060200160405180910390a150565b600082815260056020526040902060020154829061010090046001600160a01b0316331461157b5760405163e2b2255d60e01b815260040160405180910390fd5b826001600082815260056020526040902060029081015460ff16908111156115a5576115a5613905565b146115c3576040516324ca9b7560e11b815260040160405180910390fd5b6000848152600560205260409020600a016115de8482613e08565b507f4e0214d0995fefc26259a79ffd8f6a4c93a350ed9109ae3bc693237722b115898484604051611610929190613f0a565b60405180910390a150505050565b600560208190526000918252604090912080546001820154600283015460038401546004850154958501546006860154600787015460088801546009890154600a8a018054999b989a60ff89169a6101009099046001600160a01b031699979890919061168a90613c5d565b80601f01602080910402602001604051908101604052809291908181526020018280546116b690613c5d565b80156117035780601f106116d857610100808354040283529160200191611703565b820191906000526020600020905b8154815290600101906020018083116116e657829003601f168201915b505050600b909301549192505060ff168d565b6060815183511461177b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016108bb565b600083516001600160401b03811115611796576117966135de565b6040519080825280602002602001820160405280156117bf578160200160208202803683370190505b50905060005b84518110156118375761180a8582815181106117e3576117e3613ec7565b60200260200101518583815181106117fd576117fd613ec7565b6020026020010151610854565b82828151811061181c5761181c613ec7565b602090810291909101015261183081613ef1565b90506117c5565b509392505050565b60008181600082815260056020526040902060029081015460ff169081111561186a5761186a613905565b0361188857604051631aa7900f60e21b815260040160405180910390fd5b60008381526005602052604090206006015491505b50919050565b60408051808201909152600080825260208201526000838152600960205260409020548390839081106118e8576040516256239b60e41b815260040160405180910390fd5b600085815260096020526040902080548590811061190857611908613ec7565b9060005260206000209060020201604051806040016040529081600082015481526020016001820154815250509250505092915050565b61194881612992565b50565b600080600083815260056020526040902060029081015460ff169081111561197557611975613905565b141592915050565b816002600082815260056020526040902060029081015460ff16908111156119a7576119a7613905565b146119c557604051635ae0460d60e01b815260040160405180910390fd5b60006119d18433612786565b11156119f057604051630e71bbeb60e21b815260040160405180910390fd5b81600003611a1157604051630aaa553f60e01b815260040160405180910390fd5b6000838152600560205260409020600301548290611a30903390610854565b1015611a4f57604051630adea48360e41b815260040160405180910390fd5b60008381526005602081905260408220018054849290611a70908490613c4a565b9091555050600083815260056020526040902060030154610e5b90339084612b02565b611a9b612938565b611aa56000612c7e565b565b600082815260096020526040902054829082908110611ad8576040516256239b60e41b815260040160405180910390fd5b6000848152600960205260408120805485908110611af857611af8613ec7565b90600052602060002090600202016040518060400160405290816000820154815260200160018201548152505090504281600001511115611b4c5760405163555e39a160e01b815260040160405180910390fd5b8060200151600e6000828254611b629190613bf6565b90915550506020808201516000878152600590925260408220600801805491929091611b8f908490613bf6565b90915550506000858152600960205260409020546001108015611bcb5750600085815260096020526040902054611bc890600190613c4a565b84105b15611c4d5760008581526009602052604090208054611bec90600190613c4a565b81548110611bfc57611bfc613ec7565b9060005260206000209060020201600960008781526020019081526020016000208581548110611c2e57611c2e613ec7565b6000918252602090912082546002909202019081556001918201549101555b6000858152600960205260409020805480611c6a57611c6a613f2b565b600082815260208082206002600019949094019384020182815560010191909155915581810151604080518881529283019190915242908201527f271447a7fc6bd5726818ce06a9d9ffdecd61963481f678d3903cc5bacc523c869060600160405180910390a15050505050565b600082815260056020526040902060020154829061010090046001600160a01b03163314611d195760405163e2b2255d60e01b815260040160405180910390fd5b826001600082815260056020526040902060029081015460ff1690811115611d4357611d43613905565b14611d61576040516324ca9b7560e11b815260040160405180910390fd5b6001600160a01b038316611d8857604051631003778160e21b815260040160405180910390fd5b6000848152600560209081526040918290206002018054610100600160a81b0319166101006001600160a01b038816908102919091179091558251878152918201527fc2540c28b8d63a418124b5d4e8bae3f86c0de4728ba95b5f68e5dfb6bca989fc9101611610565b60008181600082815260056020526040902060029081015460ff1690811115611e1d57611e1d613905565b03611e3b57604051631aa7900f60e21b815260040160405180910390fd5b50506000908152600560208190526040909120015490565b60006001600083815260056020526040902060029081015460ff1690811115611e7e57611e7e613905565b1492915050565b6113e7338383612cd0565b600082815260056020526040902060020154829061010090046001600160a01b03163314611ed15760405163e2b2255d60e01b815260040160405180910390fd5b826002600082815260056020526040902060029081015460ff1690811115611efb57611efb613905565b14611f1957604051635ae0460d60e01b815260040160405180910390fd5b82600003611f3a576040516352ff31dd60e01b815260040160405180910390fd5b6000848152600560205260409020600401548390611f59903390610854565b1015611f785760405163b5dc18c960e01b815260040160405180910390fd5b60008481526005602052604081206006018054859290611f99908490613c4a565b909155505050505050565b611faf600284613edd565b600003612023576000611fc3600285613dae565b905060008082815260056020526040902060029081015460ff1690811115611fed57611fed613905565b0361200b57604051631aa7900f60e21b815260040160405180910390fd5b6120158187612786565b506120208186612786565b50505b6113328585858585612db0565b612038612938565b6001600160a01b03811661209d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108bb565b61194881612c7e565b600960205281600052604060002081815481106120c257600080fd5b600091825260209091206002909102018054600190910154909250905082565b6000818152600560205260409020600301546120ff903390610854565b60000361211f57604051632032648b60e01b815260040160405180910390fd5b6121298133612786565b60000361193f576040516374d4d10160e11b815260040160405180910390fd5b600082815260056020526040902060020154829061010090046001600160a01b0316331461218a5760405163e2b2255d60e01b815260040160405180910390fd5b826001600082815260056020526040902060029081015460ff16908111156121b4576121b4613905565b146121d2576040516324ca9b7560e11b815260040160405180910390fd5b60008481526005602090815260409182902060090185905581518681529081018590527fbf1c36c04102e8dc9c545101dc75f62063fb6025d53f0f9352bf2e52971c66289101611610565b60008181600082815260056020526040902060029081015460ff169081111561224857612248613905565b0361226657604051631aa7900f60e21b815260040160405180910390fd5b505060009081526009602052604090205490565b6002600454036122cc5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108bb565b6002600455565b60006122de82612df5565b604051632214836b60e21b81526004810185905290915082906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906388520dac90602401602060405180830381865afa158015612348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236c9190613f41565b14158015612420575060405163552251cd60e11b81526004810184905261241e907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063aa44a39a906024015b600060405180830381865afa1580156123df573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124079190810190613f5a565b828051602091820120825192909101919091201490565b155b801561247a5750604051635e38790560e01b815260048101849052612478907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635e387905906024016123c2565b155b15610e5b57604051630c285eed60e31b815260040160405180910390fd5b604051633404591760e21b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d011645c90602401602060405180830381865afa92505050801561251c575060408051601f3d908101601f1916820190925261251991810190613f41565b60015b156125b157604051633404591760e21b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063d011645c90602401602060405180830381865afa158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa9190613f41565b9392505050565b630400000082101580156125c8575063040000a082105b156125d557506013919050565b506000919050565b6040516392680e9560e01b8152600481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906392680e9590602401602060405180830381865afa158015612645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126699190613fdb565b60ff1692915050565b6001600160a01b0384166126d25760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016108bb565b3360006126de85612e87565b905060006126eb85612e87565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061271d908490613bf6565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461277d83600089898989612eda565b50505050505050565b600082815260056020526040812060038101546008820154915490919083906127ae906125dd565b905060006127bd826013613c4a565b6127c8906002613d8c565b6127d59062080000613dae565b90506000816127e48887610854565b6127f39064e8d4a51000613c91565b6127fd9190613dae565b60008981526006602090815260408083206001600160a01b038c1684529091528120549192509064e8d4a510009083906128379088613c4a565b6128419190613c91565b61284b9190613dae565b60008a81526006602090815260408083206001600160a01b038d168085529083528184208a90558d845260078352818420908452909152812080549293508392909190612899908490613bf6565b9091555050604080518a81526001600160a01b038a1660208201529081018290527f304c98b08d8ff54f5608bc843e35d86b87a0b9968d66edce5a8dd5ceb7bbd5889060600160405180910390a198975050505050505050565b6001600160a01b03851633148061290f575061290f8533610796565b61292b5760405162461bcd60e51b81526004016108bb90613ffe565b6113328585858585613035565b6003546001600160a01b03163314611aa55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108bb565b8060008082815260056020526040902060029081015460ff16908111156129bb576129bb613905565b036129d957604051631aa7900f60e21b815260040160405180910390fd5b600082815260076020908152604080832033845290915281205490819003612a1457604051630686827b60e51b815260040160405180910390fd5b600083815260076020908152604080832033808552925280832092909255905163a9059cbb60e01b81526004810191909152602481018290526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015612aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac49190613c2d565b50604080518481523360208201529081018290527f9722cdc65dd852fc27a66eb73f3075ebafbfe00a914437ce1b7b8c8d9fcde12790606001610acc565b6001600160a01b038316612b645760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016108bb565b336000612b7084612e87565b90506000612b7d84612e87565b60408051602080820183526000918290528882528181528282206001600160a01b038b1683529052205490915084811015612c065760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b60648201526084016108bb565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091526000905261277d565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603612d435760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016108bb565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b038516331480612dcc5750612dcc8533610796565b612de85760405162461bcd60e51b81526004016108bb90613ffe565b611332858585858561320a565b60606000612e0283613334565b60010190506000816001600160401b03811115612e2157612e216135de565b6040519080825280601f01601f191660200182016040528015612e4b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612e5557509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612ec157612ec1613ec7565b602090810291909101015292915050565b505050505050565b6001600160a01b0384163b15612ed25760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e6190612f1e908990899088908890889060040161404c565b6020604051808303816000875af1925050508015612f59575060408051601f3d908101601f19168201909252612f5691810190614091565b60015b61300557612f656140ae565b806308c379a003612f9e5750612f796140ca565b80612f845750612fa0565b8060405162461bcd60e51b81526004016108bb91906135cb565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016108bb565b6001600160e01b0319811663f23a6e6160e01b1461277d5760405162461bcd60e51b81526004016108bb90614153565b81518351146130975760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016108bb565b6001600160a01b0384166130bd5760405162461bcd60e51b81526004016108bb9061419b565b3360005b84518110156131a45760008582815181106130de576130de613ec7565b6020026020010151905060008583815181106130fc576130fc613ec7565b602090810291909101810151600084815280835260408082206001600160a01b038e16835290935291909120549091508181101561314c5760405162461bcd60e51b81526004016108bb906141e0565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290613189908490613bf6565b925050819055505050508061319d90613ef1565b90506130c1565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516131f492919061422a565b60405180910390a4612ed281878787878761340c565b6001600160a01b0384166132305760405162461bcd60e51b81526004016108bb9061419b565b33600061323c85612e87565b9050600061324985612e87565b90506000868152602081815260408083206001600160a01b038c1684529091529020548581101561328c5760405162461bcd60e51b81526004016108bb906141e0565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906132c9908490613bf6565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4613329848a8a8a8a8a612eda565b505050505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106133735772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061339f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106133bd57662386f26fc10000830492506010015b6305f5e10083106133d5576305f5e100830492506008015b61271083106133e957612710830492506004015b606483106133fb576064830492506002015b600a83106108e75760010192915050565b6001600160a01b0384163b15612ed25760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906134509089908990889088908890600401614258565b6020604051808303816000875af192505050801561348b575060408051601f3d908101601f1916820190925261348891810190614091565b60015b61349757612f656140ae565b6001600160e01b0319811663bc197c8160e01b1461277d5760405162461bcd60e51b81526004016108bb90614153565b80356001600160a01b03811681146134de57600080fd5b919050565b600080604083850312156134f657600080fd5b6134ff836134c7565b946020939093013593505050565b6001600160e01b03198116811461194857600080fd5b60006020828403121561353557600080fd5b81356125aa8161350d565b60006020828403121561355257600080fd5b5035919050565b6000806040838503121561356c57600080fd5b50508035926020909101359150565b60005b8381101561359657818101518382015260200161357e565b50506000910152565b600081518084526135b781602086016020860161357b565b601f01601f19169290920160200192915050565b6020815260006125aa602083018461359f565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715613619576136196135de565b6040525050565b60006001600160401b03821115613639576136396135de565b50601f01601f191660200190565b600082601f83011261365857600080fd5b813561366381613620565b60405161367082826135f4565b82815285602084870101111561368557600080fd5b82602086016020830137600092810160200192909252509392505050565b600080600080608085870312156136b957600080fd5b6136c2856134c7565b93506136d0602086016134c7565b92506040850135915060608501356001600160401b038111156136f257600080fd5b6136fe87828801613647565b91505092959194509250565b801515811461194857600080fd5b600080600080600060a0868803121561373057600080fd5b853594506020860135935060408601356137498161370a565b925060608601356001600160401b0381111561376457600080fd5b61377088828901613647565b95989497509295608001359392505050565b60006001600160401b0382111561379b5761379b6135de565b5060051b60200190565b600082601f8301126137b657600080fd5b813560206137c382613782565b6040516137d082826135f4565b83815260059390931b85018201928281019150868411156137f057600080fd5b8286015b8481101561380b57803583529183019183016137f4565b509695505050505050565b600080600080600060a0868803121561382e57600080fd5b613837866134c7565b9450613845602087016134c7565b935060408601356001600160401b038082111561386157600080fd5b61386d89838a016137a5565b9450606088013591508082111561388357600080fd5b61388f89838a016137a5565b935060808801359150808211156138a557600080fd5b506138b288828901613647565b9150509295509295909350565b600080604083850312156138d257600080fd5b8235915060208301356001600160401b038111156138ef57600080fd5b6138fb85828601613647565b9150509250929050565b634e487b7160e01b600052602160045260246000fd5b60006101a08f83528e602084015260038e1061394757634e487b7160e01b600052602160045260246000fd5b8d6040840152613962606084018e6001600160a01b03169052565b8b60808401528a60a08401528960c08401528860e0840152876101008401528661012084015285610140840152806101608401526139a28184018661359f565b9150506139b461018083018415159052565b9e9d5050505050505050505050505050565b600080604083850312156139d957600080fd5b82356001600160401b03808211156139f057600080fd5b818501915085601f830112613a0457600080fd5b81356020613a1182613782565b604051613a1e82826135f4565b83815260059390931b8501820192828101915089841115613a3e57600080fd5b948201945b83861015613a6357613a54866134c7565b82529482019490820190613a43565b96505086013592505080821115613a7957600080fd5b506138fb858286016137a5565b600081518084526020808501945080840160005b83811015613ab657815187529582019590820190600101613a9a565b509495945050505050565b6020815260006125aa6020830184613a86565b60008060408385031215613ae757600080fd5b82359150613af7602084016134c7565b90509250929050565b60008060408385031215613b1357600080fd5b613b1c836134c7565b91506020830135613b2c8161370a565b809150509250929050565b60008060408385031215613b4a57600080fd5b613b53836134c7565b9150613af7602084016134c7565b600080600080600060a08688031215613b7957600080fd5b613b82866134c7565b9450613b90602087016134c7565b9350604086013592506060860135915060808601356001600160401b03811115613bb957600080fd5b6138b288828901613647565b600060208284031215613bd757600080fd5b6125aa826134c7565b634e487b7160e01b600052601160045260246000fd5b808201808211156108e7576108e7613be0565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215613c3f57600080fd5b81516125aa8161370a565b818103818111156108e7576108e7613be0565b600181811c90821680613c7157607f821691505b60208210810361189d57634e487b7160e01b600052602260045260246000fd5b80820281158282048414176108e7576108e7613be0565b600181815b80851115613ce3578160001904821115613cc957613cc9613be0565b80851615613cd657918102915b93841c9390800290613cad565b509250929050565b600082613cfa575060016108e7565b81613d07575060006108e7565b8160018114613d1d5760028114613d2757613d43565b60019150506108e7565b60ff841115613d3857613d38613be0565b50506001821b6108e7565b5060208310610133831016604e8410600b8410161715613d66575081810a6108e7565b613d708383613ca8565b8060001904821115613d8457613d84613be0565b029392505050565b60006125aa8383613ceb565b634e487b7160e01b600052601260045260246000fd5b600082613dbd57613dbd613d98565b500490565b601f821115610e5b57600081815260208120601f850160051c81016020861015613de95750805b601f850160051c820191505b81811015612ed257828155600101613df5565b81516001600160401b03811115613e2157613e216135de565b613e3581613e2f8454613c5d565b84613dc2565b602080601f831160018114613e6a5760008415613e525750858301515b600019600386901b1c1916600185901b178555612ed2565b600085815260208120601f198616915b82811015613e9957888601518255948401946001909101908401613e7a565b5085821015613eb75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600082613eec57613eec613d98565b500690565b600060018201613f0357613f03613be0565b5060010190565b828152604060208201526000613f23604083018461359f565b949350505050565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613f5357600080fd5b5051919050565b600060208284031215613f6c57600080fd5b81516001600160401b03811115613f8257600080fd5b8201601f81018413613f9357600080fd5b8051613f9e81613620565b604051613fab82826135f4565b828152866020848601011115613fc057600080fd5b613fd183602083016020870161357b565b9695505050505050565b600060208284031215613fed57600080fd5b815160ff811681146125aa57600080fd5b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906140869083018461359f565b979650505050505050565b6000602082840312156140a357600080fd5b81516125aa8161350d565b600060033d11156140c75760046000803e5060005160e01c5b90565b600060443d10156140d85790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561410757505050505090565b828501915081518181111561411f5750505050505090565b843d87010160208285010111156141395750505050505090565b614148602082860101876135f4565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60408152600061423d6040830185613a86565b828103602084015261424f8185613a86565b95945050505050565b6001600160a01b0386811682528516602082015260a06040820181905260009061428490830186613a86565b82810360608401526142968186613a86565b905082810360808401526142aa818561359f565b9897505050505050505056fea2646970667358221220f43dfac8e935397951a31ef1a98102f2a38de3297a94136a0efea6d9c73e656a64736f6c63430008130033000000000000000000000000000000000000000000000000000000020010000000000000000000000000000000000000000000000000000000000002001fffff0000000000000000000000000000000000000000000000000000000200100032000000000000000000000000d32cb5f76989a27782e44c5297aaba728ad616690000000000000000000000000b84dcf0d13678c68ba9ca976c02eaaa0a44932b00000000000000000000000021468e63abf3783020750f7b2e57d4b34afafba6000000000000000000000000ea7b7dc089c9a4a916b5a7a37617f59fd54e37e4