60806040525f600f5560405162002b3538038062002b358339810160408190526200002a9162000833565b8086868560036200003c848262000968565b5060046200004b838262000968565b506005805460ff191660ff92909216919091179055505f90506200006c3390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600680546001600160a01b039283166001600160a01b031991821617909155600c8054821673f3376a24623121374dd8cfa0c6dee0fb43d2220e1790556064600b5560c8600a556007805492851692909116821790556040805163c45a015560e01b8152905163c45a0155916004818101926020929091908290030181865afa15801562000151573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000177919062000a30565b6001600160a01b031663c9c653963060075f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001d7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001fd919062000a30565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000248573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026e919062000a30565b600880546001600160a01b0319166001600160a01b039290921691821790556200029a906001620003ce565b620002be620002b660055461010090046001600160a01b031690565b6001620004bc565b600c54620002d7906001600160a01b03166001620004bc565b620002e4306001620004bc565b600754620002fd906001600160a01b03166001620004bc565b6200030a83600a62000b59565b62000318856113886200057c565b6200032590600162000b69565b62000331919062000b7f565b60095560646200034384600a62000b59565b6200034f908662000b7f565b6200035c90600662000b7f565b62000368919062000b99565b600d556200037883600a62000b59565b62000384908562000b7f565b600e55620003c2620003a360055461010090046001600160a01b031690565b620003b085600a62000b59565b620003bc908762000b7f565b620005ce565b50505050505062000bed565b6001600160a01b0382165f9081526011602052604090205481151560ff909116151503620004695760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382165f81815260116020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b036101009091041633146200051e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000460565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b5f620005c583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620006b060201b60201c565b90505b92915050565b6001600160a01b038216620006265760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000460565b600254620006359082620006ef565b6002556001600160a01b0382165f908152602081905260409020546200065c9082620006ef565b6001600160a01b0383165f81815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b5f8183620006d35760405162461bcd60e51b815260040162000460919062000bb9565b505f620006e1848662000b99565b95945050505050565b505050565b5f80620006fd838562000b69565b905083811015620005c55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000460565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156200078157818101518382015260200162000767565b50505f910152565b5f82601f83011262000799575f80fd5b81516001600160401b0380821115620007b657620007b662000751565b604051601f8301601f19908116603f01168101908282118183101715620007e157620007e162000751565b81604052838152866020858801011115620007fa575f80fd5b6200080d84602083016020890162000765565b9695505050505050565b80516001600160a01b03811681146200082e575f80fd5b919050565b5f805f805f8060c0878903121562000849575f80fd5b86516001600160401b038082111562000860575f80fd5b6200086e8a838b0162000789565b9750602089015191508082111562000884575f80fd5b506200089389828a0162000789565b95505060408701519350606087015160ff81168114620008b1575f80fd5b9250620008c16080880162000817565b9150620008d160a0880162000817565b90509295509295509295565b600181811c90821680620008f257607f821691505b6020821081036200091157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620006ea575f81815260208120601f850160051c810160208610156200093f5750805b601f850160051c820191505b8181101562000960578281556001016200094b565b505050505050565b81516001600160401b0381111562000984576200098462000751565b6200099c81620009958454620008dd565b8462000917565b602080601f831160018114620009d2575f8415620009ba5750858301515b5f19600386901b1c1916600185901b17855562000960565b5f85815260208120601f198616915b8281101562000a0257888601518255948401946001909101908401620009e1565b508582101562000a2057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000a41575f80fd5b620005c58262000817565b634e487b7160e01b5f52601160045260245ffd5b600181815b8085111562000aa057815f190482111562000a845762000a8462000a4c565b8085161562000a9257918102915b93841c939080029062000a65565b509250929050565b5f8262000ab857506001620005c8565b8162000ac657505f620005c8565b816001811462000adf576002811462000aea5762000b0a565b6001915050620005c8565b60ff84111562000afe5762000afe62000a4c565b50506001821b620005c8565b5060208310610133831016604e8410600b841016171562000b2f575081810a620005c8565b62000b3b838362000a60565b805f190482111562000b515762000b5162000a4c565b029392505050565b5f620005c560ff84168362000aa8565b80820180821115620005c857620005c862000a4c565b8082028115828204841417620005c857620005c862000a4c565b5f8262000bb457634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f825180602084015262000bd981604085016020870162000765565b601f01601f19169190910160400192915050565b611f3a8062000bfb5f395ff3fe6080604052600436106101f4575f3560e01c80638c0b5e2211610108578063aa4bde281161009d578063c492f0461161006d578063c492f046146105ba578063d2889fb0146105d9578063dd62ed3e146105ee578063e2f4560514610632578063f2fde38b14610647575f80fd5b8063aa4bde2814610539578063b62496f51461054e578063bc3371821461057c578063c02466681461059b575f80fd5b80639a7a23d6116100d85780639a7a23d6146104c7578063a045bfef146104e6578063a457c2d7146104fb578063a9059cbb1461051a575f80fd5b80638c0b5e221461045d5780638da5cb5b146104725780638f2076fd1461049457806395d89b41146104b3575f80fd5b806346041832116101895780635d098b38116101595780635d098b38146103b857806365b8dbc0146103d757806370a08231146103f6578063715018a61461042a57806375f0a8741461043e575f80fd5b8063460418321461032d57806349bd5a5e146103435780634fbee193146103625780635d0044ca14610399575f80fd5b806321ce72e5116101c457806321ce72e5146102ad57806323b872dd146102ce578063313ce567146102ed578063395093511461030e575f80fd5b806306fdde03146101ff578063095ea7b3146102295780631694505e1461025857806318160ddd1461028f575f80fd5b366101fb57005b5f80fd5b34801561020a575f80fd5b50610213610666565b6040516102209190611a39565b60405180910390f35b348015610234575f80fd5b50610248610243366004611aab565b6106f6565b6040519015158152602001610220565b348015610263575f80fd5b50600754610277906001600160a01b031681565b6040516001600160a01b039091168152602001610220565b34801561029a575f80fd5b506002545b604051908152602001610220565b3480156102b8575f80fd5b506102cc6102c7366004611ad5565b61070c565b005b3480156102d9575f80fd5b506102486102e8366004611afe565b61079f565b3480156102f8575f80fd5b5060055460405160ff9091168152602001610220565b348015610319575f80fd5b50610248610328366004611aab565b610806565b348015610338575f80fd5b506102cc6001600f55565b34801561034e575f80fd5b50600854610277906001600160a01b031681565b34801561036d575f80fd5b5061024861037c366004611b3c565b6001600160a01b03165f9081526010602052604090205460ff1690565b3480156103a4575f80fd5b506102cc6103b3366004611b57565b61083b565b3480156103c3575f80fd5b506102cc6103d2366004611b3c565b610891565b3480156103e2575f80fd5b506102cc6103f1366004611b3c565b6108e3565b348015610401575f80fd5b5061029f610410366004611b3c565b6001600160a01b03165f9081526020819052604090205490565b348015610435575f80fd5b506102cc610b49565b348015610449575f80fd5b50600c54610277906001600160a01b031681565b348015610468575f80fd5b5061029f600d5481565b34801561047d575f80fd5b5060055461010090046001600160a01b0316610277565b34801561049f575f80fd5b506102cc6104ae366004611ad5565b610bc8565b3480156104be575f80fd5b50610213610c52565b3480156104d2575f80fd5b506102cc6104e1366004611b7d565b610c61565b3480156104f1575f80fd5b5061029f600a5481565b348015610506575f80fd5b50610248610515366004611aab565b610d33565b348015610525575f80fd5b50610248610534366004611aab565b610d80565b348015610544575f80fd5b5061029f600e5481565b348015610559575f80fd5b50610248610568366004611b3c565b60116020525f908152604090205460ff1681565b348015610587575f80fd5b506102cc610596366004611b57565b610d8c565b3480156105a6575f80fd5b506102cc6105b5366004611b7d565b610de2565b3480156105c5575f80fd5b506102cc6105d4366004611bc4565b610e70565b3480156105e4575f80fd5b5061029f600b5481565b3480156105f9575f80fd5b5061029f610608366004611c96565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b34801561063d575f80fd5b5061029f60095481565b348015610652575f80fd5b506102cc610661366004611b3c565b610f42565b60606003805461067590611ccd565b80601f01602080910402602001604051908101604052809291908181526020018280546106a190611ccd565b80156106ec5780601f106106c3576101008083540402835291602001916106ec565b820191905f5260205f20905b8154815290600101906020018083116106cf57829003601f168201915b5050505050905090565b5f61070233848461103d565b5060015b92915050565b6005546001600160a01b036101009091041633146107455760405162461bcd60e51b815260040161073c90611d05565b60405180910390fd5b60198311158015610757575060098211155b8015610764575060098111155b61076c575f80fd5b8061077883600a611d4e565b610783856064611d4e565b61078d9190611d65565b6107979190611d65565b600b55505050565b5f6107ab848484611161565b6107fc84336107f785604051806060016040528060288152602001611eb8602891396001600160a01b038a165f908152600160209081526040808320338452909152902054919061146e565b61103d565b5060019392505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916107029185906107f790866114a6565b6005546001600160a01b0361010090910416331461086b5760405162461bcd60e51b815260040161073c90611d05565b60648161087760025490565b6108819190611d4e565b61088b9190611d78565b600e5550565b6005546001600160a01b036101009091041633146108c15760405162461bcd60e51b815260040161073c90611d05565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146109135760405162461bcd60e51b815260040161073c90611d05565b6007546001600160a01b039081169082160361097d5760405162461bcd60e51b815260206004820152602360248201527f54686520726f7574657220616c7265616479206861732074686174206164647260448201526265737360e81b606482015260840161073c565b6007546040516001600160a01b03918216918316907f8fc842bbd331dfa973645f4ed48b11683d501ebf1352708d77a5da2ab49a576e905f90a3600780546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290515f929163c45a01559160048083019260209291908290030181865afa158015610a10573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a349190611d97565b6001600160a01b031663c9c653963060075f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab79190611d97565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610b01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b259190611d97565b600880546001600160a01b0319166001600160a01b03929092169190911790555050565b6005546001600160a01b03610100909104163314610b795760405162461bcd60e51b815260040161073c90611d05565b6005546040515f9161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610bf85760405162461bcd60e51b815260040161073c90611d05565b60198311158015610c0a575060098211155b8015610c17575060098111155b610c1f575f80fd5b80610c2b83600a611d4e565b610c36856064611d4e565b610c409190611d65565b610c4a9190611d65565b600a55505050565b60606004805461067590611ccd565b6005546001600160a01b03610100909104163314610c915760405162461bcd60e51b815260040161073c90611d05565b6008546001600160a01b0390811690831603610d255760405162461bcd60e51b815260206004820152604760248201527f5468652050616e5265776172645377617020706169722063616e6e6f7420626560448201527f2072656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b6064820152666572506169727360c81b608482015260a40161073c565b610d2f828261150b565b5050565b5f61070233846107f785604051806060016040528060258152602001611ee060259139335f9081526001602090815260408083206001600160a01b038d168452909152902054919061146e565b5f610702338484611161565b6005546001600160a01b03610100909104163314610dbc5760405162461bcd60e51b815260040161073c90611d05565b606481610dc860025490565b610dd29190611d4e565b610ddc9190611d78565b600d5550565b6005546001600160a01b03610100909104163314610e125760405162461bcd60e51b815260040161073c90611d05565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b03610100909104163314610ea05760405162461bcd60e51b815260040161073c90611d05565b5f5b8251811015610f04578160105f858481518110610ec157610ec1611db2565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905580610efc81611dc6565b915050610ea2565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358282604051610f36929190611e20565b60405180910390a15050565b6005546001600160a01b03610100909104163314610f725760405162461bcd60e51b815260040161073c90611d05565b6001600160a01b038116610fd75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161073c565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b03831661109f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161073c565b6001600160a01b0382166111005760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161073c565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038216158061118157506001600160a01b03821661dead145b806111c457506001600160a01b0383165f9081526010602052604090205460ff16806111c457506001600160a01b0382165f9081526010602052604090205460ff165b806111cd575080155b156111e2576111dd8383836115f3565b505050565b600d548111156112455760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b606482015260840161073c565b6008546001600160a01b038381169116146112cf576001600160a01b0382165f90815260208190526040902054600e5461127f8383611d65565b11156112cd5760405162461bcd60e51b815260206004820152601d60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e74000000604482015260640161073c565b505b305f90815260208190526040902054600954811080159081906112fc5750600854600160a01b900460ff16155b801561132057506001600160a01b0385165f9081526011602052604090205460ff16155b15611365576008805460ff60a01b1916600160a01b17905581801561135657600c546113569082906001600160a01b0316611773565b506008805460ff60a01b191690555b6008546001600160a01b0386165f9081526010602052604090205460ff600160a01b9092048216159116806113b157506001600160a01b0385165f9081526010602052604090205460ff165b156113b957505f5b801561145b575f6113e16127106113db600b54886117c590919063ffffffff16565b90611843565b6001600160a01b0387165f9081526011602052604090205490915060ff161561144257600f545f0361142f576114286127106113db600a54886117c590919063ffffffff16565b9050611442565b61143f6127106113db87826117c5565b90505b61144c8582611884565b94506114598730836115f3565b505b6114668686866115f3565b505050505050565b5f81848411156114915760405162461bcd60e51b815260040161073c9190611a39565b505f61149d8486611e43565b95945050505050565b5f806114b28385611d65565b9050838110156115045760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161073c565b9392505050565b6001600160a01b0382165f9081526011602052604090205481151560ff9091161515036115a05760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c75650000000000000000606482015260840161073c565b6001600160a01b0382165f81815260116020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166116575760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161073c565b6001600160a01b0382166116b95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161073c565b6116f581604051806060016040528060268152602001611e92602691396001600160a01b0386165f90815260208190526040902054919061146e565b6001600160a01b038085165f90815260208190526040808220939093559084168152205461172390826114a6565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611154565b4761177d836118c5565b5f6117884783611884565b6040519091506001600160a01b0384169082156108fc029083905f818181858888f193505050501580156117be573d5f803e3d5ffd5b5050505050565b5f825f036117d457505f610706565b5f6117df8385611d4e565b9050826117ec8583611d78565b146115045760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161073c565b5f61150483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611a0d565b5f61150483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061146e565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106118f8576118f8611db2565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561194f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119739190611d97565b8160018151811061198657611986611db2565b6001600160a01b0392831660209182029290920101526007546119ac913091168461103d565b60075460405163791ac94760e01b81526001600160a01b039091169063791ac947906119e49085905f90869030904290600401611e56565b5f604051808303815f87803b1580156119fb575f80fd5b505af1158015611466573d5f803e3d5ffd5b5f8183611a2d5760405162461bcd60e51b815260040161073c9190611a39565b505f61149d8486611d78565b5f6020808352835180828501525f5b81811015611a6457858101830151858201604001528201611a48565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a98575f80fd5b50565b8035611aa681611a84565b919050565b5f8060408385031215611abc575f80fd5b8235611ac781611a84565b946020939093013593505050565b5f805f60608486031215611ae7575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215611b10575f80fd5b8335611b1b81611a84565b92506020840135611b2b81611a84565b929592945050506040919091013590565b5f60208284031215611b4c575f80fd5b813561150481611a84565b5f60208284031215611b67575f80fd5b5035919050565b80358015158114611aa6575f80fd5b5f8060408385031215611b8e575f80fd5b8235611b9981611a84565b9150611ba760208401611b6e565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215611bd5575f80fd5b823567ffffffffffffffff80821115611bec575f80fd5b818501915085601f830112611bff575f80fd5b8135602082821115611c1357611c13611bb0565b8160051b604051601f19603f83011681018181108682111715611c3857611c38611bb0565b604052928352818301935084810182019289841115611c55575f80fd5b948201945b83861015611c7a57611c6b86611a9b565b85529482019493820193611c5a565b9650611c899050878201611b6e565b9450505050509250929050565b5f8060408385031215611ca7575f80fd5b8235611cb281611a84565b91506020830135611cc281611a84565b809150509250929050565b600181811c90821680611ce157607f821691505b602082108103611cff57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761070657610706611d3a565b8082018082111561070657610706611d3a565b5f82611d9257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611da7575f80fd5b815161150481611a84565b634e487b7160e01b5f52603260045260245ffd5b5f60018201611dd757611dd7611d3a565b5060010190565b5f8151808452602080850194508084015f5b83811015611e155781516001600160a01b031687529582019590820190600101611df0565b509495945050505050565b604081525f611e326040830185611dde565b905082151560208301529392505050565b8181038181111561070657610706611d3a565b85815284602082015260a060408201525f611e7460a0830186611dde565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122045588acac7c977d987b9be29104e3bbb43ed62f47cc52ede0e462eebc56ed38564736f6c6343000814003300000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000000000000000090000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000f3376a24623121374dd8cfa0c6dee0fb43d2220e00000000000000000000000000000000000000000000000000000000000000094348414420434f494e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044348414400000000000000000000000000000000000000000000000000000000