60806040523480156200001157600080fd5b506040518060400160405280601881526020017f4f776e6573742078204f6e696769726920436f6c6c6162730000000000000000815250604051806040016040528060038152602001624f584f60e81b8152508160009081620000759190620001cc565b506001620000848282620001cc565b505050620000a16200009b620000d160201b60201c565b620000d5565b6040518060600160405280602781526020016200212c60279139600890620000ca9082620001cc565b5062000298565b3390565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200015257607f821691505b6020821081036200017357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620001c757600081815260208120601f850160051c81016020861015620001a25750805b601f850160051c820191505b81811015620001c357828155600101620001ae565b5050505b505050565b81516001600160401b03811115620001e857620001e862000127565b6200020081620001f984546200013d565b8462000179565b602080601f8311600181146200023857600084156200021f5750858301515b600019600386901b1c1916600185901b178555620001c3565b600085815260208120601f198616915b82811015620002695788860151825594840194600190910190840162000248565b5085821015620002885787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611e8480620002a86000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80637b47ec1a116100c3578063c87b56dd1161007c578063c87b56dd146102cf578063d55e16b1146102e2578063dd553eb1146102f5578063e985e9c514610308578063f2fde38b1461031b578063f356749d1461032e57600080fd5b80637b47ec1a1461026a5780638da5cb5b1461027d57806395d89b411461028e578063a22cb46514610296578063b88d4fde146102a9578063c71b9da6146102bc57600080fd5b806342842e0e1161011557806342842e0e1461020057806355f804b3146102135780636352211e1461022657806370a0823114610239578063714c53981461025a578063715018a61461026257600080fd5b806301ffc9a71461015d57806306fdde0314610185578063081812fc1461019a578063095ea7b3146101c5578063162094c4146101da57806323b872dd146101ed575b600080fd5b61017061016b3660046115b5565b610341565b60405190151581526020015b60405180910390f35b61018d610393565b60405161017c9190611622565b6101ad6101a8366004611635565b610425565b6040516001600160a01b03909116815260200161017c565b6101d86101d336600461166a565b61044c565b005b6101d86101e8366004611753565b610566565b6101d86101fb36600461179a565b61057c565b6101d861020e36600461179a565b6105ad565b6101d86102213660046117d6565b6105c8565b6101ad610234366004611635565b6105dc565b61024c61024736600461180b565b61063c565b60405190815260200161017c565b61018d6106c2565b6101d86106d1565b6101d8610278366004611635565b6106e5565b6007546001600160a01b03166101ad565b61018d610751565b6101d86102a4366004611826565b610760565b6101d86102b7366004611862565b61076b565b6101d86102ca36600461196d565b6107a3565b61018d6102dd366004611635565b6107e3565b6101d86102f036600461166a565b6108e6565b6101d8610303366004611a04565b610914565b610170610316366004611a8c565b610a5f565b6101d861032936600461180b565b610a8d565b6101d861033c366004611abf565b610b03565b60006001600160e01b031982166380ac58cd60e01b148061037257506001600160e01b03198216635b5e139f60e01b145b8061038d57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600080546103a290611b34565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce90611b34565b801561041b5780601f106103f05761010080835404028352916020019161041b565b820191906000526020600020905b8154815290600101906020018083116103fe57829003601f168201915b5050505050905090565b600061043082610b57565b506000908152600460205260409020546001600160a01b031690565b6000610457826105dc565b9050806001600160a01b0316836001600160a01b0316036104c95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806104e557506104e58133610a5f565b6105575760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016104c0565b6105618383610bb6565b505050565b61056e610c24565b6105788282610c7e565b5050565b6105863382610d11565b6105a25760405162461bcd60e51b81526004016104c090611b6e565b610561838383610d6f565b6105618383836040518060200160405280600081525061076b565b6105d0610c24565b60086105788282611c0a565b6000818152600260205260408120546001600160a01b03168061038d5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104c0565b60006001600160a01b0382166106a65760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016104c0565b506001600160a01b031660009081526003602052604090205490565b6060600880546103a290611b34565b6106d9610c24565b6106e36000610f0b565b565b336106ef826105dc565b6001600160a01b0316146107455760405162461bcd60e51b815260206004820181905260248201527f4f6e6c792074686520746f6b656e206f776e65722063616e206275726e20697460448201526064016104c0565b61074e81610f5d565b50565b6060600180546103a290611b34565b610578338383610f9d565b6107753383610d11565b6107915760405162461bcd60e51b81526004016104c090611b6e565b61079d8484848461106b565b50505050565b60005b8151811015610578576107d18282815181106107c4576107c4611cca565b60200260200101516106e5565b806107db81611cf6565b9150506107a6565b60606107ee82610b57565b6000828152600660205260408120805461080790611b34565b80601f016020809104026020016040519081016040528092919081815260200182805461083390611b34565b80156108805780601f1061085557610100808354040283529160200191610880565b820191906000526020600020905b81548152906001019060200180831161086357829003601f168201915b5050505050905060006108916106c2565b905080516000036108a3575092915050565b8151156108d55780826040516020016108bd929190611d0f565b60405160208183030381529060405292505050919050565b6108de8461109e565b949350505050565b6108ee610c24565b60005b818110156105615761090283611105565b8061090c81611cf6565b9150506108f1565b815181511461097d5760405162461bcd60e51b815260206004820152602f60248201527f546f6b656e496473206c656e6774682073686f756c64206d6174636820746f4160448201526e0c8c8e4cae6e6cae640d8cadccee8d608b1b60648201526084016104c0565b81518351146109eb5760405162461bcd60e51b815260206004820152603460248201527f66726f6d416464726573736573206c656e6774682073686f756c64206d6174636044820152730d040e8de82c8c8e4cae6e6cae640d8cadccee8d60631b60648201526084016104c0565b60005b815181101561079d57610a4d848281518110610a0c57610a0c611cca565b6020026020010151848381518110610a2657610a26611cca565b6020026020010151848481518110610a4057610a40611cca565b60200260200101516105ad565b80610a5781611cf6565b9150506109ee565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b610a95610c24565b6001600160a01b038116610afa5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104c0565b61074e81610f0b565b610b0b610c24565b60005b8181101561056157610b45838383818110610b2b57610b2b611cca565b9050602002016020810190610b40919061180b565b611105565b80610b4f81611cf6565b915050610b0e565b6000818152600260205260409020546001600160a01b031661074e5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016104c0565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610beb826105dc565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6007546001600160a01b031633146106e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016104c0565b6000828152600260205260409020546001600160a01b0316610cf95760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b60648201526084016104c0565b60008281526006602052604090206105618282611c0a565b600080610d1d836105dc565b9050806001600160a01b0316846001600160a01b03161480610d445750610d448185610a5f565b806108de5750836001600160a01b0316610d5d84610425565b6001600160a01b031614949350505050565b826001600160a01b0316610d82826105dc565b6001600160a01b031614610de65760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016104c0565b6001600160a01b038216610e485760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016104c0565b610e53600082610bb6565b6001600160a01b0383166000908152600360205260408120805460019290610e7c908490611d3e565b90915550506001600160a01b0382166000908152600360205260408120805460019290610eaa908490611d51565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610f668161112a565b60008181526006602052604090208054610f7f90611b34565b15905061074e57600081815260066020526040812061074e91611551565b816001600160a01b0316836001600160a01b031603610ffe5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016104c0565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611076848484610d6f565b611082848484846111c5565b61079d5760405162461bcd60e51b81526004016104c090611d64565b60606110a982610b57565b60006110b36106c2565b905060008151116110d357604051806020016040528060008152506110fe565b806110dd846112c6565b6040516020016110ee929190611d0f565b6040516020818303038152906040525b9392505050565b611113600980546001019055565b600061111e60095490565b905061057882826113c7565b6000611135826105dc565b9050611142600083610bb6565b6001600160a01b038116600090815260036020526040812080546001929061116b908490611d3e565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60006001600160a01b0384163b156112bb57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611209903390899088908890600401611db6565b6020604051808303816000875af1925050508015611244575060408051601f3d908101601f1916820190925261124191810190611df3565b60015b6112a1573d808015611272576040519150601f19603f3d011682016040523d82523d6000602084013e611277565b606091505b5080516000036112995760405162461bcd60e51b81526004016104c090611d64565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506108de565b506001949350505050565b6060816000036112ed5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611317578061130181611cf6565b91506113109050600a83611e26565b91506112f1565b60008167ffffffffffffffff81111561133257611332611694565b6040519080825280601f01601f19166020018201604052801561135c576020820181803683370190505b5090505b84156108de57611371600183611d3e565b915061137e600a86611e3a565b611389906030611d51565b60f81b81838151811061139e5761139e611cca565b60200101906001600160f81b031916908160001a9053506113c0600a86611e26565b9450611360565b6105788282604051806020016040528060008152506113e6838361140f565b6113f360008484846111c5565b6105615760405162461bcd60e51b81526004016104c090611d64565b6001600160a01b0382166114655760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016104c0565b6000818152600260205260409020546001600160a01b0316156114ca5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016104c0565b6001600160a01b03821660009081526003602052604081208054600192906114f3908490611d51565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b50805461155d90611b34565b6000825580601f1061156d575050565b601f01602090049060005260206000209081019061074e91905b8082111561159b5760008155600101611587565b5090565b6001600160e01b03198116811461074e57600080fd5b6000602082840312156115c757600080fd5b81356110fe8161159f565b60005b838110156115ed5781810151838201526020016115d5565b50506000910152565b6000815180845261160e8160208601602086016115d2565b601f01601f19169290920160200192915050565b6020815260006110fe60208301846115f6565b60006020828403121561164757600080fd5b5035919050565b80356001600160a01b038116811461166557600080fd5b919050565b6000806040838503121561167d57600080fd5b6116868361164e565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156116d3576116d3611694565b604052919050565b600067ffffffffffffffff8311156116f5576116f5611694565b611708601f8401601f19166020016116aa565b905082815283838301111561171c57600080fd5b828260208301376000602084830101529392505050565b600082601f83011261174457600080fd5b6110fe838335602085016116db565b6000806040838503121561176657600080fd5b82359150602083013567ffffffffffffffff81111561178457600080fd5b61179085828601611733565b9150509250929050565b6000806000606084860312156117af57600080fd5b6117b88461164e565b92506117c66020850161164e565b9150604084013590509250925092565b6000602082840312156117e857600080fd5b813567ffffffffffffffff8111156117ff57600080fd5b6108de84828501611733565b60006020828403121561181d57600080fd5b6110fe8261164e565b6000806040838503121561183957600080fd5b6118428361164e565b91506020830135801515811461185757600080fd5b809150509250929050565b6000806000806080858703121561187857600080fd5b6118818561164e565b935061188f6020860161164e565b925060408501359150606085013567ffffffffffffffff8111156118b257600080fd5b8501601f810187136118c357600080fd5b6118d2878235602084016116db565b91505092959194509250565b600067ffffffffffffffff8211156118f8576118f8611694565b5060051b60200190565b600082601f83011261191357600080fd5b81356020611928611923836118de565b6116aa565b82815260059290921b8401810191818101908684111561194757600080fd5b8286015b84811015611962578035835291830191830161194b565b509695505050505050565b60006020828403121561197f57600080fd5b813567ffffffffffffffff81111561199657600080fd5b6108de84828501611902565b600082601f8301126119b357600080fd5b813560206119c3611923836118de565b82815260059290921b840181019181810190868411156119e257600080fd5b8286015b84811015611962576119f78161164e565b83529183019183016119e6565b600080600060608486031215611a1957600080fd5b833567ffffffffffffffff80821115611a3157600080fd5b611a3d878388016119a2565b94506020860135915080821115611a5357600080fd5b611a5f878388016119a2565b93506040860135915080821115611a7557600080fd5b50611a8286828701611902565b9150509250925092565b60008060408385031215611a9f57600080fd5b611aa88361164e565b9150611ab66020840161164e565b90509250929050565b60008060208385031215611ad257600080fd5b823567ffffffffffffffff80821115611aea57600080fd5b818501915085601f830112611afe57600080fd5b813581811115611b0d57600080fd5b8660208260051b8501011115611b2257600080fd5b60209290920196919550909350505050565b600181811c90821680611b4857607f821691505b602082108103611b6857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b601f82111561056157600081815260208120601f850160051c81016020861015611be35750805b601f850160051c820191505b81811015611c0257828155600101611bef565b505050505050565b815167ffffffffffffffff811115611c2457611c24611694565b611c3881611c328454611b34565b84611bbc565b602080601f831160018114611c6d5760008415611c555750858301515b600019600386901b1c1916600185901b178555611c02565b600085815260208120601f198616915b82811015611c9c57888601518255948401946001909101908401611c7d565b5085821015611cba5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611d0857611d08611ce0565b5060010190565b60008351611d218184602088016115d2565b835190830190611d358183602088016115d2565b01949350505050565b8181038181111561038d5761038d611ce0565b8082018082111561038d5761038d611ce0565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611de9908301846115f6565b9695505050505050565b600060208284031215611e0557600080fd5b81516110fe8161159f565b634e487b7160e01b600052601260045260246000fd5b600082611e3557611e35611e10565b500490565b600082611e4957611e49611e10565b50069056fea264697066735822122017d506065e3c15dadd98328b9df4e48f99121dc8aa474cad9ecd477a82443b3d64736f6c6343000811003368747470733a2f2f6170692e6f6e69676972692e6172742f6f776e657374786f6e69676972692f