60806040523480156200001157600080fd5b50604051620029433803806200294383398101604081905262000034916200016d565b3360405180604001604052806009815260200168135a5b995c881b999d60ba1b8152506040518060400160405280600581526020016426a4a722a960d91b8152508160009081620000869190620002f4565b506001620000958282620002f4565b5050506001600160a01b038116620000c757604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b620000d28162000105565b50600980546001600160a01b0319166001600160a01b038416179055600a620000fc8282620002f4565b505050620003c0565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156200018157600080fd5b82516001600160a01b03811681146200019957600080fd5b602084810151919350906001600160401b0380821115620001b957600080fd5b818601915086601f830112620001ce57600080fd5b815181811115620001e357620001e362000157565b604051601f8201601f19908116603f011681019083821181831017156200020e576200020e62000157565b8160405282815289868487010111156200022757600080fd5b600093505b828410156200024b57848401860151818501870152928501926200022c565b60008684830101528096505050505050509250929050565b600181811c908216806200027857607f821691505b6020821081036200029957634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002ef576000816000526020600020601f850160051c81016020861015620002ca5750805b601f850160051c820191505b81811015620002eb57828155600101620002d6565b5050505b505050565b81516001600160401b0381111562000310576200031062000157565b620003288162000321845462000263565b846200029f565b602080601f831160018114620003605760008415620003475750858301515b600019600386901b1c1916600185901b178555620002eb565b600085815260208120601f198616915b82811015620003915788860151825594840194600190910190840162000370565b5085821015620003b05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b61257380620003d06000396000f3fe6080604052600436106102a05760003560e01c806370a082311161016e578063a22cb465116100cb578063d1b68aac1161007f578063e985e9c511610064578063e985e9c5146106f8578063f2fde38b14610741578063fc0c546a1461076157600080fd5b8063d1b68aac146106c2578063e0df5b6f146106d857600080fd5b8063bcc78bf0116100b0578063bcc78bf01461066d578063c87b56dd14610682578063d08f6b64146106a257600080fd5b8063a22cb4651461062d578063b88d4fde1461064d57600080fd5b806384a81a541161012257806395d89b411161010757806395d89b41146105d65780639c83e848146105eb578063a0e67e2b1461060b57600080fd5b806384a81a541461059e5780638da5cb5b146105b857600080fd5b806371646f5b1161015357806371646f5b1461053e578063774731b014610551578063806c440d1461057157600080fd5b806370a0823114610509578063715018a61461052957600080fd5b806336e986ef1161021c578063545e1f0a116101d05780636352211e116101b55780636352211e146104af57806364627ee8146104cf57806369020b94146104ef57600080fd5b8063545e1f0a14610479578063626be5671461049957600080fd5b806341476a411161020157806341476a411461043c57806342842e0e146104445780634395acf91461046457600080fd5b806336e986ef146104075780633c130d901461042757600080fd5b8063095ea7b3116102735780631bfd3cc3116102585780631bfd3cc31461039657806323b872dd146103ba5780632c043bdf146103da57600080fd5b8063095ea7b314610356578063179750ec1461037657600080fd5b806301ffc9a7146102a557806304a974f7146102da57806306fdde03146102fc578063081812fc1461031e575b600080fd5b3480156102b157600080fd5b506102c56102c0366004611eba565b610786565b60405190151581526020015b60405180910390f35b3480156102e657600080fd5b506102fa6102f5366004611eee565b6107e2565b005b34801561030857600080fd5b50610311610824565b6040516102d19190611f59565b34801561032a57600080fd5b5061033e610339366004611f6c565b6108b6565b6040516001600160a01b0390911681526020016102d1565b34801561036257600080fd5b506102fa610371366004611f85565b6108df565b34801561038257600080fd5b506102fa610391366004611f85565b6108ee565b3480156103a257600080fd5b506103ac600e5481565b6040519081526020016102d1565b3480156103c657600080fd5b506102fa6103d5366004611faf565b610939565b3480156103e657600080fd5b506103ac6103f5366004611f6c565b600b6020526000908152604090205481565b34801561041357600080fd5b506103ac610422366004611eee565b6109e2565b34801561043357600080fd5b506103116109fa565b6103ac610a88565b34801561045057600080fd5b506102fa61045f366004611faf565b610b5f565b34801561047057600080fd5b506102fa610b7f565b34801561048557600080fd5b506102fa610494366004611f6c565b610c2e565b3480156104a557600080fd5b506103ac60085481565b3480156104bb57600080fd5b5061033e6104ca366004611f6c565b610c3b565b3480156104db57600080fd5b5060095461033e906001600160a01b031681565b3480156104fb57600080fd5b50600f546102c59060ff1681565b34801561051557600080fd5b506103ac610524366004611eee565b610c46565b34801561053557600080fd5b506102fa610ca7565b34801561054a57600080fd5b50476103ac565b34801561055d57600080fd5b506102fa61056c366004611f85565b610cbb565b34801561057d57600080fd5b5061059161058c366004611eee565b610dcc565b6040516102d19190611feb565b3480156105aa57600080fd5b50600d546102c59060ff1681565b3480156105c457600080fd5b506007546001600160a01b031661033e565b3480156105e257600080fd5b50610311610f1f565b3480156105f757600080fd5b506102fa61060636600461203d565b610f2e565b34801561061757600080fd5b50610620610f49565b6040516102d1919061205a565b34801561063957600080fd5b506102fa6106483660046120bc565b611087565b34801561065957600080fd5b506102fa61066836600461217f565b611092565b34801561067957600080fd5b506103ac6110a9565b34801561068e57600080fd5b5061031161069d366004611f6c565b61120e565b3480156106ae57600080fd5b506102fa6106bd36600461203d565b61131f565b3480156106ce57600080fd5b506103ac600c5481565b3480156106e457600080fd5b506102fa6106f33660046121fb565b61133a565b34801561070457600080fd5b506102c5610713366004612244565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561074d57600080fd5b506102fa61075c366004611eee565b61134e565b34801561076d57600080fd5b50600d5461033e9061010090046001600160a01b031681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f490649060000000000000000000000000000000000000000000000000000000014806107dc57506107dc826113a2565b92915050565b6107ea611485565b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60606000805461083390612277565b80601f016020809104026020016040519081016040528092919081815260200182805461085f90612277565b80156108ac5780601f10610881576101008083540402835291602001916108ac565b820191906000526020600020905b81548152906001019060200180831161088f57829003601f168201915b5050505050905090565b60006108c1826114cb565b506000828152600460205260409020546001600160a01b03166107dc565b6108ea82823361151d565b5050565b6108f6611485565b600d80546001600160a01b03909316610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff90931692909217909155600e55565b6001600160a01b03821661096857604051633250574960e11b8152600060048201526024015b60405180910390fd5b600061097583833361152a565b9050836001600160a01b0316816001600160a01b0316146109dc576040517f64283d7b0000000000000000000000000000000000000000000000000000000081526001600160a01b038086166004830152602482018490528216604482015260640161095f565b50505050565b60006109ec611485565b6107dc8261163b565b919050565b600a8054610a0790612277565b80601f0160208091040260200160405190810160405280929190818152602001828054610a3390612277565b8015610a805780601f10610a5557610100808354040283529160200191610a80565b820191906000526020600020905b815481529060010190602001808311610a6357829003601f168201915b505050505081565b600d5460009060ff16610add5760405162461bcd60e51b815260206004820181905260248201527f4e6f7420616c6c6f77206d696e742077697468206e617469766520746f6b656e604482015260640161095f565b600c543414610b545760405162461bcd60e51b815260206004820152602a60248201527f53656e74204574686572206d757374206d61746368207468652073706563696660448201527f69656420616d6f756e7400000000000000000000000000000000000000000000606482015260840161095f565b60006107dc3361163b565b610b7a83838360405180602001604052806000815250611092565b505050565b6009546001600160a01b03163314610bff5760405162461bcd60e51b815260206004820152602a60248201527f5769746864726177206661696c7572652c20796f7520617265206d757374206660448201527f756e6420686f6c64657200000000000000000000000000000000000000000000606482015260840161095f565b60405133904780156108fc02916000818181858888f19350505050158015610c2b573d6000803e3d6000fd5b50565b610c36611485565b600c55565b60006107dc826114cb565b60006001600160a01b038216610c8b576040517f89c62b640000000000000000000000000000000000000000000000000000000081526000600482015260240161095f565b506001600160a01b031660009081526003602052604090205490565b610caf611485565b610cb960006116c3565b565b6009546001600160a01b03163314610d3b5760405162461bcd60e51b815260206004820152602a60248201527f5769746864726177206661696c7572652c20796f7520617265206d757374206660448201527f756e6420686f6c64657200000000000000000000000000000000000000000000606482015260840161095f565b6009546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101839052839182169063a9059cbb906044016020604051808303816000875af1158015610da8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109dc91906122b1565b6060600060085467ffffffffffffffff811115610deb57610deb6120f3565b604051908082528060200260200182016040528015610e14578160200160208202803683370190505b509050600060015b6008548111610e84576000818152600260205260409020546001600160a01b03868116911603610e725780838381518110610e5957610e596122ce565b602090810291909101015281610e6e816122fa565b9250505b80610e7c816122fa565b915050610e1c565b5060008167ffffffffffffffff811115610ea057610ea06120f3565b604051908082528060200260200182016040528015610ec9578160200160208202803683370190505b50905060005b82811015610f1657838181518110610ee957610ee96122ce565b6020026020010151828281518110610f0357610f036122ce565b6020908102919091010152600101610ecf565b50949350505050565b60606001805461083390612277565b610f36611485565b600d805460ff1916911515919091179055565b606060085467ffffffffffffffff811115610f6657610f666120f3565b604051908082528060200260200182016040528015610fc457816020015b610fb160405180606001604052806000815260200160006001600160a01b03168152602001600081525090565b815260200190600190039081610f845790505b50905060005b600854811015611083576000610fe1826001612314565b6000818152600260205260409020549091506001600160a01b03161561107a5760006040518060600160405280838152602001611033846000908152600260205260409020546001600160a01b031690565b6001600160a01b03168152602001600b60008581526020019081526020016000205481525090508084848151811061106d5761106d6122ce565b6020026020010181905250505b50600101610fca565b5090565b6108ea33838361172d565b61109d848484610939565b6109dc848484846117e5565b600f5460009060ff166110fe5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420616c6c6f77206d696e74207769746820455243323000000000000000604482015260640161095f565b600d54600e546040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101919091526101009091046001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119a91906122b1565b610b54576040805162461bcd60e51b81526020600482015260248101919091527f5472616e73666572206661696c65642e20456e7375726520796f75206861766560448201527f20617070726f7665642074686520636f727265637420616c6c6f77616e63652e606482015260840161095f565b6060611219826114cb565b506000828152600660205260408120805461123390612277565b80601f016020809104026020016040519081016040528092919081815260200182805461125f90612277565b80156112ac5780601f10611281576101008083540402835291602001916112ac565b820191906000526020600020905b81548152906001019060200180831161128f57829003601f168201915b5050505050905060006112ca60408051602081019091526000815290565b905080516000036112dc575092915050565b81511561130e5780826040516020016112f6929190612327565b60405160208183030381529060405292505050919050565b61131784611958565b949350505050565b611327611485565b600f805460ff1916911515919091179055565b611342611485565b600a6108ea82826123a6565b611356611485565b6001600160a01b038116611399576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526000600482015260240161095f565b610c2b816116c3565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd00000000000000000000000000000000000000000000000000000000148061143557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b806107dc57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146107dc565b6007546001600160a01b03163314610cb9576040517f118cdaa700000000000000000000000000000000000000000000000000000000815233600482015260240161095f565b6000818152600260205260408120546001600160a01b0316806107dc576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810184905260240161095f565b610b7a83838360016119cd565b6000828152600260205260408120546001600160a01b039081169083161561155757611557818486611b23565b6001600160a01b03811615611595576115746000856000806119cd565b6001600160a01b038116600090815260036020526040902080546000190190555b6001600160a01b038516156115c4576001600160a01b0385166000908152600360205260409020805460010190555b60008481526002602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b600080600854600161164d9190612314565b90506116598382611bb9565b6000600a61166683611c37565b604051602001611677929190612466565b60405160208183030381529060405290506116928282611cd7565b6000828152600b6020526040812042905560088054600192906116b6908490612314565b9091555091949350505050565b600780546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216611778576040517f5b08ba180000000000000000000000000000000000000000000000000000000081526001600160a01b038316600482015260240161095f565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b156109dc576040517f150b7a020000000000000000000000000000000000000000000000000000000081526001600160a01b0384169063150b7a02906118409033908890879087906004016124e4565b6020604051808303816000875af192505050801561187b575060408051601f3d908101601f1916820190925261187891810190612520565b60015b6118e4573d8080156118a9576040519150601f19603f3d011682016040523d82523d6000602084013e6118ae565b606091505b5080516000036118dc57604051633250574960e11b81526001600160a01b038516600482015260240161095f565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167f150b7a02000000000000000000000000000000000000000000000000000000001461195157604051633250574960e11b81526001600160a01b038516600482015260240161095f565b5050505050565b6060611963826114cb565b50600061197b60408051602081019091526000815290565b9050600081511161199b57604051806020016040528060008152506119c6565b806119a584611c37565b6040516020016119b6929190612327565b6040516020818303038152906040525b9392505050565b80806119e157506001600160a01b03821615155b15611adb5760006119f1846114cb565b90506001600160a01b03831615801590611a1d5750826001600160a01b0316816001600160a01b031614155b8015611a4f57506001600160a01b0380821660009081526005602090815260408083209387168352929052205460ff16155b15611a91576040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260240161095f565b8115611ad95783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b5050600090815260046020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611b2e838383611d27565b610b7a576001600160a01b038316611b75576040517f7e2732890000000000000000000000000000000000000000000000000000000081526004810182905260240161095f565b6040517f177e802f0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024810182905260440161095f565b6001600160a01b038216611be357604051633250574960e11b81526000600482015260240161095f565b6000611bf18383600061152a565b90506001600160a01b03811615610b7a576040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526000600482015260240161095f565b60606000611c4483611daa565b600101905060008167ffffffffffffffff811115611c6457611c646120f3565b6040519080825280601f01601f191660200182016040528015611c8e576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611c9857509392505050565b6000828152600660205260409020611cef82826123a6565b506040518281527ff8e1a15aba9398e019f0b49df1a4fde98ee17ae345cb5f6b5e2c27f5033e8ce79060200160405180910390a15050565b60006001600160a01b038316158015906113175750826001600160a01b0316846001600160a01b03161480611d8157506001600160a01b0380851660009081526005602090815260408083209387168352929052205460ff165b806113175750506000908152600460205260409020546001600160a01b03908116911614919050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611df3577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310611e1f576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611e3d57662386f26fc10000830492506010015b6305f5e1008310611e55576305f5e100830492506008015b6127108310611e6957612710830492506004015b60648310611e7b576064830492506002015b600a83106107dc5760010192915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610c2b57600080fd5b600060208284031215611ecc57600080fd5b81356119c681611e8c565b80356001600160a01b03811681146109f557600080fd5b600060208284031215611f0057600080fd5b6119c682611ed7565b60005b83811015611f24578181015183820152602001611f0c565b50506000910152565b60008151808452611f45816020860160208601611f09565b601f01601f19169290920160200192915050565b6020815260006119c66020830184611f2d565b600060208284031215611f7e57600080fd5b5035919050565b60008060408385031215611f9857600080fd5b611fa183611ed7565b946020939093013593505050565b600080600060608486031215611fc457600080fd5b611fcd84611ed7565b9250611fdb60208501611ed7565b9150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561202357835183529284019291840191600101612007565b50909695505050505050565b8015158114610c2b57600080fd5b60006020828403121561204f57600080fd5b81356119c68161202f565b602080825282518282018190526000919060409081850190868401855b828110156120af57815180518552868101516001600160a01b0316878601528501518585015260609093019290850190600101612077565b5091979650505050505050565b600080604083850312156120cf57600080fd5b6120d883611ed7565b915060208301356120e88161202f565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612124576121246120f3565b604051601f8501601f19908116603f0116810190828211818310171561214c5761214c6120f3565b8160405280935085815286868601111561216557600080fd5b858560208301376000602087830101525050509392505050565b6000806000806080858703121561219557600080fd5b61219e85611ed7565b93506121ac60208601611ed7565b925060408501359150606085013567ffffffffffffffff8111156121cf57600080fd5b8501601f810187136121e057600080fd5b6121ef87823560208401612109565b91505092959194509250565b60006020828403121561220d57600080fd5b813567ffffffffffffffff81111561222457600080fd5b8201601f8101841361223557600080fd5b61131784823560208401612109565b6000806040838503121561225757600080fd5b61226083611ed7565b915061226e60208401611ed7565b90509250929050565b600181811c9082168061228b57607f821691505b6020821081036122ab57634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156122c357600080fd5b81516119c68161202f565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361230d5761230d6122e4565b5060010190565b808201808211156107dc576107dc6122e4565b60008351612339818460208801611f09565b83519083019061234d818360208801611f09565b01949350505050565b601f821115610b7a576000816000526020600020601f850160051c8101602086101561237f5750805b601f850160051c820191505b8181101561239e5782815560010161238b565b505050505050565b815167ffffffffffffffff8111156123c0576123c06120f3565b6123d4816123ce8454612277565b84612356565b602080601f83116001811461240957600084156123f15750858301515b600019600386901b1c1916600185901b17855561239e565b600085815260208120601f198616915b8281101561243857888601518255948401946001909101908401612419565b50858210156124565787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600080845461247481612277565b6001828116801561248c57600181146124a1576124d0565b60ff19841687528215158302870194506124d0565b8860005260208060002060005b858110156124c75781548a8201529084019082016124ae565b50505082870194505b50505050835161234d818360208801611f09565b60006001600160a01b038087168352808616602084015250836040830152608060608301526125166080830184611f2d565b9695505050505050565b60006020828403121561253257600080fd5b81516119c681611e8c56fea264697066735822122033eefc0d47677150134e54504fce8445edd889e2d394160b2cb8dd4eb39efceb64736f6c63430008180033000000000000000000000000b9eb8bd5a3ceffd907d74a5232940277fb23b20d0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000002e68747470733a2f2f6274632d67616d652e6b6172646961636861696e2e696f2f6170692f76312f6d696e6572732f000000000000000000000000000000000000