[ { "inputs": [ { "internalType": "address", "name": "_stake", "type": "address" }, { "internalType": "address", "name": "_ebribe", "type": "address" }, { "internalType": "address", "name": "__ve", "type": "address" }, { "internalType": "address", "name": "_voter", "type": "address" }, { "internalType": "bool", "name": "_forPair", "type": "bool" }, { "internalType": "address[]", "name": "_allowedRewardTokens", "type": "address[]" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "bribe", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "active", "type": "bool" } ], "name": "BribeTokenSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "initiator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ClaimFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "ClaimRewards", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "initiator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "taker", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "ProtocolFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": true, "internalType": "address", "name": "notifier", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "reward", "type": "uint256" } ], "name": "RewardAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newDuration", "type": "uint256" } ], "name": "RewardsDurationUpdated", "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": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdrawn", "type": "event" }, { "inputs": [], "name": "_ve", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_t", "type": "address" } ], "name": "addBribeToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_tks", "type": "address[]" } ], "name": "addBribeTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" }, { "internalType": "address", "name": "_rewardsDistributor", "type": "address" }, { "internalType": "uint256", "name": "_rewardsDuration", "type": "uint256" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseReward", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bribe", "outputs": [ { "internalType": "contract IBribe", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "bribeTokens", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bribesListLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "claimFees", "outputs": [ { "internalType": "uint256", "name": "claimed0", "type": "uint256" }, { "internalType": "uint256", "name": "claimed1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" } ], "name": "depositAllFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "earned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "_rewardsToken", "type": "address" } ], "name": "earnedBy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "earnings", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "exit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feeTaker", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address[]", "name": "tokens", "type": "address[]" } ], "name": "getReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" } ], "name": "getRewardForDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isBribeToken", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isForPair", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isReward", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" } ], "name": "lastTimeRewardApplicable", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tkn", "type": "address" } ], "name": "lastUpdateTime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" } ], "name": "left", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" }, { "internalType": "uint256", "name": "_reward", "type": "uint256" } ], "name": "notifyRewardAmount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "payouts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "payoutsNotified", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tkn", "type": "address" } ], "name": "periodFinish", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_t", "type": "address" } ], "name": "removeBribeToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_tks", "type": "address[]" } ], "name": "removeBribeTokens", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amt", "type": "uint256" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" } ], "name": "rescue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardData", "outputs": [ { "internalType": "address", "name": "rewardsDistributor", "type": "address" }, { "internalType": "uint256", "name": "rewardsDuration", "type": "uint256" }, { "internalType": "uint256", "name": "periodFinish", "type": "uint256" }, { "internalType": "uint256", "name": "rewardRate", "type": "uint256" }, { "internalType": "uint256", "name": "lastUpdateTime", "type": "uint256" }, { "internalType": "uint256", "name": "rewardPerTokenStored", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" } ], "name": "rewardPerToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tkn", "type": "address" } ], "name": "rewardRate", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "rewardTokens", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "rewards", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardsListLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_b", "type": "address" } ], "name": "setBribe", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_ft", "type": "address" } ], "name": "setFeeTaker", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_b", "type": "bool" } ], "name": "setPaused", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" }, { "internalType": "address", "name": "_rewardsDistributor", "type": "address" } ], "name": "setRewardsDistributor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardsToken", "type": "address" }, { "internalType": "uint256", "name": "_rewardsDuration", "type": "uint256" } ], "name": "setRewardsDuration", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_sr", "type": "uint256" }, { "internalType": "uint256", "name": "_st", "type": "uint256" } ], "name": "setSplitParameters", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "splitLocktime", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "splitRatio", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "stake", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "totalFeesPayouts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "userRewardPerTokenPaid", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ve", "outputs": [ { "internalType": "contract IVotingEscrow", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "voter", "outputs": [ { "internalType": "contract IVoter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162005b9c38038062005b9c83398101604081905262000034916200063b565b6001600081815581546001600160a01b03808a166001600160a01b031992831617909355600880548985169083161790556002805488851692168217905560038054861515600160a01b026001600160a81b0319909116948816949094179390931790925560408051637e062a3560e11b8152905191929163fc0c546a91600480820192602092909190829003018186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010e91906200076c565b600480546001600160a01b0319166001600160a01b03831617905562eff100601155905060005b8251811015620002f05760006001600160a01b03168382815181106200015f576200015f62000791565b60200260200101516001600160a01b031614620002db576001600b600085848151811062000191576200019162000791565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506006838281518110620001e757620001e762000791565b6020908102919091018101518254600181018455600093845291832090910180546001600160a01b0319166001600160a01b03909216919091179055835186916005918690859081106200023f576200023f62000791565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062093a8060056000858481518110620002ab57620002ab62000791565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600101819055505b80620002e781620007a7565b91505062000135565b5082156200056257600080886001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004016040805180830381600087803b1580156200033657600080fd5b505af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003719190620007d1565b60405163095ea7b360e01b81526001600160a01b038b8116600483015260001960248301529294509092509083169063095ea7b390604401602060405180830381600087803b158015620003c457600080fd5b505af1158015620003d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ff919062000809565b5060405163095ea7b360e01b81526001600160a01b038981166004830152600019602483015282169063095ea7b390604401602060405180830381600087803b1580156200044c57600080fd5b505af115801562000461573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000487919062000809565b5060078054600181810183557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68891820180546001600160a01b038088166001600160a01b0319928316811790935585548085019096559490930180548686169416841790556000818152600c6020526040808220805460ff19908116861790915594825280822080549095168417909455925191938c1692909160008051602062005b7c8339815191529190a46040516001906001600160a01b03808b16919084169060008051602062005b7c83398151915290600090a450505b60405163095ea7b360e01b81526001600160a01b038681166004830152600019602483015282169063095ea7b390604401602060405180830381600087803b158015620005ae57600080fd5b505af1158015620005c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e9919062000809565b505050505050505062000827565b80516001600160a01b03811681146200060f57600080fd5b919050565b805180151581146200060f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200065557600080fd5b6200066087620005f7565b9550602062000671818901620005f7565b95506200068160408901620005f7565b94506200069160608901620005f7565b9350620006a16080890162000614565b60a08901519093506001600160401b0380821115620006bf57600080fd5b818a0191508a601f830112620006d457600080fd5b815181811115620006e957620006e962000625565b8060051b604051601f19603f8301168101818110858211171562000711576200071162000625565b60405291825284820192508381018501918d8311156200073057600080fd5b938501935b8285101562000759576200074985620005f7565b8452938501939285019262000735565b8096505050505050509295509295509295565b6000602082840312156200077f57600080fd5b6200078a82620005f7565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620007ca57634e487b7160e01b600052601160045260246000fd5b5060010190565b60008060408385031215620007e557600080fd5b620007f083620005f7565b91506200080060208401620005f7565b90509250929050565b6000602082840312156200081c57600080fd5b6200078a8262000614565b61534580620008376000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80635a6e6eab116101f457806399bcc0521161011a578063de5f6268116100ad578063e81defce1161007c578063e81defce14610931578063e9fad8ee14610944578063f12297771461094c578063f5ae22401461095f57600080fd5b8063de5f6268146108e2578063e5748213146108ea578063e6886396146108fe578063e70b9e271461090657600080fd5b8063d0ed26ae116100e9578063d0ed26ae14610863578063d294f09314610876578063da09d19d14610893578063dd501205146108bf57600080fd5b806399bcc05214610817578063b66503cf1461082a578063b6b55f251461083d578063bcd110141461085057600080fd5b8063749f1044116101925780638a501100116101615780638a501100146107e35780638dd598fb146107f65780638f27f1041461080757806395d89b411461080f57600080fd5b8063749f1044146107a257806376ad03bc146107b55780637bb7bed1146107c8578063853828b6146107db57600080fd5b8063638634ee116101ce578063638634ee1461071b57806365bcfbe71461072e5780637035ab981461074e57806370a082311461077957600080fd5b80635a6e6eab146106eb5780635c59f3bb146106fe5780635c975abb1461070757600080fd5b80632f4f21e2116102d95780633f695b45116102775780634d5ce038116102465780634d5ce0381461067f5780634ec5908d146106b257806352f18405146106c55780635557cc61146106d857600080fd5b80633f695b45146105c257806345797e67146105d557806346c96aac146105e857806348e5d9f8146105fb57600080fd5b8063313ce567116102b3578063313ce5671461058c57806337d0208c146105945780633a4b66f1146105a75780633d18b912146105ba57600080fd5b80632f4f21e2146105535780633010d8ef1461056657806331279d3d1461057957600080fd5b806318160ddd116103515780632378bea6116103205780632378bea6146104d65780632af2cecc146104e95780632ce9aead146105145780632e1a7d4d1461054057600080fd5b806318160ddd146104645780631f8507161461046c578063211dc32d14610497578063221ca18c146104aa57600080fd5b80630efeb2fb1161038d5780630efeb2fb146103fe578063102a7ad41461041e57806315ae92f71461043157806316c38b3c1461045157600080fd5b8063023df767146103b457806306fdde03146103c95780630a91a2c4146103e7575b600080fd5b6103c76103c2366004614c97565b610972565b005b6103d1610bcc565b6040516103de9190614ce0565b60405180910390f35b6103f060115481565b6040519081526020016103de565b6103f061040c366004614c97565b60136020526000908152604090205481565b6103f061042c366004614d13565b610c71565b6103f061043f366004614c97565b60156020526000908152604090205481565b6103c761045f366004614d5a565b610d0c565b600d546103f0565b60025461047f906001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b6103f06104a5366004614d13565b610de2565b6103f06104b8366004614c97565b6001600160a01b031660009081526005602052604090206003015490565b6103c76104e4366004614d77565b610dee565b6103f06104f7366004614d13565b601460209081526000928352604080842090915290825290205481565b6103f0610522366004614c97565b6001600160a01b031660009081526005602052604090206004015490565b6103c761054e366004614da3565b610f87565b6103c7610561366004614d77565b6111a6565b6103c7610574366004614c97565b611427565b6103c7610587366004614e8c565b6114ab565b6103f0611576565b60085461047f906001600160a01b031681565b60015461047f906001600160a01b031681565b6103c76115fb565b6103c76105d0366004614d13565b6117b4565b6103c76105e3366004614edc565b61189a565b60035461047f906001600160a01b031681565b610648610609366004614c97565b60056020819052600091825260409091208054600182015460028301546003840154600485015494909501546001600160a01b03909316949193909286565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c0016103de565b6106a261068d366004614c97565b600b6020526000908152604090205460ff1681565b60405190151581526020016103de565b6103c76106c0366004614c97565b611996565b6103c76106d3366004614efe565b611a70565b6103c76106e6366004614c97565b611b68565b6103c76106f9366004614efe565b611f0b565b6103f060105481565b6004546106a290600160a01b900460ff1681565b6103f0610729366004614c97565b612003565b6103f061073c366004614c97565b60126020526000908152604090205481565b6103f061075c366004614d13565b600960209081526000928352604080842090915290825290205481565b6103f0610787366004614c97565b6001600160a01b03166000908152600e602052604090205490565b600f5461047f906001600160a01b031681565b60045461047f906001600160a01b031681565b61047f6107d6366004614da3565b61202a565b6103c7612054565b6103c76107f1366004614f33565b61206f565b6002546001600160a01b031661047f565b6007546103f0565b6103d16122b2565b6103f0610825366004614c97565b612343565b6103c7610838366004614d77565b6123c4565b6103c761084b366004614da3565b6129da565b6103f061085e366004614c97565b612c11565b6103c7610871366004614f75565b612c3d565b61087e612e18565b604080519283526020830191909152016103de565b6103f06108a1366004614c97565b6001600160a01b031660009081526005602052604090206002015490565b6106a26108cd366004614c97565b600c6020526000908152604090205460ff1681565b6103c7612e67565b6003546106a290600160a01b900460ff1681565b6006546103f0565b6103f0610914366004614d13565b600a60209081526000928352604080842090915290825290205481565b6103c761093f366004614c97565b612ee4565b6103c761309d565b6103f061095a366004614c97565b6130be565b61047f61096d366004614da3565b613162565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109c257600080fd5b505af11580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190614fb6565b6001600160a01b0316336001600160a01b031614610a335760405162461bcd60e51b8152600401610a2a90614fd3565b60405180910390fd5b6001600160a01b0381166000908152600c602052604090205460ff1615610a825760405162461bcd60e51b815260206004820152600360248201526242546160e81b6044820152606401610a2a565b6001546001600160a01b0382811691161415610ab05760405162461bcd60e51b8152600401610a2a90614ff2565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392610ae6929091169060001990600401615011565b602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b38919061502a565b506007805460018082019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b038481169182179092556000818152600c6020526040808220805460ff19168617905560085490519316927f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d059190a450565b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4d9190810190615047565b604051602001610c5d91906150db565b604051602081830303815290604052905090565b6001600160a01b038083166000818152600a60209081526040808320948616808452948252808320549383526009825280832094835293905291822054610d039190610cfd90670de0b6b3a764000090610cf790610cd890610cd2896130be565b90613172565b6001600160a01b0389166000908152600e6020526040902054906131c8565b9061322d565b90613279565b90505b92915050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190614fb6565b6001600160a01b0316336001600160a01b031614610dc45760405162461bcd60e51b8152600401610a2a90614fd3565b60048054911515600160a01b0260ff60a01b19909216919091179055565b6000610d038284610c71565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190614fb6565b6001600160a01b0316336001600160a01b031614610ea65760405162461bcd60e51b8152600401610a2a90614fd3565b6001600160a01b0382166000908152600560205260409020600201544211610ef65760405162461bcd60e51b815260206004820152600360248201526252506160e81b6044820152606401610a2a565b60008111610f2b5760405162461bcd60e51b81526020600482015260026024820152610c1960f21b6044820152606401610a2a565b6001600160a01b03821660008181526005602052604090819020600101839055517fad2f86b01ed93b4b3a150d448c61a4f5d8d38075d3c0c64cc0a26fd6e1f4954590610f7b9084815260200190565b60405180910390a25050565b6001600080828254610f999190615129565b9091555050600080549033905b60065481101561109b57600060068281548110610fc557610fc5615141565b6000918252602090912001546001600160a01b03169050610fe5816130be565b6001600160a01b0382166000908152600560208190526040909120015561100b81612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156110885761103c8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061109381615157565b915050610fa6565b50600083116110bc5760405162461bcd60e51b8152600401610a2a90615172565b600d546110c99084613172565b600d55336000908152600e60205260409020546110e69084613172565b336000818152600e6020526040902091909155600154611112916001600160a01b0390911690856132c8565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a260405183815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35060005481146111a25760405162461bcd60e51b8152600401610a2a9061518e565b5050565b60016000808282546111b89190615129565b9091555050600054600454600160a01b900460ff16156112025760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b8260005b6006548110156112fb5760006006828154811061122557611225615141565b6000918252602090912001546001600160a01b03169050611245816130be565b6001600160a01b0382166000908152600560208190526040909120015561126b81612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156112e85761129c8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b50806112f381615157565b915050611206565b506000831161131c5760405162461bcd60e51b8152600401610a2a90615172565b600d546113299084613279565b600d556001600160a01b0384166000908152600e602052604090205461134f9084613279565b6001600160a01b038086166000908152600e602052604090209190915560015461137c911633308661331e565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c846040516113b791815260200190565b60405180910390a26040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060005481146114225760405162461bcd60e51b8152600401610a2a9061518e565b505050565b6001546040516370a0823160e01b81523360048201526114a89183916001600160a01b03909116906370a082319060240160206040518083038186803b15801561147057600080fd5b505afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056191906151ab565b50565b336001600160a01b03831614806114cc57506003546001600160a01b031633145b61150f5760405162461bcd60e51b8152602060048201526014602482015273556e2d617574686f72697a656420636c61696d2160601b6044820152606401610a2a565b6003546040516363453ae160e01b81523060048201526001600160a01b03909116906363453ae190602401600060405180830381600087803b15801561155457600080fd5b505af1158015611568573d6000803e3d6000fd5b505050506111a2828261335c565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b1580156115bb57600080fd5b505afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f391906151c4565b60ff16905090565b600160008082825461160d9190615129565b9091555050600080549033905b60065481101561170f5760006006828154811061163957611639615141565b6000918252602090912001546001600160a01b03169050611659816130be565b6001600160a01b0382166000908152600560208190526040909120015561167f81612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156116fc576116b08382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061170781615157565b91505061161a565b5060005b6006548110156117875760006006828154811061173257611732615141565b600091825260208083209091015433808452600a835260408085206001600160a01b03909316808652929093529190922054919250611772908383613513565b5050808061177f90615157565b915050611713565b5061179061370d565b50505060005481146114a85760405162461bcd60e51b8152600401610a2a9061518e565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561180457600080fd5b505af1158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c9190614fb6565b6001600160a01b0316336001600160a01b03161461186c5760405162461bcd60e51b8152600401610a2a90614fd3565b6001600160a01b03918216600090815260056020526040902080546001600160a01b03191691909216179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156118ea57600080fd5b505af11580156118fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119229190614fb6565b6001600160a01b0316336001600160a01b0316146119525760405162461bcd60e51b8152600401610a2a90614fd3565b620f424082111561198b5760405162461bcd60e51b815260206004820152600360248201526215a9a960e91b6044820152606401610a2a565b601091909155601155565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190614fb6565b6001600160a01b0316336001600160a01b031614611a4e5760405162461bcd60e51b8152600401610a2a90614fd3565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ac057600080fd5b505af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190614fb6565b6001600160a01b0316336001600160a01b031614611b285760405162461bcd60e51b8152600401610a2a90614fd3565b60005b81518110156111a257611b56828281518110611b4957611b49615141565b6020026020010151610972565b80611b6081615157565b915050611b2b565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611bb857600080fd5b505af1158015611bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf09190614fb6565b6001600160a01b0316336001600160a01b031614611c205760405162461bcd60e51b8152600401610a2a90614fd3565b6001600160a01b0381166000908152600c602052604090205460ff161515600114611c735760405162461bcd60e51b815260206004820152600360248201526242546960e81b6044820152606401610a2a565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392611ca89290911690600090600401615011565b602060405180830381600087803b158015611cc257600080fd5b505af1158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa919061502a565b5060078054906001600160a01b03831690611d166001846151e7565b81548110611d2657611d26615141565b6000918252602090912001546001600160a01b03161415611d99576007805480611d5257611d526151fe565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0384168252600c905260409020805460ff19169055611ec9565b60005b600754611dab906001906151e7565b811015611ec757826001600160a01b031660078281548110611dcf57611dcf615141565b6000918252602090912001546001600160a01b03161415611eb5576007611df76001846151e7565b81548110611e0757611e07615141565b600091825260209091200154600780546001600160a01b039092169183908110611e3357611e33615141565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611e7257611e726151fe565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600c905260409020805460ff191690555b80611ebf81615157565b915050611d9c565b505b6008546040516000916001600160a01b0390811691908516907f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05908490a45050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611f5b57600080fd5b505af1158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f939190614fb6565b6001600160a01b0316336001600160a01b031614611fc35760405162461bcd60e51b8152600401610a2a90614fd3565b60005b81518110156111a257611ff1828281518110611fe457611fe4615141565b6020026020010151611b68565b80611ffb81615157565b915050611fc6565b6001600160a01b038116600090815260056020526040812060020154610d06904290614b13565b6006818154811061203a57600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600e602052604090205461206d90610f87565b565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120bf57600080fd5b505af11580156120d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f79190614fb6565b6001600160a01b0316336001600160a01b0316146121275760405162461bcd60e51b8152600401610a2a90614fd3565b6001546001600160a01b03838116911614156121e957600d546001546040516370a0823160e01b81523060048201526000926121c59290916001600160a01b03909116906370a08231906024015b60206040518083038186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd291906151ab565b9050808411156121e75760405162461bcd60e51b8152600401610a2a90614ff2565b505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906122179084908790600401615011565b602060405180830381600087803b15801561223157600080fd5b505af1158015612245573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612269919061502a565b50816001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28846040516122a591815260200190565b60405180910390a2505050565b600154604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b1580156122f757600080fd5b505afa15801561230b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123339190810190615047565b604051602001610c5d9190615214565b6001600160a01b038116600090815260056020526040812060020154421061236d57506000919050565b6001600160a01b0382166000908152600560205260408120600201546123939042613172565b6001600160a01b0384166000908152600560205260409020600301549091506123bd9082906131c8565b9392505050565b60016000808282546123d69190615129565b90915550506000805490805b6006548110156124d75760006006828154811061240157612401615141565b6000918252602090912001546001600160a01b03169050612421816130be565b6001600160a01b0382166000908152600560208190526040909120015561244781612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156124c4576124788382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b50806124cf81615157565b9150506123e2565b506001546001600160a01b03858116911614156125065760405162461bcd60e51b8152600401610a2a90614ff2565b6001600160a01b0384166000908152600b602052604090205460ff1661255f5760405162461bcd60e51b815260206004820152600e60248201526d4e6f74206120726577617264212160901b6044820152606401610a2a565b61256761370d565b50506040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b1580156125ab57600080fd5b505afa1580156125bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e391906151ab565b90506125fa6001600160a01b03861633308761331e565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a082319060240160206040518083038186803b15801561263c57600080fd5b505afa158015612650573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267491906151ab565b905061268082826151e7565b9450600085116126b75760405162461bcd60e51b8152602060048201526002602482015261183960f11b6044820152606401610a2a565b6001600160a01b0386166000908152600560205260409020600201544210612721576001600160a01b03861660009081526005602052604090206001015461270090869061322d565b6001600160a01b038716600090815260056020526040902060030155612903565b6001600160a01b038616600090815260056020526040812060038101546002909101549091906127519042613172565b6001600160a01b0389166000908152600560205260408120600301549192509061277c9083906131c8565b6001600160a01b038a166000908152600560205260409020600101549091506127a990610cf78a84613279565b6001600160a01b038a8116600090815260056020526040902060039081019290925590541633148015906127f757506001600160a01b03898116600090815260056020526040902054163314155b801561289c5750600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561284e57600080fd5b505af1158015612862573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128869190614fb6565b6001600160a01b0316336001600160a01b031614155b156128ff576001600160a01b038916600090815260056020526040902060030154831115806128ca57508088115b6128ff5760405162461bcd60e51b8152600401610a2a906020808252600490820152634547504560e01b604082015260600190565b5050505b6001600160a01b038616600090815260056020526040902042600482018190556001909101546129339190613279565b6001600160a01b038716600081815260056020908152604091829020600201939093555187815233927f0f7cde3c0518e1cc590491be5861d70a2e333f7e65af2e1ebd91a3c9a3cc638d910160405180910390a36001600160a01b038616600090815260136020526040812080548792906129af908490615129565b9250508190555050505060005481146114225760405162461bcd60e51b8152600401610a2a9061518e565b60016000808282546129ec9190615129565b9091555050600054600454600160a01b900460ff1615612a365760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b3360005b600654811015612b2f57600060068281548110612a5957612a59615141565b6000918252602090912001546001600160a01b03169050612a79816130be565b6001600160a01b03821660009081526005602081905260409091200155612a9f81612003565b6001600160a01b03808316600090815260056020526040902060040191909155831615612b1c57612ad08382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080612b2781615157565b915050612a3a565b5060008311612b505760405162461bcd60e51b8152600401610a2a90615172565b600d54612b5d9084613279565b600d55336000908152600e6020526040902054612b7a9084613279565b336000818152600e6020526040902091909155600154612ba7916001600160a01b0390911690308661331e565b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a260405183815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611178565b6001600160a01b03811660009081526005602052604081206001810154600390910154610d06916131c8565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c8d57600080fd5b505af1158015612ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc59190614fb6565b6001600160a01b0316336001600160a01b031614612cf55760405162461bcd60e51b8152600401610a2a90614fd3565b6001600160a01b0383166000908152600b602052604090205460ff16158015612d3757506001600160a01b038316600090815260056020526040902060010154155b612d685760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401610a2a565b6001546001600160a01b0384811691161415612d965760405162461bcd60e51b8152600401610a2a90614ff2565b6006805460018181019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b039586166001600160a01b031991821681179092556000918252600b60209081526040808420805460ff19168617905560059091529091208054949095169316929092178355910155565b6000806001600080828254612e2d9190615129565b9091555050600054612e3d61370d565b925092506000548114612e625760405162461bcd60e51b8152600401610a2a9061518e565b509091565b6001546040516370a0823160e01b815233600482015261206d916001600160a01b0316906370a082319060240160206040518083038186803b158015612eac57600080fd5b505afa158015612ec0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906151ab565b6003546001600160a01b03163314612f265760405162461bcd60e51b815260206004820152600560248201526457686f205560d81b6044820152606401610a2a565b6008546001600160a01b031660005b60075481101561307957600060078281548110612f5457612f54615141565b600091825260208220015460405163095ea7b360e01b81526001600160a01b039091169250829163095ea7b391612f8f918791600401615011565b602060405180830381600087803b158015612fa957600080fd5b505af1158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe1919061502a565b5060405163095ea7b360e01b81526001600160a01b0382169063095ea7b39061301290879060001990600401615011565b602060405180830381600087803b15801561302c57600080fd5b505af1158015613040573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613064919061502a565b5050808061307190615157565b915050612f35565b5050600880546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e60205260409020546130b690610f87565b61206d6115fb565b6000600d54600014156130eb57506001600160a01b03166000908152600560208190526040909120015490565b600d546001600160a01b03831660009081526005602052604090206003810154600490910154610d069261313f929091610cf791670de0b6b3a76400009161313991908290610cd28b612003565b906131c8565b6001600160a01b0384166000908152600560208190526040909120015490613279565b6007818154811061203a57600080fd5b6000828211156131b45760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1016a7a360991b6044820152606401610a2a565b60006131c083856151e7565b949350505050565b6000826131d757506000610d06565b60006131e3838561523f565b9050826131f0858361525e565b14610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d101527a360991b6044820152606401610a2a565b600080821161326d5760405162461bcd60e51b815260206004820152600c60248201526b0536166654d6174683a202f360a41b6044820152606401610a2a565b60006131c0838561525e565b6000806132868385615129565b905083811015610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1015a7a360991b6044820152606401610a2a565b6114228363a9059cbb60e01b84846040516024016132e7929190615011565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614b29565b6040516001600160a01b03808516602483015283166044820152606481018290526133569085906323b872dd60e01b906084016132e7565b50505050565b600160008082825461336e9190615129565b9091555050600080549083905b6006548110156134705760006006828154811061339a5761339a615141565b6000918252602090912001546001600160a01b031690506133ba816130be565b6001600160a01b038216600090815260056020819052604090912001556133e081612003565b6001600160a01b0380831660009081526005602052604090206004019190915583161561345d576134118382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061346881615157565b91505061337b565b5060005b83518110156134e657600084828151811061349157613491615141565b6020908102919091018101516001600160a01b038089166000908152600a84526040808220928416825291909352909120549091506134d1878383613513565b505080806134de90615157565b915050613474565b506134ef61370d565b50505060005481146114225760405162461bcd60e51b8152600401610a2a9061518e565b8015611422576001600160a01b038084166000908152600a602090815260408083208685168085529252822091909155600454909116141561363e57601054801561362457600061356b620f4240610cf785856131c8565b60025460115460405163d4e54c3b60e01b81526004810184905260248101919091526001600160a01b03888116604483015292935091169063d4e54c3b90606401602060405180830381600087803b1580156135c657600080fd5b505af11580156135da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fe91906151ab565b5061361e8561360d8584613172565b6001600160a01b03871691906132c8565b50613638565b6136386001600160a01b03841685846132c8565b50613652565b6136526001600160a01b03831684836132c8565b826001600160a01b0316826001600160a01b03167f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc98360405161369791815260200190565b60405180910390a36001600160a01b038216600090815260126020526040812080548392906136c7908490615129565b90915550506001600160a01b03808416600090815260146020908152604080832093861683529290529081208054839290613703908490615129565b9091555050505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316633f6678256040518163ffffffff1660e01b815260040160206040518083038186803b15801561376057600080fd5b505afa158015613774573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379891906151ab565b905060008082116137aa576000613830565b600360009054906101000a90046001600160a01b03166001600160a01b03166313416d996040518163ffffffff1660e01b815260040160206040518083038186803b1580156137f857600080fd5b505afa15801561380c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138309190614fb6565b600354909150600160a01b900460ff166141ee5760075460008167ffffffffffffffff81111561386257613862614dbc565b60405190808252806020026020018201604052801561388b578160200160208202803683370190505b50905060008267ffffffffffffffff8111156138a9576138a9614dbc565b6040519080825280602002602001820160405280156138d2578160200160208202803683370190505b50905060005b83811015613a4257600781815481106138f3576138f3615141565b9060005260206000200160009054906101000a90046001600160a01b031683828151811061392357613923615141565b60200260200101906001600160a01b031690816001600160a01b03168152505060006001600160a01b031683828151811061396057613960615141565b60200260200101516001600160a01b031614613a105782818151811061398857613988615141565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156139d357600080fd5b505afa1580156139e7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0b91906151ab565b613a13565b60005b828281518110613a2557613a25615141565b602090810291909101015280613a3a81615157565b9150506138d8565b506001546040805163d294f09360e01b815281516001600160a01b039093169263d294f093926004808401939192918290030181600087803b158015613a8757600080fd5b505af1925050508015613ab7575060408051601f3d908101601f19168201909252613ab491810190615280565b60015b613aca5750600096879650945050505050565b505060005b838110156141de576000806001600160a01b0316848381518110613af557613af5615141565b60200260200101516001600160a01b031614613ba557838281518110613b1d57613b1d615141565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613b6857600080fd5b505afa158015613b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ba091906151ab565b613ba8565b60005b9050828281518110613bbc57613bbc615141565b60200260200101518111156141cb576000620f424088858581518110613be457613be4615141565b602002602001015184613bf791906151e7565b613c01919061523f565b613c0b919061525e565b1115613e3557838281518110613c2357613c23615141565b60200260200101516001600160a01b031663a9059cbb87620f42408a613c6b888881518110613c5457613c54615141565b60200260200101518761317290919063ffffffff16565b613c75919061523f565b613c7f919061525e565b6040518363ffffffff1660e01b8152600401613c9c929190615011565b602060405180830381600087803b158015613cb657600080fd5b505af1158015613cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cee919061502a565b50838281518110613d0157613d01615141565b60200260200101516001600160a01b0316866001600160a01b0316336001600160a01b03167f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42408b613d78898981518110613d6157613d61615141565b60200260200101518861317290919063ffffffff16565b613d82919061523f565b613d8c919061525e565b60405190815260200160405180910390a4838281518110613daf57613daf615141565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613dfa57600080fd5b505afa158015613e0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3291906151ab565b90505b600f546001600160a01b0316613fff5760085484516001600160a01b039091169063b66503cf90869085908110613e6e57613e6e615141565b6020026020010151613ea2868681518110613e8b57613e8b615141565b60200260200101518561317290919063ffffffff16565b6040518363ffffffff1660e01b8152600401613ebf929190615011565b600060405180830381600087803b158015613ed957600080fd5b505af1158015613eed573d6000803e3d6000fd5b50505050838281518110613f0357613f03615141565b60200260200101516001600160a01b0316600860009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03166000805160206152f0833981519152868681518110613f5e57613f5e615141565b602002602001015185613f7191906151e7565b60405190815260200160405180910390a4828281518110613f9457613f94615141565b602002602001015181613fa791906151e7565b60156000868581518110613fbd57613fbd615141565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254613ff49190615129565b909155506141cb9050565b83828151811061401157614011615141565b60200260200101516001600160a01b031663a9059cbb600f60009054906101000a90046001600160a01b0316614052868681518110613e8b57613e8b615141565b6040518363ffffffff1660e01b815260040161406f929190615011565b602060405180830381600087803b15801561408957600080fd5b505af115801561409d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c1919061502a565b508382815181106140d4576140d4615141565b60200260200101516001600160a01b0316600f60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03166000805160206152f083398151915286868151811061412f5761412f615141565b60200260200101518561414291906151e7565b60405190815260200160405180910390a482828151811061416557614165615141565b60200260200101518161417891906151e7565b6015600086858151811061418e5761418e615141565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546141c59190615129565b90915550505b50806141d681615157565b915050613acf565b5060009788975095505050505050565b60015460408051634eb1c24560e11b8152815160009384936001600160a01b0390911692639d63848a926004808301939282900301818787803b15801561423457600080fd5b505af1158015614248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061426c91906152a4565b6040516370a0823160e01b815230600482015291935091506000906001600160a01b038416906370a082319060240160206040518083038186803b1580156142b357600080fd5b505afa1580156142c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142eb91906151ab565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561433057600080fd5b505afa158015614344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061436891906151ab565b6001546040805163d294f09360e01b815281519394506001600160a01b039092169263d294f0939260048082019392918290030181600087803b1580156143ae57600080fd5b505af19250505080156143de575060408051601f3d908101601f191682019092526143db91810190615280565b60015b6143f2575060009788975095505050505050565b50506040516370a0823160e01b815230600482015282906001600160a01b038616906370a082319060240160206040518083038186803b15801561443557600080fd5b505afa158015614449573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446d91906151ab565b61447791906151e7565b6040516370a0823160e01b815230600482015290985081906001600160a01b038516906370a082319060240160206040518083038186803b1580156144bb57600080fd5b505afa1580156144cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144f391906151ab565b6144fd91906151e7565b96506000620f424061450f888b61523f565b614519919061525e565b1115614645576001600160a01b03841663a9059cbb86620f424061453d8a8d61523f565b614547919061525e565b6040518363ffffffff1660e01b8152600401614564929190615011565b602060405180830381600087803b15801561457e57600080fd5b505af1158015614592573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145b6919061502a565b506001600160a01b03808616908516337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42406145f58b8e61523f565b6145ff919061525e565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526146429083906001600160a01b038716906370a0823190602401612175565b97505b6000620f4240614655888a61523f565b61465f919061525e565b111561478b576001600160a01b03831663a9059cbb86620f42406146838a8c61523f565b61468d919061525e565b6040518363ffffffff1660e01b81526004016146aa929190615011565b602060405180830381600087803b1580156146c457600080fd5b505af11580156146d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146fc919061502a565b506001600160a01b03808616908416337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f424061473b8b8d61523f565b614745919061525e565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526147889082906001600160a01b038616906370a0823190602401612175565b96505b600f546001600160a01b03166149385787156148675760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf906147d39087908c90600401615011565b600060405180830381600087803b1580156147ed57600080fd5b505af1158015614801573d6000803e3d6000fd5b505050506001600160a01b038416600090815260156020526040812080548a929061482d908490615129565b90915550506008546040518981526001600160a01b0386811692169033906000805160206152f08339815191529060200160405180910390a45b86156149335760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf9061489f9086908b90600401615011565b600060405180830381600087803b1580156148b957600080fd5b505af11580156148cd573d6000803e3d6000fd5b505050506001600160a01b038316600090815260156020526040812080548992906148f9908490615129565b90915550506008546040518881526001600160a01b0385811692169033906000805160206152f08339815191529060200160405180910390a45b614b09565b600f5460405163a9059cbb60e01b81526001600160a01b038681169263a9059cbb9261496c92909116908c90600401615011565b602060405180830381600087803b15801561498657600080fd5b505af115801561499a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149be919061502a565b50600f5460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb926149f392909116908b90600401615011565b602060405180830381600087803b158015614a0d57600080fd5b505af1158015614a21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a45919061502a565b50600f546040518981526001600160a01b0386811692169033906000805160206152f08339815191529060200160405180910390a4600f546040518881526001600160a01b0385811692169033906000805160206152f08339815191529060200160405180910390a46001600160a01b038416600090815260156020526040812080548a9290614ad6908490615129565b90915550506001600160a01b03831660009081526015602052604081208054899290614b03908490615129565b90915550505b5050505050509091565b6000818310614b225781610d03565b5090919050565b6001600160a01b0382163b614b805760405162461bcd60e51b815260206004820152601760248201527f5361666545524332303a206e6f6e2d636f6e74726163740000000000000000006044820152606401610a2a565b600080836001600160a01b031683604051614b9b91906152d3565b6000604051808303816000865af19150503d8060008114614bd8576040519150601f19603f3d011682016040523d82523d6000602084013e614bdd565b606091505b509150915081614c255760405162461bcd60e51b815260206004820152601360248201527214d85999515490cc8c0e88131310c819985a5b606a1b6044820152606401610a2a565b8051156133565780806020019051810190614c40919061502a565b6133565760405162461bcd60e51b81526020600482015260136024820152725361666545524332303a20217375636365737360681b6044820152606401610a2a565b6001600160a01b03811681146114a857600080fd5b600060208284031215614ca957600080fd5b8135610d0381614c82565b60005b83811015614ccf578181015183820152602001614cb7565b838111156133565750506000910152565b6020815260008251806020840152614cff816040850160208701614cb4565b601f01601f19169190910160400192915050565b60008060408385031215614d2657600080fd5b8235614d3181614c82565b91506020830135614d4181614c82565b809150509250929050565b80151581146114a857600080fd5b600060208284031215614d6c57600080fd5b8135610d0381614d4c565b60008060408385031215614d8a57600080fd5b8235614d9581614c82565b946020939093013593505050565b600060208284031215614db557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614dfb57614dfb614dbc565b604052919050565b600082601f830112614e1457600080fd5b8135602067ffffffffffffffff821115614e3057614e30614dbc565b8160051b614e3f828201614dd2565b9283528481018201928281019087851115614e5957600080fd5b83870192505b84831015614e81578235614e7281614c82565b82529183019190830190614e5f565b979650505050505050565b60008060408385031215614e9f57600080fd5b8235614eaa81614c82565b9150602083013567ffffffffffffffff811115614ec657600080fd5b614ed285828601614e03565b9150509250929050565b60008060408385031215614eef57600080fd5b50508035926020909101359150565b600060208284031215614f1057600080fd5b813567ffffffffffffffff811115614f2757600080fd5b6131c084828501614e03565b600080600060608486031215614f4857600080fd5b833592506020840135614f5a81614c82565b91506040840135614f6a81614c82565b809150509250925092565b600080600060608486031215614f8a57600080fd5b8335614f9581614c82565b92506020840135614fa581614c82565b929592945050506040919091013590565b600060208284031215614fc857600080fd5b8151610d0381614c82565b602080825260059082015264215445414d60d81b604082015260600190565b602080825260059082015264212173746b60d81b604082015260600190565b6001600160a01b03929092168252602082015260400190565b60006020828403121561503c57600080fd5b8151610d0381614d4c565b60006020828403121561505957600080fd5b815167ffffffffffffffff8082111561507157600080fd5b818401915084601f83011261508557600080fd5b81518181111561509757615097614dbc565b6150aa601f8201601f1916602001614dd2565b91508082528560208285010111156150c157600080fd5b6150d2816020840160208601614cb4565b50949350505050565b6f029b1b0b6329023b0bab3b2903337b9160851b815260008251615106816010850160208701614cb4565b9190910160100192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561513c5761513c615113565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561516b5761516b615113565b5060010190565b602080825260029082015261306160f01b604082015260600190565b60208082526003908201526252472160e81b604082015260600190565b6000602082840312156151bd57600080fd5b5051919050565b6000602082840312156151d657600080fd5b815160ff81168114610d0357600080fd5b6000828210156151f9576151f9615113565b500390565b634e487b7160e01b600052603160045260246000fd5b6229a39d60e91b815260008251615232816003850160208701614cb4565b9190910160030192915050565b600081600019048311821515161561525957615259615113565b500290565b60008261527b57634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561529357600080fd5b505080516020909101519092909150565b600080604083850312156152b757600080fd5b82516152c281614c82565b6020840151909250614d4181614c82565b600082516152e5818460208701614cb4565b919091019291505056feee447878094bcc87bd81b55e4831b5e9e3d095866fce10f4f7e4caa64ea7a558a2646970667358221220c88ac4f6cb9b287a3107a7e4bfbd91fc10ce2a5ed4698ab9dedf3f51f68ea5a764736f6c634300080900336f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05000000000000000000000000202e2f0a3b981f711054c04bcd648394454b0de5000000000000000000000000c528a04def5484419d3df229f895eb6402c971f300000000000000000000000028c9c71c776a1203000b56c0cca48bef1cd51c5300000000000000000000000046abb88ae1f2a35ea559925d99fdc5441b592687000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000054016a4848a38f257b6e96331f7404073fd9c32c