//
0x60806040523480156200001157600080fd5b5060405162002019380380620020198339810160408190526200003491620000b5565b60018055600380546001600160a01b0319166001600160a01b0383161790556200005e3362000065565b50620000e7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a35050565b600060208284031215620000c857600080fd5b81516001600160a01b0381168114620000e057600080fd5b9392505050565b611f2280620000f76000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063a0a8e460116100ad578063d9f774fc11610071578063d9f774fc146102f7578063df55406e1461030c578063e8a3d4851461031f578063ec97908214610327578063f7c618c11461033057600080fd5b8063a0a8e46014610238578063b1283e7714610262578063c9d27afe1461028a578063cb2ef6f71461029d578063d604b160146102d657600080fd5b8063677bd9ff116100f4578063677bd9ff146101b257806370480275146101c55780637f1a10da146101d85780638da5cb5b14610200578063938e3d7b1461022557600080fd5b806313af4035146101265780631785f53c1461013b5780633ec791931461014e578063429b62e51461017f575b600080fd5b610139610134366004611820565b610343565b005b610139610149366004611820565b61037a565b61016161015c366004611842565b61055f565b604051610176999897969594939291906118d9565b60405180910390f35b6101a261018d366004611820565b60076020526000908152604090205460ff1681565b6040519015158152602001610176565b6101396101c0366004611842565b61078c565b6101396101d3366004611820565b610b6f565b6101eb6101e6366004611954565b610cca565b60408051928352602083019190915201610176565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610176565b610139610233366004611a23565b610d4b565b6040805180820190915260058152640312e302e360dc1b60208201525b6040516101769190611a60565b610275610270366004611842565b610d84565b60405161017699989796959493929190611a73565b610139610298366004611afc565b610f6e565b60408051808201909152601d81527f706c61736d6176657273652d67697665617761792d636f6e74726163740000006020820152610255565b6102e96102e4366004611b2c565b6110f9565b604051908152602001610176565b6102ff6113f9565b6040516101769190611bc6565b61013961031a366004611c13565b61145b565b61025561164a565b6102e960045481565b60035461020d906001600160a01b031681565b6000546001600160a01b0316331461036e576040516316ccb9cb60e11b815260040160405180910390fd5b610377816116d8565b50565b6000546001600160a01b031633146103a5576040516316ccb9cb60e11b815260040160405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff166104015760405162461bcd60e51b815260206004820152600c60248201526b2737ba1030b71030b236b4b760a11b60448201526064015b60405180910390fd5b6001600160a01b0381166000908152600760205260408120805460ff191690555b60055481101561052757816001600160a01b03166005828154811061044957610449611c3c565b6000918252602090912001546001600160a01b031603610515576005805461047390600190611c68565b8154811061048357610483611c3c565b600091825260209091200154600580546001600160a01b0390921691839081106104af576104af611c3c565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060058054806104ee576104ee611c81565b600082815260209020810160001990810180546001600160a01b0319169055019055610527565b8061051f81611c97565b915050610422565b506040516001600160a01b038216907fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f90600090a250565b60608060606000806000806000806000600660008c8152602001908152602001600020905080600001816003018260040183600101548460020160009054906101000a900460ff168560050154866006015487600701548860080160009054906101000a900460ff168880546105d490611cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461060090611cb0565b801561064d5780601f106106225761010080835404028352916020019161064d565b820191906000526020600020905b81548152906001019060200180831161063057829003601f168201915b5050505050985087805461066090611cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461068c90611cb0565b80156106d95780601f106106ae576101008083540402835291602001916106d9565b820191906000526020600020905b8154815290600101906020018083116106bc57829003601f168201915b505050505097508680546106ec90611cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461071890611cb0565b80156107655780601f1061073a57610100808354040283529160200191610765565b820191906000526020600020905b81548152906001019060200180831161074857829003601f168201915b50505050509650995099509950995099509950995099509950509193959799909294969850565b6002600154036107de5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103f8565b60026001556000818152600660205260409020600881015460ff166108455760405162461bcd60e51b815260206004820181905260248201527f4d61726b657420686173206e6f74206265656e207265736f6c7665642079657460448201526064016103f8565b33600090815260098201602052604090205460ff166108a65760405162461bcd60e51b815260206004820152601860248201527f5573657220646964206e6f74207061727469636970617465000000000000000060448201526064016103f8565b336000908152600a8201602052604090205460ff16156109085760405162461bcd60e51b815260206004820152601860248201527f557365722068617320616c726561647920636c61696d6564000000000000000060448201526064016103f8565b6000600160028084015460ff1690811115610925576109256118a1565b1461093457816006015461093a565b81600501545b90506000811161098c5760405162461bcd60e51b815260206004820152601f60248201527f4e6f20766f74657320666f72207468652077696e6e696e67206f7074696f6e0060448201526064016103f8565b6000600160028085015460ff16908111156109a9576109a96118a1565b146109b55760006109b8565b60015b60ff1690506000826109d283670de0b6b3a7640000611cea565b6109dc9190611d01565b90506000670de0b6b3a76400008286600701546109f99190611cea565b610a039190611d01565b905060008111610a555760405162461bcd60e51b815260206004820152601760248201527f4e6f207265776172647320666f7220746865207573657200000000000000000060448201526064016103f8565b336000818152600a8701602052604090819020805460ff19166001179055600354905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae79190611d23565b610b2c5760405162461bcd60e51b815260206004820152601660248201527514995dd85c99081d1c985b9cd9995c8819985a5b195960521b60448201526064016103f8565b604051818152339087907f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0269060200160405180910390a350506001805550505050565b6000546001600160a01b03163314610b9a576040516316ccb9cb60e11b815260040160405180910390fd5b6001600160a01b038116610be25760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b60448201526064016103f8565b6001600160a01b03811660009081526007602052604090205460ff1615610c3e5760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c9030b71030b236b4b760811b60448201526064016103f8565b6001600160a01b038116600081815260076020526040808220805460ff1916600190811790915560058054918201815583527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b03191684179055517f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3399190a250565b60008281526006602090815260408083206001600160a01b03851684526009810190925282205482919060ff1615610d3b576001600160a01b0384166000908152600b8201602052604090205460ff1615610d2d57600160009250925050610d44565b600060019250925050610d44565b60008092509250505b9250929050565b3360009081526007602052604090205460ff16610d7b57604051639f7f092560e01b815260040160405180910390fd5b61037781611728565b600660205260009081526040902080548190610d9f90611cb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610dcb90611cb0565b8015610e185780601f10610ded57610100808354040283529160200191610e18565b820191906000526020600020905b815481529060010190602001808311610dfb57829003601f168201915b50505050600183015460028401546003850180549495929460ff909216935090610e4190611cb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6d90611cb0565b8015610eba5780601f10610e8f57610100808354040283529160200191610eba565b820191906000526020600020905b815481529060010190602001808311610e9d57829003601f168201915b505050505090806004018054610ecf90611cb0565b80601f0160208091040260200160405190810160405280929190818152602001828054610efb90611cb0565b8015610f485780601f10610f1d57610100808354040283529160200191610f48565b820191906000526020600020905b815481529060010190602001808311610f2b57829003601f168201915b505050506005830154600684015460078501546008909501549394919390925060ff1689565b600082815260066020526040902060018101544210610fcf5760405162461bcd60e51b815260206004820152601e60248201527f4d61726b657420766f74696e6720706572696f642068617320656e646564000060448201526064016103f8565b33600090815260098201602052604090205460ff161561102a5760405162461bcd60e51b8152602060048201526016602482015275155cd95c881a185cc8185b1c9958591e481d9bdd195960521b60448201526064016103f8565b3360009081526009820160205260409020805460ff1916600117905581156110875760018160050160008282546110619190611d40565b9091555050336000908152600b820160205260409020805460ff191660011790556110bb565b600181600601600082825461109c9190611d40565b9091555050336000908152600b820160205260409020805460ff191690555b6040518215158152339084907f5aaa9aad7433112662b9e5ae23b96ed62b00035f413ab908c55607284e0804e29060200160405180910390a3505050565b600080546001600160a01b031633148061112257503360009081526007602052604090205460ff165b6111665760405162461bcd60e51b81526020600482015260156024820152742737ba1030b71030b236b4b71037b91037bbb732b960591b60448201526064016103f8565b600083116111b65760405162461bcd60e51b815260206004820152601f60248201527f4475726174696f6e206d7573742062652067726561746572207468616e20300060448201526064016103f8565b600085511180156111c8575060008451115b6112145760405162461bcd60e51b815260206004820152601760248201527f4f7074696f6e732063616e6e6f7420626520656d70747900000000000000000060448201526064016103f8565b600082116112735760405162461bcd60e51b815260206004820152602660248201527f416c6c6f63617465642066756e6473206d75737420626520677265617465722060448201526507468616e20360d41b60648201526084016103f8565b6003546040516323b872dd60e01b8152336004820152306024820152604481018490526001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156112ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ee9190611d23565b61133a5760405162461bcd60e51b815260206004820152601760248201527f46756e647320616c6c6f636174696f6e206661696c656400000000000000000060448201526064016103f8565b600480546000918261134b83611c97565b9091555060008181526006602052604090209091508061136b8982611da2565b506003810161137a8882611da2565b50600481016113898782611da2565b506113948542611d40565b6001820181905560028201805460ff191690556007820185905560405183917f4e17305b7420128578bd859d024ac630622b92bde2b60f88881995701f736242916113e6918c918c918c918b90611e62565b60405180910390a2509695505050505050565b6060600580548060200260200160405190810160405280929190818152602001828054801561145157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611433575b5050505050905090565b6000546001600160a01b031633148061148357503360009081526007602052604090205460ff165b6114c75760405162461bcd60e51b81526020600482015260156024820152742737ba1030b71030b236b4b71037b91037bbb732b960591b60448201526064016103f8565b600082815260066020526040902060018101544210156115295760405162461bcd60e51b815260206004820152601860248201527f4d61726b657420686173206e6f7420656e64656420796574000000000000000060448201526064016103f8565b600881015460ff161561157e5760405162461bcd60e51b815260206004820181905260248201527f4d61726b65742068617320616c7265616479206265656e207265736f6c76656460448201526064016103f8565b6000826002811115611592576115926118a1565b036115d15760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206f7574636f6d6560881b60448201526064016103f8565b818160020160006101000a81548160ff021916908360028111156115f7576115f76118a1565b021790555060088101805460ff1916600117905560405183907f739f283563fb51ab6b89ee95d937b2e63a6cfcb83c385dbebb629f9d97bd43e69061163d908590611eb0565b60405180910390a2505050565b6002805461165790611cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461168390611cb0565b80156116d05780601f106116a5576101008083540402835291602001916116d0565b820191906000526020600020905b8154815290600101906020018083116116b357829003601f168201915b505050505081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a35050565b60006002805461173790611cb0565b80601f016020809104026020016040519081016040528092919081815260200182805461176390611cb0565b80156117b05780601f10611785576101008083540402835291602001916117b0565b820191906000526020600020905b81548152906001019060200180831161179357829003601f168201915b5050505050905081600290816117c69190611da2565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a1681836040516117f8929190611ebe565b60405180910390a15050565b80356001600160a01b038116811461181b57600080fd5b919050565b60006020828403121561183257600080fd5b61183b82611804565b9392505050565b60006020828403121561185457600080fd5b5035919050565b6000815180845260005b8181101561188157602081850181015186830182015201611865565b506000602082860101526020601f19601f83011685010191505092915050565b634e487b7160e01b600052602160045260246000fd5b600381106118d557634e487b7160e01b600052602160045260246000fd5b9052565b60006101208083526118ed8184018d61185b565b90508281036020840152611901818c61185b565b90508281036040840152611915818b61185b565b91505087606083015261192b60808301886118b7565b8560a08301528460c08301528360e08301528215156101008301529a9950505050505050505050565b6000806040838503121561196757600080fd5b8235915061197760208401611804565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126119a757600080fd5b813567ffffffffffffffff808211156119c2576119c2611980565b604051601f8301601f19908116603f011681019082821181831017156119ea576119ea611980565b81604052838152866020858801011115611a0357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611a3557600080fd5b813567ffffffffffffffff811115611a4c57600080fd5b611a5884828501611996565b949350505050565b60208152600061183b602083018461185b565b6000610120808352611a878184018d61185b565b90508a6020840152611a9c604084018b6118b7565b8281036060840152611aae818a61185b565b90508281036080840152611ac2818961185b565b9150508560a08301528460c08301528360e08301528215156101008301529a9950505050505050505050565b801515811461037757600080fd5b60008060408385031215611b0f57600080fd5b823591506020830135611b2181611aee565b809150509250929050565b600080600080600060a08688031215611b4457600080fd5b853567ffffffffffffffff80821115611b5c57600080fd5b611b6889838a01611996565b96506020880135915080821115611b7e57600080fd5b611b8a89838a01611996565b95506040880135915080821115611ba057600080fd5b50611bad88828901611996565b9598949750949560608101359550608001359392505050565b6020808252825182820181905260009190848201906040850190845b81811015611c075783516001600160a01b031683529284019291840191600101611be2565b50909695505050505050565b60008060408385031215611c2657600080fd5b82359150602083013560038110611b2157600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115611c7b57611c7b611c52565b92915050565b634e487b7160e01b600052603160045260246000fd5b600060018201611ca957611ca9611c52565b5060010190565b600181811c90821680611cc457607f821691505b602082108103611ce457634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417611c7b57611c7b611c52565b600082611d1e57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611d3557600080fd5b815161183b81611aee565b80820180821115611c7b57611c7b611c52565b601f821115611d9d57600081815260208120601f850160051c81016020861015611d7a5750805b601f850160051c820191505b81811015611d9957828155600101611d86565b5050505b505050565b815167ffffffffffffffff811115611dbc57611dbc611980565b611dd081611dca8454611cb0565b84611d53565b602080601f831160018114611e055760008415611ded5750858301515b600019600386901b1c1916600185901b178555611d99565b600085815260208120601f198616915b82811015611e3457888601518255948401946001909101908401611e15565b5085821015611e525787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60a081526000611e7560a083018861185b565b8281036020840152611e87818861185b565b90508281036040840152611e9b818761185b565b60608401959095525050608001529392505050565b60208101611c7b82846118b7565b604081526000611ed1604083018561185b565b8281036020840152611ee3818561185b565b9594505050505056fea2646970667358221220dc0b7404717154802dd1bb9dedb35a07e4700608fb5c9af39fda1459fd3913e764736f6c634300081100330000000000000000000000003ea683354bf8d359cd9ec6e08b5aec291d71d880