[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "amount0Earned", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1Earned", "type": "uint256" } ], "name": "FeesEarned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint160", "name": "sqrtPriceX96", "type": "uint160" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount1", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalSupply", "type": "uint256" } ], "name": "Snapshot", "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": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STEER_FRACTION_OF_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "TOTAL_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedSteerFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedSteerFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedStrategistFees0", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "accruedStrategistFees1", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Desired", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Used", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Used", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" } ], "name": "emergencyBurn", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getPositions", "outputs": [ { "internalType": "int24[]", "name": "", "type": "int24[]" }, { "internalType": "int24[]", "name": "", "type": "int24[]" }, { "internalType": "uint16[]", "name": "", "type": "uint16[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getRoleMember", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleMemberCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTotalAmounts", "outputs": [ { "internalType": "uint256", "name": "total0", "type": "uint256" }, { "internalType": "uint256", "name": "total1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_vaultManager", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "_steer", "type": "address" }, { "internalType": "bytes", "name": "_params", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxTickChange", "outputs": [ { "internalType": "int24", "name": "", "type": "int24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "poke", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "pool", "outputs": [ { "internalType": "contract ISupV3Pool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "steerCollectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "strategistCollectFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "supV3MintCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "int256", "name": "amount0Wanted", "type": "int256" }, { "internalType": "int256", "name": "amount1Wanted", "type": "int256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "supV3SwapCallback", "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": "totalWeight", "type": "uint256" }, { "components": [ { "internalType": "int24[]", "name": "lowerTick", "type": "int24[]" }, { "internalType": "int24[]", "name": "upperTick", "type": "int24[]" }, { "internalType": "uint16[]", "name": "relativeWeight", "type": "uint16[]" } ], "internalType": "struct SupSwapMultiPositionLiquidityManager.LiquidityPositions", "name": "newPositions", "type": "tuple" }, { "internalType": "bytes", "name": "timeSensitiveData", "type": "bytes" } ], "name": "tend", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "token0", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "token1", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "twapInterval", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "uint256", "name": "amount0Min", "type": "uint256" }, { "internalType": "uint256", "name": "amount1Min", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "amount0", "type": "uint256" }, { "internalType": "uint256", "name": "amount1", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b50600054610100900460ff16806200002e57506200002e620000c0565b806200003d575060005460ff16155b6200007a5760405162461bcd60e51b815260040180806020018281038252602e81526020018062005dc2602e913960400191505060405180910390fd5b600054610100900460ff16158015620000a6576000805460ff1961ff0019909116610100171660011790555b8015620000b9576000805461ff00191690555b50620000e4565b6000620000d830620000de60201b620020611760201c565b15905090565b3b151590565b615cce80620000f46000396000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80635c975abb1161015c578063a217fddf116100ce578063ca15c87311610087578063ca15c8731461053d578063d21220a714610550578063d331bef714610558578063d547741f1461056b578063dd62ed3e1461057e578063ef94c279146105915761028a565b8063a217fddf146104d3578063a457c2d7146104db578063a9059cbb146104ee578063abbffcb914610501578063be83e10f14610522578063c4a7761e146105355761028a565b80638456cb59116101205780638456cb59146104775780638ea234cb1461047f5780638f747bb8146104925780639010d07c146104a557806391d14854146104b857806395d89b41146104cb5761028a565b80635c975abb1461042a57806363db7eae1461043257806365d1567b1461043a57806370a082311461044d57806380275860146104605761028a565b8063246581f711610200578063365d0ed7116101b9578063365d0ed7146103c8578063366e897b146103ea57806339509351146103f25780633c1d5df0146104055780633f2218f11461041a5780633f4ba83a146104225761028a565b8063246581f714610354578063248a9ca3146103675780632b528d331461037a5780632f2ff15d1461038d578063313ce567146103a057806336568abe146103b55761028a565b80631053f871116102525780631053f8711461030a57806316f0115b1461031f57806318160ddd14610327578063181783581461032f5780631c1f19361461033957806323b872dd146103415761028a565b806301ffc9a71461028f57806302bcd6ca146102b857806306fdde03146102cd578063095ea7b3146102e25780630dfe1681146102f5575b600080fd5b6102a261029d366004615093565b610599565b6040516102af9190615729565b60405180910390f35b6102c0610622565b6040516102af9190615734565b6102d5610628565b6040516102af9190615786565b6102a26102f0366004614f29565b6106be565b6102fd6106dc565b6040516102af919061557e565b6103126106eb565b6040516102af9190615752565b6102fd6106fb565b6102c061070a565b610337610710565b005b6102c06109b9565b6102a261034f366004614ee9565b6109bf565b610337610362366004614e3e565b610a47565b6102c0610375366004615036565b610ded565b61033761038836600461545c565b610e02565b61033761039b36600461504e565b610f08565b6103a8610f6f565b6040516102af91906158fe565b6103376103c336600461504e565b610f78565b6103db6103d63660046154c9565b610fd9565b6040516102af939291906158d7565b6102c06111f8565b6102a2610400366004614f29565b6111fe565b61040d61124c565b6040516102af91906158ed565b6102c061125f565b610337611265565b6102a26112a5565b6102c06112ae565b610337610448366004615128565b6112b4565b6102c061045b366004614d58565b6112dc565b6104686112f7565b6040516102af93929190615673565b6103376114a2565b61033761048d36600461545c565b6114df565b6103376104a0366004615377565b61157e565b6102fd6104b3366004615072565b6118ed565b6102a26104c636600461504e565b611905565b6102d561191d565b6102c061197e565b6102a26104e9366004614f29565b611983565b6102a26104fc366004614f29565b6119eb565b61051461050f3660046150bb565b6119ff565b6040516102af9291906158c9565b610337610530366004615128565b611b5b565b610514611bb2565b6102c061054b366004615036565b611ec0565b6102fd611ed7565b610514610566366004615489565b611ee6565b61033761057936600461504e565b611fd7565b6102c061058c366004614e06565b612030565b6102c061205b565b60c95460405163ab8b2a7360e01b81526000916001600160a01b03169063ab8b2a73906105ca90859060040161573d565b60206040518083038186803b1580156105e257600080fd5b505afa1580156105f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061a919061501c565b90505b919050565b60cd5481565b60368054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b820191906000526020600020905b81548152906001019060200180831161069757829003601f168201915b5050505050905090565b60006106d26106cb612067565b848461206b565b5060015b92915050565b60ca546001600160a01b031681565b60d054600160a01b900460020b81565b60d0546001600160a01b031681565b60355490565b6040805160f9805460806020820284018101909452606083018181526000948492849184018282801561078857602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116107515790505b505050505081526020016001820180548060200260200160405190810160405280929190818152602001828054801561080657602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116107cf5790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561088657602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff168152602001906002019060208260010104928301926001038202915080841161084d5790505b505050919092525050815151919250600090505b8181146109b45760006108db846000015183815181106108b657fe5b6020026020010151856020015184815181106108ce57fe5b6020026020010151612157565b5050505090506000816001600160801b031611156109ab5760d054845180516001600160a01b039092169163a34123a791908590811061091757fe5b60200260200101518660200151858151811061092f57fe5b602002602001015160006040518463ffffffff1660e01b815260040161095793929190615760565b6040805180830381600087803b15801561097057600080fd5b505af1158015610984573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109a89190615105565b50505b5060010161089a565b505050565b611a0b81565b60006109cc8484846121fd565b610a3c846109d8612067565b610a3785604051806060016040528060288152602001615b69602891396001600160a01b038a16600090815260346020526040812090610a16612067565b6001600160a01b03168152602081019190915260400160002054919061235a565b61206b565b5060015b9392505050565b600054610100900460ff1680610a605750610a606123f1565b80610a6e575060005460ff16155b610aa95760405162461bcd60e51b815260040180806020018281038252602e815260200180615b1a602e913960400191505060405180910390fd5b600054610100900460ff16158015610ad4576000805460ff1961ff0019909116610100171660011790555b600080600080600086806020019051810190610af09190614d90565b9450945094509450945060098260020b138015610b1157506107d18260020b125b610b1a57600080fd5b60058163ffffffff16118015610b3757506102588163ffffffff16105b610b4057600080fd5b836001600160a01b0316856001600160a01b031610610b7a5760405162461bcd60e51b8152600401610b719061581c565b60405180910390fd5b60c98054336001600160a01b03199182161790915560ca805482166001600160a01b038881169190911790915560cb8054909216908616179055604051630b4c774160e11b815260009073a0b018fe0d00ed075fb9b0eee26d25cf72e1f69390631698ee8290610bf290899089908990600401615592565b60206040518083038186803b158015610c0a57600080fd5b505afa158015610c1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c429190614d74565b90506001600160a01b038116610c5757600080fd5b60d080546001600160a01b0319166001600160a01b03831617905560408051633811936960e01b81529051600091610cf09133916338119369916004808301926020929190829003018186803b158015610cb057600080fd5b505afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce8919061535f565b600101612402565b9050610d3a81604051602001610d069190615544565b60405160208183030381529060405282604051602001610d269190615544565b6040516020818303038152906040526124dd565b610d42612592565b610d4a612643565b610d62600080516020615c258339815191528b610f61565b610d8c7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088d610f61565b505060d0805463ffffffff909216600160b81b0263ffffffff60b81b1960029490940b62ffffff16600160a01b0262ffffff60a01b199093169290921792909216179055505081159050610de6576000805461ff00191690555b5050505050565b60009081526097602052604090206002015490565b610e0a6112a5565b15610e4f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60c95460405163015a1d6760e31b81526001600160a01b0390911690630ad0eb3890610e7f90309060040161557e565b60206040518083038186803b158015610e9757600080fd5b505afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf9190614d74565b6001600160a01b0316336001600160a01b031614610eec57600080fd5b610efd8160ce5460cf5486866126e0565b60cf5560ce55505050565b600082815260976020526040902060020154610f26906104c6612067565b610f615760405162461bcd60e51b815260040180806020018281038252602f815260200180615a2b602f913960400191505060405180910390fd5b610f6b8282612752565b5050565b60385460ff1690565b610f80612067565b6001600160a01b0316816001600160a01b031614610fcf5760405162461bcd60e51b815260040180806020018281038252602f815260200180615c6a602f913960400191505060405180910390fd5b610f6b82826127bb565b6000806000610fe66112a5565b1561102b576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60c9546040516367a44ca360e01b81526000916001600160a01b0316906367a44ca39061105c90309060040161557e565b60006040518083038186803b15801561107457600080fd5b505afa158015611088573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110b09190810190615179565b51905060018160048111156110c157fe5b14806110d8575060038160048111156110d657fe5b145b6110f45760405162461bcd60e51b8152600401610b71906157ef565b6110fc610710565b6111068989612824565b919550935091508361111757600080fd5b868310156111375760405162461bcd60e51b8152600401610b71906157d4565b858210156111575760405162461bcd60e51b8152600401610b7190615852565b82156111755760ca54611175906001600160a01b031633308661294d565b81156111935760cb54611193906001600160a01b031633308561294d565b61119d85856129a7565b846001600160a01b0316336001600160a01b03167f4e2ca0515ed1aef1395f66b5303bb5d6f1bf9d61a353fa53f73f8ac9973fa9f68686866040516111e4939291906158d7565b60405180910390a350955095509592505050565b60cf5481565b60006106d261120b612067565b84610a37856034600061121c612067565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490612a99565b60d054600160b81b900463ffffffff1681565b60ce5481565b600080516020615c2583398151915261127e8133611905565b61129a5760405162461bcd60e51b8152600401610b719061586d565b6112a2612af3565b50565b60655460ff1690565b6105dc81565b60d0546001600160a01b031633146112cb57600080fd5b6112d6338585612b93565b50505050565b6001600160a01b031660009081526033602052604090205490565b6060806060600060f96040518060600160405290816000820180548060200260200160405190810160405280929190818152602001828054801561138057602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116113495790505b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156113fe57602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116113c75790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561147e57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116114455790505b50505091909252505081516020830151604090930151909792965094509092505050565b600080516020615c258339815191526114bb8133611905565b6114d75760405162461bcd60e51b8152600401610b719061586d565b6112a2612bcd565b600080516020615c258339815191526114f88133611905565b6115145760405162461bcd60e51b8152600401610b719061586d565b61151c6112a5565b15611561576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6115728260cc5460cd5487876126e0565b60cd5560cc5550505050565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086115a98133611905565b6115c55760405162461bcd60e51b8152600401610b719061586d565b6115cd6112a5565b15611612576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6000806116218486018661504e565b9150915060008060d060009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561167657600080fd5b505afa15801561168a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ae91906152cc565b5050505050915091506116c081612c50565b6116cb600180612dbe565b5050875151156117285787518051899160f9916116ef91839160209091019061497e565b506020828101518051611708926001850192019061497e565b5060408201518051611724916002840191602090910190614a2d565b5050505b831561185a5760d05460008513906001600160a01b031663128acb083083806117545788600003611756565b885b886040518563ffffffff1660e01b815260040161177694939291906155ba565b6040805180830381600087803b15801561178f57600080fd5b505af11580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c79190615105565b505060d060009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561181757600080fd5b505afa15801561182b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184f91906152cc565b509497505050505050505b6000611864613250565b905060006118706132e8565b90507f2fd4737bac0995700ade358ae308c92f20ee63884dfbe658bf55d2f99f60f07784838361189e61070a565b6040516118ae94939291906158a3565b60405180910390a18a156118e0576118e0846118cd848e612710613325565b6118da848f612710613325565b896133d4565b5050505050505050505050565b6000828152609760205260408120610a409083613947565b6000828152609760205260408120610a409083613953565b60378054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156106b45780601f10610689576101008083540402835291602001916106b4565b600081565b60006106d2611990612067565b84610a3785604051806060016040528060258152602001615c4560259139603460006119ba612067565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919061235a565b60006106d26119f8612067565b84846121fd565b600080600080516020615c25833981519152611a1b8133611905565b611a375760405162461bcd60e51b8152600401610b719061586d565b60d05460405163a34123a760e01b81526001600160a01b039091169063a34123a790611a6b90899089908990600401615760565b6040805180830381600087803b158015611a8457600080fd5b505af1158015611a98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abc9190615105565b60d0546040516309e3d67b60e31b81529295509093506001600160a01b031690634f1eb3d890611aff9030908a908a906001600160801b03908190600401615636565b6040805180830381600087803b158015611b1857600080fd5b505af1158015611b2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b50919061523d565b505050935093915050565b60d0546001600160a01b03163314611b7257600080fd5b6000841315611b925760ca54611b92906001600160a01b03163386613968565b60008313156112d65760cb546112d6906001600160a01b03163385613968565b600080611bbd613250565b9150611bc76132e8565b9050600080600060f960405180606001604052908160008201805480602002602001604051908101604052809291908181526020018280548015611c5057602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411611c195790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611cce57602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411611c975790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015611d4e57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411611d155790505b5050505050815250509050600060d060009054906101000a90046001600160a01b03166001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015611da957600080fd5b505afa158015611dbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de191906152cc565b5050865151949550600093505050505b818114611e8057600080600080611e378789600001518781518110611e1257fe5b60200260200101518a602001518881518110611e2a57fe5b60200260200101516139ba565b92965090945092509050611e4b8c85612a99565b9b50611e578b84612a99565b9a50611e638a83612a99565b9950611e6f8982612a99565b985050505050806001019050611df1565b50611e9a611e9386612134612710613325565b8890612a99565b9650611eb5611eae85612134612710613325565b8790612a99565b955050505050509091565b600081815260976020526040812061061a90613a11565b60cb546001600160a01b031681565b60008060008611611ef657600080fd5b6000611f0061070a565b9050611f0c3388613a1c565b611f1e611f17613250565b8883613325565b9250611f2b611f176132e8565b9150600080611f3a8984612dbe565b9092509050611f498583612a99565b9450611f558482612a99565b935087851015611f6457600080fd5b86841015611f7157600080fd5b611f7c868686612b93565b856001600160a01b0316336001600160a01b03167febff2602b3f468259e1e99f613fed6691f3a6526effe6ef3e768ba7ae7a36c4f8b8888604051611fc3939291906158d7565b60405180910390a350505094509492505050565b600082815260976020526040902060020154611ff5906104c6612067565b610fcf5760405162461bcd60e51b8152600401808060200182810382526030815260200180615aea6030913960400191505060405180910390fd5b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b60cc5481565b3b151590565b3390565b6001600160a01b0383166120b05760405162461bcd60e51b8152600401808060200182810382526024815260200180615bd76024913960400191505060405180910390fd5b6001600160a01b0382166120f55760405162461bcd60e51b8152600401808060200182810382526022815260200180615a7c6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260346020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60d05460009081908190819081906001600160a01b031663514ea4bf61217e308a8a613b18565b6040518263ffffffff1660e01b815260040161219a9190615734565b60a06040518083038186803b1580156121b257600080fd5b505afa1580156121c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ea919061526b565b939b929a50909850965090945092505050565b6001600160a01b0383166122425760405162461bcd60e51b8152600401808060200182810382526025815260200180615bb26025913960400191505060405180910390fd5b6001600160a01b0382166122875760405162461bcd60e51b8152600401808060200182810382526023815260200180615a086023913960400191505060405180910390fd5b6122928383836109b4565b6122cf81604051806060016040528060268152602001615a9e602691396001600160a01b038616600090815260336020526040902054919061235a565b6001600160a01b0380851660009081526033602052604080822093909355908416815220546122fe9082612a99565b6001600160a01b0380841660008181526033602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600081848411156123e95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123ae578181015183820152602001612396565b50505050905090810190601f1680156123db5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60006123fc30612061565b15905090565b60608161242757506040805180820190915260018152600360fc1b602082015261061d565b8160005b811561243f57600101600a8204915061242b565b60008167ffffffffffffffff8111801561245857600080fd5b506040519080825280601f01601f191660200182016040528015612483576020820181803683370190505b50859350905060001982015b83156124d457600a840660300160f81b828280600190039350815181106124b257fe5b60200101906001600160f81b031916908160001a905350600a8404935061248f565b50949350505050565b600054610100900460ff16806124f657506124f66123f1565b80612504575060005460ff16155b61253f5760405162461bcd60e51b815260040180806020018281038252602e815260200180615b1a602e913960400191505060405180910390fd5b600054610100900460ff1615801561256a576000805460ff1961ff0019909116610100171660011790555b612572613b6e565b61257c8383613c0e565b80156109b4576000805461ff0019169055505050565b600054610100900460ff16806125ab57506125ab6123f1565b806125b9575060005460ff16155b6125f45760405162461bcd60e51b815260040180806020018281038252602e815260200180615b1a602e913960400191505060405180910390fd5b600054610100900460ff1615801561261f576000805460ff1961ff0019909116610100171660011790555b612627613b6e565b61262f613ce6565b80156112a2576000805461ff001916905550565b600054610100900460ff168061265c575061265c6123f1565b8061266a575060005460ff16155b6126a55760405162461bcd60e51b815260040180806020018281038252602e815260200180615b1a602e913960400191505060405180910390fd5b600054610100900460ff161580156126d0576000805460ff1961ff0019909116610100171660011790555b6126d8613b6e565b61262f613b6e565b6000808315612712576126f38685613d91565b60ca5490925061270d906001600160a01b03168886613968565b612716565b8591505b8215612745576127268584613d91565b60cb54909150612740906001600160a01b03168885613968565b612748565b50835b9550959350505050565b600082815260976020526040902061276a9082613dee565b15610f6b57612777612067565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526097602052604090206127d39082613e03565b15610f6b576127e0612067565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b60008060008061283261070a565b905060008061283f611bb2565b9150915082600014806128525750600082115b8061285d5750600081115b61286357fe5b8261287f578794508693506128788585613e18565b9550612943565b816128a35761288f878483613325565b955061289c868285613e2f565b9350612943565b806128c7576128b3888484613325565b95506128c0868385613e2f565b9450612943565b60006128e56128d68a84613e69565b6128e08a86613e69565b613ec2565b9050600081116129075760405162461bcd60e51b8152600401610b71906157b9565b81600182038161291357fe5b04600101955082600182038161292557fe5b04600101945081612937828686613325565b8161293e57fe5b049650505b5050509250925092565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526112d6908590613ed1565b6001600160a01b038216612a02576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b612a0e600083836109b4565b603554612a1b9082612a99565b6035556001600160a01b038216600090815260336020526040902054612a419082612a99565b6001600160a01b03831660008181526033602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600082820183811015610a40576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b612afb6112a5565b612b43576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6065805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612b76612067565b604080516001600160a01b039092168252519081900360200190a1565b8115612bb05760ca54612bb0906001600160a01b03168484613968565b80156109b45760cb546109b4906001600160a01b03168483613968565b612bd56112a5565b15612c1a576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612b76612067565b60d05460408051600280825260608201835263ffffffff600160b81b85041693600160a01b9004810b9260009291906020830190803683370190505090508281600081518110612c9c57fe5b63ffffffff9092166020928302919091019091015260d05460405163883bdbfd60e01b81526000916001600160a01b03169063883bdbfd90612ce29085906004016156df565b60006040518083038186803b158015612cfa57600080fd5b505afa158015612d0e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612d369190810190614f54565b50905060008463ffffffff1682600081518110612d4f57fe5b602002602001015183600181518110612d6457fe5b60200260200101510360060b81612d7757fe5b05905083810160020b8660020b13158015612d9a575083810360020b8660020b12155b612db65760405162461bcd60e51b8152600401610b7190615888565b505050505050565b600080600060f960405180606001604052908160008201805480602002602001604051908101604052809291908181526020018280548015612e4557602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411612e0e5790505b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015612ec357602002820191906000526020600020906000905b82829054906101000a900460020b60020b81526020019060030190602082600201049283019260010382029150808411612e8c5790505b5050505050815260200160028201805480602002602001604051908101604052809291908181526020018280548015612f4357602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff1681526020019060020190602082600101049283019260010382029150808411612f0a5790505b505050919092525050815151919250600091829150815b81811461313657600085600001518281518110612f7357fe5b60200260200101519050600086602001518381518110612f8f57fe5b60200260200101519050600080612fa68484612157565b505050509050612fc0816001600160801b03168e8e613325565b9150506001600160801b038116156131285760d05460405163a34123a760e01b815260009182916001600160a01b039091169063a34123a79061300b90889088908890600401615760565b6040805180830381600087803b15801561302457600080fd5b505af1158015613038573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061305c9190615105565b60d0546040516309e3d67b60e31b815292945090925060009182916001600160a01b031690634f1eb3d8906130a49030908b908b906001600160801b03908190600401615636565b6040805180830381600087803b1580156130bd57600080fd5b505af11580156130d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f5919061523d565b6001600160801b031691506001600160801b03169150838e019d50828d019c508382038b019a508281038a019950505050505b505050806001019050612f5a565b507fc28ad1de9c0c32e5394ba60323e44d8d9536312236a47231772e448a3e49de4283836040516131689291906158c9565b60405180910390a182156131c7576000613187846105dc612710613325565b90508084039350600061319f82611a0b612710613325565b60cc549091506131af9082612a99565b60cc5560ce546131c190828403612a99565b60ce5550505b811561321e5760006131de836105dc612710613325565b9050808303925060006131f682611a0b612710613325565b60cd549091506132069082612a99565b60cd5560cf5461321890828403612a99565b60cf5550505b61322c611eae848a8a613325565b955061324361323c838a8a613325565b8690612a99565b9450505050509250929050565b60ce5460cc5460ca546040516370a0823160e01b81526000936132e39301916001600160a01b0316906370a082319061328d90309060040161557e565b60206040518083038186803b1580156132a557600080fd5b505afa1580156132b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132dd919061535f565b90613d91565b905090565b60cf5460cd5460cb546040516370a0823160e01b81526000936132e39301916001600160a01b0316906370a082319061328d90309060040161557e565b600080806000198587098686029250828110908390030390508061335b576000841161335057600080fd5b508290049050610a40565b80841161336757600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6040805160f9805460806020820284018101909452606083018181526000948492849184018282801561344c57602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116134155790505b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156134ca57602002820191906000526020600020906000905b82829054906101000a900460020b60020b815260200190600301906020826002010492830192600103820291508084116134935790505b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561354a57602002820191906000526020600020906000905b82829054906101000a900461ffff1661ffff16815260200190600201906020826001010492830192600103820291508084116135115790505b5050505050815250509050606080600080600085600001515190508067ffffffffffffffff8111801561357c57600080fd5b506040519080825280602002602001820160405280156135a6578160200160208202803683370190505b5094508067ffffffffffffffff811180156135c057600080fd5b506040519080825280602002602001820160405280156135ea578160200160208202803683370190505b50935060005b81811461372e576001811061368457865180518290811061360d57fe5b602002602001015160020b8760000151600183038151811061362b57fe5b602002602001015160020b131561364157600080fd5b8660200151818151811061365157fe5b602002602001015160020b8760200151600183038151811061366f57fe5b602002602001015160020b1261368457600080fd5b6000806136e98d6136ab8b60000151868151811061369e57fe5b6020026020010151613f82565b6136be8c60200151878151811061369e57fe5b8c6040015187815181106136ce57fe5b602002602001015161ffff16670de0b6b3a7640000026142b4565b91509150818884815181106136fa57fe5b6020026020010181815250508087848151811061371357fe5b602090810291909101015294019392909201916001016135f0565b5060005b8181146138cb5760008085156137635761376088848151811061375157fe5b60200260200101518d88613325565b91505b841561378a5761378787848151811061377857fe5b60200260200101518c87613325565b90505b60006137bd8e6137a38c60000151878151811061369e57fe5b6137b68d60200151888151811061369e57fe5b8686614350565b90506001600160801b038116156138bd5760d05460f980546001600160a01b0390921691633c8a7d8d913091889081106137f357fe5b90600052602060002090600a91828204019190066003029054906101000a900460020b60f9600101888154811061382657fe5b90600052602060002090600a91828204019190066003029054906101000a900460020b856040518563ffffffff1660e01b815260040161386994939291906155f4565b6040805180830381600087803b15801561388257600080fd5b505af1158015613896573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ba9190615105565b50505b505050806001019050613732565b50600087131561390657606460058902046138e46132e8565b106139015760405162461bcd60e51b8152600401610b7190615837565b61393b565b600087121561393b57606460058a020461391e613250565b1061393b5760405162461bcd60e51b8152600401610b7190615837565b50505050505050505050565b6000610a408383614414565b6000610a40836001600160a01b038416614478565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526109b4908490613ed1565b60008060008060006139cc8787612157565b6001600160801b0391821697501694509192506139ff91508990506139f089613f82565b6139f989613f82565b846142b4565b80955081965050505093509350935093565b600061061a82614490565b6001600160a01b038216613a615760405162461bcd60e51b8152600401808060200182810382526021815260200180615b916021913960400191505060405180910390fd5b613a6d826000836109b4565b613aaa81604051806060016040528060228152602001615a5a602291396001600160a01b038516600090815260336020526040902054919061235a565b6001600160a01b038316600090815260336020526040902055603554613ad09082613d91565b6035556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051808403601a018152603a9093019052815191012090565b600054610100900460ff1680613b875750613b876123f1565b80613b95575060005460ff16155b613bd05760405162461bcd60e51b815260040180806020018281038252602e815260200180615b1a602e913960400191505060405180910390fd5b600054610100900460ff1615801561262f576000805460ff1961ff00199091166101001716600117905580156112a2576000805461ff001916905550565b600054610100900460ff1680613c275750613c276123f1565b80613c35575060005460ff16155b613c705760405162461bcd60e51b815260040180806020018281038252602e815260200180615b1a602e913960400191505060405180910390fd5b600054610100900460ff16158015613c9b576000805460ff1961ff0019909116610100171660011790555b8251613cae906036906020860190614ac4565b508151613cc2906037906020850190614ac4565b506038805460ff1916601217905580156109b4576000805461ff0019169055505050565b600054610100900460ff1680613cff5750613cff6123f1565b80613d0d575060005460ff16155b613d485760405162461bcd60e51b815260040180806020018281038252602e815260200180615b1a602e913960400191505060405180910390fd5b600054610100900460ff16158015613d73576000805460ff1961ff0019909116610100171660011790555b6065805460ff1916905580156112a2576000805461ff001916905550565b600082821115613de8576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000610a40836001600160a01b038416614494565b6000610a40836001600160a01b0384166144de565b600081831015613e285781610a40565b5090919050565b6000613e3c848484613325565b905060008280613e4857fe5b8486091115610a40576000198110613e5f57600080fd5b6001019392505050565b600082613e78575060006106d6565b82820282848281613e8557fe5b0414610a405760405162461bcd60e51b8152600401808060200182810382526021815260200180615b486021913960400191505060405180910390fd5b6000818310613e285781610a40565b6000613f26826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166145a49092919063ffffffff16565b8051909150156109b457808060200190516020811015613f4557600080fd5b50516109b45760405162461bcd60e51b815260040180806020018281038252602a815260200180615bfb602a913960400191505060405180910390fd5b60008060008360020b12613f99578260020b613fa1565b8260020b6000035b9050620d89e8811115613fdf576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216613ff357600160801b614005565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615614039576ffff97272373d413259a46990580e213a0260801c5b6004821615614058576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615614077576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615614096576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156140b5576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156140d4576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156140f3576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615614113576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615614133576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615614153576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615614173576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615614193576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156141b3576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156141d3576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156141f3576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615614214576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615614234576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615614253576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615614270576b048a170391f7dc42444e8fa20260801c5b60008460020b131561428b57806000198161428757fe5b0490505b64010000000081061561429f5760016142a2565b60005b60ff16602082901c0192505050919050565b600080836001600160a01b0316856001600160a01b031611156142d5579293925b846001600160a01b0316866001600160a01b031611614300576142f98585856145bb565b9150614347565b836001600160a01b0316866001600160a01b03161015614339576143258685856145bb565b9150614332858785614624565b9050614347565b614344858585614624565b90505b94509492505050565b6000836001600160a01b0316856001600160a01b03161115614370579293925b846001600160a01b0316866001600160a01b03161161439b57614394858585614667565b905061440b565b836001600160a01b0316866001600160a01b031610156143fd5760006143c2878686614667565b905060006143d18789866146ca565b9050806001600160801b0316826001600160801b0316106143f257806143f4565b815b9250505061440b565b6144088585846146ca565b90505b95945050505050565b815460009082106144565760405162461bcd60e51b81526004018080602001828103825260228152602001806159e66022913960400191505060405180910390fd5b82600001828154811061446557fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b60006144a08383614478565b6144d6575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556106d6565b5060006106d6565b6000818152600183016020526040812054801561459a578354600019808301919081019060009087908390811061451157fe5b906000526020600020015490508087600001848154811061452e57fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061455e57fe5b600190038181906000526020600020016000905590558660010160008781526020019081526020016000206000905560019450505050506106d6565b60009150506106d6565b60606145b38484600085614707565b949350505050565b6000826001600160a01b0316846001600160a01b031611156145db579192915b836001600160a01b0316614614606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316614862565b8161461b57fe5b04949350505050565b6000826001600160a01b0316846001600160a01b03161115614644579192915b6145b3826001600160801b03168585036001600160a01b0316600160601b614862565b6000826001600160a01b0316846001600160a01b03161115614687579192915b60006146aa856001600160a01b0316856001600160a01b0316600160601b614862565b905061440b6146c584838888036001600160a01b0316614862565b614902565b6000826001600160a01b0316846001600160a01b031611156146ea579192915b6145b36146c583600160601b8787036001600160a01b0316614862565b6060824710156147485760405162461bcd60e51b8152600401808060200182810382526026815260200180615ac46026913960400191505060405180910390fd5b61475185612061565b6147a2576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b600080866001600160a01b031685876040518082805190602001908083835b602083106147e05780518252601f1990920191602091820191016147c1565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114614842576040519150601f19603f3d011682016040523d82523d6000602084013e614847565b606091505b5091509150614857828286614918565b979650505050505050565b600080806000198587098686029250828110908390030390508061488d576000841161335057600080fd5b80841161489957600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b806001600160801b038116811461061d57600080fd5b60608315614927575081610a40565b8251156149375782518084602001fd5b60405162461bcd60e51b81526020600482018181528451602484015284518593919283926044019190850190808383600083156123ae578181015183820152602001612396565b82805482825590600052602060002090600901600a90048101928215614a1d5791602002820160005b838211156149ec57835183826101000a81548162ffffff021916908360020b62ffffff16021790555092602001926003016020816002010492830192600103026149a7565b8015614a1b5782816101000a81549062ffffff02191690556003016020816002010492830192600103026149ec565b505b50614a29929150614b40565b5090565b82805482825590600052602060002090600f01601090048101928215614a1d5791602002820160005b83821115614a9657835183826101000a81548161ffff021916908361ffff1602179055509260200192600201602081600101049283019260010302614a56565b8015614a1b5782816101000a81549061ffff0219169055600201602081600101049283019260010302614a96565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282614afa5760008555614a1d565b82601f10614b1357805160ff1916838001178555614a1d565b82800160010185558215614a1d579182015b82811115614a1d578251825591602001919060010190614b25565b5b80821115614a295760008155600101614b41565b805161061d8161599c565b600082601f830112614b70578081fd5b81356020614b85614b8083615930565b61590c565b8281528181019085830183850287018401881015614ba1578586fd5b855b85811015614bc8578135614bb6816159b1565b84529284019290840190600101614ba3565b5090979650505050505050565b600082601f830112614be5578081fd5b81516020614bf5614b8083615930565b8281528181019085830183850287018401881015614c11578586fd5b855b85811015614bc8578151614c268161599c565b84529284019290840190600101614c13565b600082601f830112614c48578081fd5b81356020614c58614b8083615930565b8281528181019085830183850287018401881015614c74578586fd5b855b85811015614bc8578135614c89816159d5565b84529284019290840190600101614c76565b8051801515811461061d57600080fd5b60008083601f840112614cbc578182fd5b50813567ffffffffffffffff811115614cd3578182fd5b602083019150836020828501011115614ceb57600080fd5b9250929050565b80516005811061061d57600080fd5b600082601f830112614d11578081fd5b8151614d1f614b808261594e565b818152846020838601011115614d33578283fd5b6145b3826020830160208701615970565b805163ffffffff8116811461061d57600080fd5b600060208284031215614d69578081fd5b8135610a408161599c565b600060208284031215614d85578081fd5b8151610a408161599c565b600080600080600060a08688031215614da7578081fd5b8551614db28161599c565b6020870151909550614dc38161599c565b604087015190945062ffffff81168114614ddb578182fd5b6060870151909350614dec816159b1565b9150614dfa60808701614d44565b90509295509295909350565b60008060408385031215614e18578182fd5b8235614e238161599c565b91506020830135614e338161599c565b809150509250929050565b60008060008060808587031215614e53578182fd5b8435614e5e8161599c565b93506020850135614e6e8161599c565b92506040850135614e7e8161599c565b9150606085013567ffffffffffffffff811115614e99578182fd5b8501601f81018713614ea9578182fd5b8035614eb7614b808261594e565b818152886020838501011115614ecb578384fd5b81602084016020830137908101602001929092525092959194509250565b600080600060608486031215614efd578081fd5b8335614f088161599c565b92506020840135614f188161599c565b929592945050506040919091013590565b60008060408385031215614f3b578182fd5b8235614f468161599c565b946020939093013593505050565b60008060408385031215614f66578182fd5b825167ffffffffffffffff80821115614f7d578384fd5b818501915085601f830112614f90578384fd5b81516020614fa0614b8083615930565b82815281810190858301838502870184018b1015614fbc578889fd5b8896505b84871015614fec5780518060060b8114614fd857898afd5b835260019690960195918301918301614fc0565b5091880151919650909350505080821115615005578283fd5b5061501285828601614bd5565b9150509250929050565b60006020828403121561502d578081fd5b610a4082614c9b565b600060208284031215615047578081fd5b5035919050565b60008060408385031215615060578182fd5b823591506020830135614e338161599c565b60008060408385031215615084578182fd5b50508035926020909101359150565b6000602082840312156150a4578081fd5b81356001600160e01b031981168114610a40578182fd5b6000806000606084860312156150cf578081fd5b83356150da816159b1565b925060208401356150ea816159b1565b915060408401356150fa816159c0565b809150509250925092565b60008060408385031215615117578182fd5b505080516020909101519092909150565b6000806000806060858703121561513d578182fd5b8435935060208501359250604085013567ffffffffffffffff811115615161578283fd5b61516d87828801614cab565b95989497509550505050565b60006020828403121561518a578081fd5b815167ffffffffffffffff808211156151a1578283fd5b9083019060c082860312156151b4578283fd5b6151be60c061590c565b6151c783614cf2565b815260208301516020820152604083015160408201526060830151828111156151ee578485fd5b6151fa87828601614d01565b60608301525061520c60808401614b55565b608082015260a083015182811115615222578485fd5b61522e87828601614d01565b60a08301525095945050505050565b6000806040838503121561524f578182fd5b825161525a816159c0565b6020840151909250614e33816159c0565b600080600080600060a08688031215615282578283fd5b855161528d816159c0565b80955050602086015193506040860151925060608601516152ad816159c0565b60808701519092506152be816159c0565b809150509295509295909350565b600080600080600080600060e0888a0312156152e6578485fd5b87516152f18161599c565b6020890151909750615302816159b1565b6040890151909650615313816159d5565b6060890151909550615324816159d5565b6080890151909450615335816159d5565b925061534360a08901614d44565b915061535160c08901614c9b565b905092959891949750929550565b600060208284031215615370578081fd5b5051919050565b6000806000806060858703121561538c578182fd5b84359350602085013567ffffffffffffffff808211156153aa578384fd5b90860190606082890312156153bd578384fd5b6040516060810181811083821117156153d257fe5b6040528235828111156153e3578586fd5b6153ef8a828601614b60565b825250602083013582811115615403578586fd5b61540f8a828601614b60565b602083015250604083013582811115615426578586fd5b6154328a828601614c38565b60408301525080955050604087013591508082111561544f578384fd5b5061516d87828801614cab565b600080600060608486031215615470578081fd5b833592506020840135915060408401356150fa8161599c565b6000806000806080858703121561549e578182fd5b84359350602085013592506040850135915060608501356154be8161599c565b939692955090935050565b600080600080600060a086880312156154e0578283fd5b8535945060208601359350604086013592506060860135915060808601356152be8161599c565b6000815180845260208085019450808401835b8381101561553957815160020b8752958201959082019060010161551a565b509495945050505050565b60007153544545525f554e4956335f5641554c545f60701b82528251615571816012850160208701615970565b9190910160120192915050565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b03948516815292151560208401526040830191909152909116606082015260a06080820181905260009082015260c00190565b6001600160a01b03949094168452600292830b6020850152910b60408301526001600160801b0316606082015260a06080820181905260009082015260c00190565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6000606082526156866060830186615507565b6020838203818501526156998287615507565b84810360408601528551808252828701935090820190845b818110156156d157845161ffff16835293830193918301916001016156b1565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561571d57835163ffffffff16835292840192918401916001016156fb565b50909695505050505050565b901515815260200190565b90815260200190565b6001600160e01b031991909116815260200190565b60029190910b815260200190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b60006020825282518060208401526157a5816040850160208701615970565b601f01601f19169190910160400192915050565b6020808252600190820152604360f81b604082015260600190565b6020808252600190820152600360fc1b604082015260600190565b602080825260139082015272496e76616c6964205661756c7420537461746560681b604082015260600190565b6020808252600190820152601560fa1b604082015260600190565b6020808252600190820152605360f81b604082015260600190565b6020808252600190820152603160f81b604082015260600190565b6020808252600190820152602960f91b604082015260600190565b6020808252600190820152602b60f91b604082015260600190565b6001600160a01b0394909416845260208401929092526040830152606082015260800190565b918252602082015260400190565b9283526020830191909152604082015260600190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561592857fe5b604052919050565b600067ffffffffffffffff82111561594457fe5b5060209081020190565b600067ffffffffffffffff82111561596257fe5b50601f01601f191660200190565b60005b8381101561598b578181015183820152602001615973565b838111156112d65750506000910152565b6001600160a01b03811681146112a257600080fd5b8060020b81146112a257600080fd5b6001600160801b03811681146112a257600080fd5b61ffff811681146112a257600080fdfe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e647345524332303a207472616e7366657220746f20746865207a65726f2061646472657373416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e7445524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564c62a261ff212893ed0a2ac422d821462bb04a4b5c153a746ad6a15108fb4f95145524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220039595f709f541b99d8861d66a6833f313bfe4e397e282109791cbb71983091664736f6c63430007060033496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564