60806040523480156200001157600080fd5b506040805160208101909152600081526200002c8162000050565b50620000383362000062565b600480546001600160a01b0319163317905562000225565b60026200005e828262000159565b5050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620000df57607f821691505b6020821081036200010057634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200015457600081815260208120601f850160051c810160208610156200012f5750805b601f850160051c820191505b8181101562000150578281556001016200013b565b5050505b505050565b81516001600160401b03811115620001755762000175620000b4565b6200018d81620001868454620000ca565b8462000106565b602080601f831160018114620001c55760008415620001ac5750858301515b600019600386901b1c1916600185901b17855562000150565b600085815260208120601f198616915b82811015620001f657888601518255948401946001909101908401620001d5565b5085821015620002155787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611fcb80620002356000396000f3fe608060405234801561001057600080fd5b50600436106101a25760003560e01c8063715018a6116100ee578063cc78ed5f11610097578063ee7a7c0411610071578063ee7a7c0414610395578063f242432a146103a8578063f2fde38b146103bb578063f356c17b146103ce57600080fd5b8063cc78ed5f1461033e578063cde1d4d714610346578063e985e9c51461035957600080fd5b8063a0ac5979116100c8578063a0ac59791461030a578063a22cb46514610318578063a73f7f8a1461032b57600080fd5b8063715018a6146102de5780638da5cb5b146102e657806390107afe146102f757600080fd5b80632eb2c2d611610150578063528c198a1161012a578063528c198a146102985780635462870d146102ab5780636312d5d0146102d657600080fd5b80632eb2c2d61461025c578063381b4a141461026f5780634e1273f41461027857600080fd5b80631603fb62116101815780631603fb6214610210578063208dd1ff1461023357806324a242c31461024857600080fd5b8062fdd58e146101a757806301ffc9a7146101cd5780630e89341c146101f0575b600080fd5b6101ba6101b5366004611884565b6103fc565b6040519081526020015b60405180910390f35b6101e06101db3660046118c4565b6104a8565b60405190151581526020016101c4565b6102036101fe3660046118e8565b610543565b6040516101c49190611947565b6101e061021e36600461195a565b60086020526000908152604090205460ff1681565b610246610241366004611884565b6105d7565b005b6101e061025636600461195a565b50600190565b61024661026a366004611ac1565b610618565b6101ba60095481565b61028b610286366004611b6b565b6106ba565b6040516101c49190611c71565b6102466102a6366004611884565b6107f8565b6005546102be906001600160a01b031681565b6040516001600160a01b0390911681526020016101c4565b6101ba600181565b6102466108d1565b6003546001600160a01b03166102be565b610246610305366004611c84565b6108e5565b6101ba61025636600461195a565b610246610326366004611cb7565b6109bc565b610246610339366004611884565b6109c7565b6101ba600081565b6004546102be906001600160a01b031681565b6101e0610367366004611c84565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205460ff1690565b6102466103a3366004611884565b610a80565b6102466103b6366004611cf3565b610bab565b6102466103c936600461195a565b610c46565b6101e06103dc366004611884565b600760209081526000928352604080842090915290825290205460ff1681565b60006001600160a01b03831661047f5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201527f616c6964206f776e65720000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b506000818152602081815260408083206001600160a01b03861684529091529020545b92915050565b60006001600160e01b031982167fd9b67a2600000000000000000000000000000000000000000000000000000000148061050b57506001600160e01b031982167f0e89341c00000000000000000000000000000000000000000000000000000000145b806104a257507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316146104a2565b60606002805461055290611d58565b80601f016020809104026020016040519081016040528092919081815260200182805461057e90611d58565b80156105cb5780601f106105a0576101008083540402835291602001916105cb565b820191906000526020600020905b8154815290600101906020018083116105ae57829003601f168201915b50505050509050919050565b6105df610cd6565b6105eb82600180610d30565b6001600160a01b03909116600090815260076020908152604080832093835292905220805460ff19169055565b6001600160a01b03851633148061063457506106348533610367565b6106a65760405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610476565b6106b38585858585610ee4565b5050505050565b606081518351146107335760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e67746860448201527f206d69736d6174636800000000000000000000000000000000000000000000006064820152608401610476565b6000835167ffffffffffffffff81111561074f5761074f611975565b604051908082528060200260200182016040528015610778578160200160208202803683370190505b50905060005b84518110156107f0576107c385828151811061079c5761079c611d92565b60200260200101518583815181106107b6576107b6611d92565b60200260200101516103fc565b8282815181106107d5576107d5611d92565b60209081029190910101526107e981611dbe565b905061077e565b509392505050565b610800610cd6565b80156108cd57600654604080516303ce78cb60e51b815290516000926001600160a01b0316916379cf19609160048083019260209291908290030181865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108749190611dd7565b90506108928360008460405180602001604052806000815250611157565b6001600160a01b038316600090815260076020908152604080832084845290915281205460ff16151590036108cb576108cb83826109c7565b505b5050565b6108d9610cd6565b6108e3600061127e565b565b6005546001600160a01b031615610976576004546001600160a01b031633146109765760405162461bcd60e51b815260206004820152603260248201527f43616e206f6e6c792073657420746865206d756c74697369672061646472657360448201527f732066726f6d2074686520666163746f727900000000000000000000000000006064820152608401610476565b600580546001600160a01b0380851673ffffffffffffffffffffffffffffffffffffffff199283161790925560068054928416929091169190911790556108cd8261127e565b6108cd3383836112dd565b6109cf610cd6565b6109fd82600180846040516020016109e991815260200190565b604051602081830303815290604052611157565b6001600160a01b03821660008181526007602090815260408083208584528252808320805460ff19166001179055928252600890529081205460ff16151590036108cd57600160096000828254610a549190611df0565b90915550506001600160a01b0382166000908152600860205260409020805460ff191660011790555050565b610a88610cd6565b610a9482600083610d30565b610a9f8260006103fc565b6000036108cd57600654604080516303ce78cb60e51b815290516000926001600160a01b0316916379cf19609160048083019260209291908290030181865afa158015610af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b149190611dd7565b90506000600660009054906101000a90046001600160a01b03166001600160a01b0316638ad682af6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8f9190611dd7565b9050610b9b84836105d7565b610ba584826105d7565b50505050565b6001600160a01b038516331480610bc75750610bc78533610367565b610c395760405162461bcd60e51b815260206004820152602e60248201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60448201527f6572206f7220617070726f7665640000000000000000000000000000000000006064820152608401610476565b6106b385858585856113d1565b610c4e610cd6565b6001600160a01b038116610cca5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610476565b610cd38161127e565b50565b6003546001600160a01b031633146108e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610476565b6001600160a01b038316610dac5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610476565b336000610db88461157c565b90506000610dc58461157c565b60408051602080820183526000918290528882528181528282206001600160a01b038b1683529052205490915084811015610e675760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c60448201527f616e6365000000000000000000000000000000000000000000000000000000006064820152608401610476565b6000868152602081815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46040805160208101909152600090525b50505050505050565b8151835114610f5b5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060448201527f6d69736d617463680000000000000000000000000000000000000000000000006064820152608401610476565b6001600160a01b038416610fbf5760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610476565b3360005b84518110156110e9576000858281518110610fe057610fe0611d92565b602002602001015190506000858381518110610ffe57610ffe611d92565b602090810291909101810151600084815280835260408082206001600160a01b038e1683529093529190912054909150818110156110915760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610476565b6000838152602081815260408083206001600160a01b038e8116855292528083208585039055908b168252812080548492906110ce908490611df0565b92505081905550505050806110e290611dbe565b9050610fc3565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611139929190611e03565b60405180910390a461114f8187878787876115c7565b505050505050565b6001600160a01b0384166111d35760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152608401610476565b3360006111df8561157c565b905060006111ec8561157c565b90506000868152602081815260408083206001600160a01b038b1684529091528120805487929061121e908490611df0565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610edb8360008989898961176c565b600380546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b0316036113645760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c2073746174757360448201527f20666f722073656c6600000000000000000000000000000000000000000000006064820152608401610476565b6001600160a01b03838116600081815260016020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166114355760405162461bcd60e51b815260206004820152602560248201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604482015264647265737360d81b6064820152608401610476565b3360006114418561157c565b9050600061144e8561157c565b90506000868152602081815260408083206001600160a01b038c168452909152902054858110156114d45760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60448201526939103a3930b739b332b960b11b6064820152608401610476565b6000878152602081815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611511908490611df0565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611571848a8a8a8a8a61176c565b505050505050505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106115b6576115b6611d92565b602090810291909101015292915050565b6001600160a01b0384163b1561114f5760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061160b9089908990889088908890600401611e31565b6020604051808303816000875af1925050508015611646575060408051601f3d908101601f1916820190925261164391810190611e8f565b60015b6116fb57611652611eac565b806308c379a00361168b5750611666611ec8565b80611671575061168d565b8060405162461bcd60e51b81526004016104769190611947565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560448201527f526563656976657220696d706c656d656e7465720000000000000000000000006064820152608401610476565b6001600160e01b0319811663bc197c8160e01b14610edb5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610476565b6001600160a01b0384163b1561114f5760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906117b09089908990889088908890600401611f52565b6020604051808303816000875af19250505080156117eb575060408051601f3d908101601f191682019092526117e891810190611e8f565b60015b6117f757611652611eac565b6001600160e01b0319811663f23a6e6160e01b14610edb5760405162461bcd60e51b815260206004820152602860248201527f455243313135353a204552433131353552656365697665722072656a656374656044820152676420746f6b656e7360c01b6064820152608401610476565b80356001600160a01b038116811461187f57600080fd5b919050565b6000806040838503121561189757600080fd5b6118a083611868565b946020939093013593505050565b6001600160e01b031981168114610cd357600080fd5b6000602082840312156118d657600080fd5b81356118e1816118ae565b9392505050565b6000602082840312156118fa57600080fd5b5035919050565b6000815180845260005b818110156119275760208185018101518683018201520161190b565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006118e16020830184611901565b60006020828403121561196c57600080fd5b6118e182611868565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156119b1576119b1611975565b6040525050565b600067ffffffffffffffff8211156119d2576119d2611975565b5060051b60200190565b600082601f8301126119ed57600080fd5b813560206119fa826119b8565b604051611a07828261198b565b83815260059390931b8501820192828101915086841115611a2757600080fd5b8286015b84811015611a425780358352918301918301611a2b565b509695505050505050565b600082601f830112611a5e57600080fd5b813567ffffffffffffffff811115611a7857611a78611975565b604051611a8f601f8301601f19166020018261198b565b818152846020838601011115611aa457600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215611ad957600080fd5b611ae286611868565b9450611af060208701611868565b9350604086013567ffffffffffffffff80821115611b0d57600080fd5b611b1989838a016119dc565b94506060880135915080821115611b2f57600080fd5b611b3b89838a016119dc565b93506080880135915080821115611b5157600080fd5b50611b5e88828901611a4d565b9150509295509295909350565b60008060408385031215611b7e57600080fd5b823567ffffffffffffffff80821115611b9657600080fd5b818501915085601f830112611baa57600080fd5b81356020611bb7826119b8565b604051611bc4828261198b565b83815260059390931b8501820192828101915089841115611be457600080fd5b948201945b83861015611c0957611bfa86611868565b82529482019490820190611be9565b96505086013592505080821115611c1f57600080fd5b50611c2c858286016119dc565b9150509250929050565b600081518084526020808501945080840160005b83811015611c6657815187529582019590820190600101611c4a565b509495945050505050565b6020815260006118e16020830184611c36565b60008060408385031215611c9757600080fd5b611ca083611868565b9150611cae60208401611868565b90509250929050565b60008060408385031215611cca57600080fd5b611cd383611868565b915060208301358015158114611ce857600080fd5b809150509250929050565b600080600080600060a08688031215611d0b57600080fd5b611d1486611868565b9450611d2260208701611868565b93506040860135925060608601359150608086013567ffffffffffffffff811115611d4c57600080fd5b611b5e88828901611a4d565b600181811c90821680611d6c57607f821691505b602082108103611d8c57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611dd057611dd0611da8565b5060010190565b600060208284031215611de957600080fd5b5051919050565b808201808211156104a2576104a2611da8565b604081526000611e166040830185611c36565b8281036020840152611e288185611c36565b95945050505050565b60006001600160a01b03808816835280871660208401525060a06040830152611e5d60a0830186611c36565b8281036060840152611e6f8186611c36565b90508281036080840152611e838185611901565b98975050505050505050565b600060208284031215611ea157600080fd5b81516118e1816118ae565b600060033d1115611ec55760046000803e5060005160e01c5b90565b600060443d1015611ed65790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715611f0657505050505090565b8285019150815181811115611f1e5750505050505090565b843d8701016020828501011115611f385750505050505090565b611f476020828601018761198b565b509095945050505050565b60006001600160a01b03808816835280871660208401525084604083015283606083015260a06080830152611f8a60a0830184611901565b97965050505050505056fea26469706673582212208f72a17980f32e582f466310a96b5ce45e89d7896d4135243e64f23271647a4464736f6c63430008140033