60806040526006805460ff191660011790553480156200001e57600080fd5b50604051620022a8380380620022a883398101604081905262000041916200026f565b600a54600160a01b900460ff161580620000655750600a546001600160a01b031633145b620000a85760405162461bcd60e51b815260206004820152600f60248201526e3737ba1034b734ba34b0b634bd32b960891b604482015260640160405180910390fd5b600a80546001600160a01b031916331790558151620000cf90600390602085019062000112565b508151620000e590600490602085019062000112565b50620000f181620000f9565b50506200032c565b80516200010e90600290602084019062000112565b5050565b8280546200012090620002d9565b90600052602060002090601f0160209004810192826200014457600085556200018f565b82601f106200015f57805160ff19168380011785556200018f565b828001600101855582156200018f579182015b828111156200018f57825182559160200191906001019062000172565b506200019d929150620001a1565b5090565b5b808211156200019d5760008155600101620001a2565b600082601f830112620001ca57600080fd5b81516001600160401b0380821115620001e757620001e762000316565b604051601f8301601f19908116603f0116810190828211818310171562000212576200021262000316565b816040528381526020925086838588010111156200022f57600080fd5b600091505b8382101562000253578582018301518183018401529082019062000234565b83821115620002655760008385830101525b9695505050505050565b600080604083850312156200028357600080fd5b82516001600160401b03808211156200029b57600080fd5b620002a986838701620001b8565b93506020850151915080821115620002c057600080fd5b50620002cf85828601620001b8565b9150509250929050565b600181811c90821680620002ee57607f821691505b602082108114156200031057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611f6c806200033c6000396000f3fe60806040526004361061018e5760003560e01c806351cff8d9116100d6578063c204642c1161007f578063ea66696c11610059578063ea66696c146104c3578063f242432a146104e3578063ffd31af61461050357600080fd5b8063c204642c1461043b578063c793803c1461045b578063e985e9c51461047a57600080fd5b8063a22cb465116100b0578063a22cb465146103b6578063b2bdfa7b146103d6578063bd85b0391461040e57600080fd5b806351cff8d9146103515780637874e4211461037157806395d89b41146103a157600080fd5b80631b2ef1ca116101385780633ccfd60b116101125780633ccfd60b146102ef5780634cd88b76146103045780634e1273f41461032457600080fd5b80631b2ef1ca146102825780631d126041146102a25780632eb2c2d6146102cf57600080fd5b80630e89341c116101695780630e89341c1461021f578063156e29f61461023f578063158ef93e1461026157600080fd5b8062fdd58e1461019a57806301ffc9a7146101cd57806306fdde03146101fd57600080fd5b3661019557005b600080fd5b3480156101a657600080fd5b506101ba6101b5366004611890565b61051d565b6040519081526020015b60405180910390f35b3480156101d957600080fd5b506101ed6101e83660046119b3565b61055b565b60405190151581526020016101c4565b34801561020957600080fd5b506102126105ab565b6040516101c49190611c9e565b34801561022b57600080fd5b5061021261023a366004611a47565b610639565b34801561024b57600080fd5b5061025f61025a3660046118ba565b61067a565b005b34801561026d57600080fd5b50600a546101ed90600160a01b900460ff1681565b34801561028e57600080fd5b5061025f61029d366004611a79565b61069d565b3480156102ae57600080fd5b506101ba6102bd366004611a47565b60086020526000908152604090205481565b3480156102db57600080fd5b5061025f6102ea36600461174a565b610734565b3480156102fb57600080fd5b5061025f6107d4565b34801561031057600080fd5b5061025f61031f3660046119ed565b610812565b34801561033057600080fd5b5061034461033f3660046118ed565b6108d1565b6040516101c49190611c66565b34801561035d57600080fd5b5061025f61036c3660046116f5565b6109fb565b34801561037d57600080fd5b506101ed61038c366004611a47565b60076020526000908152604090205460ff1681565b3480156103ad57600080fd5b50610212610afd565b3480156103c257600080fd5b5061025f6103d1366004611859565b610b0a565b3480156103e257600080fd5b50600a546103f6906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b34801561041a57600080fd5b506101ba610429366004611a47565b60009081526008602052604090205490565b34801561044757600080fd5b5061025f610456366004611951565b610b15565b34801561046757600080fd5b506006546101ed90610100900460ff1681565b34801561048657600080fd5b506101ed610495366004611717565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b3480156104cf57600080fd5b5061025f6104de366004611951565b610bc6565b3480156104ef57600080fd5b5061025f6104fe3660046117f4565b610c7a565b34801561050f57600080fd5b506006546101ed9060ff1681565b60006001600160a01b03831661053257600080fd5b600a546001600160a01b03848116911614156105515750600954610555565b5060015b92915050565b60006001600160e01b03198216636cdb3d1360e11b148061058c57506001600160e01b031982166303a24d0760e21b145b8061055557506301ffc9a760e01b6001600160e01b0319831614610555565b600380546105b890611d7a565b80601f01602080910402602001604051908101604052809291908181526020018280546105e490611d7a565b80156106315780601f1061060657610100808354040283529160200191610631565b820191906000526020600020905b81548152906001019060200180831161061457829003601f168201915b505050505081565b60606000821161064857600080fd5b600261065383610d01565b604051602001610664929190611b1e565b6040516020818303038152906040529050919050565b60408051600081526020810190915261069890849084908490610e1f565b505050565b6001600955336000815b831561072d57836106b781611d63565b945050806001600160a01b0316826001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62886001604051610713929190918252602082015260400190565b60405180910390a48461072581611de2565b9550506106a7565b5050505050565b6001600160a01b03851633148061075057506107508533610495565b6107c75760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f742060448201527f6f776e6572206e6f7220617070726f766564000000000000000000000000000060648201526084015b60405180910390fd5b61072d8585858585610f34565b600a5460405147916001600160a01b03169082156108fc029083906000818181858888f1935050505015801561080e573d6000803e3d6000fd5b5050565b600a54600160a01b900460ff1615806108355750600a546001600160a01b031633145b6108815760405162461bcd60e51b815260206004820152600f60248201527f6e6f7420696e697469616c697a6572000000000000000000000000000000000060448201526064016107be565b600a805473ffffffffffffffffffffffffffffffffffffffff19163317905581516108b39060039060208501906114e4565b5081516108c79060049060208501906114e4565b5061080e8161106c565b606081518351146109365760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016107be565b6000835167ffffffffffffffff81111561095257610952611e53565b60405190808252806020026020018201604052801561097b578160200160208202803683370190505b50905060005b84518110156109f3576109c685828151811061099f5761099f611e3d565b60200260200101518583815181106109b9576109b9611e3d565b602002602001015161051d565b8282815181106109d8576109d8611e3d565b60209081029190910101526109ec81611de2565b9050610981565b509392505050565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015610a3d57600080fd5b505afa158015610a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a759190611a60565b600a5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb90604401602060405180830381600087803b158015610ac557600080fd5b505af1158015610ad9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106989190611996565b600480546105b890611d7a565b61080e33838361107f565b600a54825133916001600160a01b0316905b62ffffff81161561072d5780610b3c81611d44565b915050848162ffffff1681518110610b5657610b56611e3d565b60200260200101516001600160a01b0316826001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628780610ba790611de2565b60408051928352600160208401529099500160405180910390a4610b27565b600a5482516001600160a01b03909116905b62ffffff811615610c745780610bed81611d44565b915050838162ffffff1681518110610c0757610c07611e3d565b60200260200101516001600160a01b0316826001600160a01b0316836001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62866001604051610c67929190918252602082015260400190565b60405180910390a4610bd8565b50505050565b6001600160a01b038516331480610c965750610c968533610495565b610cf45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016107be565b61072d8585858585611160565b606081610d255750506040805180820190915260018152600360fc1b602082015290565b8160005b8115610d4f5780610d3981611de2565b9150610d489050600a83611ced565b9150610d29565b60008167ffffffffffffffff811115610d6a57610d6a611e53565b6040519080825280601f01601f191660200182016040528015610d94576020820181803683370190505b5090505b8415610e1757610da9600183611d01565b9150610db6600a86611dfd565b610dc1906030611cd5565b60f81b818381518110610dd657610dd6611e3d565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350610e10600a86611ced565b9450610d98565b949350505050565b6001600160a01b038416610e7f5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b60648201526084016107be565b6000838152602081815260408083206001600160a01b0388168452909152812080543392859291610eb1908490611cd5565b909155505060008481526008602052604081208054859290610ed4908490611cd5565b909155505060408051858152602081018590526001600160a01b0380881692600092918516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a461072d8160008787878761121b565b8151835114610f965760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b60648201526084016107be565b6001600160a01b038416610ffa5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016107be565b6000339050846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161104e929190611c79565b60405180910390a46110648187878787876113d9565b505050505050565b805161080e9060029060208401906114e4565b816001600160a01b0316836001600160a01b031614156110f35760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016107be565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166111c45760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b60648201526084016107be565b604080518481526020810184905233916001600160a01b03808816929089169184917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46110648187878787875b6001600160a01b0384163b156110645760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061125f9089908990889088908890600401611c23565b602060405180830381600087803b15801561127957600080fd5b505af19250505080156112a9575060408051601f3d908101601f191682019092526112a6918101906119d0565b60015b61135f576112b5611e69565b806308c379a014156112ef57506112ca611e85565b806112d557506112f1565b8060405162461bcd60e51b81526004016107be9190611c9e565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e204552433131353560448201527f526563656976657220696d706c656d656e74657200000000000000000000000060648201526084016107be565b6001600160e01b0319811663f23a6e6160e01b146113d05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016107be565b50505050505050565b6001600160a01b0384163b156110645760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061141d9089908990889088908890600401611bc5565b602060405180830381600087803b15801561143757600080fd5b505af1925050508015611467575060408051601f3d908101601f19168201909252611464918101906119d0565b60015b611473576112b5611e69565b6001600160e01b0319811663bc197c8160e01b146113d05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b60648201526084016107be565b8280546114f090611d7a565b90600052602060002090601f0160209004810192826115125760008555611558565b82601f1061152b57805160ff1916838001178555611558565b82800160010185558215611558579182015b8281111561155857825182559160200191906001019061153d565b50611564929150611568565b5090565b5b808211156115645760008155600101611569565b80356001600160a01b038116811461159457600080fd5b919050565b600082601f8301126115aa57600080fd5b813560206115b782611cb1565b6040516115c48282611db5565b8381528281019150858301600585901b870184018810156115e457600080fd5b60005b8581101561160a576115f88261157d565b845292840192908401906001016115e7565b5090979650505050505050565b600082601f83011261162857600080fd5b8135602061163582611cb1565b6040516116428282611db5565b8381528281019150858301600585901b8701840188101561166257600080fd5b60005b8581101561160a57813584529284019290840190600101611665565b600082601f83011261169257600080fd5b813567ffffffffffffffff8111156116ac576116ac611e53565b6040516116c3601f8301601f191660200182611db5565b8181528460208386010111156116d857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561170757600080fd5b6117108261157d565b9392505050565b6000806040838503121561172a57600080fd5b6117338361157d565b91506117416020840161157d565b90509250929050565b600080600080600060a0868803121561176257600080fd5b61176b8661157d565b94506117796020870161157d565b9350604086013567ffffffffffffffff8082111561179657600080fd5b6117a289838a01611617565b945060608801359150808211156117b857600080fd5b6117c489838a01611617565b935060808801359150808211156117da57600080fd5b506117e788828901611681565b9150509295509295909350565b600080600080600060a0868803121561180c57600080fd5b6118158661157d565b94506118236020870161157d565b93506040860135925060608601359150608086013567ffffffffffffffff81111561184d57600080fd5b6117e788828901611681565b6000806040838503121561186c57600080fd5b6118758361157d565b9150602083013561188581611f0f565b809150509250929050565b600080604083850312156118a357600080fd5b6118ac8361157d565b946020939093013593505050565b6000806000606084860312156118cf57600080fd5b6118d88461157d565b95602085013595506040909401359392505050565b6000806040838503121561190057600080fd5b823567ffffffffffffffff8082111561191857600080fd5b61192486838701611599565b9350602085013591508082111561193a57600080fd5b5061194785828601611617565b9150509250929050565b6000806040838503121561196457600080fd5b823567ffffffffffffffff81111561197b57600080fd5b61198785828601611599565b95602094909401359450505050565b6000602082840312156119a857600080fd5b815161171081611f0f565b6000602082840312156119c557600080fd5b813561171081611f20565b6000602082840312156119e257600080fd5b815161171081611f20565b60008060408385031215611a0057600080fd5b823567ffffffffffffffff80821115611a1857600080fd5b611a2486838701611681565b93506020850135915080821115611a3a57600080fd5b5061194785828601611681565b600060208284031215611a5957600080fd5b5035919050565b600060208284031215611a7257600080fd5b5051919050565b60008060408385031215611a8c57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015611acb57815187529582019590820190600101611aaf565b509495945050505050565b60008151808452611aee816020860160208601611d18565b601f01601f19169290920160200192915050565b60008151611b14818560208601611d18565b9290920192915050565b600080845481600182811c915080831680611b3a57607f831692505b6020808410821415611b5a57634e487b7160e01b86526022600452602486fd5b818015611b6e5760018114611b7f57611bac565b60ff19861689528489019650611bac565b60008b81526020902060005b86811015611ba45781548b820152908501908301611b8b565b505084890196505b505050505050611bbc8185611b02565b95945050505050565b60006001600160a01b03808816835280871660208401525060a06040830152611bf160a0830186611a9b565b8281036060840152611c038186611a9b565b90508281036080840152611c178185611ad6565b98975050505050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152611c5b60a0830184611ad6565b979650505050505050565b6020815260006117106020830184611a9b565b604081526000611c8c6040830185611a9b565b8281036020840152611bbc8185611a9b565b6020815260006117106020830184611ad6565b600067ffffffffffffffff821115611ccb57611ccb611e53565b5060051b60200190565b60008219821115611ce857611ce8611e11565b500190565b600082611cfc57611cfc611e27565b500490565b600082821015611d1357611d13611e11565b500390565b60005b83811015611d33578181015183820152602001611d1b565b83811115610c745750506000910152565b600062ffffff821680611d5957611d59611e11565b6000190192915050565b600081611d7257611d72611e11565b506000190190565b600181811c90821680611d8e57607f821691505b60208210811415611daf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff81118282101715611ddb57611ddb611e53565b6040525050565b6000600019821415611df657611df6611e11565b5060010190565b600082611e0c57611e0c611e27565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d1115611e825760046000803e5060005160e01c5b90565b600060443d1015611e935790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611ec357505050505090565b8285019150815181811115611edb5750505050505090565b843d8701016020828501011115611ef55750505050505090565b611f0460208286010187611db5565b509095945050505050565b8015158114611f1d57600080fd5b50565b6001600160e01b031981168114611f1d57600080fdfea264697066735822122029612485f0c6b87b05dd59f673e277a71329247effd8d01e62ec214a58e3c59864736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000067468656d74610000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001968747470733a2f2f7468656d74612e736974652f697066732f00000000000000