//
0x60806040523480156200001157600080fd5b5060405162002801380380620028018339810160408190526200003491620000cb565b80620000403362000053565b6200004b81620000a3565b505062000302565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6003620000b1828262000236565b5050565b634e487b7160e01b600052604160045260246000fd5b60006020808385031215620000df57600080fd5b82516001600160401b0380821115620000f757600080fd5b818501915085601f8301126200010c57600080fd5b815181811115620001215762000121620000b5565b604051601f8201601f19908116603f011681019083821181831017156200014c576200014c620000b5565b8160405282815288868487010111156200016557600080fd5b600093505b828410156200018957848401860151818501870152928501926200016a565b828411156200019b5760008684830101525b98975050505050505050565b600181811c90821680620001bc57607f821691505b602082108103620001dd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200023157600081815260208120601f850160051c810160208610156200020c5750805b601f850160051c820191505b818110156200022d5782815560010162000218565b5050505b505050565b81516001600160401b03811115620002525762000252620000b5565b6200026a81620002638454620001a7565b84620001e3565b602080601f831160018114620002a25760008415620002895750858301515b600019600386901b1c1916600185901b1785556200022d565b600085815260208120601f198616915b82811015620002d357888601518255948401946001909101908401620002b2565b5085821015620002f25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6124ef80620003126000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c8063715018a6116100ad578063bd85b03911610071578063bd85b0391461027a578063e985e9c51461029a578063f242432a146102d6578063f2fde38b146102e9578063f5298aca146102fc57600080fd5b8063715018a61461021e578063731133e9146102265780638da5cb5b146102395780639b642de114610254578063a22cb4651461026757600080fd5b80632eb2c2d6116100f45780632eb2c2d6146101a35780634e1273f4146101b65780634f558e79146101d657806353f8ea0f146101f85780636b20c4541461020b57600080fd5b8062fdd58e1461012557806301ffc9a71461014b5780630e89341c1461016e5780631f7fdffa1461018e575b600080fd5b610138610133366004611797565b61030f565b6040519081526020015b60405180910390f35b61015e6101593660046117d7565b6103a7565b6040519015158152602001610142565b61018161017c3660046117fb565b6103f9565b604051610142919061186c565b6101a161019c3660046119d2565b610434565b005b6101a16101b1366004611a6a565b61044e565b6101c96101c4366004611b13565b61049a565b6040516101429190611c18565b61015e6101e43660046117fb565b600090815260046020526040902054151590565b6101a1610206366004611c2b565b6105c3565b6101a1610219366004611cbf565b61068c565b6101a16106d4565b6101a1610234366004611d32565b6106e8565b6000546040516001600160a01b039091168152602001610142565b6101a1610262366004611d86565b6106fc565b6101a1610275366004611dd6565b610710565b6101386102883660046117fb565b60009081526004602052604090205490565b61015e6102a8366004611e12565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205460ff1690565b6101a16102e4366004611e45565b61071f565b6101a16102f7366004611ea9565b610764565b6101a161030a366004611ec4565b6107da565b60006001600160a01b03831661037f5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b5060009081526001602090815260408083206001600160a01b03949094168352929052205490565b60006001600160e01b03198216636cdb3d1360e11b14806103d857506001600160e01b031982166303a24d0760e21b145b806103f357506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606104048261081d565b61040d836108b1565b60405160200161041e929190611ef7565b6040516020818303038152906040529050919050565b61043c610943565b6104488484848461099d565b50505050565b6001600160a01b03851633148061046a575061046a85336102a8565b6104865760405162461bcd60e51b815260040161037690611f36565b6104938585858585610af8565b5050505050565b606081518351146104ff5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610376565b600083516001600160401b0381111561051a5761051a61187f565b604051908082528060200260200182016040528015610543578160200160208202803683370190505b50905060005b84518110156105bb5761058e85828151811061056757610567611f84565b602002602001015185838151811061058157610581611f84565b602002602001015161030f565b8282815181106105a0576105a0611f84565b60209081029190910101526105b481611fb0565b9050610549565b509392505050565b6105cd8184611fc9565b6105d7338461030f565b10156106255760405162461bcd60e51b815260206004820152601d60248201527f4e6f7420656e6f75676820746f6b656e7320746f207472616e736665720000006044820152606401610376565b60005b83811015610684576106728686868481811061064657610646611f84565b905060200201602081019061065b9190611ea9565b85856040518060200160405280600081525061071f565b8061067c81611fb0565b915050610628565b505050505050565b6001600160a01b0383163314806106a857506106a883336102a8565b6106c45760405162461bcd60e51b815260040161037690611f36565b6106cf838383610c9d565b505050565b6106dc610943565b6106e66000610e3c565b565b6106f0610943565b61044884848484610e8c565b610704610943565b61070d81610f77565b50565b61071b338383610f83565b5050565b6001600160a01b03851633148061073b575061073b85336102a8565b6107575760405162461bcd60e51b815260040161037690611f36565b6104938585858585611063565b61076c610943565b6001600160a01b0381166107d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610376565b61070d81610e3c565b6001600160a01b0383163314806107f657506107f683336102a8565b6108125760405162461bcd60e51b815260040161037690611f36565b6106cf83838361119f565b60606003805461082c90611fe8565b80601f016020809104026020016040519081016040528092919081815260200182805461085890611fe8565b80156108a55780601f1061087a576101008083540402835291602001916108a5565b820191906000526020600020905b81548152906001019060200180831161088857829003601f168201915b50505050509050919050565b606060006108be836112bb565b60010190506000816001600160401b038111156108dd576108dd61187f565b6040519080825280601f01601f191660200182016040528015610907576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461091157509392505050565b6000546001600160a01b031633146106e65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610376565b6001600160a01b0384166109c35760405162461bcd60e51b815260040161037690612022565b81518351146109e45760405162461bcd60e51b815260040161037690612063565b336109f481600087878787611393565b60005b8451811015610a9057838181518110610a1257610a12611f84565b602002602001015160016000878481518110610a3057610a30611f84565b602002602001015181526020019081526020016000206000886001600160a01b03166001600160a01b031681526020019081526020016000206000828254610a7891906120ab565b90915550819050610a8881611fb0565b9150506109f7565b50846001600160a01b031660006001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610ae19291906120c3565b60405180910390a4610493816000878787876113a1565b8151835114610b195760405162461bcd60e51b815260040161037690612063565b6001600160a01b038416610b3f5760405162461bcd60e51b8152600401610376906120f1565b33610b4e818787878787611393565b60005b8451811015610c37576000858281518110610b6e57610b6e611f84565b602002602001015190506000858381518110610b8c57610b8c611f84565b60209081029190910181015160008481526001835260408082206001600160a01b038e168352909352919091205490915081811015610bdd5760405162461bcd60e51b815260040161037690612136565b60008381526001602090815260408083206001600160a01b038e8116855292528083208585039055908b16825281208054849290610c1c9084906120ab565b9250508190555050505080610c3090611fb0565b9050610b51565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051610c879291906120c3565b60405180910390a46106848187878787876113a1565b6001600160a01b038316610cc35760405162461bcd60e51b815260040161037690612180565b8051825114610ce45760405162461bcd60e51b815260040161037690612063565b6000339050610d0781856000868660405180602001604052806000815250611393565b60005b8351811015610dcf576000848281518110610d2757610d27611f84565b602002602001015190506000848381518110610d4557610d45611f84565b60209081029190910181015160008481526001835260408082206001600160a01b038c168352909352919091205490915081811015610d965760405162461bcd60e51b8152600401610376906121c3565b60009283526001602090815260408085206001600160a01b038b1686529091529092209103905580610dc781611fb0565b915050610d0a565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051610e209291906120c3565b60405180910390a4604080516020810190915260009052610448565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038416610eb25760405162461bcd60e51b815260040161037690612022565b336000610ebe856114fc565b90506000610ecb856114fc565b9050610edc83600089858589611393565b60008681526001602090815260408083206001600160a01b038b16845290915281208054879290610f0e9084906120ab565b909155505060408051878152602081018790526001600160a01b03808a1692600092918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4610f6e83600089898989611547565b50505050505050565b600361071b828261224d565b816001600160a01b0316836001600160a01b031603610ff65760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610376565b6001600160a01b03838116600081815260026020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0384166110895760405162461bcd60e51b8152600401610376906120f1565b336000611095856114fc565b905060006110a2856114fc565b90506110b2838989858589611393565b60008681526001602090815260408083206001600160a01b038c168452909152902054858110156110f55760405162461bcd60e51b815260040161037690612136565b60008781526001602090815260408083206001600160a01b038d8116855292528083208985039055908a168252812080548892906111349084906120ab565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611194848a8a8a8a8a611547565b505050505050505050565b6001600160a01b0383166111c55760405162461bcd60e51b815260040161037690612180565b3360006111d1846114fc565b905060006111de846114fc565b90506111fe83876000858560405180602001604052806000815250611393565b60008581526001602090815260408083206001600160a01b038a168452909152902054848110156112415760405162461bcd60e51b8152600401610376906121c3565b60008681526001602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4604080516020810190915260009052610f6e565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106112fa5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611326576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061134457662386f26fc10000830492506010015b6305f5e100831061135c576305f5e100830492506008015b612710831061137057612710830492506004015b60648310611382576064830492506002015b600a83106103f35760010192915050565b610684868686868686611602565b6001600160a01b0384163b156106845760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906113e5908990899088908890889060040161230c565b6020604051808303816000875af1925050508015611420575060408051601f3d908101601f1916820190925261141d9181019061236a565b60015b6114cc5761142c612387565b806308c379a00361146557506114406123a3565b8061144b5750611467565b8060405162461bcd60e51b8152600401610376919061186c565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610376565b6001600160e01b0319811663bc197c8160e01b14610f6e5760405162461bcd60e51b81526004016103769061242c565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061153657611536611f84565b602090810291909101015292915050565b6001600160a01b0384163b156106845760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061158b9089908990889088908890600401612474565b6020604051808303816000875af19250505080156115c6575060408051601f3d908101601f191682019092526115c39181019061236a565b60015b6115d25761142c612387565b6001600160e01b0319811663f23a6e6160e01b14610f6e5760405162461bcd60e51b81526004016103769061242c565b6001600160a01b0385166116895760005b83518110156116875782818151811061162e5761162e611f84565b60200260200101516004600086848151811061164c5761164c611f84565b60200260200101518152602001908152602001600020600082825461167191906120ab565b90915550611680905081611fb0565b9050611613565b505b6001600160a01b0384166106845760005b8351811015610f6e5760008482815181106116b7576116b7611f84565b6020026020010151905060008483815181106116d5576116d5611f84565b60200260200101519050600060046000848152602001908152602001600020549050818110156117585760405162461bcd60e51b815260206004820152602860248201527f455243313135353a206275726e20616d6f756e74206578636565647320746f74604482015267616c537570706c7960c01b6064820152608401610376565b6000928352600460205260409092209103905561177481611fb0565b905061169a565b80356001600160a01b038116811461179257600080fd5b919050565b600080604083850312156117aa57600080fd5b6117b38361177b565b946020939093013593505050565b6001600160e01b03198116811461070d57600080fd5b6000602082840312156117e957600080fd5b81356117f4816117c1565b9392505050565b60006020828403121561180d57600080fd5b5035919050565b60005b8381101561182f578181015183820152602001611817565b838111156104485750506000910152565b60008151808452611858816020860160208601611814565b601f01601f19169290920160200192915050565b6020815260006117f46020830184611840565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156118ba576118ba61187f565b6040525050565b60006001600160401b038211156118da576118da61187f565b5060051b60200190565b600082601f8301126118f557600080fd5b81356020611902826118c1565b60405161190f8282611895565b83815260059390931b850182019282810191508684111561192f57600080fd5b8286015b8481101561194a5780358352918301918301611933565b509695505050505050565b60006001600160401b0383111561196e5761196e61187f565b604051611985601f8501601f191660200182611895565b80915083815284848401111561199a57600080fd5b83836020830137600060208583010152509392505050565b600082601f8301126119c357600080fd5b6117f483833560208501611955565b600080600080608085870312156119e857600080fd5b6119f18561177b565b935060208501356001600160401b0380821115611a0d57600080fd5b611a19888389016118e4565b94506040870135915080821115611a2f57600080fd5b611a3b888389016118e4565b93506060870135915080821115611a5157600080fd5b50611a5e878288016119b2565b91505092959194509250565b600080600080600060a08688031215611a8257600080fd5b611a8b8661177b565b9450611a996020870161177b565b935060408601356001600160401b0380821115611ab557600080fd5b611ac189838a016118e4565b94506060880135915080821115611ad757600080fd5b611ae389838a016118e4565b93506080880135915080821115611af957600080fd5b50611b06888289016119b2565b9150509295509295909350565b60008060408385031215611b2657600080fd5b82356001600160401b0380821115611b3d57600080fd5b818501915085601f830112611b5157600080fd5b81356020611b5e826118c1565b604051611b6b8282611895565b83815260059390931b8501820192828101915089841115611b8b57600080fd5b948201945b83861015611bb057611ba18661177b565b82529482019490820190611b90565b96505086013592505080821115611bc657600080fd5b50611bd3858286016118e4565b9150509250929050565b600081518084526020808501945080840160005b83811015611c0d57815187529582019590820190600101611bf1565b509495945050505050565b6020815260006117f46020830184611bdd565b600080600080600060808688031215611c4357600080fd5b611c4c8661177b565b945060208601356001600160401b0380821115611c6857600080fd5b818801915088601f830112611c7c57600080fd5b813581811115611c8b57600080fd5b8960208260051b8501011115611ca057600080fd5b9699602092909201985095966040810135965060600135945092505050565b600080600060608486031215611cd457600080fd5b611cdd8461177b565b925060208401356001600160401b0380821115611cf957600080fd5b611d05878388016118e4565b93506040860135915080821115611d1b57600080fd5b50611d28868287016118e4565b9150509250925092565b60008060008060808587031215611d4857600080fd5b611d518561177b565b9350602085013592506040850135915060608501356001600160401b03811115611d7a57600080fd5b611a5e878288016119b2565b600060208284031215611d9857600080fd5b81356001600160401b03811115611dae57600080fd5b8201601f81018413611dbf57600080fd5b611dce84823560208401611955565b949350505050565b60008060408385031215611de957600080fd5b611df28361177b565b915060208301358015158114611e0757600080fd5b809150509250929050565b60008060408385031215611e2557600080fd5b611e2e8361177b565b9150611e3c6020840161177b565b90509250929050565b600080600080600060a08688031215611e5d57600080fd5b611e668661177b565b9450611e746020870161177b565b9350604086013592506060860135915060808601356001600160401b03811115611e9d57600080fd5b611b06888289016119b2565b600060208284031215611ebb57600080fd5b6117f48261177b565b600080600060608486031215611ed957600080fd5b611ee28461177b565b95602085013595506040909401359392505050565b60008351611f09818460208801611814565b835190830190611f1d818360208801611814565b64173539b7b760d91b9101908152600501949350505050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611fc257611fc2611f9a565b5060010190565b6000816000190483118215151615611fe357611fe3611f9a565b500290565b600181811c90821680611ffc57607f821691505b60208210810361201c57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526021908201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b600082198211156120be576120be611f9a565b500190565b6040815260006120d66040830185611bdd565b82810360208401526120e88185611bdd565b95945050505050565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526024908201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604082015263616e636560e01b606082015260800190565b601f8211156106cf57600081815260208120601f850160051c8101602086101561222e5750805b601f850160051c820191505b818110156106845782815560010161223a565b81516001600160401b038111156122665761226661187f565b61227a816122748454611fe8565b84612207565b602080601f8311600181146122af57600084156122975750858301515b600019600386901b1c1916600185901b178555610684565b600085815260208120601f198616915b828110156122de578886015182559484019460019091019084016122bf565b50858210156122fc5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0386811682528516602082015260a06040820181905260009061233890830186611bdd565b828103606084015261234a8186611bdd565b9050828103608084015261235e8185611840565b98975050505050505050565b60006020828403121561237c57600080fd5b81516117f4816117c1565b600060033d11156123a05760046000803e5060005160e01c5b90565b600060443d10156123b15790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156123e057505050505090565b82850191508151818111156123f85750505050505090565b843d87010160208285010111156124125750505050505090565b61242160208286010187611895565b509095945050505050565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190526000906124ae90830184611840565b97965050505050505056fea264697066735822122097c9f33ce23c3c204f97f09dc61d88ebef9dd51010191d597f85b3861a2bc68e64736f6c634300080f00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003368747470733a2f2f7065726b61626c652e6865726f6b756170702e636f6d2f76312f726564656d7074696f6e732f6a736f6e2f00000000000000000000000000