LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqICAgIEZpbGUgTmFtZTogIE1UNDhMQzhNOEEyLlYgIAoqICAgICAgVmVyc2lvbjogIDAuMGYKKiAgICAgICAgIERhdGU6ICBKdWx5IDh0aCwgMTk5OQoqICAgICAgICBNb2RlbDogIEJVUyBGdW5jdGlvbmFsCiogICAgU2ltdWxhdG9yOiAgTW9kZWwgVGVjaG5vbG9neSAoUEMgdmVyc2lvbiA1LjJlIFBFKQoqCiogRGVwZW5kZW5jaWVzOiAgTm9uZQoqCiogICAgICAgQXV0aG9yOiAgU29uIFAuIEh1eW5oCiogICAgICAgIEVtYWlsOiAgc3BodXluaEBtaWNyb24uY29tCiogICAgICAgIFBob25lOiAgKDIwOCkgMzY4LTM4MjUKKiAgICAgIENvbXBhbnk6ICBNaWNyb24gVGVjaG5vbG9neSwgSW5jLgoqICAgICAgICBNb2RlbDogIE1UNDhMQzhNMTZBMiAoMk1lZyB4IDggeCA0IEJhbmtzKQoqCiogIERlc2NyaXB0aW9uOiAgTWljcm9uIDEyOE1iIFNEUkFNIFZlcmlsb2cgbW9kZWwKKgoqICAgTGltaXRhdGlvbjogIC0gRG9lc24ndCBjaGVjayBmb3IgNDA5NiBjeWNsZSByZWZyZXNoCioKKiAgICAgICAgIE5vdGU6ICAtIFNldCBzaW11bGF0b3IgcmVzb2x1dGlvbiB0byAicHMiIGFjY3VyYWN5CiogICAgICAgICAgICAgICAgLSBTZXQgRGVidWcgPSAwIHRvIGRpc2FibGUgJGRpc3BsYXkgbWVzc2FnZXMKKgoqICAgRGlzY2xhaW1lcjogIFRIRVNFIERFU0lHTlMgQVJFIFBST1ZJREVEICJBUyBJUyIgV0lUSCBOTyBXQVJSQU5UWSAKKiAgICAgICAgICAgICAgICBXSEFUU09FVkVSIEFORCBNSUNST04gU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgCiogICAgICAgICAgICAgICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IKKiAgICAgICAgICAgICAgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgQUdBSU5TVCBJTkZSSU5HRU1FTlQuCioKKiAgICAgICAgICAgICAgICBDb3B5cmlnaHQgqSAxOTk4IE1pY3JvbiBTZW1pY29uZHVjdG9yIFByb2R1Y3RzLCBJbmMuCiogICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlYXJ2ZWQKKgoqIFJldiAgIEF1dGhvciAgICAgICAgICBQaG9uZSAgICAgICAgIERhdGUgICAgICAgIENoYW5nZXMKKiAtLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKiAwLjBmICBTb24gSHV5bmggICAgICAgMjA4LTM2OC0zODI1ICAwNy8wOC8xOTk5ICAtIEZpeCB0V1IgPSAxIENsayArIDcuNSBucyAoQXV0bykKKiAgICAgICBNaWNyb24gVGVjaG5vbG9neSBJbmMuICAgICAgICAgICAgICAgICAgICAtIEZpeCB0V1IgPSAxNSBucyAoTWFudWFsKQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRml4IHRSUCAoQXV0b3ByZWNoYXJnZSB0byBBdXRvUmVmcmVzaCkKKgoqIDAuMGEgIFNvbiBIdXluaCAgICAgICAyMDgtMzY4LTM4MjUgIDA1LzEzLzE5OTggIC0gRmlyc3QgUmVsZWFzZSAoZnJvbSA2NE1iIHJldiAwLjBlKQoqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmB0aW1lc2NhbGUgMW5zIC8gMTAwcHMKCm1vZHVsZSBtdDQ4bGM4bThhMiAoRHEsIEFkZHIsIEJhLCBDbGssIENrZSwgQ3NfbiwgUmFzX24sIENhc19uLCBXZV9uLCBEcW0pOwoKICAgIHBhcmFtZXRlciBhZGRyX2JpdHMgPSAgICAgIDEyOwogICAgcGFyYW1ldGVyIGRhdGFfYml0cyA9ICAgICAgODsKICAgIHBhcmFtZXRlciBjb2xfYml0cyAgPSAgICAgICA5OwogICAgcGFyYW1ldGVyIG1lbV9zaXplcyA9IDIwOTcxNTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIgTWVnCgogICAgaW5vdXQgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gRHE7CiAgICBpbnB1dCAgICAgW2FkZHJfYml0cyAtIDEgOiAwXSBBZGRyOwogICAgaW5wdXQgICAgICAgICAgICAgICAgIFsxIDogMF0gQmE7CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDbGs7CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDa2U7CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDc19uOwogICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgUmFzX247CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDYXNfbjsKICAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgIFdlX247CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzAgOiAwXSBEcW07CgogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazAgWzAgOiBtZW1fc2l6ZXNdOwogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazEgWzAgOiBtZW1fc2l6ZXNdOwogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazIgWzAgOiBtZW1fc2l6ZXNdOwogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazMgWzAgOiBtZW1fc2l6ZXNdOwoKICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmtfYWRkciBbMCA6IDNdOyAgICAgICAgICAgICAgICAvLyBCYW5rIEFkZHJlc3MgUGlwZWxpbmUKICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbF9hZGRyIFswIDogM107ICAgICAgICAgICAgICAgICAvLyBDb2x1bW4gQWRkcmVzcyBQaXBlbGluZQogICAgcmVnICAgICAgICAgICAgICAgICAgIFszIDogMF0gQ29tbWFuZCBbMCA6IDNdOyAgICAgICAgICAgICAgICAgIC8vIENvbW1hbmQgT3BlcmF0aW9uIFBpcGVsaW5lCiAgICByZWcgICAgICAgICAgICAgICAgICAgWzAgOiAwXSBEcW1fcmVnMCwgRHFtX3JlZzE7ICAgICAgICAgICAgICAgLy8gRFFNIE9wZXJhdGlvbiBQaXBlbGluZQogICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gQjBfcm93X2FkZHIsIEIxX3Jvd19hZGRyLCBCMl9yb3dfYWRkciwgQjNfcm93X2FkZHI7CgogICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gTW9kZV9yZWc7CiAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBEcV9yZWcsIERxX2RxbTsKICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbF90ZW1wLCBCdXJzdF9jb3VudGVyOwoKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdF9iMCwgQWN0X2IxLCBBY3RfYjIsIEFjdF9iMzsgICAvLyBCYW5rIEFjdGl2YXRlCiAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iMzsgICAgICAgLy8gQmFuayBQcmVjaGFyZ2UKCiAgICByZWcgICAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYW5rX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUHJlY2hhcmdlIENvbW1hbmQKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEExMF9wcmVjaGFyZ2UgICAgICBbMCA6IDNdOyAgICAgICAvLyBBZGRyWzEwXSA9IDEgKEFsbCBiYW5rcykKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlICAgICBbMCA6IDNdOyAgICAgICAvLyBSVyBBdXRvUHJlY2hhcmdlIChCYW5rKQogICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZF9wcmVjaGFyZ2UgICAgIFswIDogM107ICAgICAgIC8vIFIgIEF1dG9QcmVjaGFyZ2UKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZSAgICBbMCA6IDNdOyAgICAgICAvLyAgVyBBdXRvUHJlY2hhcmdlCiAgICBpbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICBDb3VudF9wcmVjaGFyZ2UgICAgWzAgOiAzXTsgICAgICAgLy8gUlcgQXV0b1ByZWNoYXJnZSAoQ291bnRlcikKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkICBbMCA6IDNdOyAgICAgICAvLyBSVyBJbnRlcnJ1cHQgUmVhZCB3aXRoIEF1dG8gUHJlY2hhcmdlCiAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGUgWzAgOiAzXTsgICAgICAgLy8gUlcgSW50ZXJydXB0IFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKCiAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZTsKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZTsKCiAgICByZWcgICAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYW5rLCBQcmV2aW91c19iYW5rOwogICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gUm93OwogICAgcmVnICAgICAgICBbY29sX2JpdHMgLSAxIDogMF0gQ29sLCBDb2xfYnJzdDsKCiAgICAvLyBJbnRlcm5hbCBzeXN0ZW0gY2xvY2sKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIENrZVosIFN5c19jbGs7CgogICAgLy8gQ29tbWFuZHMgRGVjb2RlCiAgICB3aXJlICAgICAgQWN0aXZlX2VuYWJsZSAgICA9IH5Dc19uICYgflJhc19uICYgIENhc19uICYgIFdlX247CiAgICB3aXJlICAgICAgQXJlZl9lbmFibGUgICAgICA9IH5Dc19uICYgflJhc19uICYgfkNhc19uICYgIFdlX247CiAgICB3aXJlICAgICAgQnVyc3RfdGVybSAgICAgICA9IH5Dc19uICYgIFJhc19uICYgIENhc19uICYgfldlX247CiAgICB3aXJlICAgICAgTW9kZV9yZWdfZW5hYmxlICA9IH5Dc19uICYgflJhc19uICYgfkNhc19uICYgfldlX247CiAgICB3aXJlICAgICAgUHJlY2hfZW5hYmxlICAgICA9IH5Dc19uICYgflJhc19uICYgIENhc19uICYgfldlX247CiAgICB3aXJlICAgICAgUmVhZF9lbmFibGUgICAgICA9IH5Dc19uICYgIFJhc19uICYgfkNhc19uICYgIFdlX247CiAgICB3aXJlICAgICAgV3JpdGVfZW5hYmxlICAgICA9IH5Dc19uICYgIFJhc19uICYgfkNhc19uICYgfldlX247CgogICAgLy8gQnVyc3QgTGVuZ3RoIERlY29kZQogICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8xICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CiAgICB3aXJlICAgICAgQnVyc3RfbGVuZ3RoXzIgICA9IH5Nb2RlX3JlZ1syXSAmIH5Nb2RlX3JlZ1sxXSAmICBNb2RlX3JlZ1swXTsKICAgIHdpcmUgICAgICBCdXJzdF9sZW5ndGhfNCAgID0gfk1vZGVfcmVnWzJdICYgIE1vZGVfcmVnWzFdICYgfk1vZGVfcmVnWzBdOwogICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF84ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CgogICAgLy8gQ0FTIExhdGVuY3kgRGVjb2RlCiAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMiAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmIH5Nb2RlX3JlZ1s0XTsKICAgIHdpcmUgICAgICBDYXNfbGF0ZW5jeV8zICAgID0gfk1vZGVfcmVnWzZdICYgIE1vZGVfcmVnWzVdICYgIE1vZGVfcmVnWzRdOwoKYGlmZGVmIFZFUkJPU0UKICAgIHdpcmUgICAgICBEZWJ1ZyAgICAgICAgICAgID0gMSdiMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIG1lc3NhZ2VzIDogMSA9IE9uCmBlbHNlCiAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgpgZW5kaWYKICAgIC8vIFdyaXRlIEJ1cnN0IE1vZGUKICAgIHdpcmUgICAgICBXcml0ZV9idXJzdF9tb2RlID0gTW9kZV9yZWdbOV07CgogICAgd2lyZSAgICAgIERxX2NoayAgICAgICAgICAgPSBTeXNfY2xrICYgRGF0YV9pbl9lbmFibGU7ICAgICAgLy8gQ2hlY2sgc2V0dXAvaG9sZCB0aW1lIGZvciBEUQoKICAgIGFzc2lnbiAgICBEcSAgICAgICAgICAgICAgID0gRHFfcmVnOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERRIGJ1ZmZlcgoKICAgIC8vIENvbW1hbmRzIE9wZXJhdGlvbgogICAgYGRlZmluZSAgIEFDVCAgICAgICAwCiAgICBgZGVmaW5lICAgTk9QICAgICAgIDEKICAgIGBkZWZpbmUgICBSRUFEICAgICAgMgogICAgYGRlZmluZSAgIFJFQURfQSAgICAzCiAgICBgZGVmaW5lICAgU0RSQU1fV1JJVEUgICAgIDQKICAgIGBkZWZpbmUgICBXUklURV9BICAgNQogICAgYGRlZmluZSAgIFNEUkFNX1BSRUNIICAgICA2CiAgICBgZGVmaW5lICAgU0RSQU1fQV9SRUYgICAgIDcKICAgIGBkZWZpbmUgICBTRFJBTV9CU1QgICAgICAgOAogICAgYGRlZmluZSAgIFNEUkFNX0xNUiAgICAgICA5CgogICAgLy8gVGltaW5nIFBhcmFtZXRlcnMgZm9yIC03NSAoUEMxMzMpIGFuZCBDQVMgTGF0ZW5jeSA9IDIKICAgIHBhcmFtZXRlciB0QUMgID0gICA2LjA7CiAgICBwYXJhbWV0ZXIgdEhaICA9ICAgNy4wOwogICAgcGFyYW1ldGVyIHRPSCAgPSAgIDIuNzsKICAgIHBhcmFtZXRlciB0TVJEID0gICAyLjA7ICAgICAvLyAyIENsayBDeWNsZXMKICAgIHBhcmFtZXRlciB0UkFTID0gIDQ0LjA7CiAgICBwYXJhbWV0ZXIgdFJDICA9ICA2Ni4wOwogICAgcGFyYW1ldGVyIHRSQ0QgPSAgMjAuMDsKICAgIHBhcmFtZXRlciB0UlAgID0gIDIwLjA7CiAgICBwYXJhbWV0ZXIgdFJSRCA9ICAxNS4wOwogICAgcGFyYW1ldGVyIHRXUmEgPSAgIDcuNTsgICAgIC8vIEEyIFZlcnNpb24gLSBBdXRvIHByZWNoYXJnZSBtb2RlIG9ubHkgKDEgQ2xrICsgNy41IG5zKQogICAgcGFyYW1ldGVyIHRXUnAgPSAgMTUuMDsgICAgIC8vIEEyIFZlcnNpb24gLSBQcmVjaGFyZ2UgbW9kZSBvbmx5ICgxNSBucykKCiAgICAvLyBUaW1pbmcgQ2hlY2sgdmFyaWFibGUKICAgIGludGVnZXIgICBNUkRfY2hrOwogICAgaW50ZWdlciAgIFdSX2NvdW50ZXIgWzAgOiAzXTsKICAgIHRpbWUgICAgICBXUl9jaGsgWzAgOiAzXTsKICAgIHRpbWUgICAgICBSQ19jaGssIFJSRF9jaGs7CiAgICB0aW1lICAgICAgUkFTX2NoazAsIFJBU19jaGsxLCBSQVNfY2hrMiwgUkFTX2NoazM7CiAgICB0aW1lICAgICAgUkNEX2NoazAsIFJDRF9jaGsxLCBSQ0RfY2hrMiwgUkNEX2NoazM7CiAgICB0aW1lICAgICAgUlBfY2hrMCwgUlBfY2hrMSwgUlBfY2hrMiwgUlBfY2hrMzsKCiAgICBpbml0aWFsIGJlZ2luCiAgICAgIAogICAgICAgIERxX3JlZyA9IHtkYXRhX2JpdHN7MSdien19OwogICAgICAgIHtEYXRhX2luX2VuYWJsZSwgRGF0YV9vdXRfZW5hYmxlfSA9IDA7CiAgICAgICAge0FjdF9iMCwgQWN0X2IxLCBBY3RfYjIsIEFjdF9iM30gPSA0J2IwMDAwOwogICAgICAgIHtQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iM30gPSA0J2IwMDAwOwogICAgICAgIHtXUl9jaGtbMF0sIFdSX2Noa1sxXSwgV1JfY2hrWzJdLCBXUl9jaGtbM119ID0gMDsKICAgICAgICB7V1JfY291bnRlclswXSwgV1JfY291bnRlclsxXSwgV1JfY291bnRlclsyXSwgV1JfY291bnRlclszXX0gPSAwOwogICAgICAgIHtSV19pbnRlcnJ1cHRfcmVhZFswXSwgUldfaW50ZXJydXB0X3JlYWRbMV0sIFJXX2ludGVycnVwdF9yZWFkWzJdLCBSV19pbnRlcnJ1cHRfcmVhZFszXX0gPSAwOwogICAgICAgIHtSV19pbnRlcnJ1cHRfd3JpdGVbMF0sIFJXX2ludGVycnVwdF93cml0ZVsxXSwgUldfaW50ZXJydXB0X3dyaXRlWzJdLCBSV19pbnRlcnJ1cHRfd3JpdGVbM119ID0gMDsKICAgICAgICB7TVJEX2NoaywgUkNfY2hrLCBSUkRfY2hrfSA9IDA7CiAgICAgICAge1JBU19jaGswLCBSQVNfY2hrMSwgUkFTX2NoazIsIFJBU19jaGszfSA9IDA7CiAgICAgICAge1JDRF9jaGswLCBSQ0RfY2hrMSwgUkNEX2NoazIsIFJDRF9jaGszfSA9IDA7CiAgICAgICAge1JQX2NoazAsIFJQX2NoazEsIFJQX2NoazIsIFJQX2NoazN9ID0gMDsKICAgICAgICAkdGltZWZvcm1hdCAoLTksIDAsICIgbnMiLCAxMik7CiAgICAgICAgLy8kcmVhZG1lbWgoImJhbmswLnR4dCIsIEJhbmswKTsKICAgICAgICAvLyRyZWFkbWVtaCgiYmFuazEudHh0IiwgQmFuazEpOwogICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMi50eHQiLCBCYW5rMik7CiAgICAgICAgLy8kcmVhZG1lbWgoImJhbmszLnR4dCIsIEJhbmszKTsKICAgIGVuZAoKICAgIC8vIFN5c3RlbSBjbG9jayBnZW5lcmF0b3IKICAgIGFsd2F5cyBiZWdpbgogICAgICAgIEAgKHBvc2VkZ2UgQ2xrKSBiZWdpbgogICAgICAgICAgICBTeXNfY2xrID0gQ2tlWjsKICAgICAgICAgICAgQ2tlWiA9IENrZTsKICAgICAgICBlbmQKICAgICAgICBAIChuZWdlZGdlIENsaykgYmVnaW4KICAgICAgICAgICAgU3lzX2NsayA9IDEnYjA7CiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBhbHdheXMgQCAocG9zZWRnZSBTeXNfY2xrKSBiZWdpbgogICAgICAgIC8vIEludGVybmFsIENvbW1hbWQgUGlwZWxpbmVkCiAgICAgICAgQ29tbWFuZFswXSA9IENvbW1hbmRbMV07CiAgICAgICAgQ29tbWFuZFsxXSA9IENvbW1hbmRbMl07CiAgICAgICAgQ29tbWFuZFsyXSA9IENvbW1hbmRbM107CiAgICAgICAgQ29tbWFuZFszXSA9IGBOT1A7CgogICAgICAgIENvbF9hZGRyWzBdID0gQ29sX2FkZHJbMV07CiAgICAgICAgQ29sX2FkZHJbMV0gPSBDb2xfYWRkclsyXTsKICAgICAgICBDb2xfYWRkclsyXSA9IENvbF9hZGRyWzNdOwogICAgICAgIENvbF9hZGRyWzNdID0ge2NvbF9iaXRzezEnYjB9fTsKCiAgICAgICAgQmFua19hZGRyWzBdID0gQmFua19hZGRyWzFdOwogICAgICAgIEJhbmtfYWRkclsxXSA9IEJhbmtfYWRkclsyXTsKICAgICAgICBCYW5rX2FkZHJbMl0gPSBCYW5rX2FkZHJbM107CiAgICAgICAgQmFua19hZGRyWzNdID0gMidiMDsKCiAgICAgICAgQmFua19wcmVjaGFyZ2VbMF0gPSBCYW5rX3ByZWNoYXJnZVsxXTsKICAgICAgICBCYW5rX3ByZWNoYXJnZVsxXSA9IEJhbmtfcHJlY2hhcmdlWzJdOwogICAgICAgIEJhbmtfcHJlY2hhcmdlWzJdID0gQmFua19wcmVjaGFyZ2VbM107CiAgICAgICAgQmFua19wcmVjaGFyZ2VbM10gPSAyJ2IwOwoKICAgICAgICBBMTBfcHJlY2hhcmdlWzBdID0gQTEwX3ByZWNoYXJnZVsxXTsKICAgICAgICBBMTBfcHJlY2hhcmdlWzFdID0gQTEwX3ByZWNoYXJnZVsyXTsKICAgICAgICBBMTBfcHJlY2hhcmdlWzJdID0gQTEwX3ByZWNoYXJnZVszXTsKICAgICAgICBBMTBfcHJlY2hhcmdlWzNdID0gMSdiMDsKCiAgICAgICAgLy8gRHFtIHBpcGVsaW5lIGZvciBSZWFkCiAgICAgICAgRHFtX3JlZzAgPSBEcW1fcmVnMTsKICAgICAgICBEcW1fcmVnMSA9IERxbTsKCiAgICAgICAgLy8gUmVhZCBvciBXcml0ZSB3aXRoIEF1dG8gUHJlY2hhcmdlIENvdW50ZXIKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbMF0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzBdID0gQ291bnRfcHJlY2hhcmdlWzBdICsgMTsKICAgICAgICBlbmQKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbMV0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzFdID0gQ291bnRfcHJlY2hhcmdlWzFdICsgMTsKICAgICAgICBlbmQKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbMl0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzJdID0gQ291bnRfcHJlY2hhcmdlWzJdICsgMTsKICAgICAgICBlbmQKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbM10gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzNdID0gQ291bnRfcHJlY2hhcmdlWzNdICsgMTsKICAgICAgICBlbmQKCiAgICAgICAgLy8gdE1SRCBDb3VudGVyCiAgICAgICAgTVJEX2NoayA9IE1SRF9jaGsgKyAxOwoKICAgICAgICAvLyB0V1IgQ291bnRlciBmb3IgV3JpdGUKICAgICAgICBXUl9jb3VudGVyWzBdID0gV1JfY291bnRlclswXSArIDE7CiAgICAgICAgV1JfY291bnRlclsxXSA9IFdSX2NvdW50ZXJbMV0gKyAxOwogICAgICAgIFdSX2NvdW50ZXJbMl0gPSBXUl9jb3VudGVyWzJdICsgMTsKICAgICAgICBXUl9jb3VudGVyWzNdID0gV1JfY291bnRlclszXSArIDE7CgogICAgICAgIC8vIEF1dG8gUmVmcmVzaAogICAgICAgIGlmIChBcmVmX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBUkVGIDogQXV0byBSZWZyZXNoIiwgJHRpbWUpOwogICAgICAgICAgICAvLyBBdXRvIFJlZnJlc2ggdG8gQXV0byBSZWZyZXNoCiAgICAgICAgICAgIGlmICgkdGltZSAtIFJDX2NoayA8IHRSQykgYmVnaW4KCSAgICAgICAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdG8gQXV0byBSZWZyZXNoCiAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlAgfHwgJHRpbWUgLSBSUF9jaGsxIDwgdFJQIHx8ICR0aW1lIC0gUlBfY2hrMiA8IHRSUCB8fCAkdGltZSAtIFJQX2NoazMgPCB0UlApIGJlZ2luCgkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJQIHZpb2xhdGlvbiBkdXJpbmcgQXV0byBSZWZyZXNoIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIFJlZnJlc2gKICAgICAgICAgICAgaWYgKFBjX2IwID09IDEnYjAgfHwgUGNfYjEgPT0gMSdiMCB8fCBQY19iMiA9PSAxJ2IwIHx8IFBjX2IzID09IDEnYjApIGJlZ2luCgkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQWxsIGJhbmtzIG11c3QgYmUgUHJlY2hhcmdlIGJlZm9yZSBBdXRvIFJlZnJlc2giLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBSZWNvcmQgQ3VycmVudCB0UkMgdGltZQogICAgICAgICAgICBSQ19jaGsgPSAkdGltZTsKICAgICAgICBlbmQKICAgICAgICAKICAgICAgICAvLyBMb2FkIE1vZGUgUmVnaXN0ZXIKICAgICAgICBpZiAoTW9kZV9yZWdfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgIC8vIERlY29kZSBDQVMgTGF0ZW5jeSwgQnVyc3QgTGVuZ3RoLCBCdXJzdCBUeXBlLCBhbmQgV3JpdGUgQnVyc3QgTW9kZQogICAgICAgICAgICBpZiAoUGNfYjAgPT0gMSdiMSAmJiBQY19iMSA9PSAxJ2IxICYmIFBjX2IyID09IDEnYjEgJiYgUGNfYjMgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIE1vZGVfcmVnID0gQWRkcjsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgYmVnaW4KICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgTE1SICA6IExvYWQgTW9kZSBSZWdpc3RlciIsICR0aW1lKTsKICAgICAgICAgICAgICAgICAgICAvLyBDQVMgTGF0ZW5jeQogICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTApCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBUyBMYXRlbmN5ICAgICAgPSAyIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWRkcls2IDogNF0gPT0gMydiMDExKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMyIpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTIExhdGVuY3kgICAgICA9IFJlc2VydmVkIik7CiAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoCiAgICAgICAgICAgICAgICAgICAgaWYgKEFkZHJbMiA6IDBdID09IDMnYjAwMCkKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IDEiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDEpCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IExlbmd0aCAgICAgPSAyIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWRkclsyIDogMF0gPT0gMydiMDEwKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gNCIpOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbMiA6IDBdID09IDMnYjAxMSkKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IDgiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzMgOiAwXSA9PSA0J2IwMTExKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gRnVsbCIpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IFJlc2VydmVkIik7CiAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgVHlwZQogICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzNdID09IDEnYjApCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBTZXF1ZW50aWFsIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWRkclszXSA9PSAxJ2IxKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBUeXBlICAgICAgID0gSW50ZXJsZWF2ZWQiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBSZXNlcnZlZCIpOwogICAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIEJ1cnN0IE1vZGUKICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcls5XSA9PSAxJ2IwKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBCdXJzdCBNb2RlID0gUHJvZ3JhbW1lZCBCdXJzdCBMZW5ndGgiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzldID09IDEnYjEpCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBTaW5nbGUgTG9jYXRpb24gQWNjZXNzIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBCdXJzdCBNb2RlID0gUmVzZXJ2ZWQiKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgoKCSAgICAgICAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBhbGwgYmFua3MgbXVzdCBiZSBQcmVjaGFyZ2UgYmVmb3JlIExvYWQgTW9kZSBSZWdpc3RlciIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIFJFRiB0byBMTVIKICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkNfY2hrIDwgdFJDKSBiZWdpbgoKCSAgICAgICAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBMTVIgdG8gTE1SCiAgICAgICAgICAgIGlmIChNUkRfY2hrIDwgdE1SRCkgYmVnaW4KCgkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdE1SRCB2aW9sYXRpb24gZHVyaW5nIExvYWQgTW9kZSBSZWdpc3RlciIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIE1SRF9jaGsgPSAwOwogICAgICAgIGVuZAogICAgICAgIAogICAgICAgIC8vIEFjdGl2ZSBCbG9jayAoTGF0Y2ggQmFuayBBZGRyZXNzIGFuZCBSb3cgQWRkcmVzcykKICAgICAgICBpZiAoQWN0aXZlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICBpZiAoQmEgPT0gMidiMDAgJiYgUGNfYjAgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIHtBY3RfYjAsIFBjX2IwfSA9IDInYjEwOwogICAgICAgICAgICAgICAgQjBfcm93X2FkZHIgPSBBZGRyIFthZGRyX2JpdHMgLSAxIDogMF07CiAgICAgICAgICAgICAgICBSQ0RfY2hrMCA9ICR0aW1lOwogICAgICAgICAgICAgICAgUkFTX2NoazAgPSAkdGltZTsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFDVCAgOiBCYW5rID0gMCBSb3cgPSAlZCIsICR0aW1lLCBBZGRyKTsKICAgICAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBY3RpdmF0ZSBCYW5rIDAKICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlApIGJlZ2luCgoJCSAgIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMCIsICR0aW1lKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMDEgJiYgUGNfYjEgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIHtBY3RfYjEsIFBjX2IxfSA9IDInYjEwOwogICAgICAgICAgICAgICAgQjFfcm93X2FkZHIgPSBBZGRyIFthZGRyX2JpdHMgLSAxIDogMF07CiAgICAgICAgICAgICAgICBSQ0RfY2hrMSA9ICR0aW1lOwogICAgICAgICAgICAgICAgUkFTX2NoazEgPSAkdGltZTsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFDVCAgOiBCYW5rID0gMSBSb3cgPSAlZCIsICR0aW1lLCBBZGRyKTsKICAgICAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBY3RpdmF0ZSBCYW5rIDEKICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazEgPCB0UlApIGJlZ2luCgoJCSAgIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rIDEiLCAkdGltZSk7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjEwICYmIFBjX2IyID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICB7QWN0X2IyLCBQY19iMn0gPSAyJ2IxMDsKICAgICAgICAgICAgICAgIEIyX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOwogICAgICAgICAgICAgICAgUkNEX2NoazIgPSAkdGltZTsKICAgICAgICAgICAgICAgIFJBU19jaGsyID0gJHRpbWU7CiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDIgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CiAgICAgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdG8gQWN0aXZhdGUgQmFuayAyCiAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSUF9jaGsyIDwgdFJQKSBiZWdpbgoKCQkgICAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJQIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayAyIiwgJHRpbWUpOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMSAmJiBQY19iMyA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAge0FjdF9iMywgUGNfYjN9ID0gMidiMTA7CiAgICAgICAgICAgICAgICBCM19yb3dfYWRkciA9IEFkZHIgW2FkZHJfYml0cyAtIDEgOiAwXTsKICAgICAgICAgICAgICAgIFJDRF9jaGszID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSQVNfY2hrMyA9ICR0aW1lOwogICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgQUNUICA6IEJhbmsgPSAzIFJvdyA9ICVkIiwgJHRpbWUsIEFkZHIpOwogICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMwogICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUlBfY2hrMyA8IHRSUCkgYmVnaW4KCgkJICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMyIsICR0aW1lKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMDAgJiYgUGNfYjAgPT0gMSdiMCkgYmVnaW4KCgkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQmFuayAwIGlzIG5vdCBQcmVjaGFyZ2VkLiIsICR0aW1lKTsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjAxICYmIFBjX2IxID09IDEnYjApIGJlZ2luCgoJICAgICAgIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEJhbmsgMSBpcyBub3QgUHJlY2hhcmdlZC4iLCAkdGltZSk7CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMCAmJiBQY19iMiA9PSAxJ2IwKSBiZWdpbgoKCSAgICAgICAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDIgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTEgJiYgUGNfYjMgPT0gMSdiMCkgYmVnaW4KCgkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQmFuayAzIGlzIG5vdCBQcmVjaGFyZ2VkLiIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIEFjdGl2ZSBCYW5rIEEgdG8gQWN0aXZlIEJhbmsgQgogICAgICAgICAgICBpZiAoKFByZXZpb3VzX2JhbmsgIT0gQmEpICYmICgkdGltZSAtIFJSRF9jaGsgPCB0UlJEKSkgYmVnaW4KCgkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJSRCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgPSAlZCIsICR0aW1lLCBCYSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBMb2FkIE1vZGUgUmVnaXN0ZXIgdG8gQWN0aXZlCiAgICAgICAgICAgIGlmIChNUkRfY2hrIDwgdE1SRCApIGJlZ2luCgoJICAgICAgIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRNUkQgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rID0gJWQiLCAkdGltZSwgQmEpOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gQXV0byBSZWZyZXNoIHRvIEFjdGl2YXRlCiAgICAgICAgICAgIGlmICgkdGltZSAtIFJDX2NoayA8IHRSQykgYmVnaW4KCgkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJDIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayA9ICVkIiwgJHRpbWUsIEJhKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIFJlY29yZCB2YXJpYWJsZXMgZm9yIGNoZWNraW5nIHZpb2xhdGlvbgogICAgICAgICAgICBSUkRfY2hrID0gJHRpbWU7CiAgICAgICAgICAgIFByZXZpb3VzX2JhbmsgPSBCYTsKICAgICAgICBlbmQKICAgICAgICAKICAgICAgICAvLyBQcmVjaGFyZ2UgQmxvY2sKICAgICAgICBpZiAoUHJlY2hfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAge1BjX2IwLCBQY19iMSwgUGNfYjIsIFBjX2IzfSA9IDQnYjExMTE7CiAgICAgICAgICAgICAgICB7QWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzfSA9IDQnYjAwMDA7CiAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSUF9jaGsyID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IEFMTCIsJHRpbWUpOwogICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIGFsbCBiYW5rcwogICAgICAgICAgICAgICAgaWYgKCgkdGltZSAtIFJBU19jaGswIDwgdFJBUykgfHwgKCR0aW1lIC0gUkFTX2NoazEgPCB0UkFTKSB8fAogICAgICAgICAgICAgICAgICAgICgkdGltZSAtIFJBU19jaGsyIDwgdFJBUykgfHwgKCR0aW1lIC0gUkFTX2NoazMgPCB0UkFTKSkgYmVnaW4KCgkJICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIC8vIHRXUiB2aW9sYXRpb24gY2hlY2sgZm9yIHdyaXRlCiAgICAgICAgICAgICAgICBpZiAoKCR0aW1lIC0gV1JfY2hrWzBdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzFdIDwgdFdScCkgfHwKICAgICAgICAgICAgICAgICAgICAoJHRpbWUgLSBXUl9jaGtbMl0gPCB0V1JwKSB8fCAoJHRpbWUgLSBXUl9jaGtbM10gPCB0V1JwKSkgYmVnaW4KCgkJICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRXUiB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBhbGwgYmFuayIsICR0aW1lKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQWRkclsxMF0gPT0gMSdiMCkgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChCYSA9PSAyJ2IwMCkgYmVnaW4KICAgICAgICAgICAgICAgICAgICB7UGNfYjAsIEFjdF9iMH0gPSAyJ2IxMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgUFJFICA6IEJhbmsgPSAwIiwkdGltZSk7CiAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIEJhbmsgMAogICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGswIDwgdFJBUykgYmVnaW4KCgkJICAgICAgIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDAiLCAkdGltZSk7CiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMDEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAge1BjX2IxLCBBY3RfYjF9ID0gMidiMTA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMSA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMSIsJHRpbWUpOwogICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBCYW5rIDEKICAgICAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQVNfY2hrMSA8IHRSQVMpIGJlZ2luCgoJCSAgICAgICAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAxIiwgJHRpbWUpOwogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjEwKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIHtQY19iMiwgQWN0X2IyfSA9IDInYjEwOwogICAgICAgICAgICAgICAgICAgIFJQX2NoazIgPSAkdGltZTsKICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IDIiLCR0aW1lKTsKICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAyCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkFTX2NoazIgPCB0UkFTKSBiZWdpbgoKCQkgICAgICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkFTIHZpb2xhdGlvbiBkdXJpbmcgUHJlY2hhcmdlIGJhbmsgMiIsICR0aW1lKTsKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICB7UGNfYjMsIEFjdF9iM30gPSAyJ2IxMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgUFJFICA6IEJhbmsgPSAzIiwkdGltZSk7CiAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIEJhbmsgMwogICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGszIDwgdFJBUykgYmVnaW4KCgkJICAgICAgIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDMiLCAkdGltZSk7CiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIC8vIHRXUiB2aW9sYXRpb24gY2hlY2sgZm9yIHdyaXRlCiAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBXUl9jaGtbQmFdIDwgdFdScCkgYmVnaW4KCgkJICAgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRXUiB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rICVkIiwgJHRpbWUsIEJhKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gVGVybWluYXRlIGEgV3JpdGUgSW1tZWRpYXRlbHkgKGlmIHNhbWUgYmFuayBvciBhbGwgYmFua3MpCiAgICAgICAgICAgIGlmIChEYXRhX2luX2VuYWJsZSA9PSAxJ2IxICYmIChCYW5rID09IEJhIHx8IEFkZHJbMTBdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gUHJlY2hhcmdlIENvbW1hbmQgUGlwZWxpbmUgZm9yIFJlYWQKICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIENvbW1hbmRbMl0gPSBgU0RSQU1fUFJFQ0g7CiAgICAgICAgICAgICAgICBCYW5rX3ByZWNoYXJnZVsyXSA9IEJhOwogICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsyXSA9IEFkZHJbMTBdOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQ2FzX2xhdGVuY3lfMiA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBTRFJBTV9QUkVDSDsKICAgICAgICAgICAgICAgIEJhbmtfcHJlY2hhcmdlWzFdID0gQmE7CiAgICAgICAgICAgICAgICBBMTBfcHJlY2hhcmdlWzFdID0gQWRkclsxMF07CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICAgIAogICAgICAgIC8vIEJ1cnN0IHRlcm1pbmF0ZQogICAgICAgIGlmIChCdXJzdF90ZXJtID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSBhIFdyaXRlIEltbWVkaWF0ZWx5CiAgICAgICAgICAgIGlmIChEYXRhX2luX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gVGVybWluYXRlIGEgUmVhZCBEZXBlbmQgb24gQ0FTIExhdGVuY3kKICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIENvbW1hbmRbMl0gPSBgU0RSQU1fQlNUOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQ2FzX2xhdGVuY3lfMiA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBTRFJBTV9CU1Q7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBCU1QgIDogQnVyc3QgVGVybWluYXRlIiwkdGltZSk7CiAgICAgICAgZW5kCiAgICAgICAgCiAgICAgICAgLy8gUmVhZCwgV3JpdGUsIENvbHVtbiBMYXRjaAogICAgICAgIGlmIChSZWFkX2VuYWJsZSA9PSAxJ2IxIHx8IFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgYmFuayBpcyBvcGVuIChBQ1QpCiAgICAgICAgICAgIGlmICgoQmEgPT0gMidiMDAgJiYgUGNfYjAgPT0gMSdiMSkgfHwgKEJhID09IDInYjAxICYmIFBjX2IxID09IDEnYjEpIHx8CiAgICAgICAgICAgICAgICAoQmEgPT0gMidiMTAgJiYgUGNfYjIgPT0gMSdiMSkgfHwgKEJhID09IDInYjExICYmIFBjX2IzID09IDEnYjEpKSBiZWdpbgoKCSAgICAgICAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IENhbm5vdCBSZWFkIG9yIFdyaXRlIC0gQmFuayAlZCBpcyBub3QgQWN0aXZhdGVkIiwgJHRpbWUsIEJhKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFJlYWQgb3IgV3JpdGUKICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IwMCkgJiYgKCR0aW1lIC0gUkNEX2NoazAgPCB0UkNEKSkKCSAgICAgIGJlZ2luCgkJIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMCIsICR0aW1lKTsKCSAgICAgIGVuZAoJICAgCiAgICAgICAgICAgIGlmICgoQmEgPT0gMidiMDEpICYmICgkdGltZSAtIFJDRF9jaGsxIDwgdFJDRCkpCgkgICAgICBiZWdpbgoJCSAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhdCB0aW1lICV0IEVSUk9SOiB0UkNEIHZpb2xhdGlvbiBkdXJpbmcgUmVhZCBvciBXcml0ZSB0byBCYW5rIDEiLCAkdGltZSk7CgkgICAgICBlbmQKICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IxMCkgJiYgKCR0aW1lIC0gUkNEX2NoazIgPCB0UkNEKSkKCSAgICAgIGJlZ2luCgkJIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMiIsICR0aW1lKTsKCSAgICAgIGVuZAogICAgICAgICAgICBpZiAoKEJhID09IDInYjExKSAmJiAoJHRpbWUgLSBSQ0RfY2hrMyA8IHRSQ0QpKQoJICAgICAgYmVnaW4KCQkgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAkZGlzcGxheSgiYXQgdGltZSAldCBFUlJPUjogdFJDRCB2aW9sYXRpb24gZHVyaW5nIFJlYWQgb3IgV3JpdGUgdG8gQmFuayAzIiwgJHRpbWUpOwoJICAgICAgZW5kCiAgICAgICAgICAgIC8vIFJlYWQgQ29tbWFuZAogICAgICAgICAgICBpZiAoUmVhZF9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIC8vIENBUyBMYXRlbmN5IHBpcGVsaW5lCiAgICAgICAgICAgICAgICBpZiAoQ2FzX2xhdGVuY3lfMyA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFJFQURfQTsKICAgICAgICAgICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgICAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFJFQUQ7CiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAgICAgQ29sX2FkZHJbMl0gPSBBZGRyOwogICAgICAgICAgICAgICAgICAgIEJhbmtfYWRkclsyXSA9IEJhOwogICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKENhc19sYXRlbmN5XzIgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBSRUFEX0E7CiAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsxXSA9IGBSRUFEOwogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIENvbF9hZGRyWzFdID0gQWRkcjsKICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMV0gPSBCYTsKICAgICAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgICAgIC8vIFJlYWQgaW50ZXJydXB0IFdyaXRlICh0ZXJtaW5hdGUgV3JpdGUgaW1tZWRpYXRlbHkpCiAgICAgICAgICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICBlbmQKCiAgICAgICAgICAgIC8vIFdyaXRlIENvbW1hbmQKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKFdyaXRlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgaWYgKEFkZHJbMTBdID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFswXSA9IGBXUklURV9BOwogICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KICAgICAgICAgICAgICAgICAgICBDb21tYW5kWzBdID0gYFNEUkFNX1dSSVRFOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICBDb2xfYWRkclswXSA9IEFkZHI7CiAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMF0gPSBCYTsKCiAgICAgICAgICAgICAgICAvLyBXcml0ZSBpbnRlcnJ1cHQgV3JpdGUgKHRlcm1pbmF0ZSBXcml0ZSBpbW1lZGlhdGVseSkKICAgICAgICAgICAgICAgIGlmIChEYXRhX2luX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgICAgIC8vIFdyaXRlIGludGVycnVwdCBSZWFkICh0ZXJtaW5hdGUgUmVhZCBpbW1lZGlhdGVseSkKICAgICAgICAgICAgICAgIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgLy8gSW50ZXJydXB0aW5nIGEgV3JpdGUgd2l0aCBBdXRvcHJlY2hhcmdlCiAgICAgICAgICAgIGlmIChBdXRvX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxICYmIFdyaXRlX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3dyaXRlW0JhbmtdID0gMSdiMTsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBSZWFkL1dyaXRlIEJhbmsgJWQgaW50ZXJydXB0IFdyaXRlIEJhbmsgJWQgd2l0aCBBdXRvcHJlY2hhcmdlIiwgJHRpbWUsIEJhLCBCYW5rKTsKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAvLyBJbnRlcnJ1cHRpbmcgYSBSZWFkIHdpdGggQXV0b3ByZWNoYXJnZQogICAgICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbQmFua10gPT0gMSdiMSAmJiBSZWFkX3ByZWNoYXJnZVtCYW5rXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbQmFua10gPSAxJ2IxOwogICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFJlYWQvV3JpdGUgQmFuayAlZCBpbnRlcnJ1cHQgUmVhZCBCYW5rICVkIHdpdGggQXV0b3ByZWNoYXJnZSIsICR0aW1lLCBCYSwgQmFuayk7CiAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgLy8gUmVhZCBvciBXcml0ZSB3aXRoIEF1dG8gUHJlY2hhcmdlCiAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbQmFdID0gMSdiMTsKICAgICAgICAgICAgICAgIENvdW50X3ByZWNoYXJnZVtCYV0gPSAwOwogICAgICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgUmVhZF9wcmVjaGFyZ2VbQmFdID0gMSdiMTsKICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChXcml0ZV9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbQmFdID0gMSdiMTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKCiAgICAgICAgLy8gIFJlYWQgd2l0aCBBdXRvIFByZWNoYXJnZSBDYWxjdWxhdGlvbgogICAgICAgIC8vICAgICAgVGhlIGRldmljZSBzdGFydCBpbnRlcm5hbCBwcmVjaGFyZ2U6CiAgICAgICAgLy8gICAgICAgICAgMS4gIENBUyBMYXRlbmN5IC0gMSBjeWNsZXMgYmVmb3JlIGxhc3QgYnVyc3QKICAgICAgICAvLyAgICAgIGFuZCAyLiAgTWVldCBtaW5pbXVtIHRSQVMgcmVxdWlyZW1lbnQKICAgICAgICAvLyAgICAgICBvciAzLiAgSW50ZXJydXB0IGJ5IGEgUmVhZCBvciBXcml0ZSAod2l0aCBvciB3aXRob3V0IEF1dG9QcmVjaGFyZ2UpCiAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMF0gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazAgPj0gdFJBUykgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDIKICAgICAgICAgICAgICAgICgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVswXSA+PSAyKSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVswXSA+PSA0KSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVswXSA+PSA4KSkpIHx8CiAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF9yZWFkWzBdID09IDEnYjEpKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDMKICAgICAgICAgICAgICAgICAgICBQY19iMCA9IDEnYjE7CiAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbMF0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzBdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfcmVhZFswXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDAiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbMV0gPT0gMSdiMSkgJiYgKFJlYWRfcHJlY2hhcmdlWzFdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsxID49IHRSQVMpICYmCiAgICAgICAgICAgICAgICAoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzFdID49IDEpIHx8IAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSAyKSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSA0KSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSA4KSkpIHx8CiAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF9yZWFkWzFdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIFBjX2IxID0gMSdiMTsKICAgICAgICAgICAgICAgICAgICBBY3RfYjEgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJQX2NoazEgPSAkdGltZTsKICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsxXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUmVhZF9wcmVjaGFyZ2VbMV0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkWzFdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMSIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazIgPj0gdFJBUykgJiYKICAgICAgICAgICAgICAgICgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMl0gPj0gMSkgfHwgCiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzJdID49IDIpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzJdID49IDQpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzJdID49IDgpKSkgfHwKICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbMl0gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgUGNfYjIgPSAxJ2IxOwogICAgICAgICAgICAgICAgICAgIEFjdF9iMiA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzJdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSZWFkX3ByZWNoYXJnZVsyXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMl0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAyIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzNdID09IDEnYjEpICYmIChSZWFkX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSkgYmVnaW4KICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMyA+PSB0UkFTKSAmJgogICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVszXSA+PSAxKSB8fCAKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbM10gPj0gMikgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbM10gPj0gNCkgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbM10gPj0gOCkpKSB8fAogICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfcmVhZFszXSA9PSAxJ2IxKSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBQY19iMyA9IDEnYjE7CiAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbM10gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzNdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfcmVhZFszXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDMiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAoKICAgICAgICAvLyBJbnRlcm5hbCBQcmVjaGFyZ2Ugb3IgQnN0CiAgICAgICAgaWYgKENvbW1hbmRbMF0gPT0gYFNEUkFNX1BSRUNIKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdGVybWluYXRlIGEgcmVhZCB3aXRoIHNhbWUgYmFuayBvciBhbGwgYmFua3MKICAgICAgICAgICAgaWYgKEJhbmtfcHJlY2hhcmdlWzBdID09IEJhbmsgfHwgQTEwX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kIGVsc2UgaWYgKENvbW1hbmRbMF0gPT0gYFNEUkFNX0JTVCkgYmVnaW4gICAgICAgICAgICAgICAgICAvLyBCU1QgdGVybWluYXRlIGEgcmVhZCB0byBjdXJyZW50IGJhbmsKICAgICAgICAgICAgaWYgKERhdGFfb3V0X2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCgogICAgICAgIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMCkgYmVnaW4KICAgICAgICAgICAgRHFfcmVnIDw9ICN0T0gge2RhdGFfYml0c3sxJ2J6fX07CiAgICAgICAgZW5kCgogICAgICAgIC8vIERldGVjdCBSZWFkIG9yIFdyaXRlIGNvbW1hbmQKICAgICAgICBpZiAoQ29tbWFuZFswXSA9PSBgUkVBRCB8fCBDb21tYW5kWzBdID09IGBSRUFEX0EpIGJlZ2luCiAgICAgICAgICAgIEJhbmsgPSBCYW5rX2FkZHJbMF07CiAgICAgICAgICAgIENvbCA9IENvbF9hZGRyWzBdOwogICAgICAgICAgICBDb2xfYnJzdCA9IENvbF9hZGRyWzBdOwogICAgICAgICAgICBpZiAoQmFua19hZGRyWzBdID09IDInYjAwKSBiZWdpbgogICAgICAgICAgICAgICAgUm93ID0gQjBfcm93X2FkZHI7CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMDEpIGJlZ2luCiAgICAgICAgICAgICAgICBSb3cgPSBCMV9yb3dfYWRkcjsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IxMCkgYmVnaW4KICAgICAgICAgICAgICAgIFJvdyA9IEIyX3Jvd19hZGRyOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjExKSBiZWdpbgogICAgICAgICAgICAgICAgUm93ID0gQjNfcm93X2FkZHI7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICBCdXJzdF9jb3VudGVyID0gMDsKICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IxOwogICAgICAgIGVuZCBlbHNlIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9XUklURSB8fCBDb21tYW5kWzBdID09IGBXUklURV9BKSBiZWdpbgogICAgICAgICAgICBCYW5rID0gQmFua19hZGRyWzBdOwogICAgICAgICAgICBDb2wgPSBDb2xfYWRkclswXTsKICAgICAgICAgICAgQ29sX2Jyc3QgPSBDb2xfYWRkclswXTsKICAgICAgICAgICAgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMCkgYmVnaW4KICAgICAgICAgICAgICAgIFJvdyA9IEIwX3Jvd19hZGRyOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjAxKSBiZWdpbgogICAgICAgICAgICAgICAgUm93ID0gQjFfcm93X2FkZHI7CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMTApIGJlZ2luCiAgICAgICAgICAgICAgICBSb3cgPSBCMl9yb3dfYWRkcjsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IxMSkgYmVnaW4KICAgICAgICAgICAgICAgIFJvdyA9IEIzX3Jvd19hZGRyOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgQnVyc3RfY291bnRlciA9IDA7CiAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMTsKICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKICAgICAgICBlbmQKCiAgICAgICAgLy8gRFEgYnVmZmVyIChEcml2ZXIvUmVjZWl2ZXIpCiAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXcml0aW5nIERhdGEgdG8gTWVtb3J5CiAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazAgW3tSb3csIENvbH1dOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMSkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazEgW3tSb3csIENvbH1dOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMSkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazMgW3tSb3csIENvbH1dOwogICAgICAgICAgICAvLyBEcW0gb3BlcmF0aW9uCiAgICAgICAgICAgIGlmIChEcW1bMF0gPT0gMSdiMCkgRHFfZHFtIFsgNyA6IDBdID0gRHEgWyA3IDogMF07CiAgICAgICAgICAgIC8vIFdyaXRlIHRvIG1lbW9yeQogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMCkgQmFuazAgW3tSb3csIENvbH1dID0gRHFfZHFtIFsxNSA6IDBdOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMSkgQmFuazEgW3tSb3csIENvbH1dID0gRHFfZHFtIFsxNSA6IDBdOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgQmFuazIgW3tSb3csIENvbH1dID0gRHFfZHFtIFsxNSA6IDBdOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMSkgQmFuazMgW3tSb3csIENvbH1dID0gRHFfZHFtIFsxNSA6IDBdOwogICAgICAgICAgICAvLyBPdXRwdXQgcmVzdWx0CiAgICAgICAgICAgIGlmIChEcW0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgV1JJVEU6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSBIaS1aIGR1ZSB0byBEUU0iLCAkdGltZSwgQmFuaywgUm93LCBDb2wpOwogICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgogICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBXUklURTogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9ICVoLCBEcW0gPSAlYiIsICR0aW1lLCBCYW5rLCBSb3csIENvbCwgRHFfZHFtLCBEcW0pOwogICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRXUiB0aW1lIGFuZCByZXNldCBjb3VudGVyCiAgICAgICAgICAgICAgICBXUl9jaGsgW0JhbmtdID0gJHRpbWU7CiAgICAgICAgICAgICAgICBXUl9jb3VudGVyIFtCYW5rXSA9IDA7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBBZHZhbmNlIGJ1cnN0IGNvdW50ZXIgc3Vicm91dGluZQogICAgICAgICAgICAjdEhaIEJ1cnN0OwogICAgICAgIGVuZCBlbHNlIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZGluZyBEYXRhIGZyb20gTWVtb3J5CiAgICAgICAgICAgIC8vIEFycmF5IGJ1ZmZlcgogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazAgW3tSb3csIENvbH1dOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IwMSkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazEgW3tSb3csIENvbH1dOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMCkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazIgW3tSb3csIENvbH1dOwogICAgICAgICAgICBpZiAoQmFuayA9PSAyJ2IxMSkgRHFfZHFtIFsxNSA6IDBdID0gQmFuazMgW3tSb3csIENvbH1dOwogICAgICAgICAgICAvLyBEcW0gb3BlcmF0aW9uCiAgICAgICAgICAgIGlmIChEcW1fcmVnMFswXSA9PSAxJ2IxKSBEcV9kcW0gWyA3IDogMF0gPSA4J2J6OwogICAgICAgICAgICAvLyBEaXNwbGF5IHJlc3VsdAogICAgICAgICAgICBEcV9yZWcgWzE1IDogMF0gPSAjdEFDIERxX2RxbSBbMTUgOiAwXTsKICAgICAgICAgICAgaWYgKERxbV9yZWcwID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5KCJhdCB0aW1lICV0IFJFQUQgOiBCYW5rID0gJWQgUm93ID0gJWQsIENvbCA9ICVkLCBEYXRhID0gSGktWiBkdWUgdG8gRFFNIiwgJHRpbWUsIEJhbmssIFJvdywgQ29sKTsKICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgUkVBRCA6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX3JlZywgRHFtX3JlZzApOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gQWR2YW5jZSBidXJzdCBjb3VudGVyIHN1YnJvdXRpbmUKICAgICAgICAgICAgQnVyc3Q7CiAgICAgICAgZW5kCiAgICBlbmQKCiAgICAvLyAgV3JpdGUgd2l0aCBBdXRvIFByZWNoYXJnZSBDYWxjdWxhdGlvbgogICAgLy8gICAgICBUaGUgZGV2aWNlIHN0YXJ0IGludGVybmFsIHByZWNoYXJnZToKICAgIC8vICAgICAgICAgIDEuICB0V1IgQ2xvY2sgYWZ0ZXIgbGFzdCBidXJzdAogICAgLy8gICAgICBhbmQgMi4gIE1lZXQgbWluaW11bSB0UkFTIHJlcXVpcmVtZW50CiAgICAvLyAgICAgICBvciAzLiAgSW50ZXJydXB0IGJ5IGEgUmVhZCBvciBXcml0ZSAod2l0aCBvciB3aXRob3V0IEF1dG9QcmVjaGFyZ2UpCiAgICBhbHdheXMgQCAoV1JfY291bnRlclswXSkgYmVnaW4KICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzBdID09IDEnYjEpICYmIChXcml0ZV9wcmVjaGFyZ2VbMF0gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazAgPj0gdFJBUykgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAyCiAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDEpIHx8ICAgLy8gQ2FzZSAxCiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFswXSA+PSAyKSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMF0gPj0gNCkgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDgpKSkgfHwKICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3dyaXRlWzBdID09IDEnYjEgJiYgV1JfY291bnRlclswXSA+PSAyKSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDMgKHN0b3AgY291bnQgd2hlbiBpbnRlcnJ1cHQpCiAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbMF0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVswXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3dyaXRlWzBdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICAjdFdSYTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRXUgogICAgICAgICAgICAgICAgICAgIFBjX2IwID0gMSdiMTsKICAgICAgICAgICAgICAgICAgICBBY3RfYjAgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJQX2NoazAgPSAkdGltZTsKICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMCIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKICAgIGFsd2F5cyBAIChXUl9jb3VudGVyWzFdKSBiZWdpbgogICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbMV0gPT0gMSdiMSkgJiYgKFdyaXRlX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSkgYmVnaW4KICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMSA+PSB0UkFTKSAmJgogICAgICAgICAgICAgICAoKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxIHx8IFdyaXRlX2J1cnN0X21vZGUgPT0gMSdiMSkgJiYgQ291bnRfcHJlY2hhcmdlIFsxXSA+PSAxKSB8fCAKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzFdID49IDIpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsxXSA+PSA0KSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gOCkpKSB8fAogICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfd3JpdGVbMV0gPT0gMSdiMSAmJiBXUl9jb3VudGVyWzFdID49IDIpKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzFdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbMV0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVsxXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgI3RXUmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0V1IKICAgICAgICAgICAgICAgICAgICBQY19iMSA9IDEnYjE7CiAgICAgICAgICAgICAgICAgICAgQWN0X2IxID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDEiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCiAgICBhbHdheXMgQCAoV1JfY291bnRlclsyXSkgYmVnaW4KICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzJdID09IDEnYjEpICYmIChXcml0ZV9wcmVjaGFyZ2VbMl0gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazIgPj0gdFJBUykgJiYKICAgICAgICAgICAgICAgKCgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSB8fCBXcml0ZV9idXJzdF9tb2RlID09IDEnYjEpICYmIENvdW50X3ByZWNoYXJnZSBbMl0gPj0gMSkgfHwgCiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSAyKSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMl0gPj0gNCkgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzJdID49IDgpKSkgfHwKICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3dyaXRlWzJdID09IDEnYjEgJiYgV1JfY291bnRlclsyXSA+PSAyKSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsyXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgV3JpdGVfcHJlY2hhcmdlWzJdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGVbMl0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCiAgICAgICAgICAgICAgICAgICAgUGNfYjIgPSAxJ2IxOwogICAgICAgICAgICAgICAgICAgIEFjdF9iMiA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMiA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAyIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAogICAgYWx3YXlzIEAgKFdSX2NvdW50ZXJbM10pIGJlZ2luCiAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzNdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGszID49IHRSQVMpICYmCiAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDEpIHx8IAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbM10gPj0gMikgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDQpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFszXSA+PSA4KSkpIHx8CiAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVszXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbM10gPj0gMikpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbM10gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVszXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3dyaXRlWzNdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICAjdFdSYTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRXUgogICAgICAgICAgICAgICAgICAgIFBjX2IzID0gMSdiMTsKICAgICAgICAgICAgICAgICAgICBBY3RfYjMgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJQX2NoazMgPSAkdGltZTsKICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMyIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICB0YXNrIEJ1cnN0OwogICAgICAgIGJlZ2luCiAgICAgICAgICAgIC8vIEFkdmFuY2UgQnVyc3QgQ291bnRlcgogICAgICAgICAgICBCdXJzdF9jb3VudGVyID0gQnVyc3RfY291bnRlciArIDE7CgogICAgICAgICAgICAvLyBCdXJzdCBUeXBlCiAgICAgICAgICAgIGlmIChNb2RlX3JlZ1szXSA9PSAxJ2IwKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXF1ZW50aWFsIEJ1cnN0CiAgICAgICAgICAgICAgICBDb2xfdGVtcCA9IENvbCArIDE7CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChNb2RlX3JlZ1szXSA9PSAxJ2IxKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnRlcmxlYXZlZCBCdXJzdAogICAgICAgICAgICAgICAgQ29sX3RlbXBbMl0gPSAgQnVyc3RfY291bnRlclsyXSBeICBDb2xfYnJzdFsyXTsKICAgICAgICAgICAgICAgIENvbF90ZW1wWzFdID0gIEJ1cnN0X2NvdW50ZXJbMV0gXiAgQ29sX2Jyc3RbMV07CiAgICAgICAgICAgICAgICBDb2xfdGVtcFswXSA9ICBCdXJzdF9jb3VudGVyWzBdIF4gIENvbF9icnN0WzBdOwogICAgICAgICAgICBlbmQKCiAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aAogICAgICAgICAgICBpZiAoQnVyc3RfbGVuZ3RoXzIpIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoID0gMgogICAgICAgICAgICAgICAgQ29sIFswXSA9IENvbF90ZW1wIFswXTsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJ1cnN0X2xlbmd0aF80KSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aCA9IDQKICAgICAgICAgICAgICAgIENvbCBbMSA6IDBdID0gQ29sX3RlbXAgWzEgOiAwXTsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJ1cnN0X2xlbmd0aF84KSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aCA9IDgKICAgICAgICAgICAgICAgIENvbCBbMiA6IDBdID0gQ29sX3RlbXAgWzIgOiAwXTsKICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aCA9IEZVTEwKICAgICAgICAgICAgICAgIENvbCA9IENvbF90ZW1wOwogICAgICAgICAgICBlbmQKCiAgICAgICAgICAgIC8vIEJ1cnN0IFJlYWQgU2luZ2xlIFdyaXRlICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChXcml0ZV9idXJzdF9tb2RlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgLy8gRGF0YSBDb3VudGVyCiAgICAgICAgICAgIGlmIChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgaWYgKEJ1cnN0X2NvdW50ZXIgPj0gMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDIpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAoQnVyc3RfY291bnRlciA+PSA0KSBiZWdpbgogICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgaWYgKEJ1cnN0X2NvdW50ZXIgPj0gOCkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZHRhc2sKCiAgICAvLyBUaW1pbmcgUGFyYW1ldGVycyBmb3IgLTc1IChQQzEzMykgYW5kIENBUyBMYXRlbmN5ID0gMgogICAgc3BlY2lmeQogICAgICAgIHNwZWNwYXJhbQogICAgICAgICAgICAgICAgICAgIHRBSCAgPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRyLCBCYSBIb2xkIFRpbWUKICAgICAgICAgICAgICAgICAgICB0QVMgID0gIDEuNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkciwgQmEgU2V0dXAgVGltZQogICAgICAgICAgICAgICAgICAgIHRDSCAgPSAgMi41LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9jayBIaWdoLUxldmVsIFdpZHRoCiAgICAgICAgICAgICAgICAgICAgdENMICA9ICAyLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb2NrIExvdy1MZXZlbCBXaWR0aAogICAgICAgICAgICAgICAgICAgIHRDSyAgPSAxMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9jayBDeWNsZSBUaW1lCiAgICAgICAgICAgICAgICAgICAgdERIICA9ICAwLjgsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEtaW4gSG9sZCBUaW1lCiAgICAgICAgICAgICAgICAgICAgdERTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERhdGEtaW4gU2V0dXAgVGltZQogICAgICAgICAgICAgICAgICAgIHRDS0ggPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDS0UgSG9sZCAgVGltZQogICAgICAgICAgICAgICAgICAgIHRDS1MgPSAgMS41LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDS0UgU2V0dXAgVGltZQogICAgICAgICAgICAgICAgICAgIHRDTUggPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBIb2xkICBUaW1lCiAgICAgICAgICAgICAgICAgICAgdENNUyA9ICAxLjU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENTIywgUkFTIywgQ0FTIywgV0UjLCBEUU0jIFNldHVwIFRpbWUKICAgICAgICAkd2lkdGggICAgKHBvc2VkZ2UgQ2xrLCAgICAgICAgICAgdENIKTsKICAgICAgICAkd2lkdGggICAgKG5lZ2VkZ2UgQ2xrLCAgICAgICAgICAgdENMKTsKICAgICAgICAkcGVyaW9kICAgKG5lZ2VkZ2UgQ2xrLCAgICAgICAgICAgdENLKTsKICAgICAgICAkcGVyaW9kICAgKHBvc2VkZ2UgQ2xrLCAgICAgICAgICAgdENLKTsKICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBDa2UsICAgdENLUywgdENLSCk7CiAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQ3NfbiwgIHRDTVMsIHRDTUgpOwogICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIENhc19uLCB0Q01TLCB0Q01IKTsKICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBSYXNfbiwgdENNUywgdENNSCk7CiAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgV2VfbiwgIHRDTVMsIHRDTUgpOwogICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIEFkZHIsICB0QVMsICB0QUgpOwogICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIEJhLCAgICB0QVMsICB0QUgpOwogICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIERxbSwgICB0Q01TLCB0Q01IKTsKICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgRHFfY2hrLCBEcSwgICAgdERTLCAgdERIKTsKICAgIGVuZHNwZWNpZnkKCmVuZG1vZHVsZQoK