0x6080604052348015600f57600080fd5b506122828061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806387865a24146100465780639b4e1b6614610076578063b96cf5fc14610097575b600080fd5b610059610054366004610369565b6100aa565b6040516001600160a01b0390911681526020015b60405180910390f35b610089610084366004610369565b6100d8565b60405190815260200161006d565b6100596100a536600461038c565b610108565b60008060006100b8846100d8565b81526020810191909152604001600020546001600160a01b031692915050565b6000816040516020016100eb9190610460565b604051602081830303815290604052805190602001209050919050565b604051639074726b60e01b81526000906001600160a01b03861690639074726b9061013b908790879087906004016104bd565b602060405180830381865afa158015610158573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017c9190610518565b6101de5760405162461bcd60e51b815260206004820152602960248201527f4163636f756e74466163746f72793a2043616e6e6f742076616c6964617465206044820152687369676e617475726560b81b606482015260840160405180910390fd5b6000826040516101ed906102a5565b6101f7919061053a565b604051809103906000f080158015610213573d6000803e3d6000fd5b5060018054808201825560009182527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03841617905590915081908061026c866100d8565b8152602081019190915260400160002080546001600160a01b0319166001600160a01b039290921691909117905590505b949350505050565b611cfe8061054f83390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156102f1576102f16102b2565b604052919050565b600082601f83011261030a57600080fd5b6040805190810167ffffffffffffffff8111828210171561032d5761032d6102b2565b806040525080604084018581111561034457600080fd5b845b8181101561035e578035835260209283019201610346565b509195945050505050565b60006040828403121561037b57600080fd5b61038583836102f9565b9392505050565b60008060008060a085870312156103a257600080fd5b84356001600160a01b03811681146103b957600080fd5b935060208501359250604085013567ffffffffffffffff8111156103dc57600080fd5b8501601f810187136103ed57600080fd5b803567ffffffffffffffff811115610407576104076102b2565b61041a601f8201601f19166020016102c8565b81815288602083850101111561042f57600080fd5b8160208401602083013760006020838301015280945050505061045586606087016102f9565b905092959194509250565b60008183825b6002811015610485578151835260209283019290910190600101610466565b50505060408201905092915050565b8060005b60028110156104b7578151845260209384019390910190600101610498565b50505050565b838152608060208201526000835180608084015260005b818110156104f157602081870181015160a08684010152016104d4565b50600060a0828501015260a0601f19601f83011684010191505061029d6040830184610494565b60006020828403121561052a57600080fd5b8151801515811461038557600080fd5b604081016105488284610494565b9291505056fe608060405234801561001057600080fd5b50604051611cfe380380611cfe83398101604081905261002f916100ac565b61003c6000826002610043565b505061012b565b8260028101928215610071579160200282015b82811115610071578251825591602001919060010190610056565b5061007d929150610081565b5090565b5b8082111561007d5760008155600101610082565b634e487b7160e01b600052604160045260246000fd5b6000604082840312156100be57600080fd5b82601f8301126100cd57600080fd5b604080519081016001600160401b03811182821017156100ef576100ef610096565b806040525080604084018581111561010657600080fd5b845b81811015610120578051835260209283019201610108565b509195945050505050565b611bc48061013a6000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c80635fc4249a116100665780635fc4249a1461010957806362169c091461011c5780639074726b1461012f578063a02380f214610147578063cd838f0f1461016757600080fd5b806301ffc9a7146100985780630a73a8ee146100c157806310d29b0b146100d65780635e9ac96b146100e9575b600080fd5b6100ac6100a6366004611240565b50600090565b60405190151581526020015b60405180910390f35b6100d46100cf366004611349565b61016f565b005b6100d46100e43660046114c4565b61044e565b6100fc6100f7366004611570565b6107d7565b6040516100b89190611616565b6100fc610117366004611570565b610943565b6100d461012a36600461167b565b610aa2565b6100ac61013d3660046116fc565b6000949350505050565b61015a61015536600461167b565b610fae565b6040516100b89190611791565b6100fc611111565b604051639074726b60e01b81526001600160a01b03871690639074726b906101a090889088906000906004016117a4565b602060405180830381865afa1580156101bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101e191906117f1565b6102065760405162461bcd60e51b81526004016101fd90611813565b60405180910390fd5b6040805160208101825260009052517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090600790610245908590611855565b90815260405190819003602001812061025d916118ab565b6040518091039020146102b25760405162461bcd60e51b815260206004820181905260248201527f4163636f756e743a2050617373776f726420616c72656164792065786973747360448201526064016101fd565b60008251116102d35760405162461bcd60e51b81526004016101fd90611920565b600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0161030f84826119a6565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0161034c82826119a6565b508260078360405161035e9190611855565b9081526020016040518091039020908161037891906119a6565b508060068360405161038a9190611855565b908152602001604051809103902090816103a491906119a6565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b016103e183826119a6565b5060016005846040516103f49190611855565b908152604051908190036020018120805492151560ff1990931692909217909155600190600890610426908590611855565b908152604051908190036020019020805491151560ff19909216919091179055505050505050565b604051639074726b60e01b81526001600160a01b03861690639074726b9061047f90879087906000906004016117a4565b602060405180830381865afa15801561049c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c091906117f1565b6104dc5760405162461bcd60e51b81526004016101fd90611813565b80518251146105425760405162461bcd60e51b815260206004820152602c60248201527f4163636f756e743a2050617373776f72647320616e64206e616d6573206c656e60448201526b0cee8d040dad2e6dac2e8c6d60a31b60648201526084016101fd565b60005b82518110156107cf5760408051602081019091526000905281517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709060079084908490811061059657610596611a67565b60200260200101516040516105ab9190611855565b9081526040519081900360200181206105c3916118ab565b6040518091039020146106185760405162461bcd60e51b815260206004820181905260248201527f4163636f756e743a2050617373776f726420616c72656164792065786973747360448201526064016101fd565b600082828151811061062c5761062c611a67565b602002602001015151116106525760405162461bcd60e51b81526004016101fd90611920565b600283828151811061066657610666611a67565b6020908102919091018101518254600181018455600093845291909220019061068f90826119a6565b508281815181106106a2576106a2611a67565b602002602001015160078383815181106106be576106be611a67565b60200260200101516040516106d39190611855565b908152602001604051809103902090816106ed91906119a6565b50600382828151811061070257610702611a67565b6020908102919091018101518254600181018455600093845291909220019061072b90826119a6565b506001600584838151811061074257610742611a67565b60200260200101516040516107579190611855565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001600883838151811061079257610792611a67565b60200260200101516040516107a79190611855565b908152604051908190036020019020805491151560ff19909216919091179055600101610545565b505050505050565b604051639074726b60e01b81526060906001600160a01b03851690639074726b9061080b90869086906000906004016117a4565b602060405180830381865afa158015610828573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084c91906117f1565b6108685760405162461bcd60e51b81526004016101fd90611813565b6004805480602002602001604051908101604052809291908181526020016000905b828210156109365783829060005260206000200180546108a990611871565b80601f01602080910402602001604051908101604052809291908181526020018280546108d590611871565b80156109225780601f106108f757610100808354040283529160200191610922565b820191906000526020600020905b81548152906001019060200180831161090557829003601f168201915b50505050508152602001906001019061088a565b5050505090509392505050565b604051639074726b60e01b81526060906001600160a01b03851690639074726b9061097790869086906000906004016117a4565b602060405180830381865afa158015610994573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b891906117f1565b6109d45760405162461bcd60e51b81526004016101fd90611813565b6002805480602002602001604051908101604052809291908181526020016000905b82821015610936578382906000526020600020018054610a1590611871565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4190611871565b8015610a8e5780601f10610a6357610100808354040283529160200191610a8e565b820191906000526020600020905b815481529060010190602001808311610a7157829003601f168201915b5050505050815260200190600101906109f6565b604051639074726b60e01b81526001600160a01b03851690639074726b90610ad390869086906000906004016117a4565b602060405180830381865afa158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1491906117f1565b610b305760405162461bcd60e51b81526004016101fd90611813565b6040805160208101825260009052517fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090600790610b6f908490611855565b908152604051908190036020018120610b87916118ab565b604051809103902003610bdc5760405162461bcd60e51b815260206004820181905260248201527f4163636f756e743a2050617373776f726420646f6573206e6f7420657869737460448201526064016101fd565b6000600782604051610bee9190611855565b90815260200160405180910390208054610c0790611871565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3390611871565b8015610c805780601f10610c5557610100808354040283529160200191610c80565b820191906000526020600020905b815481529060010190602001808311610c6357829003601f168201915b50505050509050600581604051610c979190611855565b9081526040519081900360200190205460ff16610d085760405162461bcd60e51b815260206004820152602960248201527f4163636f756e743a2050617373776f726420646f6573206e6f7420657869737460448201526820696e20617272617960b81b60648201526084016101fd565b60005b600254811015610de457818051906020012060028281548110610d3057610d30611a67565b90600052602060002001604051610d4791906118ab565b604051809103902003610ddc5760028054610d6490600190611a7d565b81548110610d7457610d74611a67565b9060005260206000200160028281548110610d9157610d91611a67565b906000526020600020019081610da79190611aa4565b506002805480610db957610db9611b78565b600190038181906000526020600020016000610dd591906111ea565b9055610de4565b600101610d0b565b50600782604051610df59190611855565b90815260200160405180910390206000610e0f91906111ea565b6000600582604051610e219190611855565b908152604051908190036020018120805492151560ff19909316929092179091558290600890610e52908390611855565b9081526040519081900360200190205460ff16610ebf5760405162461bcd60e51b815260206004820152602560248201527f4163636f756e743a204e616d6520646f6573206e6f7420657869737420696e20604482015264617272617960d81b60648201526084016101fd565b60005b600354811015610f9b57818051906020012060038281548110610ee757610ee7611a67565b90600052602060002001604051610efe91906118ab565b604051809103902003610f935760038054610f1b90600190611a7d565b81548110610f2b57610f2b611a67565b9060005260206000200160038281548110610f4857610f48611a67565b906000526020600020019081610f5e9190611aa4565b506003805480610f7057610f70611b78565b600190038181906000526020600020016000610f8c91906111ea565b9055610f9b565b600101610ec2565b5060006008826040516104269190611855565b604051639074726b60e01b81526060906001600160a01b03861690639074726b90610fe290879087906000906004016117a4565b602060405180830381865afa158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102391906117f1565b61103f5760405162461bcd60e51b81526004016101fd90611813565b60008251116110605760405162461bcd60e51b81526004016101fd90611920565b6007826040516110709190611855565b9081526020016040518091039020805461108990611871565b80601f01602080910402602001604051908101604052809291908181526020018280546110b590611871565b80156111025780601f106110d757610100808354040283529160200191611102565b820191906000526020600020905b8154815290600101906020018083116110e557829003601f168201915b50505050509050949350505050565b60606003805480602002602001604051908101604052809291908181526020016000905b828210156111e157838290600052602060002001805461115490611871565b80601f016020809104026020016040519081016040528092919081815260200182805461118090611871565b80156111cd5780601f106111a2576101008083540402835291602001916111cd565b820191906000526020600020905b8154815290600101906020018083116111b057829003601f168201915b505050505081526020019060010190611135565b50505050905090565b5080546111f690611871565b6000825580601f10611206575050565b601f0160209004906000526020600020908101906112249190611227565b50565b5b8082111561123c5760008155600101611228565b5090565b60006020828403121561125257600080fd5b81356001600160e01b03198116811461126a57600080fd5b9392505050565b80356001600160a01b038116811461128857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156112cb576112cb61128d565b604052919050565b600082601f8301126112e457600080fd5b8135602083016000806001600160401b038411156113045761130461128d565b50601f8301601f1916602001611319816112a3565b91505082815285838301111561132e57600080fd5b82826020830137600092810160200192909252509392505050565b60008060008060008060c0878903121561136257600080fd5b61136b87611271565b95506020870135945060408701356001600160401b0381111561138d57600080fd5b61139989828a016112d3565b94505060608701356001600160401b038111156113b557600080fd5b6113c189828a016112d3565b93505060808701356001600160401b038111156113dd57600080fd5b6113e989828a016112d3565b92505060a08701356001600160401b0381111561140557600080fd5b61141189828a016112d3565b9150509295509295509295565b600082601f83011261142f57600080fd5b81356001600160401b038111156114485761144861128d565b8060051b611458602082016112a3565b9182526020818501810192908101908684111561147457600080fd5b6020860192505b838310156114ba5782356001600160401b0381111561149957600080fd5b6114a8886020838a01016112d3565b8352506020928301929091019061147b565b9695505050505050565b600080600080600060a086880312156114dc57600080fd5b6114e586611271565b94506020860135935060408601356001600160401b0381111561150757600080fd5b611513888289016112d3565b93505060608601356001600160401b0381111561152f57600080fd5b61153b8882890161141e565b92505060808601356001600160401b0381111561155757600080fd5b6115638882890161141e565b9150509295509295909350565b60008060006060848603121561158557600080fd5b61158e84611271565b92506020840135915060408401356001600160401b038111156115b057600080fd5b6115bc868287016112d3565b9150509250925092565b60005b838110156115e15781810151838201526020016115c9565b50506000910152565b600081518084526116028160208601602086016115c6565b601f01601f19169290920160200192915050565b6000602082016020835280845180835260408501915060408160051b86010192506020860160005b8281101561166f57603f1987860301845261165a8583516115ea565b9450602093840193919091019060010161163e565b50929695505050505050565b6000806000806080858703121561169157600080fd5b61169a85611271565b93506020850135925060408501356001600160401b038111156116bc57600080fd5b6116c8878288016112d3565b92505060608501356001600160401b038111156116e457600080fd5b6116f0878288016112d3565b91505092959194509250565b6000806000806080858703121561171257600080fd5b8435935060208501356001600160401b0381111561172f57600080fd5b8501601f8101871361174057600080fd5b80356001600160401b0381111561175657600080fd5b87602082840101111561176857600080fd5b60208201945080935050508560808601111561178357600080fd5b509194909350909160400190565b60208152600061126a60208301846115ea565b8381526080602082015260006117bd60808301856115ea565b9050604082018360005b60028110156117e65781548352602090920191600191820191016117c7565b505050949350505050565b60006020828403121561180357600080fd5b8151801515811461126a57600080fd5b60208082526022908201527f4163636f756e743a2043616e6e6f742076616c6964617465207369676e617475604082015261726560f01b606082015260800190565b600082516118678184602087016115c6565b9190910192915050565b600181811c9082168061188557607f821691505b6020821081036118a557634e487b7160e01b600052602260045260246000fd5b50919050565b60008083546118b981611871565b6001821680156118d057600181146118e557611915565b60ff1983168652811515820286019350611915565b86600052602060002060005b8381101561190d578154888201526001909101906020016118f1565b505081860193505b509195945050505050565b6020808252601d908201527f4163636f756e743a204e616d652063616e6e6f7420626520656d707479000000604082015260600190565b601f8211156119a157806000526020600020601f840160051c8101602085101561197e5750805b601f840160051c820191505b8181101561199e576000815560010161198a565b50505b505050565b81516001600160401b038111156119bf576119bf61128d565b6119d3816119cd8454611871565b84611957565b6020601f821160018114611a0a57600083156119ef5750848201515b600184901b600019600386901b1c198216175b85555061199e565b600084815260208120601f198516915b82811015611a3a5787850151825560209485019460019092019101611a1a565b5084821015611a585786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b81810381811115611a9e57634e487b7160e01b600052601160045260246000fd5b92915050565b818103611aaf575050565b611ab98254611871565b6001600160401b03811115611ad057611ad061128d565b611ade816119cd8454611871565b6000601f821160018114611b1057600083156119ef575081850154600184901b600019600386901b1c19821617611a02565b600085815260209020601f19841690600086815260209020845b83811015611b4a5782860154825560019586019590910190602001611b2a565b5085831015611b685781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220ef2426e285a9348e8895daf5ac21b0f26d88fc8155bb2dc1da360f02fe704d8464736f6c634300081b0033a26469706673582212205ab91c4edfb108e9917cb3163f841d0ea8bad073667e96f29a9b258c601923ca64736f6c634300081b0033