0x608060405234801561001057600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36110ae8061005f6000396000f3fe6080604052600436106100f35760003560e01c8063850dbe381161008a578063d3ca2d3311610059578063d3ca2d33146102bb578063e30c3978146102f8578063e9be02aa14610325578063ee26eed11461033a57600080fd5b8063850dbe38146102035780638da5cb5b14610242578063a519121a14610294578063d0e30db0146102b357600080fd5b80633ccfd60b116100c65780633ccfd60b146101a85780634004336d146101bd5780634e71e0c8146101d05780636bc1fb53146101e557600080fd5b8063078dfbe7146100f857806312c7df731461011a578063309e638714610169578063372500ab14610193575b600080fd5b34801561010457600080fd5b50610118610113366004610ebf565b610379565b005b34801561012657600080fd5b50600254610143906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561017557600080fd5b506003546101839060ff1681565b6040519015158152602001610160565b34801561019f57600080fd5b50610118610569565b3480156101b457600080fd5b5061011861078e565b6101186101cb366004610f02565b6108ce565b3480156101dc57600080fd5b50610118610a86565b3480156101f157600080fd5b50680100000000000000004411610183565b34801561020f57600080fd5b5061014361021e366004610f3b565b6004602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b34801561024e57600080fd5b5060005461026f9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610160565b3480156102a057600080fd5b5060035461018390610100900460ff1681565b610118610b9c565b3480156102c757600080fd5b506002546101439070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b34801561030457600080fd5b5060015461026f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033157600080fd5b50610118610d33565b34801561034657600080fd5b50610143610355366004610f3b565b6005602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b60005473ffffffffffffffffffffffffffffffffffffffff1633146103ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b81156105235773ffffffffffffffffffffffffffffffffffffffff83161515806104265750805b61048c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f2061646472657373000000000000000000000060448201526064016103f6565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff85167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600180549091169055505050565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff85161790555b505050565b466001146105a3576040517fbfec35c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff6101009091041615156001146105ea576040517f776f0c4100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600460205260408120546002546fffffffffffffffffffffffffffffffff91821692917001000000000000000000000000000000008204811691610635911684610f85565b61063f9190610fbd565b33600090815260046020526040812080547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905560028054929350839290919061069d9084906fffffffffffffffffffffffffffffffff16611013565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555081600260108282829054906101000a90046fffffffffffffffffffffffffffffffff166107009190611013565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055503373ffffffffffffffffffffffffffffffffffffffff166108fc826fffffffffffffffffffffffffffffffff169081150290604051600060405180830381858888f19350505050158015610564573d6000803e3d6000fd5b466001146107c8576040517fbfec35c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b68010000000000000000441161080a576040517f5acf44cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600460205260409020546fffffffffffffffffffffffffffffffff1615801590610847575060035460ff6101009091041615156001145b1561085457610854610569565b3360008181526005602052604080822080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000811690915590516fffffffffffffffffffffffffffffffff909116929183156108fc02918491818181858888f193505050501580156108ca573d6000803e3d6000fd5b5050565b46600114610908576040517fbfec35c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005473ffffffffffffffffffffffffffffffffffffffff163314610989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103f6565b600354610100900460ff16156109cb576040517ffeb1288700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34816fffffffffffffffffffffffffffffffff1614610a16576040517fa35b720800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055600280546fffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff16338114610b08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e657260448201526064016103f6565b6000805460405173ffffffffffffffffffffffffffffffffffffffff808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179055600180549091169055565b46600114610bd6576040517fbfec35c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b68010000000000000000441115610c19576040517f67494a0600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600090815260056020526040812080543492839291610c4c9084906fffffffffffffffffffffffffffffffff16611044565b82546101009290920a6fffffffffffffffffffffffffffffffff81810219909316918316021790915533600090815260046020526040812080548594509092610c9791859116611044565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555080600260108282829054906101000a90046fffffffffffffffffffffffffffffffff16610cfa9190611044565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103f6565b60035460ff1615610df1576040517f2ac2597f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b4660011415610e2c576040517f17d9178600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560405133904780156108fc02916000818181858888f19350505050158015610e83573d6000803e3d6000fd5b50565b803573ffffffffffffffffffffffffffffffffffffffff81168114610eaa57600080fd5b919050565b80358015158114610eaa57600080fd5b600080600060608486031215610ed457600080fd5b610edd84610e86565b9250610eeb60208501610eaf565b9150610ef960408501610eaf565b90509250925092565b600060208284031215610f1457600080fd5b81356fffffffffffffffffffffffffffffffff81168114610f3457600080fd5b9392505050565b600060208284031215610f4d57600080fd5b610f3482610e86565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615610fb457610fb4610f56565b02949350505050565b60006fffffffffffffffffffffffffffffffff80841680611007577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b60006fffffffffffffffffffffffffffffffff8381169083168181101561103c5761103c610f56565b039392505050565b60006fffffffffffffffffffffffffffffffff80831681851680830382111561106f5761106f610f56565b0194935050505056fea264697066735822122052b00113094b9f95f93801d9f1f685155b3c42364e09581b78f960246bca418f64736f6c634300080b0033