0x60806040523480156200001157600080fd5b506040516200296738038062002967833981016040819052620000349162000183565b600480546001600160a01b03199081166001600160a01b03878116919091179092556005805482168684161790556006805482168584161790556007805490911691831691909117905564e8d4a510006002556001805466ffffffffffffff191665050101010100179055620000ac600033620000b7565b5050505050620001e0565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166200015c576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620001133390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000160565b5060005b92915050565b80516001600160a01b03811681146200017e57600080fd5b919050565b600080600080608085870312156200019a57600080fd5b620001a58562000166565b9350620001b56020860162000166565b9250620001c56040860162000166565b9150620001d56060860162000166565b905092959194509250565b61277780620001f06000396000f3fe6080604052600436106102c55760003560e01c8063704b6c0211610179578063a7c87fef116100d6578063d4e5c6b81161008a578063f0f4426011610064578063f0f44260146107e1578063f5aa406d14610801578063f7a471b71461082157600080fd5b8063d4e5c6b81461076a578063d547741f146107a1578063deab1fc7146107c157600080fd5b8063c3b754dc116100bb578063c3b754dc14610717578063c62caea814610737578063d478f8d21461075757600080fd5b8063a7c87fef146106c7578063ba990e5e146106f757600080fd5b806391b7f5ed1161012d57806398a94f281161011257806398a94f281461067c578063a035b1fe1461069c578063a217fddf146106b257600080fd5b806391b7f5ed1461061857806391d148541461063857600080fd5b80637bf695451161015e5780637bf69545146105b957806381c8dca2146105d957806382d205ad146105f857600080fd5b8063704b6c021461057b57806378946eae1461059b57600080fd5b806326092b83116102275780634fc5b58d116101db57806359886537116101c057806359886537146105215780635c975abb1461054157806361d027b31461055b57600080fd5b80634fc5b58d146104e35780635338789c1461050157600080fd5b80632f2ff15d1161020c5780632f2ff15d1461048557806336568abe146104a55780633b19e84a146104c557600080fd5b806326092b83146104505780632b707c711461046557600080fd5b80631589faec1161027e5780631ba5bfdd116102635780631ba5bfdd146103dc5780631c188fa514610400578063248a9ca31461042057600080fd5b80631589faec1461039957806316c38b3c146103ba57600080fd5b806302ce5813116102af57806302ce5813146103375780630b4ab1f914610359578063106c437b1461037957600080fd5b8062b7af66146102ca57806301ffc9a714610307575b600080fd5b3480156102d657600080fd5b506004546102ea906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561031357600080fd5b506103276103223660046123f5565b610841565b60405190151581526020016102fe565b34801561034357600080fd5b5060015461032790640100000000900460ff1681565b34801561036557600080fd5b506001546103279062010000900460ff1681565b34801561038557600080fd5b506006546102ea906001600160a01b031681565b3480156103a557600080fd5b50600154610327906301000000900460ff1681565b3480156103c657600080fd5b506103da6103d536600461241f565b610878565b005b3480156103e857600080fd5b506103f260035481565b6040519081526020016102fe565b34801561040c57600080fd5b506103da61041b366004612456565b61091f565b34801561042c57600080fd5b506103f261043b366004612473565b60009081526020819052604090206001015490565b610458610a19565b6040516102fe91906124c8565b34801561047157600080fd5b506103da61048036600461241f565b610c88565b34801561049157600080fd5b506103da6104a03660046124db565b610d2f565b3480156104b157600080fd5b506103da6104c03660046124db565b610d5a565b3480156104d157600080fd5b506007546001600160a01b03166102ea565b3480156104ef57600080fd5b506005546001600160a01b03166102ea565b34801561050d57600080fd5b5061045861051c366004612473565b610d92565b34801561052d57600080fd5b506103da61053c3660046125bf565b61102d565b34801561054d57600080fd5b506001546103279060ff1681565b34801561056757600080fd5b506007546102ea906001600160a01b031681565b34801561058757600080fd5b506103da610596366004612456565b61120d565b3480156105a757600080fd5b506004546001600160a01b03166102ea565b3480156105c557600080fd5b506103da6105d436600461241f565b611341565b3480156105e557600080fd5b5060015461032790610100900460ff1681565b34801561060457600080fd5b506103da610613366004612623565b6113e4565b34801561062457600080fd5b506103da610633366004612473565b61156c565b34801561064457600080fd5b506103276106533660046124db565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561068857600080fd5b506103da61069736600461241f565b61164b565b3480156106a857600080fd5b506103f260025481565b3480156106be57600080fd5b506103f2600081565b3480156106d357600080fd5b506103276106e2366004612473565b60086020526000908152604090205460ff1681565b34801561070357600080fd5b506103da610712366004612456565b6116f0565b34801561072357600080fd5b506103da61073236600461241f565b6117ea565b34801561074357600080fd5b506103da610752366004612456565b611893565b610458610765366004612647565b61198d565b34801561077657600080fd5b5060015461078e9065010000000000900461ffff1681565b60405161ffff90911681526020016102fe565b3480156107ad57600080fd5b506103da6107bc3660046124db565b611c19565b3480156107cd57600080fd5b506104586107dc366004612473565b611c3e565b3480156107ed57600080fd5b506103da6107fc366004612456565b611f4d565b34801561080d57600080fd5b506103da61081c366004612473565b612047565b34801561082d57600080fd5b506005546102ea906001600160a01b031681565b60006001600160e01b03198216637965db0b60e01b148061087257506301ffc9a760e01b6001600160e01b03198316145b92915050565b33600090815260008051602061274b833981519152602052604090205460ff166108d75760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064015b60405180910390fd5b6001805460ff19168215159081179091556040519081527f0e2fb031ee032dc02d8011dc50b816eb450cf856abd8261680dac74f72165bd2906020015b60405180910390a150565b33600090815260008051602061274b833981519152602052604090205460ff166109795760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b6001600160a01b0381166109cf5760405162461bcd60e51b815260206004820152601760248201527f6b426f782061646472657373206973206e6f742073657400000000000000000060448201526064016108ce565b600580546001600160a01b0319166001600160a01b0383169081179091556040517f668c360525b497887aee9519cf931fbe079310ac7bc9e4c59f4f4cddb84ee75d90600090a250565b60015460609060ff1615610a645760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016108ce565b6001546301000000900460ff1680610af85750600154610100900460ff168015610af857506006546040516370a0823160e01b81523360048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ad2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af691906126bc565b115b610b6a5760405162461bcd60e51b815260206004820152603d60248201527f6b4e4654206d696e74696e67206973206e6f7420616374697665206f7220796f60448201527f7520646f6e27742068617665206120466f756e6465722773205061737300000060648201526084016108ce565b600254341015610bbc5760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f756768204554482073656e740000000000000000000000000060448201526064016108ce565b600760009054906101000a90046001600160a01b03166001600160a01b03166398ea5fca346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610c0c57600080fd5b505af1158015610c20573d6000803e3d6000fd5b50505050506000610c40600160059054906101000a900461ffff166120d6565b9050336001600160a01b03167ff82248a77606cc31d3d0872326f816b34d9e1469713fca2d0fe0eaab37ac4dce82604051610c7b91906124c8565b60405180910390a2905090565b33600090815260008051602061274b833981519152602052604090205460ff16610ce25760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b6001805482151563010000000263ff000000199091161790556040517fc92ade84097c0656e3ef994e2a4c32efa912cc39f90bce5b8426bc4d4d5c80cd9061091490831515815260200190565b600082815260208190526040902060010154610d4a816121dc565b610d5483836121e6565b50505050565b6001600160a01b0381163314610d835760405163334bd91960e11b815260040160405180910390fd5b610d8d8282612290565b505050565b60015460609060ff1615610ddd5760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016108ce565b600154610100900460ff16610e405760405162461bcd60e51b8152602060048201526024808201527f466f756e64657227732050617373206d696e74696e67206973206e6f742061636044820152637469766560e01b60648201526084016108ce565b6006546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381865afa158015610e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ead91906126d5565b6001600160a01b031614610f295760405162461bcd60e51b815260206004820152602b60248201527f596f7520617265206e6f7420746865206f776e6572206f66207468697320666f60448201527f756e64657273207061737300000000000000000000000000000000000000000060648201526084016108ce565b60008281526008602052604090205460ff1615610fae5760405162461bcd60e51b815260206004820152602860248201527f5468697320666f756e6465727320706173732068617320616c7265616479206260448201527f65656e207573656400000000000000000000000000000000000000000000000060648201526084016108ce565b6000828152600860205260408120805460ff1916600190811790915554610fe29061ffff65010000000000909104166120d6565b9050336001600160a01b03167fc864dc9f81c022bbddd19a7421b1114c3ccaa17d57fcf929672ac24eada57215828560405161101f9291906126f2565b60405180910390a292915050565b33600090815260008051602061274b833981519152602052604090205460ff166110875760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b80518251146110d85760405162461bcd60e51b815260206004820152601a60248201527f4172726179206c656e6774687320646f206e6f74206d6174636800000000000060448201526064016108ce565b60015482516501000000000090910461ffff16146111445760405162461bcd60e51b815260206004820152602360248201527f4172726179206c656e677468206d757374206d617463682062756e646c652073604482015262697a6560e81b60648201526084016108ce565b60005b60015465010000000000900461ffff16811015610d8d5760045483516001600160a01b039091169063067b61f29085908490811061118757611187612714565b60200260200101518484815181106111a1576111a1612714565b60200260200101516040518363ffffffff1660e01b81526004016111cf929190918252602082015260400190565b600060405180830381600087803b1580156111e957600080fd5b505af11580156111fd573d6000803e3d6000fd5b5050600190920191506111479050565b33600090815260008051602061274b833981519152602052604090205460ff166112675760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b6001600160a01b0381166112bd5760405162461bcd60e51b815260206004820152601860248201527f41646d696e2061646472657373206973206e6f7420736574000000000000000060448201526064016108ce565b6001600160a01b038116600090815260008051602061274b833981519152602052604090205460ff16156113335760405162461bcd60e51b815260206004820152601e60248201527f4164647265737320616c7265616479206861732061646d696e20726f6c65000060448201526064016108ce565b61133e600082610d2f565b50565b33600090815260008051602061274b833981519152602052604090205460ff1661139b5760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b600180548215156101000261ff00199091161790556040517f24b589e819ce5a9b998b90fa736aa6adf40129173788dcb5e77b24ea61418dbd9061091490831515815260200190565b33600090815260008051602061274b833981519152602052604090205460ff1661143e5760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b60008161ffff161161149d5760405162461bcd60e51b815260206004820152602260248201527f42756e646c652073697a65206d7573742062652067726561746572207468616e604482015261020360f41b60648201526084016108ce565b600f8161ffff1611156115185760405162461bcd60e51b815260206004820152602c60248201527f42756e646c652073697a65206d757374206265206c657373207468616e206f7260448201527f20657175616c20746f203135000000000000000000000000000000000000000060648201526084016108ce565b6001805466ffff000000000019166501000000000061ffff8416908102919091179091556040519081527f2a0ef81d251f78a70474ff2b5c49390a10c5528eb8f3c3a5ba5a951b5b3b62d990602001610914565b33600090815260008051602061274b833981519152602052604090205460ff166115c65760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b600081116116165760405162461bcd60e51b815260206004820152601c60248201527f5072696365206d7573742062652067726561746572207468616e20300000000060448201526064016108ce565b60028190556040518181527fa6dc15bdb68da224c66db4b3838d9a2b205138e8cff6774e57d0af91e196d62290602001610914565b33600090815260008051602061274b833981519152602052604090205460ff166116a55760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b60018054821515620100000262ff0000199091161790556040517f6de29408f697ecf18e6c68d9ff02704538b884de6e51f5e02234aacc830d86879061091490831515815260200190565b33600090815260008051602061274b833981519152602052604090205460ff1661174a5760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b6001600160a01b0381166117a05760405162461bcd60e51b815260206004820181905260248201527f466f756e6465727320706173732061646472657373206973206e6f742073657460448201526064016108ce565b600680546001600160a01b0319166001600160a01b0383169081179091556040517fdf5a5a4f5e5b6daadf10365af42ae59560071b97b0cf641c62602f763484876d90600090a250565b33600090815260008051602061274b833981519152602052604090205460ff166118445760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b600180548215156401000000000264ff00000000199091161790556040517f6b5206c2e71025c60cb0f0442786c5cb91a18e66727fb072cb52265c4a28e45e9061091490831515815260200190565b33600090815260008051602061274b833981519152602052604090205460ff166118ed5760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b6001600160a01b0381166119435760405162461bcd60e51b815260206004820152601760248201527f4b4e46542061646472657373206973206e6f742073657400000000000000000060448201526064016108ce565b600480546001600160a01b0319166001600160a01b0383169081179091556040517f9d5ba4843f81d7c4be560530d0c620a1ace287b86b674f5ea881cb2d8575fc1590600090a250565b60015460609060ff16156119d85760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016108ce565b600154640100000000900460ff16611a325760405162461bcd60e51b815260206004820152601760248201527f57686974656c697374206973206e6f742061637469766500000000000000000060448201526064016108ce565b600254341015611a845760405162461bcd60e51b815260206004820152601360248201527f4e6f7420656e6f756768204554482073656e740000000000000000000000000060448201526064016108ce565b6040516bffffffffffffffffffffffff193360601b166020820152600090603401604051602081830303815290604052805190602001209050611afe848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506003549150849050612313565b611b4a5760405162461bcd60e51b815260206004820152600f60248201527f496e636f72726563742070726f6f66000000000000000000000000000000000060448201526064016108ce565b600760009054906101000a90046001600160a01b03166001600160a01b03166398ea5fca346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611b9a57600080fd5b505af1158015611bae573d6000803e3d6000fd5b50505050506000611bce600160059054906101000a900461ffff166120d6565b9050336001600160a01b03167ff82248a77606cc31d3d0872326f816b34d9e1469713fca2d0fe0eaab37ac4dce82604051611c0991906124c8565b60405180910390a2949350505050565b600082815260208190526040902060010154611c34816121dc565b610d548383612290565b60015460609060ff1615611c895760405162461bcd60e51b815260206004820152601260248201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b60448201526064016108ce565b60015462010000900460ff16611ce15760405162461bcd60e51b815260206004820152601a60248201527f6b426f78206d696e74696e67206973206e6f742061637469766500000000000060448201526064016108ce565b6005546040516331a9108f60e11b81526004810184905233916001600160a01b031690636352211e90602401602060405180830381865afa158015611d2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4e91906126d5565b6001600160a01b031614611daf5760405162461bcd60e51b815260206004820152602260248201527f596f7520617265206e6f7420746865206f776e6572206f662074686973206b426044820152610def60f31b60648201526084016108ce565b60055460405163020604bf60e21b81526004810184905230916001600160a01b03169063081812fc90602401602060405180830381865afa158015611df8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1c91906126d5565b6001600160a01b031614611e985760405162461bcd60e51b815260206004820152602f60248201527f5468697320636f6e7472616374206973206e6f7420617070726f76656420746f60448201527f206275726e2074686973206b426f78000000000000000000000000000000000060648201526084016108ce565b600554604051630852cd8d60e31b8152600481018490526001600160a01b03909116906342966c6890602401600060405180830381600087803b158015611ede57600080fd5b505af1158015611ef2573d6000803e3d6000fd5b505060015460009250611f12915065010000000000900461ffff166120d6565b9050336001600160a01b03167ff82248a77606cc31d3d0872326f816b34d9e1469713fca2d0fe0eaab37ac4dce8260405161101f91906124c8565b33600090815260008051602061274b833981519152602052604090205460ff16611fa75760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b6001600160a01b038116611ffd5760405162461bcd60e51b815260206004820152601b60248201527f54726561737572792061646472657373206973206e6f7420736574000000000060448201526064016108ce565b600780546001600160a01b0319166001600160a01b0383169081179091556040517fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f60890600090a250565b33600090815260008051602061274b833981519152602052604090205460ff166120a15760405162461bcd60e51b8152602060048201526016602482015260008051602061272b83398151915260448201526064016108ce565b60038190556040518181527f6be426d58d2fb0cea1f78182904380aac426a50029637dc9e9d2e40bc44ac05090602001610914565b606060008261ffff1667ffffffffffffffff8111156120f7576120f761250b565b604051908082528060200260200182016040528015612120578160200160208202803683370190505b50905060005b8361ffff168161ffff1610156121d55760048054604051632851206560e21b81523392810192909252600060248301526001600160a01b03169063a1448194906044016020604051808303816000875af1158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac91906126bc565b828261ffff16815181106121c2576121c2612714565b6020908102919091010152600101612126565b5092915050565b61133e8133612329565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16612288576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556122403390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610872565b506000610872565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615612288576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610872565b6000826123208584612380565b14949350505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661237c5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016108ce565b5050565b600081815b84518110156123bb576123b1828683815181106123a4576123a4612714565b60200260200101516123c3565b9150600101612385565b509392505050565b60008183106123df5760008281526020849052604090206123ee565b60008381526020839052604090205b9392505050565b60006020828403121561240757600080fd5b81356001600160e01b0319811681146123ee57600080fd5b60006020828403121561243157600080fd5b813580151581146123ee57600080fd5b6001600160a01b038116811461133e57600080fd5b60006020828403121561246857600080fd5b81356123ee81612441565b60006020828403121561248557600080fd5b5035919050565b60008151808452602080850194506020840160005b838110156124bd578151875295820195908201906001016124a1565b509495945050505050565b6020815260006123ee602083018461248c565b600080604083850312156124ee57600080fd5b82359150602083013561250081612441565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261253257600080fd5b8135602067ffffffffffffffff8083111561254f5761254f61250b565b8260051b604051601f19603f830116810181811084821117156125745761257461250b565b604052938452602081870181019490810192508785111561259457600080fd5b6020870191505b848210156125b45781358352918301919083019061259b565b979650505050505050565b600080604083850312156125d257600080fd5b823567ffffffffffffffff808211156125ea57600080fd5b6125f686838701612521565b9350602085013591508082111561260c57600080fd5b5061261985828601612521565b9150509250929050565b60006020828403121561263557600080fd5b813561ffff811681146123ee57600080fd5b6000806020838503121561265a57600080fd5b823567ffffffffffffffff8082111561267257600080fd5b818501915085601f83011261268657600080fd5b81358181111561269557600080fd5b8660208260051b85010111156126aa57600080fd5b60209290920196919550909350505050565b6000602082840312156126ce57600080fd5b5051919050565b6000602082840312156126e757600080fd5b81516123ee81612441565b604081526000612705604083018561248c565b90508260208301529392505050565b634e487b7160e01b600052603260045260246000fdfe43616c6c6572206973206e6f7420616e2061646d696e00000000000000000000ad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5a164736f6c6343000817000a000000000000000000000000148f68d1028e8b45d1f810d229e259dd5d836b5a0000000000000000000000005f4ec3df9cbd43714fe2740f5e3616155c5b8419000000000000000000000000d3f011f1768b38ccc0faa7b00e59b0e29920194b000000000000000000000000ad2e62e90c63d5c2b905c3f709cc3045aecdaa1e