//
0x608060405234801561000f575f80fd5b505f80546001600160a01b03191633179055610cf58061002e5f395ff3fe608060405234801561000f575f80fd5b50600436106100cb575f3560e01c80635f1e2c72116100885780637b712492116100635780637b712492146101d35780638c1cc04e14610130578063a6f9dae1146101e8578063c3ff6d6b146101fb575f80fd5b80635f1e2c721461018b57806361ea7208146101ab5780636c424ec8146101b3575f80fd5b806301c27880146100cf57806317a7bc5e146100f557806326b071041461011d57806327c15a12146101305780633e6968b614610158578063446e847f14610160575b5f80fd5b6100e26100dd366004610931565b61021b565b6040519081526020015b60405180910390f35b6100e2610103366004610959565b6001600160a01b03165f9081526004602052604090205490565b6100e261012b366004610959565b610245565b6100e261013e366004610959565b6001600160a01b03165f9081526001602052604090205490565b6100e26102c5565b61017361016e366004610979565b6102d8565b6040516001600160a01b0390911681526020016100ec565b61019e610199366004610931565b610306565b6040516100ec91906109d3565b6005546100e2565b6101c66101c1366004610931565b6103fb565b6040516100ec91906109ff565b6101e66101e1366004610a11565b610520565b005b6101e66101f6366004610959565b6107ab565b61020e610209366004610931565b6108a5565b6040516100ec9190610a7d565b6001600160a01b0382165f9081526003602090815260408083208484529091529020545b92915050565b6001600160a01b0381165f9081526004602052604081205481905b61026d6201518042610ad4565b81116102be576001600160a01b0384165f90815260026020908152604080832084845290915290205460ff16156102ac57816102a881610af3565b9250505b806102b681610af3565b915050610260565b5092915050565b5f6102d36201518042610ad4565b905090565b5f600582815481106102ec576102ec610b0b565b5f918252602090912001546001600160a01b031692915050565b604080518082019091525f8152606060208201526001600160a01b0383165f90815260016020526040902080548390811061034357610343610b0b565b905f5260205f2090600202016040518060400160405290815f820154815260200160018201805461037390610b1f565b80601f016020809104026020016040519081016040528092919081815260200182805461039f90610b1f565b80156103ea5780601f106103c1576101008083540402835291602001916103ea565b820191905f5260205f20905b8154815290600101906020018083116103cd57829003601f168201915b505050505081525050905092915050565b6001600160a01b0382165f9081526001602052604090205460609082106104595760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b60448201526064015b60405180910390fd5b6001600160a01b0383165f90815260016020526040902080548390811061048257610482610b0b565b905f5260205f209060020201600101805461049c90610b1f565b80601f01602080910402602001604051908101604052809291908181526020018280546104c890610b1f565b80156105135780601f106104ea57610100808354040283529160200191610513565b820191905f5260205f20905b8154815290600101906020018083116104f657829003601f168201915b5050505050905092915050565b5f604051806040016040528042815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525093909452505033815260016020818152604083208054808401825590845292819020855160029094020192835584015193945084939192508201906105a89082610bb7565b5050335f90815260026020526040812083519092506105cb906201518090610ad4565b815260208101919091526040015f205460ff1661070457335f908152600260205260408120825160019290610604906201518090610ad4565b815260208082019290925260409081015f908120805460ff191694151594909417909355338352600390915281208251909190610645906201518090610ad4565b815260208082019290925260409081015f90812033825260019384905291902054909161067191610c77565b81546001810183555f92835260208084209091019190915533825260049052604081205490036106ff5780516106ab906201518090610ad4565b335f818152600460205260408120929092556005805460018101825592527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090910180546001600160a01b03191690911790555b610767565b335f9081526003602052604081208251909190610725906201518090610ad4565b815260208082019290925260409081015f90812033825260019384905291902054909161075191610c77565b81546001810183555f9283526020909220909101555b805160405133917f7c7673cbcea84bd307d18815393ee76593a1e3c9e133d9301a6636b37c9fb1709161079e919087908790610c8a565b60405180910390a2505050565b5f546001600160a01b031633146108045760405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152606401610450565b6001600160a01b03811661084c5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610450565b5f80546040516001600160a01b03808516939216917fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382165f90815260036020908152604080832084845282529182902080548351818402810184019094528084526060939283018282801561051357602002820191905f5260205f20905b8154815260200190600101908083116108f6575050505050905092915050565b80356001600160a01b038116811461092c575f80fd5b919050565b5f8060408385031215610942575f80fd5b61094b83610916565b946020939093013593505050565b5f60208284031215610969575f80fd5b61097282610916565b9392505050565b5f60208284031215610989575f80fd5b5035919050565b5f81518084525f5b818110156109b457602081850181015186830182015201610998565b505f602082860101526020601f19601f83011685010191505092915050565b60208152815160208201525f60208301516040808401526109f76060840182610990565b949350505050565b602081525f6109726020830184610990565b5f8060208385031215610a22575f80fd5b823567ffffffffffffffff80821115610a39575f80fd5b818501915085601f830112610a4c575f80fd5b813581811115610a5a575f80fd5b866020828501011115610a6b575f80fd5b60209290920196919550909350505050565b602080825282518282018190525f9190848201906040850190845b81811015610ab457835183529284019291840191600101610a98565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b5f82610aee57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60018201610b0457610b04610ac0565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b600181811c90821680610b3357607f821691505b602082108103610b5157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52604160045260245ffd5b601f821115610bb257805f5260205f20601f840160051c81016020851015610b905750805b601f840160051c820191505b81811015610baf575f8155600101610b9c565b50505b505050565b815167ffffffffffffffff811115610bd157610bd1610b57565b610be581610bdf8454610b1f565b84610b6b565b602080601f831160018114610c18575f8415610c015750858301515b5f19600386901b1c1916600185901b178555610c6f565b5f85815260208120601f198616915b82811015610c4657888601518255948401946001909101908401610c27565b5085821015610c6357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b8181038181111561023f5761023f610ac0565b83815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f191601019291505056fea264697066735822122041a6286b35c05a2e388d62a5a7aa9dda6b329f57639a220751bf4e4804ef83e464736f6c63430008170033