60806040526001600560146101000a81548160ff02191690831515021790555034801561002a575f80fd5b50336040518060400160405280600481526020017f74747474000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f747474000000000000000000000000000000000000000000000000000000000081525081600390816100a791906109ba565b5080600490816100b791906109ba565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361012a575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101219190610ac8565b60405180910390fd5b6101398161015d60201b60201c565b50610158336d036c341e1f992f96840fe000000061022060201b60201c565b610d4d565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610290575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016102879190610ac8565b60405180910390fd5b6102a15f83836102a560201b60201c565b5050565b6102b68383836104f160201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036103cd5761031861070a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610389575061035a61070a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6103c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103bf90610b61565b60405180910390fd5b6104ec565b600560149054906101000a900460ff16801561042257506103f261070a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561047b575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156104eb57606461049061073260201b60201c565b61049a9190610bd9565b6104a98361073b60201b60201c565b11156104ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104e190610c9f565b60405180910390fd5b5b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610541578060025f8282546105359190610cbd565b9250508190555061060f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156105ca578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016105c193929190610cff565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610656578060025f82825403925050819055506106a0565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106fd9190610d34565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f600254905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806107fb57607f821691505b60208210810361080e5761080d6107b7565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026108707fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610835565b61087a8683610835565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6108be6108b96108b484610892565b61089b565b610892565b9050919050565b5f819050919050565b6108d7836108a4565b6108eb6108e3826108c5565b848454610841565b825550505050565b5f90565b6108ff6108f3565b61090a8184846108ce565b505050565b5b8181101561092d576109225f826108f7565b600181019050610910565b5050565b601f8211156109725761094381610814565b61094c84610826565b8101602085101561095b578190505b61096f61096785610826565b83018261090f565b50505b505050565b5f82821c905092915050565b5f6109925f1984600802610977565b1980831691505092915050565b5f6109aa8383610983565b9150826002028217905092915050565b6109c382610780565b67ffffffffffffffff8111156109dc576109db61078a565b5b6109e682546107e4565b6109f1828285610931565b5f60209050601f831160018114610a22575f8415610a10578287015190505b610a1a858261099f565b865550610a81565b601f198416610a3086610814565b5f5b82811015610a5757848901518255600182019150602085019450602081019050610a32565b86831015610a745784890151610a70601f891682610983565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610ab282610a89565b9050919050565b610ac281610aa8565b82525050565b5f602082019050610adb5f830184610ab9565b92915050565b5f82825260208201905092915050565b7f50617469656e6365202d2054726164696e67204e6f74205374617274656420595f8201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b5f610b4b602383610ae1565b9150610b5682610af1565b604082019050919050565b5f6020820190508181035f830152610b7881610b3f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610be382610892565b9150610bee83610892565b925082610bfe57610bfd610b7f565b5b828204905092915050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f665f8201527f203125206f6620436f712063616e20626520496e7520756e74696c204c75627260208201527f69636174696f6e20697320636f6d706c65746521000000000000000000000000604082015250565b5f610c89605483610ae1565b9150610c9482610c09565b606082019050919050565b5f6020820190508181035f830152610cb681610c7d565b9050919050565b5f610cc782610892565b9150610cd283610892565b9250828201905080821115610cea57610ce9610bac565b5b92915050565b610cf981610892565b82525050565b5f606082019050610d125f830186610ab9565b610d1f6020830185610cf0565b610d2c6040830184610cf0565b949350505050565b5f602082019050610d475f830184610cf0565b92915050565b6115fa80610d5a5f395ff3fe608060405234801561000f575f80fd5b5060043610610109575f3560e01c806370a08231116100a057806395d89b411161006f57806395d89b4114610293578063a9059cbb146102b1578063dd62ed3e146102e1578063e14f08d514610311578063f2fde38b1461031b57610109565b806370a082311461021d578063715018a61461024d5780638da5cb5b1461025757806395afda0c1461027557610109565b806323b872dd116100dc57806323b872dd14610195578063313ce567146101c55780634bc3e7db146101e3578063665a11ca146101ff57610109565b8063018770201461010d57806306fdde0314610129578063095ea7b31461014757806318160ddd14610177575b5f80fd5b6101276004803603810190610122919061106d565b610337565b005b610131610382565b60405161013e9190611108565b60405180910390f35b610161600480360381019061015c919061115b565b610412565b60405161016e91906111b3565b60405180910390f35b61017f610434565b60405161018c91906111db565b60405180910390f35b6101af60048036038101906101aa91906111f4565b61043d565b6040516101bc91906111b3565b60405180910390f35b6101cd61046b565b6040516101da919061125f565b60405180910390f35b6101fd60048036038101906101f891906112a2565b610473565b005b610207610498565b60405161021491906112dc565b60405180910390f35b6102376004803603810190610232919061106d565b6104bd565b60405161024491906111db565b60405180910390f35b610255610502565b005b61025f610515565b60405161026c91906112dc565b60405180910390f35b61027d61053d565b60405161028a91906111b3565b60405180910390f35b61029b610550565b6040516102a89190611108565b60405180910390f35b6102cb60048036038101906102c6919061115b565b6105e0565b6040516102d891906111b3565b60405180910390f35b6102fb60048036038101906102f691906112f5565b610602565b60405161030891906111db565b60405180910390f35b610319610684565b005b6103356004803603810190610330919061106d565b610696565b005b61033f61071a565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606003805461039190611360565b80601f01602080910402602001604051908101604052809291908181526020018280546103bd90611360565b80156104085780601f106103df57610100808354040283529160200191610408565b820191905f5260205f20905b8154815290600101906020018083116103eb57829003601f168201915b5050505050905090565b5f8061041c6107a1565b90506104298185856107a8565b600191505092915050565b5f600254905090565b5f806104476107a1565b90506104548582856107ba565b61045f85858561084c565b60019150509392505050565b5f6012905090565b61047b61071a565b80600560146101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61050a61071a565b6105135f61093c565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560149054906101000a900460ff1681565b60606004805461055f90611360565b80601f016020809104026020016040519081016040528092919081815260200182805461058b90611360565b80156105d65780601f106105ad576101008083540402835291602001916105d6565b820191905f5260205f20905b8154815290600101906020018083116105b957829003601f168201915b5050505050905090565b5f806105ea6107a1565b90506105f781858561084c565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61068c61071a565b610694610502565b565b61069e61071a565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361070e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161070591906112dc565b60405180910390fd5b6107178161093c565b50565b6107226107a1565b73ffffffffffffffffffffffffffffffffffffffff16610740610515565b73ffffffffffffffffffffffffffffffffffffffff161461079f576107636107a1565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161079691906112dc565b60405180910390fd5b565b5f33905090565b6107b583838360016109ff565b505050565b5f6107c58484610602565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108465781811015610837578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161082e93929190611390565b60405180910390fd5b61084584848484035f6109ff565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108bc575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108b391906112dc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361092c575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161092391906112dc565b60405180910390fd5b610937838383610bce565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610a6f575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401610a6691906112dc565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610adf575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610ad691906112dc565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610bc8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bbf91906111db565b60405180910390a35b50505050565b610bd9838383610df6565b5f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610ce457610c35610515565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ca05750610c71610515565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690611435565b60405180910390fd5b610df1565b600560149054906101000a900460ff168015610d335750610d03610515565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610d8c575060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15610df0576064610d9b610434565b610da591906114ad565b610dae836104bd565b1115610def576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de690611573565b60405180910390fd5b5b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e46578060025f828254610e3a9190611591565b92505081905550610f14565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610ecf578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610ec693929190611390565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f5b578060025f8282540392505081905550610fa5565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161100291906111db565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61103c82611013565b9050919050565b61104c81611032565b8114611056575f80fd5b50565b5f8135905061106781611043565b92915050565b5f602082840312156110825761108161100f565b5b5f61108f84828501611059565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f6110da82611098565b6110e481856110a2565b93506110f48185602086016110b2565b6110fd816110c0565b840191505092915050565b5f6020820190508181035f83015261112081846110d0565b905092915050565b5f819050919050565b61113a81611128565b8114611144575f80fd5b50565b5f8135905061115581611131565b92915050565b5f80604083850312156111715761117061100f565b5b5f61117e85828601611059565b925050602061118f85828601611147565b9150509250929050565b5f8115159050919050565b6111ad81611199565b82525050565b5f6020820190506111c65f8301846111a4565b92915050565b6111d581611128565b82525050565b5f6020820190506111ee5f8301846111cc565b92915050565b5f805f6060848603121561120b5761120a61100f565b5b5f61121886828701611059565b935050602061122986828701611059565b925050604061123a86828701611147565b9150509250925092565b5f60ff82169050919050565b61125981611244565b82525050565b5f6020820190506112725f830184611250565b92915050565b61128181611199565b811461128b575f80fd5b50565b5f8135905061129c81611278565b92915050565b5f602082840312156112b7576112b661100f565b5b5f6112c48482850161128e565b91505092915050565b6112d681611032565b82525050565b5f6020820190506112ef5f8301846112cd565b92915050565b5f806040838503121561130b5761130a61100f565b5b5f61131885828601611059565b925050602061132985828601611059565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061137757607f821691505b60208210810361138a57611389611333565b5b50919050565b5f6060820190506113a35f8301866112cd565b6113b060208301856111cc565b6113bd60408301846111cc565b949350505050565b7f50617469656e6365202d2054726164696e67204e6f74205374617274656420595f8201527f6574210000000000000000000000000000000000000000000000000000000000602082015250565b5f61141f6023836110a2565b915061142a826113c5565b604082019050919050565b5f6020820190508181035f83015261144c81611413565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6114b782611128565b91506114c283611128565b9250826114d2576114d1611453565b5b828204905092915050565b7f4a7573742067657474696e67207761726d65642075702c206c696d6974206f665f8201527f203125206f6620436f712063616e20626520496e7520756e74696c204c75627260208201527f69636174696f6e20697320636f6d706c65746521000000000000000000000000604082015250565b5f61155d6054836110a2565b9150611568826114dd565b606082019050919050565b5f6020820190508181035f83015261158a81611551565b9050919050565b5f61159b82611128565b91506115a683611128565b92508282019050808211156115be576115bd611480565b5b9291505056fea264697066735822122011f012ef01dfd19e92ca7e52b585e4585368270c9405339f583c05ddc0edbe8964736f6c634300081a0033