[ { "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" } ]
60806040523480156200001157600080fd5b5060405162005b9a38038062005b9a83398101604081905262000034916200063b565b6001600081815581546001600160a01b03808a166001600160a01b031992831617909355600880548985169083161790556002805488851692168217905560038054861515600160a01b026001600160a81b0319909116948816949094179390931790925560408051637e062a3560e11b8152905191929163fc0c546a91600480820192602092909190829003018186803b158015620000d357600080fd5b505afa158015620000e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010e91906200076c565b600480546001600160a01b0319166001600160a01b03831617905562eff100601155905060005b8251811015620002f05760006001600160a01b03168382815181106200015f576200015f62000791565b60200260200101516001600160a01b031614620002db576001600b600085848151811062000191576200019162000791565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506006838281518110620001e757620001e762000791565b6020908102919091018101518254600181018455600093845291832090910180546001600160a01b0319166001600160a01b03909216919091179055835186916005918690859081106200023f576200023f62000791565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062093a8060056000858481518110620002ab57620002ab62000791565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600101819055505b80620002e781620007a7565b91505062000135565b5082156200056257600080886001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004016040805180830381600087803b1580156200033657600080fd5b505af11580156200034b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003719190620007d1565b60405163095ea7b360e01b81526001600160a01b038b8116600483015260001960248301529294509092509083169063095ea7b390604401602060405180830381600087803b158015620003c457600080fd5b505af1158015620003d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ff919062000809565b5060405163095ea7b360e01b81526001600160a01b038981166004830152600019602483015282169063095ea7b390604401602060405180830381600087803b1580156200044c57600080fd5b505af115801562000461573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000487919062000809565b5060078054600181810183557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68891820180546001600160a01b038088166001600160a01b0319928316811790935585548085019096559490930180548686169416841790556000818152600c6020526040808220805460ff19908116861790915594825280822080549095168417909455925191938c1692909160008051602062005b7a8339815191529190a46040516001906001600160a01b03808b16919084169060008051602062005b7a83398151915290600090a450505b60405163095ea7b360e01b81526001600160a01b038681166004830152600019602483015282169063095ea7b390604401602060405180830381600087803b158015620005ae57600080fd5b505af1158015620005c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005e9919062000809565b505050505050505062000827565b80516001600160a01b03811681146200060f57600080fd5b919050565b805180151581146200060f57600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200065557600080fd5b6200066087620005f7565b9550602062000671818901620005f7565b95506200068160408901620005f7565b94506200069160608901620005f7565b9350620006a16080890162000614565b60a08901519093506001600160401b0380821115620006bf57600080fd5b818a0191508a601f830112620006d457600080fd5b815181811115620006e957620006e962000625565b8060051b604051601f19603f8301168101818110858211171562000711576200071162000625565b60405291825284820192508381018501918d8311156200073057600080fd5b938501935b8285101562000759576200074985620005f7565b8452938501939285019262000735565b8096505050505050509295509295509295565b6000602082840312156200077f57600080fd5b6200078a82620005f7565b9392505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415620007ca57634e487b7160e01b600052601160045260246000fd5b5060010190565b60008060408385031215620007e557600080fd5b620007f083620005f7565b91506200080060208401620005f7565b90509250929050565b6000602082840312156200081c57600080fd5b6200078a8262000614565b61534380620008376000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80635a6e6eab116101f457806399bcc0521161011a578063de5f6268116100ad578063e81defce1161007c578063e81defce14610931578063e9fad8ee14610944578063f12297771461094c578063f5ae22401461095f57600080fd5b8063de5f6268146108e2578063e5748213146108ea578063e6886396146108fe578063e70b9e271461090657600080fd5b8063d0ed26ae116100e9578063d0ed26ae14610863578063d294f09314610876578063da09d19d14610893578063dd501205146108bf57600080fd5b806399bcc05214610817578063b66503cf1461082a578063b6b55f251461083d578063bcd110141461085057600080fd5b8063749f1044116101925780638a501100116101615780638a501100146107e35780638dd598fb146107f65780638f27f1041461080757806395d89b411461080f57600080fd5b8063749f1044146107a257806376ad03bc146107b55780637bb7bed1146107c8578063853828b6146107db57600080fd5b8063638634ee116101ce578063638634ee1461071b57806365bcfbe71461072e5780637035ab981461074e57806370a082311461077957600080fd5b80635a6e6eab146106eb5780635c59f3bb146106fe5780635c975abb1461070757600080fd5b80632f4f21e2116102d95780633f695b45116102775780634d5ce038116102465780634d5ce0381461067f5780634ec5908d146106b257806352f18405146106c55780635557cc61146106d857600080fd5b80633f695b45146105c257806345797e67146105d557806346c96aac146105e857806348e5d9f8146105fb57600080fd5b8063313ce567116102b3578063313ce5671461058c57806337d0208c146105945780633a4b66f1146105a75780633d18b912146105ba57600080fd5b80632f4f21e2146105535780633010d8ef1461056657806331279d3d1461057957600080fd5b806318160ddd116103515780632378bea6116103205780632378bea6146104d65780632af2cecc146104e95780632ce9aead146105145780632e1a7d4d1461054057600080fd5b806318160ddd146104645780631f8507161461046c578063211dc32d14610497578063221ca18c146104aa57600080fd5b80630efeb2fb1161038d5780630efeb2fb146103fe578063102a7ad41461041e57806315ae92f71461043157806316c38b3c1461045157600080fd5b8063023df767146103b457806306fdde03146103c95780630a91a2c4146103e7575b600080fd5b6103c76103c2366004614c95565b610972565b005b6103d1610bcc565b6040516103de9190614cde565b60405180910390f35b6103f060115481565b6040519081526020016103de565b6103f061040c366004614c95565b60136020526000908152604090205481565b6103f061042c366004614d11565b610c71565b6103f061043f366004614c95565b60156020526000908152604090205481565b6103c761045f366004614d58565b610d0c565b600d546103f0565b60025461047f906001600160a01b031681565b6040516001600160a01b0390911681526020016103de565b6103f06104a5366004614d11565b610de2565b6103f06104b8366004614c95565b6001600160a01b031660009081526005602052604090206003015490565b6103c76104e4366004614d75565b610dee565b6103f06104f7366004614d11565b601460209081526000928352604080842090915290825290205481565b6103f0610522366004614c95565b6001600160a01b031660009081526005602052604090206004015490565b6103c761054e366004614da1565b610f87565b6103c7610561366004614d75565b6111a6565b6103c7610574366004614c95565b611427565b6103c7610587366004614e8a565b6114ab565b6103f0611576565b60085461047f906001600160a01b031681565b60015461047f906001600160a01b031681565b6103c76115fb565b6103c76105d0366004614d11565b6117b4565b6103c76105e3366004614eda565b61189a565b60035461047f906001600160a01b031681565b610648610609366004614c95565b60056020819052600091825260409091208054600182015460028301546003840154600485015494909501546001600160a01b03909316949193909286565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c0016103de565b6106a261068d366004614c95565b600b6020526000908152604090205460ff1681565b60405190151581526020016103de565b6103c76106c0366004614c95565b611996565b6103c76106d3366004614efc565b611a70565b6103c76106e6366004614c95565b611b68565b6103c76106f9366004614efc565b611f0b565b6103f060105481565b6004546106a290600160a01b900460ff1681565b6103f0610729366004614c95565b612003565b6103f061073c366004614c95565b60126020526000908152604090205481565b6103f061075c366004614d11565b600960209081526000928352604080842090915290825290205481565b6103f0610787366004614c95565b6001600160a01b03166000908152600e602052604090205490565b600f5461047f906001600160a01b031681565b60045461047f906001600160a01b031681565b61047f6107d6366004614da1565b61202a565b6103c7612054565b6103c76107f1366004614f31565b61206f565b6002546001600160a01b031661047f565b6007546103f0565b6103d16122b2565b6103f0610825366004614c95565b612343565b6103c7610838366004614d75565b6123c4565b6103c761084b366004614da1565b6129d8565b6103f061085e366004614c95565b612c0f565b6103c7610871366004614f73565b612c3b565b61087e612e16565b604080519283526020830191909152016103de565b6103f06108a1366004614c95565b6001600160a01b031660009081526005602052604090206002015490565b6106a26108cd366004614c95565b600c6020526000908152604090205460ff1681565b6103c7612e65565b6003546106a290600160a01b900460ff1681565b6006546103f0565b6103f0610914366004614d11565b600a60209081526000928352604080842090915290825290205481565b6103c761093f366004614c95565b612ee2565b6103c761309b565b6103f061095a366004614c95565b6130bc565b61047f61096d366004614da1565b613160565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156109c257600080fd5b505af11580156109d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fa9190614fb4565b6001600160a01b0316336001600160a01b031614610a335760405162461bcd60e51b8152600401610a2a90614fd1565b60405180910390fd5b6001600160a01b0381166000908152600c602052604090205460ff1615610a825760405162461bcd60e51b815260206004820152600360248201526242546160e81b6044820152606401610a2a565b6001546001600160a01b0382811691161415610ab05760405162461bcd60e51b8152600401610a2a90614ff0565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392610ae692909116906000199060040161500f565b602060405180830381600087803b158015610b0057600080fd5b505af1158015610b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b389190615028565b506007805460018082019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b038481169182179092556000818152600c6020526040808220805460ff19168617905560085490519316927f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d059190a450565b600154604080516306fdde0360e01b815290516060926001600160a01b0316916306fdde03916004808301926000929190829003018186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4d9190810190615045565b604051602001610c5d91906150d9565b604051602081830303815290604052905090565b6001600160a01b038083166000818152600a60209081526040808320948616808452948252808320549383526009825280832094835293905291822054610d039190610cfd90670de0b6b3a764000090610cf790610cd890610cd2896130bc565b90613170565b6001600160a01b0389166000908152600e6020526040902054906131c6565b9061322b565b90613277565b90505b92915050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610d5c57600080fd5b505af1158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190614fb4565b6001600160a01b0316336001600160a01b031614610dc45760405162461bcd60e51b8152600401610a2a90614fd1565b60048054911515600160a01b0260ff60a01b19909216919091179055565b6000610d038284610c71565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e3e57600080fd5b505af1158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190614fb4565b6001600160a01b0316336001600160a01b031614610ea65760405162461bcd60e51b8152600401610a2a90614fd1565b6001600160a01b0382166000908152600560205260409020600201544211610ef65760405162461bcd60e51b815260206004820152600360248201526252506160e81b6044820152606401610a2a565b60008111610f2b5760405162461bcd60e51b81526020600482015260026024820152610c1960f21b6044820152606401610a2a565b6001600160a01b03821660008181526005602052604090819020600101839055517fad2f86b01ed93b4b3a150d448c61a4f5d8d38075d3c0c64cc0a26fd6e1f4954590610f7b9084815260200190565b60405180910390a25050565b6001600080828254610f999190615127565b9091555050600080549033905b60065481101561109b57600060068281548110610fc557610fc561513f565b6000918252602090912001546001600160a01b03169050610fe5816130bc565b6001600160a01b0382166000908152600560208190526040909120015561100b81612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156110885761103c8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061109381615155565b915050610fa6565b50600083116110bc5760405162461bcd60e51b8152600401610a2a90615170565b600d546110c99084613170565b600d55336000908152600e60205260409020546110e69084613170565b336000818152600e6020526040902091909155600154611112916001600160a01b0390911690856132c6565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a260405183815260009033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35060005481146111a25760405162461bcd60e51b8152600401610a2a9061518c565b5050565b60016000808282546111b89190615127565b9091555050600054600454600160a01b900460ff16156112025760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b8260005b6006548110156112fb576000600682815481106112255761122561513f565b6000918252602090912001546001600160a01b03169050611245816130bc565b6001600160a01b0382166000908152600560208190526040909120015561126b81612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156112e85761129c8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b50806112f381615155565b915050611206565b506000831161131c5760405162461bcd60e51b8152600401610a2a90615170565b600d546113299084613277565b600d556001600160a01b0384166000908152600e602052604090205461134f9084613277565b6001600160a01b038086166000908152600e602052604090209190915560015461137c911633308661331c565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c846040516113b791815260200190565b60405180910390a26040518381526001600160a01b038516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35060005481146114225760405162461bcd60e51b8152600401610a2a9061518c565b505050565b6001546040516370a0823160e01b81523360048201526114a89183916001600160a01b03909116906370a082319060240160206040518083038186803b15801561147057600080fd5b505afa158015611484573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061056191906151a9565b50565b336001600160a01b03831614806114cc57506003546001600160a01b031633145b61150f5760405162461bcd60e51b8152602060048201526014602482015273556e2d617574686f72697a656420636c61696d2160601b6044820152606401610a2a565b6003546040516363453ae160e01b81523060048201526001600160a01b03909116906363453ae190602401600060405180830381600087803b15801561155457600080fd5b505af1158015611568573d6000803e3d6000fd5b505050506111a2828261335a565b6001546040805163313ce56760e01b815290516000926001600160a01b03169163313ce567916004808301926020929190829003018186803b1580156115bb57600080fd5b505afa1580156115cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115f391906151c2565b60ff16905090565b600160008082825461160d9190615127565b9091555050600080549033905b60065481101561170f576000600682815481106116395761163961513f565b6000918252602090912001546001600160a01b03169050611659816130bc565b6001600160a01b0382166000908152600560208190526040909120015561167f81612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156116fc576116b08382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061170781615155565b91505061161a565b5060005b600654811015611787576000600682815481106117325761173261513f565b600091825260208083209091015433808452600a835260408085206001600160a01b03909316808652929093529190922054919250611772908383613511565b5050808061177f90615155565b915050611713565b5061179061370b565b50505060005481146114a85760405162461bcd60e51b8152600401610a2a9061518c565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561180457600080fd5b505af1158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c9190614fb4565b6001600160a01b0316336001600160a01b03161461186c5760405162461bcd60e51b8152600401610a2a90614fd1565b6001600160a01b03918216600090815260056020526040902080546001600160a01b03191691909216179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156118ea57600080fd5b505af11580156118fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119229190614fb4565b6001600160a01b0316336001600160a01b0316146119525760405162461bcd60e51b8152600401610a2a90614fd1565b620f424082111561198b5760405162461bcd60e51b815260206004820152600360248201526215a9a960e91b6044820152606401610a2a565b601091909155601155565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119e657600080fd5b505af11580156119fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1e9190614fb4565b6001600160a01b0316336001600160a01b031614611a4e5760405162461bcd60e51b8152600401610a2a90614fd1565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ac057600080fd5b505af1158015611ad4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af89190614fb4565b6001600160a01b0316336001600160a01b031614611b285760405162461bcd60e51b8152600401610a2a90614fd1565b60005b81518110156111a257611b56828281518110611b4957611b4961513f565b6020026020010151610972565b80611b6081615155565b915050611b2b565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611bb857600080fd5b505af1158015611bcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf09190614fb4565b6001600160a01b0316336001600160a01b031614611c205760405162461bcd60e51b8152600401610a2a90614fd1565b6001600160a01b0381166000908152600c602052604090205460ff161515600114611c735760405162461bcd60e51b815260206004820152600360248201526242546960e81b6044820152606401610a2a565b60085460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392611ca8929091169060009060040161500f565b602060405180830381600087803b158015611cc257600080fd5b505af1158015611cd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfa9190615028565b5060078054906001600160a01b03831690611d166001846151e5565b81548110611d2657611d2661513f565b6000918252602090912001546001600160a01b03161415611d99576007805480611d5257611d526151fc565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0384168252600c905260409020805460ff19169055611ec9565b60005b600754611dab906001906151e5565b811015611ec757826001600160a01b031660078281548110611dcf57611dcf61513f565b6000918252602090912001546001600160a01b03161415611eb5576007611df76001846151e5565b81548110611e0757611e0761513f565b600091825260209091200154600780546001600160a01b039092169183908110611e3357611e3361513f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480611e7257611e726151fc565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0385168252600c905260409020805460ff191690555b80611ebf81615155565b915050611d9c565b505b6008546040516000916001600160a01b0390811691908516907f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05908490a45050565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611f5b57600080fd5b505af1158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f939190614fb4565b6001600160a01b0316336001600160a01b031614611fc35760405162461bcd60e51b8152600401610a2a90614fd1565b60005b81518110156111a257611ff1828281518110611fe457611fe461513f565b6020026020010151611b68565b80611ffb81615155565b915050611fc6565b6001600160a01b038116600090815260056020526040812060020154610d06904290614b11565b6006818154811061203a57600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600e602052604090205461206d90610f87565b565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156120bf57600080fd5b505af11580156120d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f79190614fb4565b6001600160a01b0316336001600160a01b0316146121275760405162461bcd60e51b8152600401610a2a90614fd1565b6001546001600160a01b03838116911614156121e957600d546001546040516370a0823160e01b81523060048201526000926121c59290916001600160a01b03909116906370a08231906024015b60206040518083038186803b15801561218d57600080fd5b505afa1580156121a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd291906151a9565b9050808411156121e75760405162461bcd60e51b8152600401610a2a90614ff0565b505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb90612217908490879060040161500f565b602060405180830381600087803b15801561223157600080fd5b505af1158015612245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122699190615028565b50816001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28846040516122a591815260200190565b60405180910390a2505050565b600154604080516395d89b4160e01b815290516060926001600160a01b0316916395d89b41916004808301926000929190829003018186803b1580156122f757600080fd5b505afa15801561230b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123339190810190615045565b604051602001610c5d9190615212565b6001600160a01b038116600090815260056020526040812060020154421061236d57506000919050565b6001600160a01b0382166000908152600560205260408120600201546123939042613170565b6001600160a01b0384166000908152600560205260409020600301549091506123bd9082906131c6565b9392505050565b60016000808282546123d69190615127565b90915550506000805490805b6006548110156124d7576000600682815481106124015761240161513f565b6000918252602090912001546001600160a01b03169050612421816130bc565b6001600160a01b0382166000908152600560208190526040909120015561244781612003565b6001600160a01b038083166000908152600560205260409020600401919091558316156124c4576124788382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b50806124cf81615155565b9150506123e2565b506001546001600160a01b03858116911614156125065760405162461bcd60e51b8152600401610a2a90614ff0565b6001600160a01b0384166000908152600b602052604090205460ff1661255f5760405162461bcd60e51b815260206004820152600e60248201526d4e6f74206120726577617264212160901b6044820152606401610a2a565b61256761370b565b50506040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b1580156125ab57600080fd5b505afa1580156125bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e391906151a9565b90506125fa6001600160a01b03861633308761331c565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a082319060240160206040518083038186803b15801561263c57600080fd5b505afa158015612650573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267491906151a9565b905061268082826151e5565b9450600085116126b75760405162461bcd60e51b8152602060048201526002602482015261183960f11b6044820152606401610a2a565b6001600160a01b0386166000908152600560205260409020600201544210612721576001600160a01b03861660009081526005602052604090206001015461270090869061322b565b6001600160a01b038716600090815260056020526040902060030155612901565b6001600160a01b038616600090815260056020526040812060038101546002909101549091906127519042613170565b6001600160a01b0389166000908152600560205260408120600301549192509061277c9083906131c6565b6001600160a01b038a166000908152600560205260409020600101549091506127a990610cf78a84613277565b6001600160a01b038a81166000908152600560205260409020600390810192909255905416331415806127f657506001600160a01b03898116600090815260056020526040902054163314155b8061289a5750600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561284c57600080fd5b505af1158015612860573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128849190614fb4565b6001600160a01b0316336001600160a01b031614155b156128fd576001600160a01b038916600090815260056020526040902060030154831115806128c857508088115b6128fd5760405162461bcd60e51b8152600401610a2a906020808252600490820152634547504560e01b604082015260600190565b5050505b6001600160a01b038616600090815260056020526040902042600482018190556001909101546129319190613277565b6001600160a01b038716600081815260056020908152604091829020600201939093555187815233927f0f7cde3c0518e1cc590491be5861d70a2e333f7e65af2e1ebd91a3c9a3cc638d910160405180910390a36001600160a01b038616600090815260136020526040812080548792906129ad908490615127565b9250508190555050505060005481146114225760405162461bcd60e51b8152600401610a2a9061518c565b60016000808282546129ea9190615127565b9091555050600054600454600160a01b900460ff1615612a345760405162461bcd60e51b8152602060048201526005602482015264504155534560d81b6044820152606401610a2a565b3360005b600654811015612b2d57600060068281548110612a5757612a5761513f565b6000918252602090912001546001600160a01b03169050612a77816130bc565b6001600160a01b03821660009081526005602081905260409091200155612a9d81612003565b6001600160a01b03808316600090815260056020526040902060040191909155831615612b1a57612ace8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b5080612b2581615155565b915050612a38565b5060008311612b4e5760405162461bcd60e51b8152600401610a2a90615170565b600d54612b5b9084613277565b600d55336000908152600e6020526040902054612b789084613277565b336000818152600e6020526040902091909155600154612ba5916001600160a01b0390911690308661331c565b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a260405183815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611178565b6001600160a01b03811660009081526005602052604081206001810154600390910154610d06916131c6565b600260009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612c8b57600080fd5b505af1158015612c9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc39190614fb4565b6001600160a01b0316336001600160a01b031614612cf35760405162461bcd60e51b8152600401610a2a90614fd1565b6001600160a01b0383166000908152600b602052604090205460ff16158015612d3557506001600160a01b038316600090815260056020526040902060010154155b612d665760405162461bcd60e51b8152602060048201526002602482015261414960f01b6044820152606401610a2a565b6001546001600160a01b0384811691161415612d945760405162461bcd60e51b8152600401610a2a90614ff0565b6006805460018181019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b039586166001600160a01b031991821681179092556000918252600b60209081526040808420805460ff19168617905560059091529091208054949095169316929092178355910155565b6000806001600080828254612e2b9190615127565b9091555050600054612e3b61370b565b925092506000548114612e605760405162461bcd60e51b8152600401610a2a9061518c565b509091565b6001546040516370a0823160e01b815233600482015261206d916001600160a01b0316906370a082319060240160206040518083038186803b158015612eaa57600080fd5b505afa158015612ebe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906151a9565b6003546001600160a01b03163314612f245760405162461bcd60e51b815260206004820152600560248201526457686f205560d81b6044820152606401610a2a565b6008546001600160a01b031660005b60075481101561307757600060078281548110612f5257612f5261513f565b600091825260208220015460405163095ea7b360e01b81526001600160a01b039091169250829163095ea7b391612f8d91879160040161500f565b602060405180830381600087803b158015612fa757600080fd5b505af1158015612fbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdf9190615028565b5060405163095ea7b360e01b81526001600160a01b0382169063095ea7b3906130109087906000199060040161500f565b602060405180830381600087803b15801561302a57600080fd5b505af115801561303e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130629190615028565b5050808061306f90615155565b915050612f33565b5050600880546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e60205260409020546130b490610f87565b61206d6115fb565b6000600d54600014156130e957506001600160a01b03166000908152600560208190526040909120015490565b600d546001600160a01b03831660009081526005602052604090206003810154600490910154610d069261313d929091610cf791670de0b6b3a76400009161313791908290610cd28b612003565b906131c6565b6001600160a01b0384166000908152600560208190526040909120015490613277565b6007818154811061203a57600080fd5b6000828211156131b25760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1016a7a360991b6044820152606401610a2a565b60006131be83856151e5565b949350505050565b6000826131d557506000610d06565b60006131e1838561523d565b9050826131ee858361525c565b14610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d101527a360991b6044820152606401610a2a565b600080821161326b5760405162461bcd60e51b815260206004820152600c60248201526b0536166654d6174683a202f360a41b6044820152606401610a2a565b60006131be838561525c565b6000806132848385615127565b905083811015610d035760405162461bcd60e51b815260206004820152600d60248201526c29b0b332a6b0ba341d1015a7a360991b6044820152606401610a2a565b6114228363a9059cbb60e01b84846040516024016132e592919061500f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614b27565b6040516001600160a01b03808516602483015283166044820152606481018290526133549085906323b872dd60e01b906084016132e5565b50505050565b600160008082825461336c9190615127565b9091555050600080549083905b60065481101561346e576000600682815481106133985761339861513f565b6000918252602090912001546001600160a01b031690506133b8816130bc565b6001600160a01b038216600090815260056020819052604090912001556133de81612003565b6001600160a01b0380831660009081526005602052604090206004019190915583161561345b5761340f8382610c71565b6001600160a01b038085166000818152600a6020908152604080832094871680845294825280832095909555600580825285832001549282526009815284822093825292909252919020555b508061346681615155565b915050613379565b5060005b83518110156134e457600084828151811061348f5761348f61513f565b6020908102919091018101516001600160a01b038089166000908152600a84526040808220928416825291909352909120549091506134cf878383613511565b505080806134dc90615155565b915050613472565b506134ed61370b565b50505060005481146114225760405162461bcd60e51b8152600401610a2a9061518c565b8015611422576001600160a01b038084166000908152600a602090815260408083208685168085529252822091909155600454909116141561363c576010548015613622576000613569620f4240610cf785856131c6565b60025460115460405163d4e54c3b60e01b81526004810184905260248101919091526001600160a01b03888116604483015292935091169063d4e54c3b90606401602060405180830381600087803b1580156135c457600080fd5b505af11580156135d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135fc91906151a9565b5061361c8561360b8584613170565b6001600160a01b03871691906132c6565b50613636565b6136366001600160a01b03841685846132c6565b50613650565b6136506001600160a01b03831684836132c6565b826001600160a01b0316826001600160a01b03167f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc98360405161369591815260200190565b60405180910390a36001600160a01b038216600090815260126020526040812080548392906136c5908490615127565b90915550506001600160a01b03808416600090815260146020908152604080832093861683529290529081208054839290613701908490615127565b9091555050505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316633f6678256040518163ffffffff1660e01b815260040160206040518083038186803b15801561375e57600080fd5b505afa158015613772573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379691906151a9565b905060008082116137a857600061382e565b600360009054906101000a90046001600160a01b03166001600160a01b03166313416d996040518163ffffffff1660e01b815260040160206040518083038186803b1580156137f657600080fd5b505afa15801561380a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382e9190614fb4565b600354909150600160a01b900460ff166141ec5760075460008167ffffffffffffffff81111561386057613860614dba565b604051908082528060200260200182016040528015613889578160200160208202803683370190505b50905060008267ffffffffffffffff8111156138a7576138a7614dba565b6040519080825280602002602001820160405280156138d0578160200160208202803683370190505b50905060005b83811015613a4057600781815481106138f1576138f161513f565b9060005260206000200160009054906101000a90046001600160a01b03168382815181106139215761392161513f565b60200260200101906001600160a01b031690816001600160a01b03168152505060006001600160a01b031683828151811061395e5761395e61513f565b60200260200101516001600160a01b031614613a0e578281815181106139865761398661513f565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156139d157600080fd5b505afa1580156139e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0991906151a9565b613a11565b60005b828281518110613a2357613a2361513f565b602090810291909101015280613a3881615155565b9150506138d6565b506001546040805163d294f09360e01b815281516001600160a01b039093169263d294f093926004808401939192918290030181600087803b158015613a8557600080fd5b505af1925050508015613ab5575060408051601f3d908101601f19168201909252613ab29181019061527e565b60015b613ac85750600096879650945050505050565b505060005b838110156141dc576000806001600160a01b0316848381518110613af357613af361513f565b60200260200101516001600160a01b031614613ba357838281518110613b1b57613b1b61513f565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613b6657600080fd5b505afa158015613b7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9e91906151a9565b613ba6565b60005b9050828281518110613bba57613bba61513f565b60200260200101518111156141c9576000620f424088858581518110613be257613be261513f565b602002602001015184613bf591906151e5565b613bff919061523d565b613c09919061525c565b1115613e3357838281518110613c2157613c2161513f565b60200260200101516001600160a01b031663a9059cbb87620f42408a613c69888881518110613c5257613c5261513f565b60200260200101518761317090919063ffffffff16565b613c73919061523d565b613c7d919061525c565b6040518363ffffffff1660e01b8152600401613c9a92919061500f565b602060405180830381600087803b158015613cb457600080fd5b505af1158015613cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cec9190615028565b50838281518110613cff57613cff61513f565b60200260200101516001600160a01b0316866001600160a01b0316336001600160a01b03167f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42408b613d76898981518110613d5f57613d5f61513f565b60200260200101518861317090919063ffffffff16565b613d80919061523d565b613d8a919061525c565b60405190815260200160405180910390a4838281518110613dad57613dad61513f565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b158015613df857600080fd5b505afa158015613e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e3091906151a9565b90505b600f546001600160a01b0316613ffd5760085484516001600160a01b039091169063b66503cf90869085908110613e6c57613e6c61513f565b6020026020010151613ea0868681518110613e8957613e8961513f565b60200260200101518561317090919063ffffffff16565b6040518363ffffffff1660e01b8152600401613ebd92919061500f565b600060405180830381600087803b158015613ed757600080fd5b505af1158015613eeb573d6000803e3d6000fd5b50505050838281518110613f0157613f0161513f565b60200260200101516001600160a01b0316600860009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03166000805160206152ee833981519152868681518110613f5c57613f5c61513f565b602002602001015185613f6f91906151e5565b60405190815260200160405180910390a4828281518110613f9257613f9261513f565b602002602001015181613fa591906151e5565b60156000868581518110613fbb57613fbb61513f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254613ff29190615127565b909155506141c99050565b83828151811061400f5761400f61513f565b60200260200101516001600160a01b031663a9059cbb600f60009054906101000a90046001600160a01b0316614050868681518110613e8957613e8961513f565b6040518363ffffffff1660e01b815260040161406d92919061500f565b602060405180830381600087803b15801561408757600080fd5b505af115801561409b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140bf9190615028565b508382815181106140d2576140d261513f565b60200260200101516001600160a01b0316600f60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b03166000805160206152ee83398151915286868151811061412d5761412d61513f565b60200260200101518561414091906151e5565b60405190815260200160405180910390a48282815181106141635761416361513f565b60200260200101518161417691906151e5565b6015600086858151811061418c5761418c61513f565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008282546141c39190615127565b90915550505b50806141d481615155565b915050613acd565b5060009788975095505050505050565b60015460408051634eb1c24560e11b8152815160009384936001600160a01b0390911692639d63848a926004808301939282900301818787803b15801561423257600080fd5b505af1158015614246573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061426a91906152a2565b6040516370a0823160e01b815230600482015291935091506000906001600160a01b038416906370a082319060240160206040518083038186803b1580156142b157600080fd5b505afa1580156142c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e991906151a9565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b15801561432e57600080fd5b505afa158015614342573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061436691906151a9565b6001546040805163d294f09360e01b815281519394506001600160a01b039092169263d294f0939260048082019392918290030181600087803b1580156143ac57600080fd5b505af19250505080156143dc575060408051601f3d908101601f191682019092526143d99181019061527e565b60015b6143f0575060009788975095505050505050565b50506040516370a0823160e01b815230600482015282906001600160a01b038616906370a082319060240160206040518083038186803b15801561443357600080fd5b505afa158015614447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446b91906151a9565b61447591906151e5565b6040516370a0823160e01b815230600482015290985081906001600160a01b038516906370a082319060240160206040518083038186803b1580156144b957600080fd5b505afa1580156144cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144f191906151a9565b6144fb91906151e5565b96506000620f424061450d888b61523d565b614517919061525c565b1115614643576001600160a01b03841663a9059cbb86620f424061453b8a8d61523d565b614545919061525c565b6040518363ffffffff1660e01b815260040161456292919061500f565b602060405180830381600087803b15801561457c57600080fd5b505af1158015614590573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145b49190615028565b506001600160a01b03808616908516337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42406145f38b8e61523d565b6145fd919061525c565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526146409083906001600160a01b038716906370a0823190602401612175565b97505b6000620f4240614653888a61523d565b61465d919061525c565b1115614789576001600160a01b03831663a9059cbb86620f42406146818a8c61523d565b61468b919061525c565b6040518363ffffffff1660e01b81526004016146a892919061500f565b602060405180830381600087803b1580156146c257600080fd5b505af11580156146d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146fa9190615028565b506001600160a01b03808616908416337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42406147398b8d61523d565b614743919061525c565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526147869082906001600160a01b038616906370a0823190602401612175565b96505b600f546001600160a01b03166149365787156148655760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf906147d19087908c9060040161500f565b600060405180830381600087803b1580156147eb57600080fd5b505af11580156147ff573d6000803e3d6000fd5b505050506001600160a01b038416600090815260156020526040812080548a929061482b908490615127565b90915550506008546040518981526001600160a01b0386811692169033906000805160206152ee8339815191529060200160405180910390a45b86156149315760085460405163b66503cf60e01b81526001600160a01b039091169063b66503cf9061489d9086908b9060040161500f565b600060405180830381600087803b1580156148b757600080fd5b505af11580156148cb573d6000803e3d6000fd5b505050506001600160a01b038316600090815260156020526040812080548992906148f7908490615127565b90915550506008546040518881526001600160a01b0385811692169033906000805160206152ee8339815191529060200160405180910390a45b614b07565b600f5460405163a9059cbb60e01b81526001600160a01b038681169263a9059cbb9261496a92909116908c9060040161500f565b602060405180830381600087803b15801561498457600080fd5b505af1158015614998573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149bc9190615028565b50600f5460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb926149f192909116908b9060040161500f565b602060405180830381600087803b158015614a0b57600080fd5b505af1158015614a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a439190615028565b50600f546040518981526001600160a01b0386811692169033906000805160206152ee8339815191529060200160405180910390a4600f546040518881526001600160a01b0385811692169033906000805160206152ee8339815191529060200160405180910390a46001600160a01b038416600090815260156020526040812080548a9290614ad4908490615127565b90915550506001600160a01b03831660009081526015602052604081208054899290614b01908490615127565b90915550505b5050505050509091565b6000818310614b205781610d03565b5090919050565b6001600160a01b0382163b614b7e5760405162461bcd60e51b815260206004820152601760248201527f5361666545524332303a206e6f6e2d636f6e74726163740000000000000000006044820152606401610a2a565b600080836001600160a01b031683604051614b9991906152d1565b6000604051808303816000865af19150503d8060008114614bd6576040519150601f19603f3d011682016040523d82523d6000602084013e614bdb565b606091505b509150915081614c235760405162461bcd60e51b815260206004820152601360248201527214d85999515490cc8c0e88131310c819985a5b606a1b6044820152606401610a2a565b8051156133545780806020019051810190614c3e9190615028565b6133545760405162461bcd60e51b81526020600482015260136024820152725361666545524332303a20217375636365737360681b6044820152606401610a2a565b6001600160a01b03811681146114a857600080fd5b600060208284031215614ca757600080fd5b8135610d0381614c80565b60005b83811015614ccd578181015183820152602001614cb5565b838111156133545750506000910152565b6020815260008251806020840152614cfd816040850160208701614cb2565b601f01601f19169190910160400192915050565b60008060408385031215614d2457600080fd5b8235614d2f81614c80565b91506020830135614d3f81614c80565b809150509250929050565b80151581146114a857600080fd5b600060208284031215614d6a57600080fd5b8135610d0381614d4a565b60008060408385031215614d8857600080fd5b8235614d9381614c80565b946020939093013593505050565b600060208284031215614db357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614df957614df9614dba565b604052919050565b600082601f830112614e1257600080fd5b8135602067ffffffffffffffff821115614e2e57614e2e614dba565b8160051b614e3d828201614dd0565b9283528481018201928281019087851115614e5757600080fd5b83870192505b84831015614e7f578235614e7081614c80565b82529183019190830190614e5d565b979650505050505050565b60008060408385031215614e9d57600080fd5b8235614ea881614c80565b9150602083013567ffffffffffffffff811115614ec457600080fd5b614ed085828601614e01565b9150509250929050565b60008060408385031215614eed57600080fd5b50508035926020909101359150565b600060208284031215614f0e57600080fd5b813567ffffffffffffffff811115614f2557600080fd5b6131be84828501614e01565b600080600060608486031215614f4657600080fd5b833592506020840135614f5881614c80565b91506040840135614f6881614c80565b809150509250925092565b600080600060608486031215614f8857600080fd5b8335614f9381614c80565b92506020840135614fa381614c80565b929592945050506040919091013590565b600060208284031215614fc657600080fd5b8151610d0381614c80565b602080825260059082015264215445414d60d81b604082015260600190565b602080825260059082015264212173746b60d81b604082015260600190565b6001600160a01b03929092168252602082015260400190565b60006020828403121561503a57600080fd5b8151610d0381614d4a565b60006020828403121561505757600080fd5b815167ffffffffffffffff8082111561506f57600080fd5b818401915084601f83011261508357600080fd5b81518181111561509557615095614dba565b6150a8601f8201601f1916602001614dd0565b91508082528560208285010111156150bf57600080fd5b6150d0816020840160208601614cb2565b50949350505050565b6f029b1b0b6329023b0bab3b2903337b9160851b815260008251615104816010850160208701614cb2565b9190910160100192915050565b634e487b7160e01b600052601160045260246000fd5b6000821982111561513a5761513a615111565b500190565b634e487b7160e01b600052603260045260246000fd5b600060001982141561516957615169615111565b5060010190565b602080825260029082015261306160f01b604082015260600190565b60208082526003908201526252472160e81b604082015260600190565b6000602082840312156151bb57600080fd5b5051919050565b6000602082840312156151d457600080fd5b815160ff81168114610d0357600080fd5b6000828210156151f7576151f7615111565b500390565b634e487b7160e01b600052603160045260246000fd5b6229a39d60e91b815260008251615230816003850160208701614cb2565b9190910160030192915050565b600081600019048311821515161561525757615257615111565b500290565b60008261527957634e487b7160e01b600052601260045260246000fd5b500490565b6000806040838503121561529157600080fd5b505080516020909101519092909150565b600080604083850312156152b557600080fd5b82516152c081614c80565b6020840151909250614d3f81614c80565b600082516152e3818460208701614cb2565b919091019291505056feee447878094bcc87bd81b55e4831b5e9e3d095866fce10f4f7e4caa64ea7a558a2646970667358221220e67444f4233b7ccd857ec8a00440d45e624b6ad5547bf15b197b6476801208de64736f6c634300080900336f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05000000000000000000000000f3f1f5760a614b8146eec5d1c94658720c2425b9000000000000000000000000474ebee69f26be69112d23d9f47cb7a9dcdb446b00000000000000000000000028c9c71c776a1203000b56c0cca48bef1cd51c5300000000000000000000000046abb88ae1f2a35ea559925d99fdc5441b592687000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000054016a4848a38f257b6e96331f7404073fd9c32c