[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "user", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "AddToPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "CreatePosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "EmergencyWithdraw", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "pending", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "pendingWETH", "type": "uint256" } ], "name": "HarvestPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "LockPosition", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "lastRewardTime", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accRewardsPerShare", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "accRewardsPerShareWETH", "type": "uint256" } ], "name": "PoolUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "boostPoints", "type": "uint256" } ], "name": "SetBoost", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maxGlobalMultiplier", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maxBoostMultiplier", "type": "uint256" } ], "name": "SetBoostMultiplierSettings", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "emergencyUnlock", "type": "bool" } ], "name": "SetEmergencyUnlock", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "maxLockDuration", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "maxLockMultiplier", "type": "uint256" } ], "name": "SetLockMultiplierSettings", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "operator", "type": "address" } ], "name": "SetOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "isAdded", "type": "bool" } ], "name": "SetUnlockOperator", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "xTokenRewardsShare", "type": "uint256" } ], "name": "SetXTokenRewardsShare", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "WithdrawFromPosition", "type": "event" }, { "inputs": [], "name": "MAX_BOOST_MULTIPLIER_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_GLOBAL_MULTIPLIER_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_LOCK_MULTIPLIER_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amountToAdd", "type": "uint256" } ], "name": "addToPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "boost", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "createPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "emergencyUnlock", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "emergencyWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "exists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "factory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "boostPoints", "type": "uint256" } ], "name": "getMultiplierByBoostPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "getMultiplierByLockDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getMultiplierSettings", "outputs": [ { "internalType": "uint256", "name": "maxGlobalMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "maxLockDuration", "type": "uint256" }, { "internalType": "uint256", "name": "maxLockMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "maxBoostMultiplier", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getPoolInfo", "outputs": [ { "internalType": "address", "name": "lpToken", "type": "address" }, { "internalType": "address", "name": "protocolToken", "type": "address" }, { "internalType": "address", "name": "xToken", "type": "address" }, { "internalType": "uint256", "name": "lastRewardTime", "type": "uint256" }, { "internalType": "uint256", "name": "accRewardsPerShare", "type": "uint256" }, { "internalType": "uint256", "name": "accRewardsPerShareWETH", "type": "uint256" }, { "internalType": "uint256", "name": "lpSupply", "type": "uint256" }, { "internalType": "uint256", "name": "lpSupplyWithMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "allocPoints", "type": "uint256" }, { "internalType": "uint256", "name": "allocPointsWETH", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getStakingPosition", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "amountWithMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "startLockTime", "type": "uint256" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" }, { "internalType": "uint256", "name": "lockMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "rewardDebt", "type": "uint256" }, { "internalType": "uint256", "name": "rewardDebtWETH", "type": "uint256" }, { "internalType": "uint256", "name": "boostPoints", "type": "uint256" }, { "internalType": "uint256", "name": "totalMultiplier", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "harvestPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "harvestPositionTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "harvestPositionsTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "hasDeposits", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IMasterChef", "name": "master_", "type": "address" }, { "internalType": "contract IERC20Metadata", "name": "token", "type": "address" }, { "internalType": "contract IXToken", "name": "xToken", "type": "address" }, { "internalType": "contract IERC20Metadata", "name": "lpToken", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isUnlocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lastTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "lockDuration", "type": "uint256" } ], "name": "lockPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "master", "outputs": [ { "internalType": "contract IMasterChef", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "pendingRewards", "outputs": [ { "internalType": "uint256", "name": "mainAmount", "type": "uint256" }, { "internalType": "uint256", "name": "wethAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "renewLockPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxGlobalMultiplier", "type": "uint256" }, { "internalType": "uint256", "name": "maxBoostMultiplier", "type": "uint256" } ], "name": "setBoostMultiplierSettings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "emergencyUnlock_", "type": "bool" } ], "name": "setEmergencyUnlock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "maxLockDuration", "type": "uint256" }, { "internalType": "uint256", "name": "maxLockMultiplier", "type": "uint256" } ], "name": "setLockMultiplierSettings", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator_", "type": "address" } ], "name": "setOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "xTokenRewardsShare_", "type": "uint256" } ], "name": "setXTokenRewardsShare", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "unboost", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "updatePool", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "amountToWithdraw", "type": "uint256" } ], "name": "withdrawFromPosition", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "xTokenRewardsShare", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "yieldBooster", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" } ]
60a0604052614e2060155562f14280601655612710601755612710601855611f406019553480156200003057600080fd5b50604080518082018252601d81527f4261736573776170207374616b696e6720706f736974696f6e204e4654000000602080830191909152825180840190935260058352641cdc13919560da1b90830152600160005590620000996301ffc9a760e01b6200010a565b8151620000ae90600790602085019062000192565b508051620000c490600890602084019062000192565b50620000d76380ac58cd60e01b6200010a565b620000e9635b5e139f60e01b6200010a565b620000fb63780e9d6360e01b6200010a565b50503360601b6080526200023e565b6001600160e01b031980821614156200016a576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152600160208190526040909120805460ff19169091179055565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620001ca576000855562000215565b82601f10620001e557805160ff191683800117855562000215565b8280016001018555821562000215579182015b8281111562000215578251825591602001919060010190620001f8565b506200022392915062000227565b5090565b5b8082111562000223576000815560010162000228565b60805160601c61566362000261600039806124af5280612c1b52506156636000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c80636c0360eb116101d3578063c45a015511610104578063e985e9c5116100a2578063f2e16b3c1161007c578063f2e16b3c14610b3f578063f84ddf0b14610b62578063f8c8765e14610b6a578063fdc5f93014610ba857610378565b8063e985e9c514610b01578063ee97f7f314610b2f578063f2c3999214610b3757610378565b8063d4e32de6116100de578063d4e32de6146103d0578063d5232dee14610ace578063e3161ddd14610af1578063e61f927d14610af957610378565b8063c45a015514610a86578063c87b56dd14610a8e578063d1aaef0514610aab57610378565b80638da5cb5b11610171578063a22cb4651161014b578063a22cb46514610949578063a6b0b2a814610977578063b3ab15fb1461099a578063b88d4fde146109c057610378565b80638da5cb5b146109165780639016f8221461091e57806395d89b411461094157610378565b80637dcb2abf116101ad5780637dcb2abf1461088d578063832c51f6146108c35780638380edb7146108f1578063842072af146108f957610378565b80636c0360eb1461083c5780636e00e2da1461084457806370a082311461086757610378565b80633e9b453e116102ad5780634f6ccce71161024b57806360246c881161022557806360246c88146107935780636352211e146107fa57806365dfee331461081757806368e5dab51461083457610378565b80634f6ccce7146107515780635312ea8e1461076e578063570ca7351461078b57610378565b80634a256786116102875780634a256786146106905780634b1fff10146106b35780634cd5520b146106bb5780634f558e791461073457610378565b80633e9b453e1461060b57806340be7bec1461063757806342842e0e1461065a57610378565b8063158ef93e1161031a57806323b872dd116102f457806323b872dd146105675780632c542ede1461059d5780632f38e042146105c05780632f745c59146105df57610378565b8063158ef93e1461053a57806318160ddd1461054257806320f8e94e1461054a57610378565b8063081812fc11610356578063081812fc1461046757806308521f79146104a0578063095ea7b31461050457806313e46e841461053257610378565b806301ffc9a71461037d5780630332f114146103d057806306fdde03146103ea575b600080fd5b6103bc6004803603602081101561039357600080fd5b50357fffffffff0000000000000000000000000000000000000000000000000000000016610bc5565b604080519115158252519081900360200190f35b6103d8610c00565b60408051918252519081900360200190f35b6103f2610c06565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561042c578181015183820152602001610414565b50505050905090810190601f1680156104595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104846004803603602081101561047d57600080fd5b5035610c9c565b604080516001600160a01b039092168252519081900360200190f35b6104bd600480360360208110156104b657600080fd5b5035610cfe565b60408051998a5260208a0198909852888801969096526060880194909452608087019290925260a086015260c085015260e084015261010083015251908190036101200190f35b6105306004803603604081101561051a57600080fd5b506001600160a01b038135169060200135610d47565b005b6103d8610e22565b6103bc610e28565b6103d8610e49565b6105306004803603602081101561056057600080fd5b5035610e5a565b6105306004803603606081101561057d57600080fd5b506001600160a01b03813581169160208101359091169060400135610ef9565b610530600480360360408110156105b357600080fd5b5080359060200135610f6b565b610530600480360360208110156105d657600080fd5b5035151561110f565b6103d8600480360360408110156105f557600080fd5b506001600160a01b038135169060200135611181565b6105306004803603604081101561062157600080fd5b50803590602001356001600160a01b03166111ac565b6105306004803603604081101561064d57600080fd5b508035906020013561129b565b6105306004803603606081101561067057600080fd5b506001600160a01b038135811691602081013590911690604001356113e0565b610530600480360360408110156106a657600080fd5b50803590602001356113fb565b6103d861151a565b610530600480360360408110156106d157600080fd5b8101906020810181356401000000008111156106ec57600080fd5b8201836020820111156106fe57600080fd5b8035906020019184602083028401116401000000008311171561072057600080fd5b9193509150356001600160a01b0316611520565b6103bc6004803603602081101561074a57600080fd5b503561166a565b6103d86004803603602081101561076757600080fd5b5035611675565b6105306004803603602081101561078457600080fd5b503561168b565b61048461188e565b61079b61189d565b604080516001600160a01b039b8c168152998b1660208b015297909916888801526060880195909552608087019390935260a086019190915260c085015260e08401526101008301526101208201929092529051908190036101400190f35b6104846004803603602081101561081057600080fd5b5035611a1a565b6105306004803603602081101561082d57600080fd5b5035611a42565b610484611adc565b6103f2611b6b565b6103d86004803603604081101561085a57600080fd5b5080359060200135611bcc565b6103d86004803603602081101561087d57600080fd5b50356001600160a01b0316611cbe565b6108aa600480360360208110156108a357600080fd5b5035611d26565b6040805192835260208301919091528051918290030190f35b6108cb611f55565b604080519485526020850193909352838301919091526060830152519081900360800190f35b6103bc611f67565b6103d86004803603602081101561090f57600080fd5b5035611fc4565b610484612022565b6105306004803603604081101561093457600080fd5b5080359060200135612080565b6103f2612118565b6105306004803603604081101561095f57600080fd5b506001600160a01b0381351690602001351515612179565b6105306004803603604081101561098d57600080fd5b508035906020013561229c565b610530600480360360208110156109b057600080fd5b50356001600160a01b03166123c5565b610530600480360360808110156109d657600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135640100000000811115610a1157600080fd5b820183602082011115610a2357600080fd5b80359060200191846001830284011164010000000083111715610a4557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612439945050505050565b6104846124ad565b6103f260048036036020811015610aa457600080fd5b50356124d1565b61053060048036036040811015610ac157600080fd5b5080359060200135612752565b61053060048036036040811015610ae457600080fd5b5080359060200135612a41565b610530612ab9565b6103bc612b25565b6103bc60048036036040811015610b1757600080fd5b506001600160a01b0381358116916020013516612b2d565b610484612b5b565b6103bc612b6a565b61053060048036036040811015610b5557600080fd5b5080359060200135612b73565b6103d8612c04565b61053060048036036080811015610b8057600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516612c10565b61053060048036036020811015610bbe57600080fd5b5035612dd6565b7fffffffff00000000000000000000000000000000000000000000000000000000811660009081526001602052604090205460ff165b919050565b613a9881565b60078054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c925780601f10610c6757610100808354040283529160200191610c92565b820191906000526020600020905b815481529060010190602001808311610c7557829003601f168201915b5050505050905090565b6000610ca782612e61565b610ce25760405162461bcd60e51b815260040180806020018281038252602c81526020018061552e602c913960400191505060405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000908152601b60205260409020805460018201546002830154600384015460048501546005860154600687015460078801546008909801549698959794969395929491939092565b6000610d5282611a1a565b9050806001600160a01b0316836001600160a01b03161415610da55760405162461bcd60e51b81526004018080602001828103825260218152602001806155b26021913960400191505060405180910390fd5b806001600160a01b0316610db7612e6e565b6001600160a01b03161480610dd85750610dd881610dd3612e6e565b612b2d565b610e135760405162461bcd60e51b81526004018080602001828103825260388152602001806154606038913960400191505060405180910390fd5b610e1d8383612e72565b505050565b6161a881565b600d5474010000000000000000000000000000000000000000900460ff1681565b6000610e556003612ef8565b905090565b60026000541415610eb2576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055610ec081612f03565b610ec8612fac565b610eda81610ed583611a1a565b6130ef565b6000818152601b60205260409020610ef190613386565b506001600055565b60026000541415610f51576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055610f61838383613450565b5050600160005550565b60026000541415610fc3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055610fd1826134a7565b60008111611026576040805162461bcd60e51b815260206004820152600860248201527f3020616d6f756e74000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b61102e612fac565b600061103983611a1a565b905061104583826130ef565b6000838152601b6020526040902060038101541561107e576110656134b1565b6002820155600381015461107890611fc4565b60048201555b600e54611095906001600160a01b031633856134b5565b81549093506110a490846135d6565b81556011546110b390846135d6565b6011556110bf81613386565b6110ca828585613630565b6040805133815260208101859052815186927f2bc3f231118d71058e11ae6ae9f199b789d86a7012a9d45f4c2ed7d7016478c2928290030190a2505060016000555050565b61111761375e565b601a80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682151517908190556040805160ff90921615158252517f1545be19b3ba6f2e76454d1b8b59529cbbbdf7af9046fd49bd86c17314a5509d916020908290030190a150565b6001600160a01b03821660009081526002602052604081206111a390836137b9565b90505b92915050565b60026000541415611204576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260005561121282612f03565b61122c61121e83611a1a565b6001600160a01b03166137c5565b611269576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b611271612fac565b61127b82826130ef565b6000828152601b6020526040902061129290613386565b50506001600055565b600260005414156112f3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556113006137cb565b61130982612e61565b61135a576040805162461bcd60e51b815260206004820152600f60248201527f696e76616c696420746f6b656e49640000000000000000000000000000000000604482015290519081900360640190fd5b611362612fac565b61136d8260006130ef565b6000828152601b60205260408120600781015490919061138d90846135d6565b60078301819055905061139f82613386565b60408051828152905185917fe96d35ce795c2d6a754b1bf60d2ea30785c5a460b6d4bf0e5b48190e5084860d919081900360200190a2505060016000555050565b610e1d83838360405180602001604052806000815250612439565b61140361375e565b6161a882111561145a576040805162461bcd60e51b815260206004820152600860248201527f746f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b613a98811115801561148057508161147d601754836135d690919063ffffffff16565b11155b6114d1576040805162461bcd60e51b815260206004820152600860248201527f746f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60158290556018819055604080518381526020810183905281517fde0bddf440a694ffa55b73c57fcb0c32fc9794b258c4e71ca2c867f6d7137f05929181900390910190a15050565b60195481565b60026000541415611578576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055611585612fac565b8160005b8181101561165e57600085858381811061159f57fe5b9050602002013590506115b181612f03565b60006115bc82611a1a565b9050336001600160a01b0382161480156115de5750336001600160a01b038616145b806115f657506115f6816001600160a01b03166137c5565b611633576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b61163d82866130ef565b6000828152601b6020526040902061165490613386565b5050600101611589565b50506001600055505050565b60006111a682612e61565b6000806116836003846137d3565b509392505050565b600260005414156116e3576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556116f1816137ef565b6000818152601b6020908152604091829020600d5483517f6f8297af000000000000000000000000000000000000000000000000000000008152336004820152935191936001600160a01b0390911692636f8297af92602480840193829003018186803b15801561176157600080fd5b505afa158015611775573d6000803e3d6000fd5b505050506040513d602081101561178b57600080fd5b5051806117b1575061179b6134b1565b600382015460028301546117ae916135d6565b11155b806117bf57506117bf611f67565b611810576040805162461bcd60e51b815260206004820152600660248201527f6c6f636b65640000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b805460115461181f908261388e565b60115560018201546012546118339161388e565b6012556118418360006138eb565b60408051828152905184917fb073e6fbd06d7557d2c82f414fee57de28e7fb517ecc0afdd6b1fc57034a9cb8919081900360200190a2600e54610f61906001600160a01b031633836139d0565b600c546001600160a01b031681565b600080600080600080600080600080600d60009054906101000a90046001600160a01b03166001600160a01b03166306bfa938306040518263ffffffff1660e01b815260040180826001600160a01b031681526020019150506101006040518083038186803b15801561190f57600080fd5b505afa158015611923573d6000803e3d6000fd5b505050506040513d61010081101561193a57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192939495965090919250909150905050809950819350829450505050600e60009054906101000a90046001600160a01b0316600f60009054906101000a90046001600160a01b0316601060009054906101000a90046001600160a01b0316896013546014546011546012549950995099509950995099509950995090919293949596979899565b60006111a6826040518060600160405280602981526020016154c26029913960039190613a50565b611a4a61375e565b612710811115611aa1576040805162461bcd60e51b815260206004820152600860248201527f746f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60198190556040805182815290517ff31b3ecd846e2f87c144a144c5d3b86e605c7d26e102dbe4d5dbf2b220475bbb9181900360200190a150565b600d54604080517f68e5dab500000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916368e5dab5916004808301926020929190829003018186803b158015611b3a57600080fd5b505afa158015611b4e573d6000803e3d6000fd5b505050506040513d6020811015611b6457600080fd5b5051905090565b600a8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c925780601f10610c6757610100808354040283529160200191610c92565b6000811580611bd9575082155b15611be6575060006111a6565b6000611bf0611adc565b90506001600160a01b038116611c07576000611cb6565b601854601154604080517fd2eec6ff000000000000000000000000000000000000000000000000000000008152306004820152602481019390935260448301879052606483019190915260848201859052516001600160a01b0383169163d2eec6ff9160a4808301926020929190829003018186803b158015611c8957600080fd5b505afa158015611c9d573d6000803e3d6000fd5b505050506040513d6020811015611cb357600080fd5b50515b949350505050565b60006001600160a01b038216611d055760405162461bcd60e51b815260040180806020018281038252602a815260200180615498602a913960400191505060405180910390fd5b6001600160a01b03821660009081526002602052604090206111a690612ef8565b600d54604080517f06bfa93800000000000000000000000000000000000000000000000000000000815230600482015290516000928392839283928392839283926001600160a01b0316916306bfa93891602480830192610100929190829003018186803b158015611d9757600080fd5b505afa158015611dab573d6000803e3d6000fd5b505050506040513d610100811015611dc257600080fd5b506060810151608082015160a083015160c084015160e09094015160008d8152601b602052604081206001810154601354601454979d50959b5093995095975090955090929089611e116134b1565b60125491109150151589151580611e285750600089115b80611e305750815b8015611e395750805b15611edb576000611e528c611e4c6134b1565b9061388e565b90506000611e6a8c611e64848d613a5d565b906135d6565b9050611e9d611e96601254611e90670de0b6b3a764000085613a5d90919063ffffffff16565b90613ab6565b87906135d6565b95506000611eaf8c611e64858d613a5d565b9050611ed5611e96601254611e90670de0b6b3a764000085613a5d90919063ffffffff16565b95505050505b611f1286600a0154611e648860090154611e648a60050154611e4c670de0b6b3a7640000611e908c8e613a5d90919063ffffffff16565b9c50611f4386600b0154611e648860060154611e4c670de0b6b3a7640000611e90898c613a5d90919063ffffffff16565b9b505050505050505050505050915091565b60155460165460175460185490919293565b601a5460009060ff1680610e555750600d60009054906101000a90046001600160a01b03166001600160a01b031663f2c399926040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3a57600080fd5b6000611fce611f67565b15611fdb57506000610bfb565b6016541580611fe8575081155b15611ff557506000610bfb565b60165482106120075750601754610bfb565b6111a6601654611e9084601754613a5d90919063ffffffff16565b600d54604080517f8da5cb5b00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015611b3a57600080fd5b600260005414156120d8576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556120e56137cb565b6120ed612fac565b6120f88260006130ef565b6000828152601b60205260408120600781015490919061138d908461388e565b60088054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c925780601f10610c6757610100808354040283529160200191610c92565b612181612e6e565b6001600160a01b0316826001600160a01b031614156121e7576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b80600660006121f4612e6e565b6001600160a01b0390811682526020808301939093526040918201600090812091871680825291909352912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001692151592909217909155612256612e6e565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405180821515815260200191505060405180910390a35050565b6122a4612022565b6001600160a01b0316336001600160a01b031614806122cd5750600c546001600160a01b031633145b61230a576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b613a98811115801561232b57506015546018546123289083906135d6565b11155b61237c576040805162461bcd60e51b815260206004820152600860248201527f746f6f2068696768000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60168290556017819055604080518381526020810183905281517f46cf6b9b4ec75e8786b2e93d4beb426d70d56d9b0eb9bfd40e975f9dc59d7703929181900390910190a15050565b6123cd61375e565b600c80546001600160a01b0383167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517fdbebfba65bd6398fb722063efc10c99f624f9cd8ba657201056af918a676d5ee9181900360200190a150565b60026000541415612491576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556124a284848484613b1d565b505060016000555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606124dc82612e61565b6125175760405162461bcd60e51b815260040180806020018281038252602f815260200180615583602f913960400191505060405180910390fd5b60008281526009602090815260408083208054825160026001831615610100026000190190921691909104601f8101859004850282018501909352828152929091908301828280156125aa5780601f1061257f576101008083540402835291602001916125aa565b820191906000526020600020905b81548152906001019060200180831161258d57829003601f168201915b5050505050905060006125bb611b6b565b90508051600014156125cf57509050610bfb565b8151156126905780826040516020018083805190602001908083835b6020831061260a5780518252601f1990920191602091820191016125eb565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106126525780518252601f199092019160209182019101612633565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050610bfb565b8061269a85613b75565b6040516020018083805190602001908083835b602083106126cc5780518252601f1990920191602091820191016126ad565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106127145780518252601f1990920191602091820191016126f5565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405292505050919050565b600260005414156127aa576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b60026000556127b7611f67565b1561280f57801561280f576040805162461bcd60e51b815260206004820152600e60248201527f6c6f636b732064697361626c6564000000000000000000000000000000000000604482015290519081900360640190fd5b612817612fac565b600e5461282e906001600160a01b031633846134b5565b915081612882576040805162461bcd60e51b815260206004820152600b60248201527f7a65726f20616d6f756e74000000000000000000000000000000000000000000604482015290519081900360640190fd5b600061288d33613c84565b9050600061289a83611fc4565b905060006128b8612710611e906128b185836135d6565b8890613a5d565b90506040518061018001604052808681526020018281526020016128da6134b1565b815260200185815260200183815260200161290c670de0b6b3a7640000611e9060135486613a5d90919063ffffffff16565b8152602001612932670de0b6b3a7640000611e9060145486613a5d90919063ffffffff16565b81526000602080830182905260408084018790526060808501849052608080860185905260a0958601859052898552601b84529382902086518155928601516001840155908501516002830155840151600382015590830151600482015590820151600582015560c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a82015561016090910151600b909101556011546129e890866135d6565b6011556012546129f890826135d6565b6012556040805186815260208101869052815185927fc75220a9dbab7c65d9cc87d8534accb348d3f151ee2afccfb42e6ccf75556f23928290030190a250506001600055505050565b60026000541415612a99576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055612aa782612f03565b612aaf612fac565b6112928282613ca6565b60026000541415612b11576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055612b1e612fac565b6001600055565b601254151590565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b600d546001600160a01b031681565b601a5460ff1681565b60026000541415612bcb576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055612bd982612f03565b612be1612fac565b6000612bec83611a1a565b9050612bf9818484613e10565b610f6181848461408b565b6000610e55600b61415d565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612c635750600d5474010000000000000000000000000000000000000000900460ff16155b612ca0576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b600e80547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b0384811691909117909255600d8054600f80548416888616179081905560108054851688871617908190557401000000000000000000000000000000000000000092909416898616177fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1691909117909155604080517f095ea7b3000000000000000000000000000000000000000000000000000000008152928416600484015260001960248401525192169163095ea7b3916044808201926020929091908290030181600087803b158015612da457600080fd5b505af1158015612db8573d6000803e3d6000fd5b505050506040513d6020811015612dce57600080fd5b505050505050565b60026000541415612e2e576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b6002600055612e3c81612f03565b612e44612fac565b6000818152601b6020526040902060030154610ef1908290613ca6565b60006111a6600383614161565b3390565b600081815260056020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091558190612ebf82611a1a565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006111a68261415d565b612f0c81612e61565b612f475760405162461bcd60e51b815260040180806020018281038252602c815260200180615434602c913960400191505060405180910390fd5b612f51338261416d565b80612f6c575033612f6182610c9c565b6001600160a01b0316145b612fa9576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b50565b601254600d54604080517f372500ab000000000000000000000000000000000000000000000000000000008152815160009384936001600160a01b039091169263372500ab926004808301939282900301818787803b15801561300e57600080fd5b505af1158015613022573d6000803e3d6000fd5b505050506040513d604081101561303857600080fd5b508051602090910151909250905081156130725761306e61306584611e9085670de0b6b3a7640000613a5d565b601354906135d6565b6013555b801561309e5761309a61309184611e9084670de0b6b3a7640000613a5d565b601454906135d6565b6014555b7f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c29436130c76134b1565b60135460145460408051938452602084019290925282820152519081900360600190a1505050565b6000828152601b60205260408120600181015460058201546013549293919261312c9190611e4c90670de0b6b3a764000090611e90908790613a5d565b905060006131598460060154611e4c670de0b6b3a7640000611e9060145488613a5d90919063ffffffff16565b9050613163611f67565b8061318757506131716134b1565b60038501546002860154613184916135d6565b11155b1561319b5760006003850181905560048501555b60008211806131aa5750600081115b806131b9575060008460090154115b806131c85750600084600a0154115b806131d75750600084600b0154115b156133325760006131f9612710611e9060195486613a5d90919063ffffffff16565b9050600061321882611e4c88600a0154876135d690919063ffffffff16565b90506132318660090154836135d690919063ffffffff16565b91506001600160a01b03871661325b5760098601829055600a8601819055600b860183905561332f565b600060098701819055600a8701819055600b8701558115613283576132808783614194565b91505b600f5461329a906001600160a01b031688836142cc565b9050613320600d60009054906101000a90046001600160a01b03166001600160a01b0316634b57b0be6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132ed57600080fd5b505afa158015613301573d6000803e3d6000fd5b505050506040513d602081101561331757600080fd5b505188856142cc565b925061332f878983858761437f565b50505b604080516001600160a01b038716815260208101849052808201839052905187917f346d3f6bb678628c35d9b7cda69efe48648b87c82045a3a95c23dc19a902ad9b919081900360600190a2505050505050565b60006133a28260040154611e6484600001548560070154611bcc565b90506015548111156133b357506015545b6008820181905560006133d7612710611e906133cf85836135d6565b865490613a5d565b9050600060125490506133fb82611e6486600101548461388e90919063ffffffff16565b6012556001840182905560135461342190670de0b6b3a764000090611e90908590613a5d565b600585015560145461344290670de0b6b3a764000090611e90908590613a5d565b846006018190555050505050565b61346161345b612e6e565b826144d5565b61349c5760405162461bcd60e51b81526004018080602001828103825260318152602001806155d36031913960400191505060405180910390fd5b610e1d838383614571565b612f6c33826144d5565b4290565b600080846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561350557600080fd5b505afa158015613519573d6000803e3d6000fd5b505050506040513d602081101561352f57600080fd5b505190506135486001600160a01b0386168530866146bd565b6135cb81866001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561359957600080fd5b505afa1580156135ad573d6000803e3d6000fd5b505050506040513d60208110156135c357600080fd5b50519061388e565b9150505b9392505050565b6000828201838110156111a3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b613642836001600160a01b03166137c5565b15610e1d57604080513360248201526044810184905260648082018490528251808303909101815260849091018252602081810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fe2b36dc3000000000000000000000000000000000000000000000000000000001790528251808401909352600f83527f6e6f6e20696d706c656d656e746564000000000000000000000000000000000090830152600091613702916001600160a01b03871691614745565b905080806020019051602081101561371957600080fd5b5051613758576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b50505050565b613766612022565b6001600160a01b0316336001600160a01b0316146137b7576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b565b60006111a38383614754565b3b151590565b613766611adc565b60008080806137e286866147b8565b9097909650945050505050565b6137f881612e61565b6138335760405162461bcd60e51b815260040180806020018281038252602c815260200180615434602c913960400191505060405180910390fd5b61383d338261416d565b612fa9576040805162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e65720000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000828211156138e5576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b8015613968576138f9611adc565b6001600160a01b0316635485435433846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561394f57600080fd5b505af1158015613963573d6000803e3d6000fd5b505050505b6000828152601b60205260408120818155600181018290556002810182905560038101829055600481018290556005810182905560068101829055600781018290556008810182905560098101829055600a8101829055600b01556139cc82614833565b5050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610e1d908490614900565b6000611cb68484846149b1565b600082613a6c575060006111a6565b82820282848281613a7957fe5b04146111a35760405162461bcd60e51b815260040180806020018281038252602181526020018061550d6021913960400191505060405180910390fd5b6000808211613b0c576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381613b1557fe5b049392505050565b613b2e613b28612e6e565b836144d5565b613b695760405162461bcd60e51b81526004018080602001828103825260318152602001806155d36031913960400191505060405180910390fd5b61375884848484614a7b565b606081613bb6575060408051808201909152600181527f30000000000000000000000000000000000000000000000000000000000000006020820152610bfb565b8160005b8115613bce57600101600a82049150613bba565b60008167ffffffffffffffff81118015613be757600080fd5b506040519080825280601f01601f191660200182016040528015613c12576020820181803683370190505b50859350905060001982015b8315613c7b57600a840660300160f81b82828060019003935081518110613c4157fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a84049350613c1e565b50949350505050565b6000613c90600b614acd565b613c9a600b61415d565b9050610bfb8282614ad6565b613cae611f67565b15613d00576040805162461bcd60e51b815260206004820152600e60248201527f6c6f636b732064697361626c6564000000000000000000000000000000000000604482015290519081900360640190fd5b6000828152601b6020526040812060038101546002820154919291613d24916135d6565b90506000613d306134b1565b905080821115613da457613d44828261388e565b8410158015613d535750600084115b613da4576040805162461bcd60e51b815260206004820152600760248201527f696e76616c696400000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b613dae85336130ef565b60038301849055613dbe84611fc4565b600484015560028301819055613dd383613386565b60408051858152905186917f817ea9dab606b88f1d3b71d35f23e301a95c27058f35c39acf502f471feb03b8919081900360200190a25050505050565b60008111613e67576040805162461bcd60e51b8152602060048083019190915260248201527f6e756c6c00000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000828152601b6020908152604091829020600d5483517f6f8297af0000000000000000000000000000000000000000000000000000000081526001600160a01b0388811660048301529451929490911692636f8297af92602480840193829003018186803b158015613ed957600080fd5b505afa158015613eed573d6000803e3d6000fd5b505050506040513d6020811015613f0357600080fd5b505180613f295750613f136134b1565b60038201546002830154613f26916135d6565b11155b80613f375750613f37611f67565b613f88576040805162461bcd60e51b815260206004820152600660248201527f6c6f636b65640000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8054821115613fde576040805162461bcd60e51b815260206004820152600760248201527f696e76616c696400000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b613fe883856130ef565b8054613ff4908361388e565b8155601154614003908361388e565b601155805461403557600181015460125461401d9161388e565b60125560078101546140309084906138eb565b61403e565b61403e81613386565b60408051838152905184917f10b3873e32aa5edce774b02db517f3bde3429d0e97b57b74cb569ba85ce69a58919081900360200190a2600e54613758906001600160a01b031685846139d0565b61409d836001600160a01b03166137c5565b15610e1d57604080513360248201526044810184905260648082018490528251808303909101815260849091018252602081810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f34677c7a000000000000000000000000000000000000000000000000000000001790528251808401909352600f83527f6e6f6e20696d706c656d656e746564000000000000000000000000000000000090830152600091613702916001600160a01b03871691614745565b5490565b60006111a38383614af0565b600061417882611a1a565b6001600160a01b0316836001600160a01b031614905092915050565b600f54604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009283926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b1580156141fd57600080fd5b505afa158015614211573d6000803e3d6000fd5b505050506040513d602081101561422757600080fd5b5051905080831115614237578092505b82156142c457601054604080517f5a1d34dc000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03878116602483015291519190921691635a1d34dc91604480830192600092919082900301818387803b1580156142ab57600080fd5b505af11580156142bf573d6000803e3d6000fd5b505050505b509092915050565b6000808490506000816001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561432157600080fd5b505afa158015614335573d6000803e3d6000fd5b505050506040513d602081101561434b57600080fd5b505190508084111561435b578093505b8315614375576143756001600160a01b03831686866139d0565b5091949350505050565b600061438a85611a1a565b905061439e816001600160a01b03166137c5565b15612dce57604080513360248201526001600160a01b038089166044830152606482018890526084820187905260a4820186905260c48083018690528351808403909101815260e49092018352602082810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3f401123000000000000000000000000000000000000000000000000000000001790528351808501909452600f84527f6e6f6e20696d706c656d656e746564000000000000000000000000000000000090840152600092614476929185169190614745565b905080806020019051602081101561448d57600080fd5b50516144cc576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b50505050505050565b60006144e082612e61565b61451b5760405162461bcd60e51b815260040180806020018281038252602c815260200180615434602c913960400191505060405180910390fd5b600061452683611a1a565b9050806001600160a01b0316846001600160a01b031614806145615750836001600160a01b031661455684610c9c565b6001600160a01b0316145b80611cb65750611cb68185612b2d565b826001600160a01b031661458482611a1a565b6001600160a01b0316146145c95760405162461bcd60e51b815260040180806020018281038252602981526020018061555a6029913960400191505060405180910390fd5b6001600160a01b03821661460e5760405162461bcd60e51b81526004018080602001828103825260248152602001806153ea6024913960400191505060405180910390fd5b614619838383614b08565b614624600082612e72565b6001600160a01b03831660009081526002602052604090206146469082614b6b565b506001600160a01b03821660009081526002602052604090206146699082614b77565b5061467660038284614b83565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052613758908590614900565b6060611cb68484600085614b99565b815460009082106147965760405162461bcd60e51b81526004018080602001828103825260228152602001806153966022913960400191505060405180910390fd5b8260000182815481106147a557fe5b9060005260206000200154905092915050565b8154600090819083106147fc5760405162461bcd60e51b81526004018080602001828103825260228152602001806154eb6022913960400191505060405180910390fd5b600084600001848154811061480d57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b600061483e82611a1a565b905061484c81600084614b08565b614857600083612e72565b60008281526009602052604090205460026000196101006001841615020190911604156148955760008281526009602052604081206148959161533d565b6001600160a01b03811660009081526002602052604090206148b79083614b6b565b506148c3600383614cf4565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000614955826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166147459092919063ffffffff16565b805190915015610e1d5780806020019051602081101561497457600080fd5b5051610e1d5760405162461bcd60e51b815260040180806020018281038252602a815260200180615604602a913960400191505060405180910390fd5b60008281526001840160205260408120548281614a4c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614a115781810151838201526020016149f9565b50505050905090810190601f168015614a3e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110614a5f57fe5b9060005260206000209060020201600101549150509392505050565b614a86848484614571565b614a9284848484614d00565b6137585760405162461bcd60e51b81526004018080602001828103825260328152602001806153b86032913960400191505060405180910390fd5b80546001019055565b6139cc828260405180602001604052806000815250614edc565b60009081526001919091016020526040902054151590565b614b1a836001600160a01b03166137c5565b1580614b2e5750336001600160a01b038416145b610e1d576040805162461bcd60e51b81526020600482015260096024820152682327a92124a22222a760b91b604482015290519081900360640190fd5b60006111a38383614f2e565b60006111a38383614ff4565b6000611cb684846001600160a01b03851661503e565b606082471015614bda5760405162461bcd60e51b815260040180806020018281038252602681526020018061540e6026913960400191505060405180910390fd5b614be3856137c5565b614c34576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b60208310614c725780518252601f199092019160209182019101614c53565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614cd4576040519150601f19603f3d011682016040523d82523d6000602084013e614cd9565b606091505b5091509150614ce98282866150d5565b979650505050505050565b60006111a3838361513b565b6000614d14846001600160a01b03166137c5565b614d2057506001611cb6565b6000614e717f150b7a0200000000000000000000000000000000000000000000000000000000614d4e612e6e565b88878760405160240180856001600160a01b03168152602001846001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614db5578181015183820152602001614d9d565b50505050905090810190601f168015614de25780820380516001836020036101000a031916815260200191505b5095505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518060600160405280603281526020016153b8603291396001600160a01b0388169190614745565b90506000818060200190516020811015614e8a57600080fd5b50517fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001492505050949350505050565b614ee6838361520f565b614ef36000848484614d00565b610e1d5760405162461bcd60e51b81526004018080602001828103825260328152602001806153b86032913960400191505060405180910390fd5b60008181526001830160205260408120548015614fea5783546000198083019190810190600090879083908110614f6157fe5b9060005260206000200154905080876000018481548110614f7e57fe5b600091825260208083209091019290925582815260018981019092526040902090840190558654879080614fae57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506111a6565b60009150506111a6565b60006150008383614af0565b615036575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556111a6565b5060006111a6565b6000828152600184016020526040812054806150a35750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556135cf565b828560000160018303815481106150b657fe5b90600052602060002090600202016001018190555060009150506135cf565b606083156150e45750816135cf565b8251156150f45782518084602001fd5b60405162461bcd60e51b8152602060048201818152845160248401528451859391928392604401919085019080838360008315614a115781810151838201526020016149f9565b60008181526001830160205260408120548015614fea578354600019808301919081019060009087908390811061516e57fe5b906000526020600020906002020190508087600001848154811061518e57fe5b6000918252602080832084546002909302019182556001938401549184019190915583548252898301905260409020908401905586548790806151cd57fe5b60008281526020808220600260001990940193840201828155600190810183905592909355888152898201909252604082209190915594506111a69350505050565b6001600160a01b03821661526a576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b61527381612e61565b156152c5576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b6152d160008383614b08565b6001600160a01b03821660009081526002602052604090206152f39082614b77565b5061530060038284614b83565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805460018160011615610100020316600290046000825580601f106153635750612fa9565b601f016020900490600052602060002090810190612fa991905b80821115615391576000815560010161537d565b509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732313a207472616e7366657220746f20746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c4552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e6473536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a26469706673582212202c7ca06574085bcd94625ef70f850fd37be79d0e0168be91a51d03ae3decc68164736f6c63430007060033