[ { "inputs": [ { "internalType": "address", "name": "factory", "type": "address" }, { "internalType": "address", "name": "weth", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "nftId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amountX", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountY", "type": "uint256" } ], "name": "AddLiquidity", "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": "nftId", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "pool", "type": "address" }, { "indexed": false, "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "indexed": false, "internalType": "uint256", "name": "amountX", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountY", "type": "uint256" } ], "name": "DecLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": 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" }, { "inputs": [], "name": "WETH9", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "lid", "type": "uint256" }, { "internalType": "uint128", "name": "xLim", "type": "uint128" }, { "internalType": "uint128", "name": "yLim", "type": "uint128" }, { "internalType": "uint128", "name": "amountXMin", "type": "uint128" }, { "internalType": "uint128", "name": "amountYMin", "type": "uint128" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct LiquidityManager.AddLiquidityParam", "name": "addLiquidityParam", "type": "tuple" } ], "name": "addLiquidity", "outputs": [ { "internalType": "uint128", "name": "liquidityDelta", "type": "uint128" }, { "internalType": "uint256", "name": "amountX", "type": "uint256" }, { "internalType": "uint256", "name": "amountY", "type": "uint256" } ], "stateMutability": "payable", "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": "lid", "type": "uint256" } ], "name": "burn", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "lid", "type": "uint256" }, { "internalType": "uint128", "name": "amountXLim", "type": "uint128" }, { "internalType": "uint128", "name": "amountYLim", "type": "uint128" } ], "name": "collect", "outputs": [ { "internalType": "uint256", "name": "amountX", "type": "uint256" }, { "internalType": "uint256", "name": "amountY", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenX", "type": "address" }, { "internalType": "address", "name": "tokenY", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "initialPoint", "type": "int24" } ], "name": "createPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "lid", "type": "uint256" }, { "internalType": "uint128", "name": "liquidDelta", "type": "uint128" }, { "internalType": "uint256", "name": "amountXMin", "type": "uint256" }, { "internalType": "uint256", "name": "amountYMin", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "decLiquidity", "outputs": [ { "internalType": "uint256", "name": "amountX", "type": "uint256" }, { "internalType": "uint256", "name": "amountY", "type": "uint256" } ], "stateMutability": "nonpayable", "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": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "liquidities", "outputs": [ { "internalType": "int24", "name": "leftPt", "type": "int24" }, { "internalType": "int24", "name": "rightPt", "type": "int24" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "lastFeeScaleX_128", "type": "uint256" }, { "internalType": "uint256", "name": "lastFeeScaleY_128", "type": "uint256" }, { "internalType": "uint256", "name": "remainTokenX", "type": "uint256" }, { "internalType": "uint256", "name": "remainTokenY", "type": "uint256" }, { "internalType": "uint128", "name": "poolId", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "liquidityNum", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "miner", "type": "address" }, { "internalType": "address", "name": "tokenX", "type": "address" }, { "internalType": "address", "name": "tokenY", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "int24", "name": "pl", "type": "int24" }, { "internalType": "int24", "name": "pr", "type": "int24" }, { "internalType": "uint128", "name": "xLim", "type": "uint128" }, { "internalType": "uint128", "name": "yLim", "type": "uint128" }, { "internalType": "uint128", "name": "amountXMin", "type": "uint128" }, { "internalType": "uint128", "name": "amountYMin", "type": "uint128" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "internalType": "struct LiquidityManager.MintParam", "name": "mintParam", "type": "tuple" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "lid", "type": "uint256" }, { "internalType": "uint128", "name": "liquidity", "type": "uint128" }, { "internalType": "uint256", "name": "amountX", "type": "uint256" }, { "internalType": "uint256", "name": "amountY", "type": "uint256" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "x", "type": "uint256" }, { "internalType": "uint256", "name": "y", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "mintDepositCallback", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "address", "name": "tokenX", "type": "address" }, { "internalType": "address", "name": "tokenY", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" } ], "name": "pool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "poolIds", "outputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint128", "name": "", "type": "uint128" } ], "name": "poolMetas", "outputs": [ { "internalType": "address", "name": "tokenX", "type": "address" }, { "internalType": "address", "name": "tokenY", "type": "address" }, { "internalType": "uint24", "name": "fee", "type": "uint24" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refundETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "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": "string", "name": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "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": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "sweepToken", "outputs": [], "stateMutability": "payable", "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": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minAmount", "type": "uint256" }, { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "unwrapWETH9", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60c0604052600b80546001600160801b03191660011790556000600d553480156200002957600080fd5b50604051620058af380380620058af8339810160408190526200004c916200023a565b6040518060400160405280601581526020017f695a6953776170204c6971756964697479204e465400000000000000000000008152506040518060400160405280601581526020017f495a49535741502d4c49515549444954592d4e465400000000000000000000008152508383620000d4620000ce6200012360201b60201c565b62000127565b6001600160601b0319606092831b8116608052911b1660a05281516200010290600190602085019062000177565b5080516200011890600290602084019062000177565b5050505050620002ae565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001859062000271565b90600052602060002090601f016020900481019282620001a95760008555620001f4565b82601f10620001c457805160ff1916838001178555620001f4565b82800160010185558215620001f4579182015b82811115620001f4578251825591602001919060010190620001d7565b506200020292915062000206565b5090565b5b8082111562000202576000815560010162000207565b80516001600160a01b03811681146200023557600080fd5b919050565b600080604083850312156200024d578182fd5b62000258836200021d565b915062000268602084016200021d565b90509250929050565b600181811c908216806200028657607f821691505b60208210811415620002a857634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c60a05160601c6155816200032e6000396000818161049601528181610ff2015281816110b501528181612cdb01528181612d210152612db601526000818161069501528181610be90152818161189801528181611d4001528181611f8b01528181612560015281816126350152612e7401526155816000f3fe6080604052600436106102245760003560e01c8063715018a61161012e578063c45a0155116100ab578063df2ab5bb1161006f578063df2ab5bb14610773578063e985e9c514610786578063f2fde38b146107a6578063f425a3ce146107c6578063f655dbc1146107e657600080fd5b8063c45a015514610683578063c87b56dd146106b7578063cbd89416146106d7578063d4175be21461070f578063dca87bec1461075d57600080fd5b8063a0e4eb3c116100f2578063a0e4eb3c146105f0578063a22cb46514610603578063ac9650d814610623578063b88d4fde14610643578063becbcc6a1461066357600080fd5b8063715018a61461054d57806384fe2b3d146105625780638da5cb5b1461058257806395d89b41146105a057806396f639ed146105b557600080fd5b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104b857806355f804b3146104d85780636352211e146104f85780636c0360eb1461051857806370a082311461052d57600080fd5b80632f745c591461041157806342842e0e1461043157806342966c681461045157806349404b7c146104715780634aa4a4fc1461048457600080fd5b806301ffc9a71461023057806306fdde03146102655780630713051d14610287578063081812fc14610346578063095ea7b31461037357806312210e8a1461039557806315feae511461039d57806318160ddd146103d257806323b872dd146103f157600080fd5b3661022b57005b600080fd5b34801561023c57600080fd5b5061025061024b366004614887565b610844565b60405190151581526020015b60405180910390f35b34801561027157600080fd5b5061027a61086f565b60405161025c9190614f28565b34801561029357600080fd5b506102f56102a2366004614c1e565b600c602052600090815260409020805460018201546002808401546003850154600486015460059096015485840b966301000000870490940b956001600160801b03600160301b90910481169594911688565b604080516002998a0b81529790980b60208801526001600160801b03958616978701979097526060860193909352608085019190915260a084015260c083015290911660e08201526101000161025c565b34801561035257600080fd5b50610366610361366004614c1e565b610901565b60405161025c9190614db3565b34801561037f57600080fd5b5061039361038e366004614749565b61098e565b005b610393610a9f565b3480156103a957600080fd5b506103bd6103b8366004614c72565b610ab1565b6040805192835260208301919091520161025c565b3480156103de57600080fd5b506009545b60405190815260200161025c565b3480156103fd57600080fd5b5061039361040c366004614636565b610e00565b34801561041d57600080fd5b506103e361042c366004614749565b610e31565b34801561043d57600080fd5b5061039361044c366004614636565b610ec7565b34801561045d57600080fd5b5061025061046c366004614c1e565b610ee2565b61039361047f366004614c4e565b610fd8565b34801561049057600080fd5b506103667f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c457600080fd5b506103e36104d3366004614c1e565b611123565b3480156104e457600080fd5b506103936104f33660046148db565b6111c4565b34801561050457600080fd5b50610366610513366004614c1e565b6111fa565b34801561052457600080fd5b5061027a611271565b34801561053957600080fd5b506103e3610548366004614527565b6112ff565b34801561055957600080fd5b50610393611386565b34801561056e57600080fd5b5061039361057d366004614cdc565b6113ba565b34801561058e57600080fd5b506000546001600160a01b0316610366565b3480156105ac57600080fd5b5061027a61141c565b6105c86105c3366004614a15565b61142b565b604080519485526001600160801b03909316602085015291830152606082015260800161025c565b6103bd6105fe3660046147b5565b6117c6565b34801561060f57600080fd5b5061039361061e36600461471c565b611b5e565b6106366106313660046147fc565b611b6d565b60405161025c9190614ea1565b34801561064f57600080fd5b5061039361065e366004614676565b611cee565b34801561066f57600080fd5b5061036661067e366004614597565b611d26565b34801561068f57600080fd5b506103667f000000000000000000000000000000000000000000000000000000000000000081565b3480156106c357600080fd5b5061027a6106d2366004614c1e565b611dd3565b6106ea6106e5366004614983565b611e9d565b604080516001600160801b03909416845260208401929092529082015260600161025c565b34801561071b57600080fd5b5061074561072a366004614527565b600f602052600090815260409020546001600160801b031681565b6040516001600160801b03909116815260200161025c565b34801561076957600080fd5b506103e3600d5481565b610393610781366004614774565b612398565b34801561079257600080fd5b506102506107a136600461455f565b61244a565b3480156107b257600080fd5b506103936107c1366004614527565b612478565b3480156107d257600080fd5b506103666107e13660046145dd565b612513565b3480156107f257600080fd5b50610835610801366004614afb565b600e60205260009081526040902080546001909101546001600160a01b0391821691811690600160a01b900462ffffff1683565b60405161025c93929190614dc7565b60006001600160e01b0319821663780e9d6360e01b14806108695750610869826126c5565b92915050565b60606001805461087e906153c6565b80601f01602080910402602001604051908101604052809291908181526020018280546108aa906153c6565b80156108f75780601f106108cc576101008083540402835291602001916108f7565b820191906000526020600020905b8154815290600101906020018083116108da57829003601f168201915b5050505050905090565b600061090c82612715565b6109725760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610999826111fa565b9050806001600160a01b0316836001600160a01b03161415610a075760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610969565b336001600160a01b0382161480610a235750610a23813361244a565b610a905760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776044820152771b995c881b9bdc88185c1c1c9bdd995908199bdc88185b1b60421b6064820152608401610969565b610a9a8383612732565b505050565b4715610aaf57610aaf33476127a0565b565b60008086610abf3382612843565b610adb5760405162461bcd60e51b815260040161096990615000565b8380421115610afc5760405162461bcd60e51b8152600401610969906150a3565b600d548910610b1d5760405162461bcd60e51b815260040161096990614faa565b6000898152600c602052604090208054600160301b90046001600160801b0316610b4e576000809450945050610df4565b80546001600160801b03600160301b9091048116908a161115610b80578054600160301b90046001600160801b031698505b60058101546001600160801b03166000908152600e60209081526040808320815160608101835281546001600160a01b03908116808352600190930154808216958301869052600160a01b900462ffffff168285018190529351635f65e63560e11b81529195947f00000000000000000000000000000000000000000000000000000000000000009091169363becbcc6a93610c229390929190600401614dc7565b60206040518083038186803b158015610c3a57600080fd5b505afa158015610c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c729190614543565b90506001600160a01b038116610c9a5760405162461bcd60e51b815260040161096990614fe4565b8254600090610cba908d90600160301b90046001600160801b031661533b565b9050816001600160a01b031663a34123a78560000160009054906101000a900460020b8660000160039054906101000a900460020b8f6040518463ffffffff1660e01b8152600401610d0e93929190614f02565b6040805180830381600087803b158015610d2757600080fd5b505af1158015610d3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5f9190614cb9565b90985096508a881015610d845760405162461bcd60e51b815260040161096990615085565b89871015610da45760405162461bcd60e51b815260040161096990614fc6565b610db18483838b8b61290c565b8c7f24f4b91fa7871755148bc2a9e01f85d6fd73ec2a0e6bd9a5717c0d7f5be8c2c3838e8b8b604051610de79493929190614e72565b60405180910390a2505050505b50509550959350505050565b610e0a3382612843565b610e265760405162461bcd60e51b8152600401610969906150c8565b610a9a838383612a0f565b6000610e3c836112ff565b8210610e9e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610969565b506001600160a01b03919091166000908152600760209081526040808320938352929052205490565b610a9a83838360405180602001604052806000815250611cee565b600081610eef3382612843565b610f0b5760405162461bcd60e51b815260040161096990615000565b6000838152600c602052604090208054600160301b90046001600160801b0316158015610f3a57506003810154155b8015610f4857506004810154155b610f795760405162461bcd60e51b81526020600482015260026024820152614e4360f01b6044820152606401610969565b6000848152600c6020526040812080546001600160b01b0319168155600181018290556002810182905560038101829055600481019190915560050180546001600160801b0319169055610fcc84612ba4565b60019250505b50919050565b6040516370a0823160e01b81526000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190611027903090600401614db3565b60206040518083038186803b15801561103f57600080fd5b505afa158015611053573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110779190614c36565b9050828110156110995760405162461bcd60e51b815260040161096990615026565b8015610a9a57604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561110157600080fd5b505af1158015611115573d6000803e3d6000fd5b50505050610a9a82826127a0565b600061112e60095490565b82106111915760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610969565b600982815481106111b257634e487b7160e01b600052603260045260246000fd5b90600052602060002001549050919050565b6000546001600160a01b031633146111ee5760405162461bcd60e51b815260040161096990615050565b610a9a60108383614404565b6000818152600360205260408120546001600160a01b0316806108695760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610969565b6010805461127e906153c6565b80601f01602080910402602001604051908101604052809291908181526020018280546112aa906153c6565b80156112f75780601f106112cc576101008083540402835291602001916112f7565b820191906000526020600020905b8154815290600101906020018083116112da57829003601f168201915b505050505081565b60006001600160a01b03821661136a5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610969565b506001600160a01b031660009081526004602052604090205490565b6000546001600160a01b031633146113b05760405162461bcd60e51b815260040161096990615050565b610aaf6000612c39565b60006113c882840184614994565b90506113e1816000015182602001518360400151612c89565b84156113fb576113fb816000015182606001513388612cd9565b831561141557611415816020015182606001513387612cd9565b5050505050565b60606002805461087e906153c6565b600080600080846101400135804211156114575760405162461bcd60e51b8152600401610969906150a3565b6114676060870160408801614527565b6001600160a01b03166114806040880160208901614527565b6001600160a01b0316106114a65760405162461bcd60e51b815260040161096990614f3b565b60006114bf6114ba36899003890189614a27565b612e69565b929750909550935090506114db61012088016101008901614afb565b6001600160801b03168410156115035760405162461bcd60e51b815260040161096990615085565b61151561014088016101208901614afb565b6001600160801b031683101561153d5760405162461bcd60e51b815260040161096990614fc6565b600d805490600061154d83615422565b90915550955060008061158b836115863061156e60a08e0160808f016148bf565b8d60a001602081019061158191906148bf565b61312a565b613180565b9150915060006116018460405180606001604052808d60200160208101906115b39190614527565b6001600160a01b031681526020018d60400160208101906115d49190614527565b6001600160a01b031681526020018d60600160208101906115f59190614c04565b62ffffff169052613216565b90506040518061010001604052808b608001602081019061162291906148bf565b60020b815260200161163a60c08d0160a08e016148bf565b60020b8152602001896001600160801b031681526020018481526020018381526020016000815260200160008152602001826001600160801b0316815250600c60008b815260200190815260200160002060008201518160000160006101000a81548162ffffff021916908360020b62ffffff16021790555060208201518160000160036101000a81548162ffffff021916908360020b62ffffff16021790555060408201518160000160066101000a8154816001600160801b0302191690836001600160801b03160217905550606082015181600101556080820151816002015560a0820151816003015560c0820151816004015560e08201518160050160006101000a8154816001600160801b0302191690836001600160801b0316021790555090505061177c8a60000160208101906117769190614527565b8a613303565b887ff565fdd70b3936f0ae8efc41c2e0822f9de5ecb4dc162b153b129ec4bb9cd93c858a8a8a6040516117b29493929190614e72565b60405180910390a250505050509193509193565b600080846117d43382612843565b6117f05760405162461bcd60e51b815260040161096990615000565b6001600160a01b038716611802573096505b600d5486106118235760405162461bcd60e51b815260040161096990614faa565b6000868152600c6020908152604080832060058101546001600160801b03168452600e8352818420825160608101845281546001600160a01b03908116808352600190930154808216968301879052600160a01b900462ffffff168286018190529451635f65e63560e11b81529396919591947f00000000000000000000000000000000000000000000000000000000000000009091169363becbcc6a936118d19390929091600401614dc7565b60206040518083038186803b1580156118e957600080fd5b505afa1580156118fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119219190614543565b90506001600160a01b0381166119495760405162461bcd60e51b815260040161096990614fe4565b8254600160301b90046001600160801b031615611a1557825460405163a34123a760e01b81526001600160a01b0383169163a34123a7916119a091600281810b926301000000909204900b90600090600401614f02565b6040805180830381600087803b1580156119b957600080fd5b505af11580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f19190614cb9565b50508254611a159084908390600160301b90046001600160801b031660008061290c565b8260030154886001600160801b03161115611a3257826003015497505b8260040154876001600160801b03161115611a4f57826004015496505b825460405163872d1f1560e01b81526001600160a01b038c81166004830152600283810b810b60248401526301000000909304830b90920b60448201526001600160801b03808b166064830152891660848201529082169063872d1f159060a4016040805180830381600087803b158015611ac957600080fd5b505af1158015611add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b019190614cb9565b8096508197505050876001600160801b0316836003016000828254611b269190615383565b92505081905550866001600160801b0316836004016000828254611b4a9190615383565b925050819055505050505094509492505050565b611b69338383613430565b5050565b6060816001600160401b03811115611b9557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611bc857816020015b6060815260200190600190039081611bb35790505b50905060005b82811015611ce75760008030868685818110611bfa57634e487b7160e01b600052603260045260246000fd5b9050602002810190611c0c9190615157565b604051611c1a929190614d58565b600060405180830381855af49150503d8060008114611c55576040519150601f19603f3d011682016040523d82523d6000602084013e611c5a565b606091505b509150915081611ca657604481511015611c7357600080fd5b60048101905080806020019051810190611c8d919061491a565b60405162461bcd60e51b81526004016109699190614f28565b80848481518110611cc757634e487b7160e01b600052603260045260246000fd5b602002602001018190525050508080611cdf90615422565b915050611bce565b5092915050565b611cf83383612843565b611d145760405162461bcd60e51b8152600401610969906150c8565b611d20848484846134fb565b50505050565b604051635f65e63560e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063becbcc6a90611d7990879087908790600401614dc7565b60206040518083038186803b158015611d9157600080fd5b505afa158015611da5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc99190614543565b90505b9392505050565b6060611dde82612715565b611e425760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610969565b6000611e4c61352e565b90506000815111611e6c5760405180602001604052806000815250611dcc565b80611e768461353d565b604051602001611e87929190614d84565b6040516020818303038152906040529392505050565b600080808335611ead3382612843565b611ec95760405162461bcd60e51b815260040161096990615000565b8460a0013580421115611eee5760405162461bcd60e51b8152600401610969906150a3565b600d54863510611f105760405162461bcd60e51b815260040161096990614faa565b85356000908152600c6020908152604080832060058101546001600160801b03168452600e8352818420825160608101845281546001600160a01b03908116808352600190930154808216968301879052600160a01b900462ffffff168286018190529451635f65e63560e11b8152939691959194859485947f00000000000000000000000000000000000000000000000000000000000000009093169363becbcc6a93611fc2939092600401614dc7565b60206040518083038186803b158015611fda57600080fd5b505afa158015611fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120129190614543565b90506001600160a01b03811661203a5760405162461bcd60e51b815260040161096990614fe4565b61204381613656565b809450819350505061214560405180608001604052808760000160009054906101000a900460020b60020b81526020018760000160039054906101000a900460020b60020b81526020018d60200160208101906120a09190614afb565b6001600160801b031681526020018d60400160208101906120c19190614afb565b6001600160801b03168152508484846001600160a01b03166309beabc16040518163ffffffff1660e01b815260040160206040518083038186803b15801561210857600080fd5b505afa15801561211c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121409190614543565b6136e1565b8554909a50600160301b90046001600160801b0316600f81900b146121915760405162461bcd60e51b81526020600482015260026024820152614c4f60f01b6044820152606401610969565b84546000906121b090600160301b90046001600160801b03168c615261565b9050816001600160a01b0316633c8a7d8d308860000160009054906101000a900460020b8960000160039054906101000a900460020b8f60405180608001604052808c600001516001600160a01b031681526020018c602001516001600160a01b031681526020018c6040015162ffffff168152602001336001600160a01b03168152506040516020016122449190615119565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401612273959493929190614e22565b6040805180830381600087803b15801561228c57600080fd5b505af11580156122a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c49190614cb9565b909a5098506122d960808d0160608e01614afb565b6001600160801b03168a10156123015760405162461bcd60e51b815260040161096990615085565b61231160a08d0160808e01614afb565b6001600160801b03168910156123395760405162461bcd60e51b815260040161096990614fc6565b61234786838360008061290c565b8b600001357ff565fdd70b3936f0ae8efc41c2e0822f9de5ecb4dc162b153b129ec4bb9cd93c838d8d8d6040516123819493929190614e72565b60405180910390a250505050505050509193909250565b6040516370a0823160e01b81526000906001600160a01b038516906370a08231906123c7903090600401614db3565b60206040518083038186803b1580156123df57600080fd5b505afa1580156123f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124179190614c36565b9050828110156124395760405162461bcd60e51b815260040161096990615026565b8015611d2057611d208483836137bc565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b6000546001600160a01b031633146124a25760405162461bcd60e51b815260040161096990615050565b6001600160a01b0381166125075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610969565b61251081612c39565b50565b6000836001600160a01b0316856001600160a01b0316106125465760405162461bcd60e51b815260040161096990614f3b565b604051635f65e63560e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063becbcc6a9061259990899089908990600401614dc7565b60206040518083038186803b1580156125b157600080fd5b505afa1580156125c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e99190614543565b90506001600160a01b0381166126ba576040516378eda67b60e01b81526001600160a01b038781166004830152868116602483015262ffffff86166044830152600285900b60648301527f000000000000000000000000000000000000000000000000000000000000000016906378eda67b90608401602060405180830381600087803b15801561267957600080fd5b505af115801561268d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b19190614543565b91506126bd9050565b90505b949350505050565b60006001600160e01b031982166380ac58cd60e01b14806126f657506001600160e01b03198216635b5e139f60e01b145b8061086957506301ffc9a760e01b6001600160e01b0319831614610869565b6000908152600360205260409020546001600160a01b0316151590565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612767826111fa565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b604080516000808252602082019092526001600160a01b0384169083906040516127ca9190614d68565b60006040518083038185875af1925050503d8060008114612807576040519150601f19603f3d011682016040523d82523d6000602084013e61280c565b606091505b5050905080610a9a5760405162461bcd60e51b815260206004820152600360248201526253544560e81b6044820152606401610969565b600061284e82612715565b6128af5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610969565b60006128ba836111fa565b9050806001600160a01b0316846001600160a01b031614806128e157506128e1818561244a565b806126bd5750836001600160a01b03166128fa84610901565b6001600160a01b031614949350505050565b84546000908190612933908790611586903090600281810b9163010000009004900b61312a565b600189015460028a01548a549395509193508403919083039061296c908390600160301b90046001600160801b0316600160801b6138b5565b6129769087615283565b8960030160008282546129899190615283565b909155505088546129b0908290600160301b90046001600160801b0316600160801b6138b5565b6129ba9086615283565b8960040160008282546129cd9190615283565b9091555050505060018701919091556002860155505082546001600160801b03909116600160301b026601000000000000600160b01b03199091161790915550565b826001600160a01b0316612a22826111fa565b6001600160a01b031614612a865760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610969565b6001600160a01b038216612ae85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610969565b612af3838383613962565b612afe600082612732565b6001600160a01b0383166000908152600460205260408120805460019290612b27908490615383565b90915550506001600160a01b0382166000908152600460205260408120805460019290612b55908490615283565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03868116918217909255915184939187169160008051602061552c83398151915291a4505050565b6000612baf826111fa565b9050612bbd81600084613962565b612bc8600083612732565b6001600160a01b0381166000908152600460205260408120805460019290612bf1908490615383565b909155505060008281526003602052604080822080546001600160a01b0319169055518391906001600160a01b0384169060008051602061552c833981519152908390a45050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612c94838383611d26565b6001600160a01b0316336001600160a01b031614610a9a5760405162461bcd60e51b8152602060048201526002602482015261073760f41b6044820152606401610969565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015612d1a5750804710155b15612e3c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612d7a57600080fd5b505af1158015612d8e573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b038681166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015612dfe57600080fd5b505af1158015612e12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e36919061486b565b50611d20565b6001600160a01b038316301415612e5d57612e588483836137bc565b611d20565b611d2084848484613a1a565b6000806000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663becbcc6a886020015189604001518a606001516040518463ffffffff1660e01b8152600401612ece93929190614dc7565b60206040518083038186803b158015612ee657600080fd5b505afa158015612efa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1e9190614543565b92506000836001600160a01b03166309beabc16040518163ffffffff1660e01b815260040160206040518083038186803b158015612f5b57600080fd5b505afa158015612f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f939190614543565b90506001600160a01b038416612fbb5760405162461bcd60e51b815260040161096990614fe4565b612fc484613656565b809450819350505061302060405180608001604052808a6080015160020b81526020018a60a0015160020b81526020018a60c001516001600160801b031681526020018a60e001516001600160801b03168152508484846136e1565b9650836001600160a01b0316633c8a7d8d308a608001518b60a001518b60405180608001604052808f602001516001600160a01b031681526020018f604001516001600160a01b031681526020018f6060015162ffffff168152602001336001600160a01b031681525060405160200161309a9190615119565b6040516020818303038152906040526040518663ffffffff1660e01b81526004016130c9959493929190614e22565b6040805180830381600087803b1580156130e257600080fd5b505af11580156130f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311a9190614cb9565b9799909850939550929350505050565b6040805160609490941b6bffffffffffffffffffffffff1916602080860191909152600293840b60e890811b60348701529290930b90911b60378401528051601a818503018152603a9093019052815191012090565b600080600080856001600160a01b031663b0f59257866040518263ffffffff1660e01b81526004016131b491815260200190565b60a06040518083038186803b1580156131cc57600080fd5b505afa1580156131e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132049190614b17565b509196509450505050505b9250929050565b6001600160a01b0382166000908152600f60205260409020546001600160801b03168061086957600b80546001600160801b0316906000613256836153fb565b82546101009290920a6001600160801b038181021990931691831602179091556001600160a01b039485166000908152600f6020908152604080832080546001600160801b0319169486169485179055928252600e815290829020855181546001600160a01b031916908816178155908501516001919091018054959092015195166001600160b81b031990941693909317600160a01b62ffffff90951694909402939093179091555090565b6001600160a01b0382166133595760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610969565b61336281612715565b156133af5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610969565b6133bb60008383613962565b6001600160a01b03821660009081526004602052604081208054600192906133e4908490615283565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b038616908117909155905183929060008051602061552c833981519152908290a45050565b816001600160a01b0316836001600160a01b0316141561348e5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610969565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613506848484612a0f565b61351284848484613b24565b611d205760405162461bcd60e51b815260040161096990614f58565b60606010805461087e906153c6565b6060816135615750506040805180820190915260018152600360fc1b602082015290565b8160005b811561358b578061357581615422565b91506135849050600a836152c1565b9150613565565b6000816001600160401b038111156135b357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156135dd576020820181803683370190505b5090505b84156126bd576135f2600183615383565b91506135ff600a8661543d565b61360a906030615283565b60f81b81838151811061362d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061364f600a866152c1565b94506135e1565b600080600080846001600160a01b031663c19d93fb6040518163ffffffff1660e01b81526004016101006040518083038186803b15801561369657600080fd5b505afa1580156136aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136ce9190614b5f565b50959b949a509398505050505050505050565b60006136f560026001600160801b0361529b565b905060008061370f87600001518860200151888888613c2e565b9092509050811561375d57600082600160601b89604001516001600160801b031661373a91906152d5565b61374491906152c1565b905080846001600160801b0316111561375b578093505b505b80156137b257600081600160601b60018a6060015161377c919061533b565b6001600160801b031661378f91906152d5565b61379991906152c1565b905080846001600160801b031611156137b0578093505b505b5050949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916138189190614d68565b6000604051808303816000865af19150503d8060008114613855576040519150601f19603f3d011682016040523d82523d6000602084013e61385a565b606091505b5091509150818015613884575080511580613884575080806020019051810190613884919061486b565b6114155760405162461bcd60e51b815260206004820152600260248201526114d560f21b6044820152606401610969565b6000808060001985870985870292508281108382030391505080600014156138ef57600084116138e457600080fd5b508290049050611dcc565b8084116138fb57600080fd5b6000848688096001861981018716968790046003810260029081188083028203028083028203028083028203028083028203028083028203029182029003026000889003889004909101858311909403939093029303949094049190911702949350505050565b6001600160a01b0383166139bd576139b881600980546000838152600a60205260408120829055600182018355919091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0155565b6139e0565b816001600160a01b0316836001600160a01b0316146139e0576139e08382613d1e565b6001600160a01b0382166139f757610a9a81613dbb565b826001600160a01b0316826001600160a01b031614610a9a57610a9a8282613e94565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691613a7e9190614d68565b6000604051808303816000865af19150503d8060008114613abb576040519150601f19603f3d011682016040523d82523d6000602084013e613ac0565b606091505b5091509150818015613aea575080511580613aea575080806020019051810190613aea919061486b565b613b1c5760405162461bcd60e51b815260206004820152600360248201526229aa2360e91b6044820152606401610969565b505050505050565b60006001600160a01b0384163b15613c2657604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613b68903390899088908890600401614def565b602060405180830381600087803b158015613b8257600080fd5b505af1925050508015613bb2575060408051601f3d908101601f19168201909252613baf918101906148a3565b60015b613c0c573d808015613be0576040519150601f19603f3d011682016040523d82523d6000602084013e613be5565b606091505b508051613c045760405162461bcd60e51b815260040161096990614f58565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506126bd565b5060016126bd565b60008080613c3b87613ed8565b90508560020b8860020b1215613c9c576000613c5689613ed8565b90508660020b8860020b1215613c8257613c718183876142e3565b613c7b9084615283565b9250613c9a565b613c8d8187876142e3565b613c979084615283565b92505b505b8560020b8760020b1315613cdd5760008660020b8960020b13613cc957613cc487600161521b565b613ccb565b885b9050613cd98189848861432f565b9350505b8560020b8860020b13158015613cf857508560020b8760020b135b15613d1357613d106001600160a01b03861683615283565b91505b509550959350505050565b60006001613d2b846112ff565b613d359190615383565b600083815260086020526040902054909150808214613d88576001600160a01b03841660009081526007602090815260408083208584528252808320548484528184208190558352600890915290208190555b5060009182526008602090815260408084208490556001600160a01b039094168352600781528383209183525290812055565b600954600090613dcd90600190615383565b6000838152600a602052604081205460098054939450909284908110613e0357634e487b7160e01b600052603260045260246000fd5b906000526020600020015490508060098381548110613e3257634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255828152600a90915260408082208490558582528120556009805480613e7857634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613e9f836112ff565b6001600160a01b039093166000908152600760209081526040808320868452825280832085905593825260089052919091209190915550565b60008060008360020b12613eef578260020b613efc565b8260020b613efc90615472565b9050613f0b620d89e719615451565b60020b811115613f415760405162461bcd60e51b81526020600482015260016024820152601560fa1b6044820152606401610969565b600060018216613f5557600160801b613f67565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615613f9c576080613f97826ffff97272373d413259a46990580e213a6152d5565b901c90505b6004821615613fc6576080613fc1826ffff2e50f5f656932ef12357cf3c7fdcc6152d5565b901c90505b6008821615613ff0576080613feb826fffe5caca7e10e4e61c3624eaa0941cd06152d5565b901c90505b601082161561401a576080614015826fffcb9843d60f6159c9db58835c9266446152d5565b901c90505b602082161561404457608061403f826fff973b41fa98c081472e6896dfb254c06152d5565b901c90505b604082161561406e576080614069826fff2ea16466c96a3843ec78b326b528616152d5565b901c90505b6080821615614098576080614093826ffe5dee046a99a2a811c461f1969c30536152d5565b901c90505b6101008216156140c35760806140be826ffcbe86c7900a88aedcffc83b479aa3a46152d5565b901c90505b6102008216156140ee5760806140e9826ff987a7253ac413176f2b074cf7815e546152d5565b901c90505b610400821615614119576080614114826ff3392b0822b70005940c7a398e4b70f36152d5565b901c90505b61080082161561414457608061413f826fe7159475a2c29b7443b29c7fa6e889d96152d5565b901c90505b61100082161561416f57608061416a826fd097f3bdfd2022b8845ad8f792aa58256152d5565b901c90505b61200082161561419a576080614195826fa9f746462d870fdf8a65dc1f90e061e56152d5565b901c90505b6140008216156141c55760806141c0826f70d869a156d2a1b890bb3df62baf32f76152d5565b901c90505b6180008216156141f05760806141eb826f31be135f97d08fd981231505542fcfa66152d5565b901c90505b6201000082161561421c576080614217826f09aa508b5b7a84e1c677de54f3e99bc96152d5565b901c90505b62020000821615614247576080614242826e5d6af8dedb81196699c329225ee6046152d5565b901c90505b6204000082161561427157608061426c826d2216e584f5fa1ea926041bedfe986152d5565b901c90505b62080000821615614299576080614294826b048a170391f7dc42444e8fa26152d5565b901c90505b60008460020b13156142b4576142b1816000196152c1565b90505b6142c36401000000008261543d565b156142cf5760016142d2565b60005b6126bd9060ff16602083901c615283565b6000806142f08585615363565b90506000614302600160601b85615363565b9050614325600160601b836001600160a01b0316836001600160a01b03166143ad565b9695505050505050565b60008061434f61433f87876152f4565b61434a90600161521b565b613ed8565b9050600061436161434a87600161521b565b9050600061436f8584615363565b9050600061437d8784615363565b90506143a0600160601b836001600160a01b0316836001600160a01b03166143ad565b9998505050505050505050565b60006143ba8484846138b5565b9050600082806143da57634e487b7160e01b600052601260045260246000fd5b8486091115611dcc5760001981106143f157600080fd5b806143fb81615422565b95945050505050565b828054614410906153c6565b90600052602060002090601f0160209004810192826144325760008555614478565b82601f1061444b5782800160ff19823516178555614478565b82800160010185558215614478579182015b8281111561447857823582559160200191906001019061445d565b50614484929150614488565b5090565b5b808211156144845760008155600101614489565b80356144a8816154ce565b919050565b60008083601f8401126144be578182fd5b5081356001600160401b038111156144d4578182fd5b60208301915083602082850101111561320f57600080fd5b80356144a881615507565b80356144a881615516565b805161ffff811681146144a857600080fd5b803562ffffff811681146144a857600080fd5b600060208284031215614538578081fd5b8135611dcc816154ce565b600060208284031215614554578081fd5b8151611dcc816154ce565b60008060408385031215614571578081fd5b823561457c816154ce565b9150602083013561458c816154ce565b809150509250929050565b6000806000606084860312156145ab578081fd5b83356145b6816154ce565b925060208401356145c6816154ce565b91506145d460408501614514565b90509250925092565b600080600080608085870312156145f2578182fd5b84356145fd816154ce565b9350602085013561460d816154ce565b925061461b60408601614514565b9150606085013561462b81615507565b939692955090935050565b60008060006060848603121561464a578081fd5b8335614655816154ce565b92506020840135614665816154ce565b929592945050506040919091013590565b6000806000806080858703121561468b578182fd5b8435614696816154ce565b935060208501356146a6816154ce565b92506040850135915060608501356001600160401b038111156146c7578182fd5b8501601f810187136146d7578182fd5b80356146ea6146e5826151f4565b6151c4565b8181528860208385010111156146fe578384fd5b81602084016020830137908101602001929092525092959194509250565b6000806040838503121561472e578182fd5b8235614739816154ce565b9150602083013561458c816154e3565b6000806040838503121561475b578182fd5b8235614766816154ce565b946020939093013593505050565b600080600060608486031215614788578081fd5b8335614793816154ce565b92506020840135915060408401356147aa816154ce565b809150509250925092565b600080600080608085870312156147ca578182fd5b84356147d5816154ce565b93506020850135925060408501356147ec81615516565b9150606085013561462b81615516565b6000806020838503121561480e578182fd5b82356001600160401b0380821115614824578384fd5b818501915085601f830112614837578384fd5b813581811115614845578485fd5b8660208260051b8501011115614859578485fd5b60209290920196919550909350505050565b60006020828403121561487c578081fd5b8151611dcc816154e3565b600060208284031215614898578081fd5b8135611dcc816154f1565b6000602082840312156148b4578081fd5b8151611dcc816154f1565b6000602082840312156148d0578081fd5b8135611dcc81615507565b600080602083850312156148ed578182fd5b82356001600160401b03811115614902578283fd5b61490e858286016144ad565b90969095509350505050565b60006020828403121561492b578081fd5b81516001600160401b03811115614940578182fd5b8201601f81018413614950578182fd5b805161495e6146e5826151f4565b818152856020838501011115614972578384fd5b6143fb82602083016020860161539a565b600060c08284031215610fd2578081fd5b6000608082840312156149a5578081fd5b604051608081018181106001600160401b03821117156149c7576149c76154b8565b60405282356149d5816154ce565b815260208301356149e5816154ce565b60208201526149f660408401614514565b60408201526060830135614a09816154ce565b60608201529392505050565b60006101608284031215610fd2578081fd5b60006101608284031215614a39578081fd5b614a4161519b565b614a4a8361449d565b8152614a586020840161449d565b6020820152614a696040840161449d565b6040820152614a7a60608401614514565b6060820152614a8b608084016144ec565b6080820152614a9c60a084016144ec565b60a0820152614aad60c084016144f7565b60c0820152614abe60e084016144f7565b60e0820152610100614ad18185016144f7565b90820152610120614ae38482016144f7565b90820152610140928301359281019290925250919050565b600060208284031215614b0c578081fd5b8135611dcc81615516565b600080600080600060a08688031215614b2e578283fd5b8551614b3981615516565b602087015160408801516060890151608090990151929a91995097965090945092505050565b600080600080600080600080610100898b031215614b7b578586fd5b8851614b86816154ce565b60208a0151909850614b9781615507565b9650614ba560408a01614502565b9550614bb360608a01614502565b9450614bc160808a01614502565b935060a0890151614bd1816154e3565b60c08a0151909350614be281615516565b60e08a0151909250614bf381615516565b809150509295985092959890939650565b600060208284031215614c15578081fd5b611dcc82614514565b600060208284031215614c2f578081fd5b5035919050565b600060208284031215614c47578081fd5b5051919050565b60008060408385031215614c60578182fd5b82359150602083013561458c816154ce565b600080600080600060a08688031215614c89578283fd5b853594506020860135614c9b81615516565b94979496505050506040830135926060810135926080909101359150565b60008060408385031215614ccb578182fd5b505080516020909101519092909150565b60008060008060608587031215614cf1578182fd5b843593506020850135925060408501356001600160401b03811115614d14578283fd5b614d20878288016144ad565b95989497509550505050565b60008151808452614d4481602086016020860161539a565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b60008251614d7a81846020870161539a565b9190910192915050565b60008351614d9681846020880161539a565b835190830190614daa81836020880161539a565b01949350505050565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061432590830184614d2c565b6001600160a01b0386168152600285810b602083015284900b60408201526001600160801b038316606082015260a060808201819052600090614e6790830184614d2c565b979650505050505050565b6001600160a01b039490941684526001600160801b039290921660208401526040830152606082015260800190565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b82811015614ef557603f19888603018452614ee3858351614d2c565b94509285019290850190600101614ec7565b5092979650505050505050565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b602081526000611dcc6020830184614d2c565b602080825260039082015262783c7960e81b604082015260600190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260029082015261262760f11b604082015260600190565b6020808252600490820152632ca6a4a760e11b604082015260600190565b602080825260029082015261050360f41b604082015260600190565b6020808252600c908201526b139bdd08185c1c1c9bdd995960a21b604082015260600190565b60208082526010908201526f0ae8aa89072409cdee8408adcdeeaced60831b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600490820152632c26a4a760e11b604082015260600190565b6020808252600b908201526a4f7574206f662074696d6560a81b604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b81516001600160a01b03908116825260208084015182169083015260408084015162ffffff1690830152606092830151169181019190915260800190565b6000808335601e1984360301811261516d578283fd5b8301803591506001600160401b03821115615186578283fd5b60200191503681900382131561320f57600080fd5b60405161016081016001600160401b03811182821017156151be576151be6154b8565b60405290565b604051601f8201601f191681016001600160401b03811182821017156151ec576151ec6154b8565b604052919050565b60006001600160401b0382111561520d5761520d6154b8565b50601f01601f191660200190565b60008160020b8360020b82821282627fffff038213811516156152405761524061548c565b82627fffff190382128116156152585761525861548c565b50019392505050565b60006001600160801b03828116848216808303821115614daa57614daa61548c565b600082198211156152965761529661548c565b500190565b60006001600160801b03838116806152b5576152b56154a2565b92169190910492915050565b6000826152d0576152d06154a2565b500490565b60008160001904831182151516156152ef576152ef61548c565b500290565b60008160020b8360020b82811281627fffff190183128115161561531a5761531a61548c565b81627fffff0183138116156153315761533161548c565b5090039392505050565b60006001600160801b038381169083168181101561535b5761535b61548c565b039392505050565b60006001600160a01b038381169083168181101561535b5761535b61548c565b6000828210156153955761539561548c565b500390565b60005b838110156153b557818101518382015260200161539d565b83811115611d205750506000910152565b600181811c908216806153da57607f821691505b60208210811415610fd257634e487b7160e01b600052602260045260246000fd5b60006001600160801b03828116808214156154185761541861548c565b6001019392505050565b60006000198214156154365761543661548c565b5060010190565b60008261544c5761544c6154a2565b500690565b60008160020b627fffff1981141561546b5761546b61548c565b9003919050565b6000600160ff1b8214156154885761548861548c565b0390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461251057600080fd5b801515811461251057600080fd5b6001600160e01b03198116811461251057600080fd5b8060020b811461251057600080fd5b6001600160801b038116811461251057600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220a0cc7fa41918973b837a5842af6934af522af6b2955afa6d628a938a709ab7d664736f6c634300080400330000000000000000000000008c7d3063579bdb0b90997e18a770eae32e1ebb08000000000000000000000000a51894664a773981c6c112c43ce576f315d5b1b6