Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IDIwMTIgTWljcm9uIFRlY2hub2xvZ3ksIEluYy4KLy8gCi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwovLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgovLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAovLyBTUERYLUZpbGVDb250cmlidXRvcjogQ3JlYXRlZCBieSBEaW5lc2ggQW5uYXl5YSA8ZGluZXNoYUBvcGVuY29yZXMub3JnPgovLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKgoqICAgIEZpbGUgTmFtZTogIE1UNDhMQzhNOEEyLlYgIAoqICAgICAgVmVyc2lvbjogIDAuMGYKKiAgICAgICAgIERhdGU6ICBKdWx5IDh0aCwgMTk5OQoqICAgICAgICBNb2RlbDogIEJVUyBGdW5jdGlvbmFsCiogICAgU2ltdWxhdG9yOiAgTW9kZWwgVGVjaG5vbG9neSAoUEMgdmVyc2lvbiA1LjJlIFBFKQoqCiogRGVwZW5kZW5jaWVzOiAgTm9uZQoqCiogICAgICAgQXV0aG9yOiAgU29uIFAuIEh1eW5oCiogICAgICAgIEVtYWlsOiAgc3BodXluaEBtaWNyb24uY29tCiogICAgICAgIFBob25lOiAgKDIwOCkgMzY4LTM4MjUKKiAgICAgIENvbXBhbnk6ICBNaWNyb24gVGVjaG5vbG9neSwgSW5jLgoqICAgICAgICBNb2RlbDogIE1UNDhMQzhNMTZBMiAoMk1lZyB4IDggeCA0IEJhbmtzKQoqCiogIERlc2NyaXB0aW9uOiAgTWljcm9uIDEyOE1iIFNEUkFNIFZlcmlsb2cgbW9kZWwKKgoqICAgTGltaXRhdGlvbjogIC0gRG9lc24ndCBjaGVjayBmb3IgNDA5NiBjeWNsZSByZWZyZXNoCioKKiAgICAgICAgIE5vdGU6ICAtIFNldCBzaW11bGF0b3IgcmVzb2x1dGlvbiB0byAicHMiIGFjY3VyYWN5CiogICAgICAgICAgICAgICAgLSBTZXQgRGVidWcgPSAwIHRvIGRpc2FibGUgJGRpc3BsYXkgbWVzc2FnZXMKKgoqICAgRGlzY2xhaW1lcjogIFRIRVNFIERFU0lHTlMgQVJFIFBST1ZJREVEICJBUyBJUyIgV0lUSCBOTyBXQVJSQU5UWSAKKiAgICAgICAgICAgICAgICBXSEFUU09FVkVSIEFORCBNSUNST04gU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgCiogICAgICAgICAgICAgICAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IKKiAgICAgICAgICAgICAgICBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgQUdBSU5TVCBJTkZSSU5HRU1FTlQuCioKKiAgICAgICAgICAgICAgICBDb3B5cmlnaHQgqSAxOTk4IE1pY3JvbiBTZW1pY29uZHVjdG9yIFByb2R1Y3RzLCBJbmMuCiogICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlYXJ2ZWQKKgoqIFJldiAgIEF1dGhvciAgICAgICAgICBQaG9uZSAgICAgICAgIERhdGUgICAgICAgIENoYW5nZXMKKiAtLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAtLS0tLS0tLS0tICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKiAwLjBmICBTb24gSHV5bmggICAgICAgMjA4LTM2OC0zODI1ICAwNy8wOC8xOTk5ICAtIEZpeCB0V1IgPSAxIENsayArIDcuNSBucyAoQXV0bykKKiAgICAgICBNaWNyb24gVGVjaG5vbG9neSBJbmMuICAgICAgICAgICAgICAgICAgICAtIEZpeCB0V1IgPSAxNSBucyAoTWFudWFsKQoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gRml4IHRSUCAoQXV0b3ByZWNoYXJnZSB0byBBdXRvUmVmcmVzaCkKKgoqIDAuMGEgIFNvbiBIdXluaCAgICAgICAyMDgtMzY4LTM4MjUgIDA1LzEzLzE5OTggIC0gRmlyc3QgUmVsZWFzZSAoZnJvbSA2NE1iIHJldiAwLjBlKQoqICAgICAgIE1pY3JvbiBUZWNobm9sb2d5IEluYy4KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCmB0aW1lc2NhbGUgMW5zIC8gMTAwcHMKCm1vZHVsZSBtdDQ4bGM4bThhMiAoRHEsIEFkZHIsIEJhLCBDbGssIENrZSwgQ3NfbiwgUmFzX24sIENhc19uLCBXZV9uLCBEcW0pOwoKICAgIHBhcmFtZXRlciBhZGRyX2JpdHMgPSAgICAgIDEyOwogICAgcGFyYW1ldGVyIGRhdGFfYml0cyA9ICAgICAgODsKICAgIHBhcmFtZXRlciBjb2xfYml0cyAgPSAgICAgICA5OwogICAgcGFyYW1ldGVyIG1lbV9zaXplcyA9IDIwOTcxNTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDIgTWVnCgogICAgaW5vdXQgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gRHE7CiAgICBpbnB1dCAgICAgW2FkZHJfYml0cyAtIDEgOiAwXSBBZGRyOwogICAgaW5wdXQgICAgICAgICAgICAgICAgIFsxIDogMF0gQmE7CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDbGs7CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDa2U7CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDc19uOwogICAgaW5wdXQgICAgICAgICAgICAgICAgICAgICAgICAgUmFzX247CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgICAgICAgICBDYXNfbjsKICAgIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgIFdlX247CiAgICBpbnB1dCAgICAgICAgICAgICAgICAgWzAgOiAwXSBEcW07CgogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazAgWzAgOiBtZW1fc2l6ZXNdOwogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazEgWzAgOiBtZW1fc2l6ZXNdOwogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazIgWzAgOiBtZW1fc2l6ZXNdOwogICAgcmVnICAgICAgIFtkYXRhX2JpdHMgLSAxIDogMF0gQmFuazMgWzAgOiBtZW1fc2l6ZXNdOwoKICAgIHJlZyAgICAgICAgICAgICAgICAgICBbMSA6IDBdIEJhbmtfYWRkciBbMCA6IDNdOyAgICAgICAgICAgICAgICAvLyBCYW5rIEFkZHJlc3MgUGlwZWxpbmUKICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbF9hZGRyIFswIDogM107ICAgICAgICAgICAgICAgICAvLyBDb2x1bW4gQWRkcmVzcyBQaXBlbGluZQogICAgcmVnICAgICAgICAgICAgICAgICAgIFszIDogMF0gQ29tbWFuZCBbMCA6IDNdOyAgICAgICAgICAgICAgICAgIC8vIENvbW1hbmQgT3BlcmF0aW9uIFBpcGVsaW5lCiAgICByZWcgICAgICAgICAgICAgICAgICAgWzAgOiAwXSBEcW1fcmVnMCwgRHFtX3JlZzE7ICAgICAgICAgICAgICAgLy8gRFFNIE9wZXJhdGlvbiBQaXBlbGluZQogICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gQjBfcm93X2FkZHIsIEIxX3Jvd19hZGRyLCBCMl9yb3dfYWRkciwgQjNfcm93X2FkZHI7CgogICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gTW9kZV9yZWc7CiAgICByZWcgICAgICAgW2RhdGFfYml0cyAtIDEgOiAwXSBEcV9yZWcsIERxX2RxbTsKICAgIHJlZyAgICAgICAgW2NvbF9iaXRzIC0gMSA6IDBdIENvbF90ZW1wLCBCdXJzdF9jb3VudGVyOwoKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdF9iMCwgQWN0X2IxLCBBY3RfYjIsIEFjdF9iMzsgICAvLyBCYW5rIEFjdGl2YXRlCiAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iMzsgICAgICAgLy8gQmFuayBQcmVjaGFyZ2UKCiAgICByZWcgICAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYW5rX3ByZWNoYXJnZSAgICAgWzAgOiAzXTsgICAgICAgLy8gUHJlY2hhcmdlIENvbW1hbmQKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEExMF9wcmVjaGFyZ2UgICAgICBbMCA6IDNdOyAgICAgICAvLyBBZGRyWzEwXSA9IDEgKEFsbCBiYW5rcykKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlICAgICBbMCA6IDNdOyAgICAgICAvLyBSVyBBdXRvUHJlY2hhcmdlIChCYW5rKQogICAgcmVnICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZF9wcmVjaGFyZ2UgICAgIFswIDogM107ICAgICAgIC8vIFIgIEF1dG9QcmVjaGFyZ2UKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZSAgICBbMCA6IDNdOyAgICAgICAvLyAgVyBBdXRvUHJlY2hhcmdlCiAgICBpbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgICBDb3VudF9wcmVjaGFyZ2UgICAgWzAgOiAzXTsgICAgICAgLy8gUlcgQXV0b1ByZWNoYXJnZSAoQ291bnRlcikKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkICBbMCA6IDNdOyAgICAgICAvLyBSVyBJbnRlcnJ1cHQgUmVhZCB3aXRoIEF1dG8gUHJlY2hhcmdlCiAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGUgWzAgOiAzXTsgICAgICAgLy8gUlcgSW50ZXJydXB0IFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UKCiAgICByZWcgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZTsKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZTsKCiAgICByZWcgICAgICAgICAgICAgICAgICAgWzEgOiAwXSBCYW5rLCBQcmV2aW91c19iYW5rOwogICAgcmVnICAgICAgIFthZGRyX2JpdHMgLSAxIDogMF0gUm93OwogICAgcmVnICAgICAgICBbY29sX2JpdHMgLSAxIDogMF0gQ29sLCBDb2xfYnJzdDsKCiAgICAvLyBJbnRlcm5hbCBzeXN0ZW0gY2xvY2sKICAgIHJlZyAgICAgICAgICAgICAgICAgICAgICAgICAgIENrZVosIFN5c19jbGs7CgogICAgZXZlbnQgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfZGV0ZWN0ZWQ7CgogICAgLy8gQ29tbWFuZHMgRGVjb2RlCiAgICB3aXJlICAgICAgQWN0aXZlX2VuYWJsZSAgICA9IH5Dc19uICYgflJhc19uICYgIENhc19uICYgIFdlX247CiAgICB3aXJlICAgICAgQXJlZl9lbmFibGUgICAgICA9IH5Dc19uICYgflJhc19uICYgfkNhc19uICYgIFdlX247CiAgICB3aXJlICAgICAgQnVyc3RfdGVybSAgICAgICA9IH5Dc19uICYgIFJhc19uICYgIENhc19uICYgfldlX247CiAgICB3aXJlICAgICAgTW9kZV9yZWdfZW5hYmxlICA9IH5Dc19uICYgflJhc19uICYgfkNhc19uICYgfldlX247CiAgICB3aXJlICAgICAgUHJlY2hfZW5hYmxlICAgICA9IH5Dc19uICYgflJhc19uICYgIENhc19uICYgfldlX247CiAgICB3aXJlICAgICAgUmVhZF9lbmFibGUgICAgICA9IH5Dc19uICYgIFJhc19uICYgfkNhc19uICYgIFdlX247CiAgICB3aXJlICAgICAgV3JpdGVfZW5hYmxlICAgICA9IH5Dc19uICYgIFJhc19uICYgfkNhc19uICYgfldlX247CgogICAgLy8gQnVyc3QgTGVuZ3RoIERlY29kZQogICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF8xICAgPSB+TW9kZV9yZWdbMl0gJiB+TW9kZV9yZWdbMV0gJiB+TW9kZV9yZWdbMF07CiAgICB3aXJlICAgICAgQnVyc3RfbGVuZ3RoXzIgICA9IH5Nb2RlX3JlZ1syXSAmIH5Nb2RlX3JlZ1sxXSAmICBNb2RlX3JlZ1swXTsKICAgIHdpcmUgICAgICBCdXJzdF9sZW5ndGhfNCAgID0gfk1vZGVfcmVnWzJdICYgIE1vZGVfcmVnWzFdICYgfk1vZGVfcmVnWzBdOwogICAgd2lyZSAgICAgIEJ1cnN0X2xlbmd0aF84ICAgPSB+TW9kZV9yZWdbMl0gJiAgTW9kZV9yZWdbMV0gJiAgTW9kZV9yZWdbMF07CgogICAgLy8gQ0FTIExhdGVuY3kgRGVjb2RlCiAgICB3aXJlICAgICAgQ2FzX2xhdGVuY3lfMiAgICA9IH5Nb2RlX3JlZ1s2XSAmICBNb2RlX3JlZ1s1XSAmIH5Nb2RlX3JlZ1s0XTsKICAgIHdpcmUgICAgICBDYXNfbGF0ZW5jeV8zICAgID0gfk1vZGVfcmVnWzZdICYgIE1vZGVfcmVnWzVdICYgIE1vZGVfcmVnWzRdOwoKYGlmZGVmIFZFUkJPU0UKICAgIHdpcmUgICAgICBEZWJ1ZyAgICAgICAgICAgID0gMSdiMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlYnVnIG1lc3NhZ2VzIDogMSA9IE9uCmBlbHNlCiAgICB3aXJlICAgICAgRGVidWcgICAgICAgICAgICA9IDEnYjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWJ1ZyBtZXNzYWdlcyA6IDEgPSBPbgpgZW5kaWYKICAgIC8vIFdyaXRlIEJ1cnN0IE1vZGUKICAgIHdpcmUgICAgICBXcml0ZV9idXJzdF9tb2RlID0gTW9kZV9yZWdbOV07CgogICAgd2lyZSAgICAgIERxX2NoayAgICAgICAgICAgPSBTeXNfY2xrICYgRGF0YV9pbl9lbmFibGU7ICAgICAgLy8gQ2hlY2sgc2V0dXAvaG9sZCB0aW1lIGZvciBEUQoKICAgIGFzc2lnbiAgICBEcSAgICAgICAgICAgICAgID0gRHFfcmVnOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERRIGJ1ZmZlcgoKICAgIC8vIENvbW1hbmRzIE9wZXJhdGlvbgogICAgYGRlZmluZSAgIEFDVCAgICAgICAwCiAgICBgZGVmaW5lICAgTk9QICAgICAgIDEKICAgIGBkZWZpbmUgICBSRUFEICAgICAgMgogICAgYGRlZmluZSAgIFJFQURfQSAgICAzCiAgICBgZGVmaW5lICAgU0RSQU1fV1JJVEUgICAgIDQKICAgIGBkZWZpbmUgICBXUklURV9BICAgNQogICAgYGRlZmluZSAgIFNEUkFNX1BSRUNIICAgICA2CiAgICBgZGVmaW5lICAgU0RSQU1fQV9SRUYgICAgIDcKICAgIGBkZWZpbmUgICBTRFJBTV9CU1QgICAgICAgOAogICAgYGRlZmluZSAgIFNEUkFNX0xNUiAgICAgICA5CgogICAgLy8gVGltaW5nIFBhcmFtZXRlcnMgZm9yIC03NSAoUEMxMzMpIGFuZCBDQVMgTGF0ZW5jeSA9IDIKICAgIHBhcmFtZXRlciB0QUMgID0gICA2LjA7CiAgICBwYXJhbWV0ZXIgdEhaICA9ICAgNy4wOwogICAgcGFyYW1ldGVyIHRPSCAgPSAgIDIuNzsKICAgIHBhcmFtZXRlciB0TVJEID0gICAyLjA7ICAgICAvLyAyIENsayBDeWNsZXMKICAgIHBhcmFtZXRlciB0UkFTID0gIDQ0LjA7CiAgICBwYXJhbWV0ZXIgdFJDICA9ICA2Ni4wOwogICAgcGFyYW1ldGVyIHRSQ0QgPSAgMjAuMDsKICAgIHBhcmFtZXRlciB0UlAgID0gIDIwLjA7CiAgICBwYXJhbWV0ZXIgdFJSRCA9ICAxNS4wOwogICAgcGFyYW1ldGVyIHRXUmEgPSAgIDcuNTsgICAgIC8vIEEyIFZlcnNpb24gLSBBdXRvIHByZWNoYXJnZSBtb2RlIG9ubHkgKDEgQ2xrICsgNy41IG5zKQogICAgcGFyYW1ldGVyIHRXUnAgPSAgMTUuMDsgICAgIC8vIEEyIFZlcnNpb24gLSBQcmVjaGFyZ2UgbW9kZSBvbmx5ICgxNSBucykKCiAgICAvLyBUaW1pbmcgQ2hlY2sgdmFyaWFibGUKICAgIGludGVnZXIgICBNUkRfY2hrOwogICAgaW50ZWdlciAgIFdSX2NvdW50ZXIgWzAgOiAzXTsKICAgIHRpbWUgICAgICBXUl9jaGsgWzAgOiAzXTsKICAgIHRpbWUgICAgICBSQ19jaGssIFJSRF9jaGs7CiAgICB0aW1lICAgICAgUkFTX2NoazAsIFJBU19jaGsxLCBSQVNfY2hrMiwgUkFTX2NoazM7CiAgICB0aW1lICAgICAgUkNEX2NoazAsIFJDRF9jaGsxLCBSQ0RfY2hrMiwgUkNEX2NoazM7CiAgICB0aW1lICAgICAgUlBfY2hrMCwgUlBfY2hrMSwgUlBfY2hrMiwgUlBfY2hrMzsKCiAgICBpbml0aWFsIGJlZ2luCiAgICAgIAogICAgICAgIERxX3JlZyA9IHtkYXRhX2JpdHN7MSdien19OwogICAgICAgIHtEYXRhX2luX2VuYWJsZSwgRGF0YV9vdXRfZW5hYmxlfSA9IDA7CiAgICAgICAge0FjdF9iMCwgQWN0X2IxLCBBY3RfYjIsIEFjdF9iM30gPSA0J2IwMDAwOwogICAgICAgIHtQY19iMCwgUGNfYjEsIFBjX2IyLCBQY19iM30gPSA0J2IwMDAwOwogICAgICAgIHtXUl9jaGtbMF0sIFdSX2Noa1sxXSwgV1JfY2hrWzJdLCBXUl9jaGtbM119ID0gMDsKICAgICAgICB7V1JfY291bnRlclswXSwgV1JfY291bnRlclsxXSwgV1JfY291bnRlclsyXSwgV1JfY291bnRlclszXX0gPSAwOwogICAgICAgIHtSV19pbnRlcnJ1cHRfcmVhZFswXSwgUldfaW50ZXJydXB0X3JlYWRbMV0sIFJXX2ludGVycnVwdF9yZWFkWzJdLCBSV19pbnRlcnJ1cHRfcmVhZFszXX0gPSAwOwogICAgICAgIHtSV19pbnRlcnJ1cHRfd3JpdGVbMF0sIFJXX2ludGVycnVwdF93cml0ZVsxXSwgUldfaW50ZXJydXB0X3dyaXRlWzJdLCBSV19pbnRlcnJ1cHRfd3JpdGVbM119ID0gMDsKICAgICAgICB7TVJEX2NoaywgUkNfY2hrLCBSUkRfY2hrfSA9IDA7CiAgICAgICAge1JBU19jaGswLCBSQVNfY2hrMSwgUkFTX2NoazIsIFJBU19jaGszfSA9IDA7CiAgICAgICAge1JDRF9jaGswLCBSQ0RfY2hrMSwgUkNEX2NoazIsIFJDRF9jaGszfSA9IDA7CiAgICAgICAge1JQX2NoazAsIFJQX2NoazEsIFJQX2NoazIsIFJQX2NoazN9ID0gMDsKICAgICAgICAkdGltZWZvcm1hdCAoLTksIDAsICIgbnMiLCAxMik7CiAgICAgICAgLy8kcmVhZG1lbWgoImJhbmswLnR4dCIsIEJhbmswKTsKICAgICAgICAvLyRyZWFkbWVtaCgiYmFuazEudHh0IiwgQmFuazEpOwogICAgICAgIC8vJHJlYWRtZW1oKCJiYW5rMi50eHQiLCBCYW5rMik7CiAgICAgICAgLy8kcmVhZG1lbWgoImJhbmszLnR4dCIsIEJhbmszKTsKICAgIGVuZAoKICAgIC8vIFN5c3RlbSBjbG9jayBnZW5lcmF0b3IKICAgIGFsd2F5cyBiZWdpbgogICAgICAgIEAgKHBvc2VkZ2UgQ2xrKSBiZWdpbgogICAgICAgICAgICBTeXNfY2xrID0gQ2tlWjsKICAgICAgICAgICAgQ2tlWiA9IENrZTsKICAgICAgICBlbmQKICAgICAgICBAIChuZWdlZGdlIENsaykgYmVnaW4KICAgICAgICAgICAgU3lzX2NsayA9IDEnYjA7CiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBhbHdheXMgQCAocG9zZWRnZSBTeXNfY2xrKSBiZWdpbgogICAgICAgIC8vIEludGVybmFsIENvbW1hbWQgUGlwZWxpbmVkCiAgICAgICAgQ29tbWFuZFswXSA9IENvbW1hbmRbMV07CiAgICAgICAgQ29tbWFuZFsxXSA9IENvbW1hbmRbMl07CiAgICAgICAgQ29tbWFuZFsyXSA9IENvbW1hbmRbM107CiAgICAgICAgQ29tbWFuZFszXSA9IGBOT1A7CgogICAgICAgIENvbF9hZGRyWzBdID0gQ29sX2FkZHJbMV07CiAgICAgICAgQ29sX2FkZHJbMV0gPSBDb2xfYWRkclsyXTsKICAgICAgICBDb2xfYWRkclsyXSA9IENvbF9hZGRyWzNdOwogICAgICAgIENvbF9hZGRyWzNdID0ge2NvbF9iaXRzezEnYjB9fTsKCiAgICAgICAgQmFua19hZGRyWzBdID0gQmFua19hZGRyWzFdOwogICAgICAgIEJhbmtfYWRkclsxXSA9IEJhbmtfYWRkclsyXTsKICAgICAgICBCYW5rX2FkZHJbMl0gPSBCYW5rX2FkZHJbM107CiAgICAgICAgQmFua19hZGRyWzNdID0gMidiMDsKCiAgICAgICAgQmFua19wcmVjaGFyZ2VbMF0gPSBCYW5rX3ByZWNoYXJnZVsxXTsKICAgICAgICBCYW5rX3ByZWNoYXJnZVsxXSA9IEJhbmtfcHJlY2hhcmdlWzJdOwogICAgICAgIEJhbmtfcHJlY2hhcmdlWzJdID0gQmFua19wcmVjaGFyZ2VbM107CiAgICAgICAgQmFua19wcmVjaGFyZ2VbM10gPSAyJ2IwOwoKICAgICAgICBBMTBfcHJlY2hhcmdlWzBdID0gQTEwX3ByZWNoYXJnZVsxXTsKICAgICAgICBBMTBfcHJlY2hhcmdlWzFdID0gQTEwX3ByZWNoYXJnZVsyXTsKICAgICAgICBBMTBfcHJlY2hhcmdlWzJdID0gQTEwX3ByZWNoYXJnZVszXTsKICAgICAgICBBMTBfcHJlY2hhcmdlWzNdID0gMSdiMDsKCiAgICAgICAgLy8gRHFtIHBpcGVsaW5lIGZvciBSZWFkCiAgICAgICAgRHFtX3JlZzAgPSBEcW1fcmVnMTsKICAgICAgICBEcW1fcmVnMSA9IERxbTsKCiAgICAgICAgLy8gUmVhZCBvciBXcml0ZSB3aXRoIEF1dG8gUHJlY2hhcmdlIENvdW50ZXIKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbMF0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzBdID0gQ291bnRfcHJlY2hhcmdlWzBdICsgMTsKICAgICAgICBlbmQKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbMV0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzFdID0gQ291bnRfcHJlY2hhcmdlWzFdICsgMTsKICAgICAgICBlbmQKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbMl0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzJdID0gQ291bnRfcHJlY2hhcmdlWzJdICsgMTsKICAgICAgICBlbmQKICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbM10gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgQ291bnRfcHJlY2hhcmdlWzNdID0gQ291bnRfcHJlY2hhcmdlWzNdICsgMTsKICAgICAgICBlbmQKCiAgICAgICAgLy8gdE1SRCBDb3VudGVyCiAgICAgICAgTVJEX2NoayA9IE1SRF9jaGsgKyAxOwoKICAgICAgICAvLyB0V1IgQ291bnRlciBmb3IgV3JpdGUKICAgICAgICBXUl9jb3VudGVyWzBdID0gV1JfY291bnRlclswXSArIDE7CiAgICAgICAgV1JfY291bnRlclsxXSA9IFdSX2NvdW50ZXJbMV0gKyAxOwogICAgICAgIFdSX2NvdW50ZXJbMl0gPSBXUl9jb3VudGVyWzJdICsgMTsKICAgICAgICBXUl9jb3VudGVyWzNdID0gV1JfY291bnRlclszXSArIDE7CgogICAgICAgIC8vIEF1dG8gUmVmcmVzaAogICAgICAgIGlmIChBcmVmX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBUkVGIDogQXV0byBSZWZyZXNoIiwgJHRpbWUpOwogICAgICAgICAgICAvLyBBdXRvIFJlZnJlc2ggdG8gQXV0byBSZWZyZXNoCiAgICAgICAgICAgIGlmICgkdGltZSAtIFJDX2NoayA8IHRSQykgYmVnaW4KCSAgICAgICAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBBdXRvIFJlZnJlc2giLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdG8gQXV0byBSZWZyZXNoCiAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlAgfHwgJHRpbWUgLSBSUF9jaGsxIDwgdFJQIHx8ICR0aW1lIC0gUlBfY2hrMiA8IHRSUCB8fCAkdGltZSAtIFJQX2NoazMgPCB0UlApIGJlZ2luCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJQIHZpb2xhdGlvbiBkdXJpbmcgQXV0byBSZWZyZXNoIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIFJlZnJlc2gKICAgICAgICAgICAgaWYgKFBjX2IwID09IDEnYjAgfHwgUGNfYjEgPT0gMSdiMCB8fCBQY19iMiA9PSAxJ2IwIHx8IFBjX2IzID09IDEnYjApIGJlZ2luCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQWxsIGJhbmtzIG11c3QgYmUgUHJlY2hhcmdlIGJlZm9yZSBBdXRvIFJlZnJlc2giLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBSZWNvcmQgQ3VycmVudCB0UkMgdGltZQogICAgICAgICAgICBSQ19jaGsgPSAkdGltZTsKICAgICAgICBlbmQKICAgICAgICAKICAgICAgICAvLyBMb2FkIE1vZGUgUmVnaXN0ZXIKICAgICAgICBpZiAoTW9kZV9yZWdfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgIC8vIERlY29kZSBDQVMgTGF0ZW5jeSwgQnVyc3QgTGVuZ3RoLCBCdXJzdCBUeXBlLCBhbmQgV3JpdGUgQnVyc3QgTW9kZQogICAgICAgICAgICBpZiAoUGNfYjAgPT0gMSdiMSAmJiBQY19iMSA9PSAxJ2IxICYmIFBjX2IyID09IDEnYjEgJiYgUGNfYjMgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIE1vZGVfcmVnID0gQWRkcjsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgYmVnaW4KICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgTE1SICA6IExvYWQgTW9kZSBSZWdpc3RlciIsICR0aW1lKTsKICAgICAgICAgICAgICAgICAgICAvLyBDQVMgTGF0ZW5jeQogICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzYgOiA0XSA9PSAzJ2IwMTApCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIENBUyBMYXRlbmN5ICAgICAgPSAyIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWRkcls2IDogNF0gPT0gMydiMDExKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQVMgTGF0ZW5jeSAgICAgID0gMyIpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0FTIExhdGVuY3kgICAgICA9IFJlc2VydmVkIik7CiAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgTGVuZ3RoCiAgICAgICAgICAgICAgICAgICAgaWYgKEFkZHJbMiA6IDBdID09IDMnYjAwMCkKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IDEiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzIgOiAwXSA9PSAzJ2IwMDEpCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IExlbmd0aCAgICAgPSAyIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWRkclsyIDogMF0gPT0gMydiMDEwKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gNCIpOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFkZHJbMiA6IDBdID09IDMnYjAxMSkKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IDgiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzMgOiAwXSA9PSA0J2IwMTExKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBMZW5ndGggICAgID0gRnVsbCIpOwogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVyc3QgTGVuZ3RoICAgICA9IFJlc2VydmVkIik7CiAgICAgICAgICAgICAgICAgICAgLy8gQnVyc3QgVHlwZQogICAgICAgICAgICAgICAgICAgIGlmIChBZGRyWzNdID09IDEnYjApCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBTZXF1ZW50aWFsIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWRkclszXSA9PSAxJ2IxKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdXJzdCBUeXBlICAgICAgID0gSW50ZXJsZWF2ZWQiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1cnN0IFR5cGUgICAgICAgPSBSZXNlcnZlZCIpOwogICAgICAgICAgICAgICAgICAgIC8vIFdyaXRlIEJ1cnN0IE1vZGUKICAgICAgICAgICAgICAgICAgICBpZiAoQWRkcls5XSA9PSAxJ2IwKQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBCdXJzdCBNb2RlID0gUHJvZ3JhbW1lZCBCdXJzdCBMZW5ndGgiKTsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChBZGRyWzldID09IDEnYjEpCiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlIEJ1cnN0IE1vZGUgPSBTaW5nbGUgTG9jYXRpb24gQWNjZXNzIik7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZSBCdXJzdCBNb2RlID0gUmVzZXJ2ZWQiKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBiZWdpbgoKCSAgICAgICAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBhbGwgYmFua3MgbXVzdCBiZSBQcmVjaGFyZ2UgYmVmb3JlIExvYWQgTW9kZSBSZWdpc3RlciIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIFJFRiB0byBMTVIKICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkNfY2hrIDwgdFJDKSBiZWdpbgoKCSAgICAgICAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkMgdmlvbGF0aW9uIGR1cmluZyBMb2FkIE1vZGUgUmVnaXN0ZXIiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBMTVIgdG8gTE1SCiAgICAgICAgICAgIGlmIChNUkRfY2hrIDwgdE1SRCkgYmVnaW4KCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdE1SRCB2aW9sYXRpb24gZHVyaW5nIExvYWQgTW9kZSBSZWdpc3RlciIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIE1SRF9jaGsgPSAwOwogICAgICAgIGVuZAogICAgICAgIAogICAgICAgIC8vIEFjdGl2ZSBCbG9jayAoTGF0Y2ggQmFuayBBZGRyZXNzIGFuZCBSb3cgQWRkcmVzcykKICAgICAgICBpZiAoQWN0aXZlX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICBpZiAoQmEgPT0gMidiMDAgJiYgUGNfYjAgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIHtBY3RfYjAsIFBjX2IwfSA9IDInYjEwOwogICAgICAgICAgICAgICAgQjBfcm93X2FkZHIgPSBBZGRyIFthZGRyX2JpdHMgLSAxIDogMF07CiAgICAgICAgICAgICAgICBSQ0RfY2hrMCA9ICR0aW1lOwogICAgICAgICAgICAgICAgUkFTX2NoazAgPSAkdGltZTsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFDVCAgOiBCYW5rID0gMCBSb3cgPSAlZCIsICR0aW1lLCBBZGRyKTsKICAgICAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBY3RpdmF0ZSBCYW5rIDAKICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazAgPCB0UlApIGJlZ2luCgoJCSAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMCIsICR0aW1lKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMDEgJiYgUGNfYjEgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIHtBY3RfYjEsIFBjX2IxfSA9IDInYjEwOwogICAgICAgICAgICAgICAgQjFfcm93X2FkZHIgPSBBZGRyIFthZGRyX2JpdHMgLSAxIDogMF07CiAgICAgICAgICAgICAgICBSQ0RfY2hrMSA9ICR0aW1lOwogICAgICAgICAgICAgICAgUkFTX2NoazEgPSAkdGltZTsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEFDVCAgOiBCYW5rID0gMSBSb3cgPSAlZCIsICR0aW1lLCBBZGRyKTsKICAgICAgICAgICAgICAgIC8vIFByZWNoYXJnZSB0byBBY3RpdmF0ZSBCYW5rIDEKICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJQX2NoazEgPCB0UlApIGJlZ2luCgoJCSAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UlAgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rIDEiLCAkdGltZSk7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjEwICYmIFBjX2IyID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICB7QWN0X2IyLCBQY19iMn0gPSAyJ2IxMDsKICAgICAgICAgICAgICAgIEIyX3Jvd19hZGRyID0gQWRkciBbYWRkcl9iaXRzIC0gMSA6IDBdOwogICAgICAgICAgICAgICAgUkNEX2NoazIgPSAkdGltZTsKICAgICAgICAgICAgICAgIFJBU19jaGsyID0gJHRpbWU7CiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBBQ1QgIDogQmFuayA9IDIgUm93ID0gJWQiLCAkdGltZSwgQWRkcik7CiAgICAgICAgICAgICAgICAvLyBQcmVjaGFyZ2UgdG8gQWN0aXZhdGUgQmFuayAyCiAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSUF9jaGsyIDwgdFJQKSBiZWdpbgoKCQkgICAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJQIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayAyIiwgJHRpbWUpOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMSAmJiBQY19iMyA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAge0FjdF9iMywgUGNfYjN9ID0gMidiMTA7CiAgICAgICAgICAgICAgICBCM19yb3dfYWRkciA9IEFkZHIgW2FkZHJfYml0cyAtIDEgOiAwXTsKICAgICAgICAgICAgICAgIFJDRF9jaGszID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSQVNfY2hrMyA9ICR0aW1lOwogICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgQUNUICA6IEJhbmsgPSAzIFJvdyA9ICVkIiwgJHRpbWUsIEFkZHIpOwogICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRvIEFjdGl2YXRlIEJhbmsgMwogICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUlBfY2hrMyA8IHRSUCkgYmVnaW4KCgkJICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSUCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgMyIsICR0aW1lKTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMDAgJiYgUGNfYjAgPT0gMSdiMCkgYmVnaW4KCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQmFuayAwIGlzIG5vdCBQcmVjaGFyZ2VkLiIsICR0aW1lKTsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjAxICYmIFBjX2IxID09IDEnYjApIGJlZ2luCgoJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IEJhbmsgMSBpcyBub3QgUHJlY2hhcmdlZC4iLCAkdGltZSk7CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMCAmJiBQY19iMiA9PSAxJ2IwKSBiZWdpbgoKCSAgICAgICAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiBCYW5rIDIgaXMgbm90IFByZWNoYXJnZWQuIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTEgJiYgUGNfYjMgPT0gMSdiMCkgYmVnaW4KCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogQmFuayAzIGlzIG5vdCBQcmVjaGFyZ2VkLiIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIEFjdGl2ZSBCYW5rIEEgdG8gQWN0aXZlIEJhbmsgQgogICAgICAgICAgICBpZiAoKFByZXZpb3VzX2JhbmsgIT0gQmEpICYmICgkdGltZSAtIFJSRF9jaGsgPCB0UlJEKSkgYmVnaW4KCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJSRCB2aW9sYXRpb24gZHVyaW5nIEFjdGl2YXRlIGJhbmsgPSAlZCIsICR0aW1lLCBCYSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBMb2FkIE1vZGUgUmVnaXN0ZXIgdG8gQWN0aXZlCiAgICAgICAgICAgIGlmIChNUkRfY2hrIDwgdE1SRCApIGJlZ2luCgoJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRNUkQgdmlvbGF0aW9uIGR1cmluZyBBY3RpdmF0ZSBiYW5rID0gJWQiLCAkdGltZSwgQmEpOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gQXV0byBSZWZyZXNoIHRvIEFjdGl2YXRlCiAgICAgICAgICAgIGlmICgkdGltZSAtIFJDX2NoayA8IHRSQykgYmVnaW4KCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJDIHZpb2xhdGlvbiBkdXJpbmcgQWN0aXZhdGUgYmFuayA9ICVkIiwgJHRpbWUsIEJhKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIFJlY29yZCB2YXJpYWJsZXMgZm9yIGNoZWNraW5nIHZpb2xhdGlvbgogICAgICAgICAgICBSUkRfY2hrID0gJHRpbWU7CiAgICAgICAgICAgIFByZXZpb3VzX2JhbmsgPSBCYTsKICAgICAgICBlbmQKICAgICAgICAKICAgICAgICAvLyBQcmVjaGFyZ2UgQmxvY2sKICAgICAgICBpZiAoUHJlY2hfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAge1BjX2IwLCBQY19iMSwgUGNfYjIsIFBjX2IzfSA9IDQnYjExMTE7CiAgICAgICAgICAgICAgICB7QWN0X2IwLCBBY3RfYjEsIEFjdF9iMiwgQWN0X2IzfSA9IDQnYjAwMDA7CiAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSUF9jaGsyID0gJHRpbWU7CiAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IEFMTCIsJHRpbWUpOwogICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIGFsbCBiYW5rcwogICAgICAgICAgICAgICAgaWYgKCgkdGltZSAtIFJBU19jaGswIDwgdFJBUykgfHwgKCR0aW1lIC0gUkFTX2NoazEgPCB0UkFTKSB8fAogICAgICAgICAgICAgICAgICAgICgkdGltZSAtIFJBU19jaGsyIDwgdFJBUykgfHwgKCR0aW1lIC0gUkFTX2NoazMgPCB0UkFTKSkgYmVnaW4KCgkJICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CgkJICAgIGlmKCR0aW1lIC0gUkFTX2NoazAgPCB0UkFTKQoJCQkgICAgJGRpc3BsYXkoIkVSUk9SOiBSQVNfQ0hLMCBSeHA6ICV0ICBFeGQ6ICV0IiwkdGltZSAtIFJBU19jaGswLHRSQVMpOwoJCSAgICBpZigkdGltZSAtIFJBU19jaGsxIDwgdFJBUykKCQkJICAgICRkaXNwbGF5KCJFUlJPUjogUkFTX0NISzEgUnhwOiAldCAgRXhkOiAldCIsJHRpbWUgLSBSQVNfY2hrMSx0UkFTKTsKCQkgICAgaWYoJHRpbWUgLSBSQVNfY2hrMiA8IHRSQVMpCgkJCSAgICAkZGlzcGxheSgiRVJST1I6IFJBU19DSEsyIFJ4cDogJXQgIEV4ZDogJXQiLCR0aW1lIC0gUkFTX2NoazIsdFJBUyk7CgkJICAgIGlmKCR0aW1lIC0gUkFTX2NoazMgPCB0UkFTKQoJCQkgICAgJGRpc3BsYXkoIkVSUk9SOiBSQVNfQ0hLMyBSeHA6ICV0ICBFeGQ6ICV0IiwkdGltZSAtIFJBU19jaGszLHRSQVMpOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAvLyB0V1IgdmlvbGF0aW9uIGNoZWNrIGZvciB3cml0ZQogICAgICAgICAgICAgICAgaWYgKCgkdGltZSAtIFdSX2Noa1swXSA8IHRXUnApIHx8ICgkdGltZSAtIFdSX2Noa1sxXSA8IHRXUnApIHx8CiAgICAgICAgICAgICAgICAgICAgKCR0aW1lIC0gV1JfY2hrWzJdIDwgdFdScCkgfHwgKCR0aW1lIC0gV1JfY2hrWzNdIDwgdFdScCkpIGJlZ2luCgoJCSAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYWxsIGJhbmsiLCAkdGltZSk7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEFkZHJbMTBdID09IDEnYjApIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAoQmEgPT0gMidiMDApIGJlZ2luCiAgICAgICAgICAgICAgICAgICAge1BjX2IwLCBBY3RfYjB9ID0gMidiMTA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMCIsJHRpbWUpOwogICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBCYW5rIDAKICAgICAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQVNfY2hrMCA8IHRSQVMpIGJlZ2luCgoJCSAgICAgICAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAwIiwgJHRpbWUpOwogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhID09IDInYjAxKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIHtQY19iMSwgQWN0X2IxfSA9IDInYjEwOwogICAgICAgICAgICAgICAgICAgIFJQX2NoazEgPSAkdGltZTsKICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBQUkUgIDogQmFuayA9IDEiLCR0aW1lKTsKICAgICAgICAgICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBQcmVjaGFyZ2UgQmFuayAxCiAgICAgICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gUkFTX2NoazEgPCB0UkFTKSBiZWdpbgoKCQkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0UkFTIHZpb2xhdGlvbiBkdXJpbmcgUHJlY2hhcmdlIGJhbmsgMSIsICR0aW1lKTsKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYSA9PSAyJ2IxMCkgYmVnaW4KICAgICAgICAgICAgICAgICAgICB7UGNfYjIsIEFjdF9iMn0gPSAyJ2IxMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGsyID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgUFJFICA6IEJhbmsgPSAyIiwkdGltZSk7CiAgICAgICAgICAgICAgICAgICAgLy8gQWN0aXZhdGUgdG8gUHJlY2hhcmdlIEJhbmsgMgogICAgICAgICAgICAgICAgICAgIGlmICgkdGltZSAtIFJBU19jaGsyIDwgdFJBUykgYmVnaW4KCgkJICAgICAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICRkaXNwbGF5ICgiYXQgdGltZSAldCBFUlJPUjogdFJBUyB2aW9sYXRpb24gZHVyaW5nIFByZWNoYXJnZSBiYW5rIDIiLCAkdGltZSk7CiAgICAgICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmEgPT0gMidiMTEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAge1BjX2IzLCBBY3RfYjN9ID0gMidiMTA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IFBSRSAgOiBCYW5rID0gMyIsJHRpbWUpOwogICAgICAgICAgICAgICAgICAgIC8vIEFjdGl2YXRlIHRvIFByZWNoYXJnZSBCYW5rIDMKICAgICAgICAgICAgICAgICAgICBpZiAoJHRpbWUgLSBSQVNfY2hrMyA8IHRSQVMpIGJlZ2luCgoJCSAgICAgICAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICAgICAgICAkZGlzcGxheSAoImF0IHRpbWUgJXQgRVJST1I6IHRSQVMgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAzIiwgJHRpbWUpOwogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgICAvLyB0V1IgdmlvbGF0aW9uIGNoZWNrIGZvciB3cml0ZQogICAgICAgICAgICAgICAgaWYgKCR0aW1lIC0gV1JfY2hrW0JhXSA8IHRXUnApIGJlZ2luCgoJCSAgIC0+ZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgICAgJGRpc3BsYXkgKCJhdCB0aW1lICV0IEVSUk9SOiB0V1IgdmlvbGF0aW9uIGR1cmluZyBQcmVjaGFyZ2UgYmFuayAlZCIsICR0aW1lLCBCYSk7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSBhIFdyaXRlIEltbWVkaWF0ZWx5IChpZiBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzKQogICAgICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSAmJiAoQmFuayA9PSBCYSB8fCBBZGRyWzEwXSA9PSAxJ2IxKSkgYmVnaW4KICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIFByZWNoYXJnZSBDb21tYW5kIFBpcGVsaW5lIGZvciBSZWFkCiAgICAgICAgICAgIGlmIChDYXNfbGF0ZW5jeV8zID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX1BSRUNIOwogICAgICAgICAgICAgICAgQmFua19wcmVjaGFyZ2VbMl0gPSBCYTsKICAgICAgICAgICAgICAgIEExMF9wcmVjaGFyZ2VbMl0gPSBBZGRyWzEwXTsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKENhc19sYXRlbmN5XzIgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIENvbW1hbmRbMV0gPSBgU0RSQU1fUFJFQ0g7CiAgICAgICAgICAgICAgICBCYW5rX3ByZWNoYXJnZVsxXSA9IEJhOwogICAgICAgICAgICAgICAgQTEwX3ByZWNoYXJnZVsxXSA9IEFkZHJbMTBdOwogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICAKICAgICAgICAvLyBCdXJzdCB0ZXJtaW5hdGUKICAgICAgICBpZiAoQnVyc3RfdGVybSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAvLyBUZXJtaW5hdGUgYSBXcml0ZSBJbW1lZGlhdGVseQogICAgICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIFRlcm1pbmF0ZSBhIFJlYWQgRGVwZW5kIG9uIENBUyBMYXRlbmN5CiAgICAgICAgICAgIGlmIChDYXNfbGF0ZW5jeV8zID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICBDb21tYW5kWzJdID0gYFNEUkFNX0JTVDsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKENhc19sYXRlbmN5XzIgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIENvbW1hbmRbMV0gPSBgU0RSQU1fQlNUOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgQlNUICA6IEJ1cnN0IFRlcm1pbmF0ZSIsJHRpbWUpOwogICAgICAgIGVuZAogICAgICAgIAogICAgICAgIC8vIFJlYWQsIFdyaXRlLCBDb2x1bW4gTGF0Y2gKICAgICAgICBpZiAoUmVhZF9lbmFibGUgPT0gMSdiMSB8fCBXcml0ZV9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIGJhbmsgaXMgb3BlbiAoQUNUKQogICAgICAgICAgICBpZiAoKEJhID09IDInYjAwICYmIFBjX2IwID09IDEnYjEpIHx8IChCYSA9PSAyJ2IwMSAmJiBQY19iMSA9PSAxJ2IxKSB8fAogICAgICAgICAgICAgICAgKEJhID09IDInYjEwICYmIFBjX2IyID09IDEnYjEpIHx8IChCYSA9PSAyJ2IxMSAmJiBQY19iMyA9PSAxJ2IxKSkgYmVnaW4KCgkgICAgICAgLT5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhdCB0aW1lICV0IEVSUk9SOiBDYW5ub3QgUmVhZCBvciBXcml0ZSAtIEJhbmsgJWQgaXMgbm90IEFjdGl2YXRlZCIsICR0aW1lLCBCYSk7CiAgICAgICAgICAgIGVuZAogICAgICAgICAgICAvLyBBY3RpdmF0ZSB0byBSZWFkIG9yIFdyaXRlCiAgICAgICAgICAgIGlmICgoQmEgPT0gMidiMDApICYmICgkdGltZSAtIFJDRF9jaGswIDwgdFJDRCkpCgkgICAgICBiZWdpbgoJCSAtPmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhdCB0aW1lICV0IEVSUk9SOiB0UkNEIHZpb2xhdGlvbiBkdXJpbmcgUmVhZCBvciBXcml0ZSB0byBCYW5rIDAiLCAkdGltZSk7CgkgICAgICBlbmQKCSAgIAogICAgICAgICAgICBpZiAoKEJhID09IDInYjAxKSAmJiAoJHRpbWUgLSBSQ0RfY2hrMSA8IHRSQ0QpKQoJICAgICAgYmVnaW4KCQkgLy8tPnRiLnRlc3RfY29udHJvbC5lcnJvcl9kZXRlY3RlZDsKICAgICAgICAgICAgICAgICAkZGlzcGxheSgiYXQgdGltZSAldCBFUlJPUjogdFJDRCB2aW9sYXRpb24gZHVyaW5nIFJlYWQgb3IgV3JpdGUgdG8gQmFuayAxIiwgJHRpbWUpOwoJICAgICAgZW5kCiAgICAgICAgICAgIGlmICgoQmEgPT0gMidiMTApICYmICgkdGltZSAtIFJDRF9jaGsyIDwgdFJDRCkpCgkgICAgICBiZWdpbgoJCSAvLy0+dGIudGVzdF9jb250cm9sLmVycm9yX2RldGVjdGVkOwogICAgICAgICAgICAgICAgICRkaXNwbGF5KCJhdCB0aW1lICV0IEVSUk9SOiB0UkNEIHZpb2xhdGlvbiBkdXJpbmcgUmVhZCBvciBXcml0ZSB0byBCYW5rIDIiLCAkdGltZSk7CgkgICAgICBlbmQKICAgICAgICAgICAgaWYgKChCYSA9PSAyJ2IxMSkgJiYgKCR0aW1lIC0gUkNEX2NoazMgPCB0UkNEKSkKCSAgICAgIGJlZ2luCgkJIC8vLT50Yi50ZXN0X2NvbnRyb2wuZXJyb3JfZGV0ZWN0ZWQ7CiAgICAgICAgICAgICAgICAgJGRpc3BsYXkoImF0IHRpbWUgJXQgRVJST1I6IHRSQ0QgdmlvbGF0aW9uIGR1cmluZyBSZWFkIG9yIFdyaXRlIHRvIEJhbmsgMyIsICR0aW1lKTsKCSAgICAgIGVuZAogICAgICAgICAgICAvLyBSZWFkIENvbW1hbmQKICAgICAgICAgICAgaWYgKFJlYWRfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAvLyBDQVMgTGF0ZW5jeSBwaXBlbGluZQogICAgICAgICAgICAgICAgaWYgKENhc19sYXRlbmN5XzMgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsyXSA9IGBSRUFEX0E7CiAgICAgICAgICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KICAgICAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFsyXSA9IGBSRUFEOwogICAgICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgICAgIENvbF9hZGRyWzJdID0gQWRkcjsKICAgICAgICAgICAgICAgICAgICBCYW5rX2FkZHJbMl0gPSBCYTsKICAgICAgICAgICAgICAgIGVuZCBlbHNlIGlmIChDYXNfbGF0ZW5jeV8yID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgaWYgKEFkZHJbMTBdID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMV0gPSBgUkVBRF9BOwogICAgICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMV0gPSBgUkVBRDsKICAgICAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgICAgICAgICBDb2xfYWRkclsxXSA9IEFkZHI7CiAgICAgICAgICAgICAgICAgICAgQmFua19hZGRyWzFdID0gQmE7CiAgICAgICAgICAgICAgICBlbmQKCiAgICAgICAgICAgICAgICAvLyBSZWFkIGludGVycnVwdCBXcml0ZSAodGVybWluYXRlIFdyaXRlIGltbWVkaWF0ZWx5KQogICAgICAgICAgICAgICAgaWYgKERhdGFfaW5fZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAvLyBXcml0ZSBDb21tYW5kCiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChXcml0ZV9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChBZGRyWzEwXSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIENvbW1hbmRbMF0gPSBgV1JJVEVfQTsKICAgICAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgQ29tbWFuZFswXSA9IGBTRFJBTV9XUklURTsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICAgQ29sX2FkZHJbMF0gPSBBZGRyOwogICAgICAgICAgICAgICAgQmFua19hZGRyWzBdID0gQmE7CgogICAgICAgICAgICAgICAgLy8gV3JpdGUgaW50ZXJydXB0IFdyaXRlICh0ZXJtaW5hdGUgV3JpdGUgaW1tZWRpYXRlbHkpCiAgICAgICAgICAgICAgICBpZiAoRGF0YV9pbl9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICBlbmQKCiAgICAgICAgICAgICAgICAvLyBXcml0ZSBpbnRlcnJ1cHQgUmVhZCAodGVybWluYXRlIFJlYWQgaW1tZWRpYXRlbHkpCiAgICAgICAgICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQKCiAgICAgICAgICAgIC8vIEludGVycnVwdGluZyBhIFdyaXRlIHdpdGggQXV0b3ByZWNoYXJnZQogICAgICAgICAgICBpZiAoQXV0b19wcmVjaGFyZ2VbQmFua10gPT0gMSdiMSAmJiBXcml0ZV9wcmVjaGFyZ2VbQmFua10gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVtCYW5rXSA9IDEnYjE7CiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogUmVhZC9Xcml0ZSBCYW5rICVkIGludGVycnVwdCBXcml0ZSBCYW5rICVkIHdpdGggQXV0b3ByZWNoYXJnZSIsICR0aW1lLCBCYSwgQmFuayk7CiAgICAgICAgICAgIGVuZAoKICAgICAgICAgICAgLy8gSW50ZXJydXB0aW5nIGEgUmVhZCB3aXRoIEF1dG9wcmVjaGFyZ2UKICAgICAgICAgICAgaWYgKEF1dG9fcHJlY2hhcmdlW0JhbmtdID09IDEnYjEgJiYgUmVhZF9wcmVjaGFyZ2VbQmFua10gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkW0JhbmtdID0gMSdiMTsKICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBSZWFkL1dyaXRlIEJhbmsgJWQgaW50ZXJydXB0IFJlYWQgQmFuayAlZCB3aXRoIEF1dG9wcmVjaGFyZ2UiLCAkdGltZSwgQmEsIEJhbmspOwogICAgICAgICAgICBlbmQKCiAgICAgICAgICAgIC8vIFJlYWQgb3IgV3JpdGUgd2l0aCBBdXRvIFByZWNoYXJnZQogICAgICAgICAgICBpZiAoQWRkclsxMF0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlW0JhXSA9IDEnYjE7CiAgICAgICAgICAgICAgICBDb3VudF9wcmVjaGFyZ2VbQmFdID0gMDsKICAgICAgICAgICAgICAgIGlmIChSZWFkX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlW0JhXSA9IDEnYjE7CiAgICAgICAgICAgICAgICBlbmQgZWxzZSBpZiAoV3JpdGVfZW5hYmxlID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgV3JpdGVfcHJlY2hhcmdlW0JhXSA9IDEnYjE7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCgogICAgICAgIC8vICBSZWFkIHdpdGggQXV0byBQcmVjaGFyZ2UgQ2FsY3VsYXRpb24KICAgICAgICAvLyAgICAgIFRoZSBkZXZpY2Ugc3RhcnQgaW50ZXJuYWwgcHJlY2hhcmdlOgogICAgICAgIC8vICAgICAgICAgIDEuICBDQVMgTGF0ZW5jeSAtIDEgY3ljbGVzIGJlZm9yZSBsYXN0IGJ1cnN0CiAgICAgICAgLy8gICAgICBhbmQgMi4gIE1lZXQgbWluaW11bSB0UkFTIHJlcXVpcmVtZW50CiAgICAgICAgLy8gICAgICAgb3IgMy4gIEludGVycnVwdCBieSBhIFJlYWQgb3IgV3JpdGUgKHdpdGggb3Igd2l0aG91dCBBdXRvUHJlY2hhcmdlKQogICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbMF0gPT0gMSdiMSkgJiYgKFJlYWRfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGswID49IHRSQVMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAyCiAgICAgICAgICAgICAgICAoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzBdID49IDEpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDEKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gMikgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gNCkgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMF0gPj0gOCkpKSB8fAogICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfcmVhZFswXSA9PSAxJ2IxKSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzCiAgICAgICAgICAgICAgICAgICAgUGNfYjAgPSAxJ2IxOwogICAgICAgICAgICAgICAgICAgIEFjdF9iMCA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMCA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzBdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSZWFkX3ByZWNoYXJnZVswXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbMF0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAwIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzFdID09IDEnYjEpICYmIChSZWFkX3ByZWNoYXJnZVsxXSA9PSAxJ2IxKSkgYmVnaW4KICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMSA+PSB0UkFTKSAmJgogICAgICAgICAgICAgICAgKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsxXSA+PSAxKSB8fCAKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMV0gPj0gMikgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMV0gPj0gNCkgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbMV0gPj0gOCkpKSB8fAogICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfcmVhZFsxXSA9PSAxJ2IxKSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBQY19iMSA9IDEnYjE7CiAgICAgICAgICAgICAgICAgICAgQWN0X2IxID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGsxID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbMV0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJlYWRfcHJlY2hhcmdlWzFdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfcmVhZFsxXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDEiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbMl0gPT0gMSdiMSkgJiYgKFJlYWRfcHJlY2hhcmdlWzJdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCiAgICAgICAgICAgICAgICAoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzJdID49IDEpIHx8IAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSAyKSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSA0KSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZVsyXSA+PSA4KSkpIHx8CiAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF9yZWFkWzJdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIFBjX2IyID0gMSdiMTsKICAgICAgICAgICAgICAgICAgICBBY3RfYjIgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJQX2NoazIgPSAkdGltZTsKICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsyXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUmVhZF9wcmVjaGFyZ2VbMl0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF9yZWFkWzJdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMiIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSAmJiAoUmVhZF9wcmVjaGFyZ2VbM10gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazMgPj0gdFJBUykgJiYKICAgICAgICAgICAgICAgICgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2VbM10gPj0gMSkgfHwgCiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzNdID49IDIpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzNdID49IDQpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlWzNdID49IDgpKSkgfHwKICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3JlYWRbM10gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgUGNfYjMgPSAxJ2IxOwogICAgICAgICAgICAgICAgICAgIEFjdF9iMyA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMyA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzNdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSZWFkX3ByZWNoYXJnZVszXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3JlYWRbM10gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAzIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKCiAgICAgICAgLy8gSW50ZXJuYWwgUHJlY2hhcmdlIG9yIEJzdAogICAgICAgIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9QUkVDSCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJlY2hhcmdlIHRlcm1pbmF0ZSBhIHJlYWQgd2l0aCBzYW1lIGJhbmsgb3IgYWxsIGJhbmtzCiAgICAgICAgICAgIGlmIChCYW5rX3ByZWNoYXJnZVswXSA9PSBCYW5rIHx8IEExMF9wcmVjaGFyZ2VbMF0gPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZCBlbHNlIGlmIChDb21tYW5kWzBdID09IGBTRFJBTV9CU1QpIGJlZ2luICAgICAgICAgICAgICAgICAgLy8gQlNUIHRlcm1pbmF0ZSBhIHJlYWQgdG8gY3VycmVudCBiYW5rCiAgICAgICAgICAgIGlmIChEYXRhX291dF9lbmFibGUgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAoKICAgICAgICBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjApIGJlZ2luCiAgICAgICAgICAgIERxX3JlZyA8PSAjdE9IIHtkYXRhX2JpdHN7MSdien19OwogICAgICAgIGVuZAoKICAgICAgICAvLyBEZXRlY3QgUmVhZCBvciBXcml0ZSBjb21tYW5kCiAgICAgICAgaWYgKENvbW1hbmRbMF0gPT0gYFJFQUQgfHwgQ29tbWFuZFswXSA9PSBgUkVBRF9BKSBiZWdpbgogICAgICAgICAgICBCYW5rID0gQmFua19hZGRyWzBdOwogICAgICAgICAgICBDb2wgPSBDb2xfYWRkclswXTsKICAgICAgICAgICAgQ29sX2Jyc3QgPSBDb2xfYWRkclswXTsKICAgICAgICAgICAgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMCkgYmVnaW4KICAgICAgICAgICAgICAgIFJvdyA9IEIwX3Jvd19hZGRyOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjAxKSBiZWdpbgogICAgICAgICAgICAgICAgUm93ID0gQjFfcm93X2FkZHI7CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMTApIGJlZ2luCiAgICAgICAgICAgICAgICBSb3cgPSBCMl9yb3dfYWRkcjsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IxMSkgYmVnaW4KICAgICAgICAgICAgICAgIFJvdyA9IEIzX3Jvd19hZGRyOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgQnVyc3RfY291bnRlciA9IDA7CiAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMTsKICAgICAgICBlbmQgZWxzZSBpZiAoQ29tbWFuZFswXSA9PSBgU0RSQU1fV1JJVEUgfHwgQ29tbWFuZFswXSA9PSBgV1JJVEVfQSkgYmVnaW4KICAgICAgICAgICAgQmFuayA9IEJhbmtfYWRkclswXTsKICAgICAgICAgICAgQ29sID0gQ29sX2FkZHJbMF07CiAgICAgICAgICAgIENvbF9icnN0ID0gQ29sX2FkZHJbMF07CiAgICAgICAgICAgIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMDApIGJlZ2luCiAgICAgICAgICAgICAgICBSb3cgPSBCMF9yb3dfYWRkcjsKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJhbmtfYWRkclswXSA9PSAyJ2IwMSkgYmVnaW4KICAgICAgICAgICAgICAgIFJvdyA9IEIxX3Jvd19hZGRyOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQmFua19hZGRyWzBdID09IDInYjEwKSBiZWdpbgogICAgICAgICAgICAgICAgUm93ID0gQjJfcm93X2FkZHI7CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCYW5rX2FkZHJbMF0gPT0gMidiMTEpIGJlZ2luCiAgICAgICAgICAgICAgICBSb3cgPSBCM19yb3dfYWRkcjsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIEJ1cnN0X2NvdW50ZXIgPSAwOwogICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjE7CiAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CiAgICAgICAgZW5kCgogICAgICAgIC8vIERRIGJ1ZmZlciAoRHJpdmVyL1JlY2VpdmVyKQogICAgICAgIGlmIChEYXRhX2luX2VuYWJsZSA9PSAxJ2IxKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV3JpdGluZyBEYXRhIHRvIE1lbW9yeQogICAgICAgICAgICAvLyBBcnJheSBidWZmZXIKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmsxIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmsyIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgLy8gRHFtIG9wZXJhdGlvbgogICAgICAgICAgICBpZiAoRHFtWzBdID09IDEnYjApIERxX2RxbSBbIDcgOiAwXSA9IERxIFsgNyA6IDBdOwogICAgICAgICAgICAvLyBXcml0ZSB0byBtZW1vcnkKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIEJhbmswIFt7Um93LCBDb2x9XSA9IERxX2RxbSBbMTUgOiAwXTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDEpIEJhbmsxIFt7Um93LCBDb2x9XSA9IERxX2RxbSBbMTUgOiAwXTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTApIEJhbmsyIFt7Um93LCBDb2x9XSA9IERxX2RxbSBbMTUgOiAwXTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIEJhbmszIFt7Um93LCBDb2x9XSA9IERxX2RxbSBbMTUgOiAwXTsKICAgICAgICAgICAgLy8gT3V0cHV0IHJlc3VsdAogICAgICAgICAgICBpZiAoRHFtID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5KCJhdCB0aW1lICV0IFdSSVRFOiBCYW5rID0gJWQgUm93ID0gJWQsIENvbCA9ICVkLCBEYXRhID0gSGktWiBkdWUgdG8gRFFNIiwgJHRpbWUsIEJhbmssIFJvdywgQ29sKTsKICAgICAgICAgICAgZW5kIGVsc2UgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkoImF0IHRpbWUgJXQgV1JJVEU6IEJhbmsgPSAlZCBSb3cgPSAlZCwgQ29sID0gJWQsIERhdGEgPSAlaCwgRHFtID0gJWIiLCAkdGltZSwgQmFuaywgUm93LCBDb2wsIERxX2RxbSwgRHFtKTsKICAgICAgICAgICAgICAgIC8vIFJlY29yZCB0V1IgdGltZSBhbmQgcmVzZXQgY291bnRlcgogICAgICAgICAgICAgICAgV1JfY2hrIFtCYW5rXSA9ICR0aW1lOwogICAgICAgICAgICAgICAgV1JfY291bnRlciBbQmFua10gPSAwOwogICAgICAgICAgICBlbmQKICAgICAgICAgICAgLy8gQWR2YW5jZSBidXJzdCBjb3VudGVyIHN1YnJvdXRpbmUKICAgICAgICAgICAgI3RIWiBCdXJzdDsKICAgICAgICBlbmQgZWxzZSBpZiAoRGF0YV9vdXRfZW5hYmxlID09IDEnYjEpIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlYWRpbmcgRGF0YSBmcm9tIE1lbW9yeQogICAgICAgICAgICAvLyBBcnJheSBidWZmZXIKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmswIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMDEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmsxIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTApIERxX2RxbSBbMTUgOiAwXSA9IEJhbmsyIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgaWYgKEJhbmsgPT0gMidiMTEpIERxX2RxbSBbMTUgOiAwXSA9IEJhbmszIFt7Um93LCBDb2x9XTsKICAgICAgICAgICAgLy8gRHFtIG9wZXJhdGlvbgogICAgICAgICAgICBpZiAoRHFtX3JlZzBbMF0gPT0gMSdiMSkgRHFfZHFtIFsgNyA6IDBdID0gOCdiejsKICAgICAgICAgICAgLy8gRGlzcGxheSByZXN1bHQKICAgICAgICAgICAgRHFfcmVnIFsxNSA6IDBdID0gI3RBQyBEcV9kcW0gWzE1IDogMF07CiAgICAgICAgICAgIGlmIChEcW1fcmVnMCA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSgiYXQgdGltZSAldCBSRUFEIDogQmFuayA9ICVkIFJvdyA9ICVkLCBDb2wgPSAlZCwgRGF0YSA9IEhpLVogZHVlIHRvIERRTSIsICR0aW1lLCBCYW5rLCBSb3csIENvbCk7CiAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5KCJhdCB0aW1lICV0IFJFQUQgOiBCYW5rID0gJWQgUm93ID0gJWQsIENvbCA9ICVkLCBEYXRhID0gJWgsIERxbSA9ICViIiwgJHRpbWUsIEJhbmssIFJvdywgQ29sLCBEcV9yZWcsIERxbV9yZWcwKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIC8vIEFkdmFuY2UgYnVyc3QgY291bnRlciBzdWJyb3V0aW5lCiAgICAgICAgICAgIEJ1cnN0OwogICAgICAgIGVuZAogICAgZW5kCgogICAgLy8gIFdyaXRlIHdpdGggQXV0byBQcmVjaGFyZ2UgQ2FsY3VsYXRpb24KICAgIC8vICAgICAgVGhlIGRldmljZSBzdGFydCBpbnRlcm5hbCBwcmVjaGFyZ2U6CiAgICAvLyAgICAgICAgICAxLiAgdFdSIENsb2NrIGFmdGVyIGxhc3QgYnVyc3QKICAgIC8vICAgICAgYW5kIDIuICBNZWV0IG1pbmltdW0gdFJBUyByZXF1aXJlbWVudAogICAgLy8gICAgICAgb3IgMy4gIEludGVycnVwdCBieSBhIFJlYWQgb3IgV3JpdGUgKHdpdGggb3Igd2l0aG91dCBBdXRvUHJlY2hhcmdlKQogICAgYWx3YXlzIEAgKFdSX2NvdW50ZXJbMF0pIGJlZ2luCiAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVswXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzBdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGswID49IHRSQVMpICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgogICAgICAgICAgICAgICAoKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxIHx8IFdyaXRlX2J1cnN0X21vZGUgPT0gMSdiMSkgJiYgQ291bnRfcHJlY2hhcmdlIFswXSA+PSAxKSB8fCAgIC8vIENhc2UgMQogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMF0gPj0gMikgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzBdID49IDQpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFswXSA+PSA4KSkpIHx8CiAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVswXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMF0gPj0gMikpIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAzIChzdG9wIGNvdW50IHdoZW4gaW50ZXJydXB0KQogICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzBdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbMF0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVswXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgI3RXUmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0V1IKICAgICAgICAgICAgICAgICAgICBQY19iMCA9IDEnYjE7CiAgICAgICAgICAgICAgICAgICAgQWN0X2IwID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGswID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDAiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCiAgICBhbHdheXMgQCAoV1JfY291bnRlclsxXSkgYmVnaW4KICAgICAgICBpZiAoKEF1dG9fcHJlY2hhcmdlWzFdID09IDEnYjEpICYmIChXcml0ZV9wcmVjaGFyZ2VbMV0gPT0gMSdiMSkpIGJlZ2luCiAgICAgICAgICAgIGlmICgoKCR0aW1lIC0gUkFTX2NoazEgPj0gdFJBUykgJiYKICAgICAgICAgICAgICAgKCgoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSB8fCBXcml0ZV9idXJzdF9tb2RlID09IDEnYjEpICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gMSkgfHwgCiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsxXSA+PSAyKSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMV0gPj0gNCkgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzFdID49IDgpKSkgfHwKICAgICAgICAgICAgICAgICAoUldfaW50ZXJydXB0X3dyaXRlWzFdID09IDEnYjEgJiYgV1JfY291bnRlclsxXSA+PSAyKSkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBBdXRvX3ByZWNoYXJnZVsxXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgV3JpdGVfcHJlY2hhcmdlWzFdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSV19pbnRlcnJ1cHRfd3JpdGVbMV0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgICN0V1JhOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdFdSCiAgICAgICAgICAgICAgICAgICAgUGNfYjEgPSAxJ2IxOwogICAgICAgICAgICAgICAgICAgIEFjdF9iMSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUlBfY2hrMSA9ICR0aW1lOwogICAgICAgICAgICAgICAgICAgIGlmIChEZWJ1ZykgJGRpc3BsYXkgKCJhdCB0aW1lICV0IE5PVEUgOiBTdGFydCBJbnRlcm5hbCBBdXRvIFByZWNoYXJnZSBmb3IgQmFuayAxIiwgJHRpbWUpOwogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAogICAgYWx3YXlzIEAgKFdSX2NvdW50ZXJbMl0pIGJlZ2luCiAgICAgICAgaWYgKChBdXRvX3ByZWNoYXJnZVsyXSA9PSAxJ2IxKSAmJiAoV3JpdGVfcHJlY2hhcmdlWzJdID09IDEnYjEpKSBiZWdpbgogICAgICAgICAgICBpZiAoKCgkdGltZSAtIFJBU19jaGsyID49IHRSQVMpICYmCiAgICAgICAgICAgICAgICgoKEJ1cnN0X2xlbmd0aF8xID09IDEnYjEgfHwgV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSAmJiBDb3VudF9wcmVjaGFyZ2UgWzJdID49IDEpIHx8IAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfMiA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbMl0gPj0gMikgfHwKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzQgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzJdID49IDQpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF84ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFsyXSA+PSA4KSkpIHx8CiAgICAgICAgICAgICAgICAgKFJXX2ludGVycnVwdF93cml0ZVsyXSA9PSAxJ2IxICYmIFdSX2NvdW50ZXJbMl0gPj0gMikpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgQXV0b19wcmVjaGFyZ2VbMl0gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFdyaXRlX3ByZWNoYXJnZVsyXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgUldfaW50ZXJydXB0X3dyaXRlWzJdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICAjdFdSYTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRXUgogICAgICAgICAgICAgICAgICAgIFBjX2IyID0gMSdiMTsKICAgICAgICAgICAgICAgICAgICBBY3RfYjIgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJQX2NoazIgPSAkdGltZTsKICAgICAgICAgICAgICAgICAgICBpZiAoRGVidWcpICRkaXNwbGF5ICgiYXQgdGltZSAldCBOT1RFIDogU3RhcnQgSW50ZXJuYWwgQXV0byBQcmVjaGFyZ2UgZm9yIEJhbmsgMiIsICR0aW1lKTsKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmQKICAgIGFsd2F5cyBAIChXUl9jb3VudGVyWzNdKSBiZWdpbgogICAgICAgIGlmICgoQXV0b19wcmVjaGFyZ2VbM10gPT0gMSdiMSkgJiYgKFdyaXRlX3ByZWNoYXJnZVszXSA9PSAxJ2IxKSkgYmVnaW4KICAgICAgICAgICAgaWYgKCgoJHRpbWUgLSBSQVNfY2hrMyA+PSB0UkFTKSAmJgogICAgICAgICAgICAgICAoKChCdXJzdF9sZW5ndGhfMSA9PSAxJ2IxIHx8IFdyaXRlX2J1cnN0X21vZGUgPT0gMSdiMSkgJiYgQ291bnRfcHJlY2hhcmdlIFszXSA+PSAxKSB8fCAKICAgICAgICAgICAgICAgICAoQnVyc3RfbGVuZ3RoXzIgPT0gMSdiMSAmJiBDb3VudF9wcmVjaGFyZ2UgWzNdID49IDIpIHx8CiAgICAgICAgICAgICAgICAgKEJ1cnN0X2xlbmd0aF80ID09IDEnYjEgJiYgQ291bnRfcHJlY2hhcmdlIFszXSA+PSA0KSB8fAogICAgICAgICAgICAgICAgIChCdXJzdF9sZW5ndGhfOCA9PSAxJ2IxICYmIENvdW50X3ByZWNoYXJnZSBbM10gPj0gOCkpKSB8fAogICAgICAgICAgICAgICAgIChSV19pbnRlcnJ1cHRfd3JpdGVbM10gPT0gMSdiMSAmJiBXUl9jb3VudGVyWzNdID49IDIpKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIEF1dG9fcHJlY2hhcmdlWzNdID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBXcml0ZV9wcmVjaGFyZ2VbM10gPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIFJXX2ludGVycnVwdF93cml0ZVszXSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgI3RXUmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0V1IKICAgICAgICAgICAgICAgICAgICBQY19iMyA9IDEnYjE7CiAgICAgICAgICAgICAgICAgICAgQWN0X2IzID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBSUF9jaGszID0gJHRpbWU7CiAgICAgICAgICAgICAgICAgICAgaWYgKERlYnVnKSAkZGlzcGxheSAoImF0IHRpbWUgJXQgTk9URSA6IFN0YXJ0IEludGVybmFsIEF1dG8gUHJlY2hhcmdlIGZvciBCYW5rIDMiLCAkdGltZSk7CiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCgogICAgdGFzayBCdXJzdDsKICAgICAgICBiZWdpbgogICAgICAgICAgICAvLyBBZHZhbmNlIEJ1cnN0IENvdW50ZXIKICAgICAgICAgICAgQnVyc3RfY291bnRlciA9IEJ1cnN0X2NvdW50ZXIgKyAxOwoKICAgICAgICAgICAgLy8gQnVyc3QgVHlwZQogICAgICAgICAgICBpZiAoTW9kZV9yZWdbM10gPT0gMSdiMCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2VxdWVudGlhbCBCdXJzdAogICAgICAgICAgICAgICAgQ29sX3RlbXAgPSBDb2wgKyAxOwogICAgICAgICAgICBlbmQgZWxzZSBpZiAoTW9kZV9yZWdbM10gPT0gMSdiMSkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50ZXJsZWF2ZWQgQnVyc3QKICAgICAgICAgICAgICAgIENvbF90ZW1wWzJdID0gIEJ1cnN0X2NvdW50ZXJbMl0gXiAgQ29sX2Jyc3RbMl07CiAgICAgICAgICAgICAgICBDb2xfdGVtcFsxXSA9ICBCdXJzdF9jb3VudGVyWzFdIF4gIENvbF9icnN0WzFdOwogICAgICAgICAgICAgICAgQ29sX3RlbXBbMF0gPSAgQnVyc3RfY291bnRlclswXSBeICBDb2xfYnJzdFswXTsKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGgKICAgICAgICAgICAgaWYgKEJ1cnN0X2xlbmd0aF8yKSBiZWdpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJ1cnN0IExlbmd0aCA9IDIKICAgICAgICAgICAgICAgIENvbCBbMF0gPSBDb2xfdGVtcCBbMF07CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSA0CiAgICAgICAgICAgICAgICBDb2wgWzEgOiAwXSA9IENvbF90ZW1wIFsxIDogMF07CiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfOCkgYmVnaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSA4CiAgICAgICAgICAgICAgICBDb2wgWzIgOiAwXSA9IENvbF90ZW1wIFsyIDogMF07CiAgICAgICAgICAgIGVuZCBlbHNlIGJlZ2luICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCdXJzdCBMZW5ndGggPSBGVUxMCiAgICAgICAgICAgICAgICBDb2wgPSBDb2xfdGVtcDsKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAvLyBCdXJzdCBSZWFkIFNpbmdsZSBXcml0ZSAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoV3JpdGVfYnVyc3RfbW9kZSA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICBlbmQKCiAgICAgICAgICAgIC8vIERhdGEgQ291bnRlcgogICAgICAgICAgICBpZiAoQnVyc3RfbGVuZ3RoXzEgPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDEpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kIGVsc2UgaWYgKEJ1cnN0X2xlbmd0aF8yID09IDEnYjEpIGJlZ2luCiAgICAgICAgICAgICAgICBpZiAoQnVyc3RfY291bnRlciA+PSAyKSBiZWdpbgogICAgICAgICAgICAgICAgICAgIERhdGFfaW5fZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgICAgICAgICBEYXRhX291dF9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGVuZCBlbHNlIGlmIChCdXJzdF9sZW5ndGhfNCA9PSAxJ2IxKSBiZWdpbgogICAgICAgICAgICAgICAgaWYgKEJ1cnN0X2NvdW50ZXIgPj0gNCkgYmVnaW4KICAgICAgICAgICAgICAgICAgICBEYXRhX2luX2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICAgICAgRGF0YV9vdXRfZW5hYmxlID0gMSdiMDsKICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICBlbmQgZWxzZSBpZiAoQnVyc3RfbGVuZ3RoXzggPT0gMSdiMSkgYmVnaW4KICAgICAgICAgICAgICAgIGlmIChCdXJzdF9jb3VudGVyID49IDgpIGJlZ2luCiAgICAgICAgICAgICAgICAgICAgRGF0YV9pbl9lbmFibGUgPSAxJ2IwOwogICAgICAgICAgICAgICAgICAgIERhdGFfb3V0X2VuYWJsZSA9IDEnYjA7CiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgZW5kCiAgICBlbmR0YXNrCgogICAgLy8gVGltaW5nIFBhcmFtZXRlcnMgZm9yIC03NSAoUEMxMzMpIGFuZCBDQVMgTGF0ZW5jeSA9IDIKICAgIHNwZWNpZnkKICAgICAgICBzcGVjcGFyYW0KICAgICAgICAgICAgICAgICAgICB0QUggID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkciwgQmEgSG9sZCBUaW1lCiAgICAgICAgICAgICAgICAgICAgdEFTICA9ICAxLjUsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZHIsIEJhIFNldHVwIFRpbWUKICAgICAgICAgICAgICAgICAgICB0Q0ggID0gIDIuNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvY2sgSGlnaC1MZXZlbCBXaWR0aAogICAgICAgICAgICAgICAgICAgIHRDTCAgPSAgMi41LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9jayBMb3ctTGV2ZWwgV2lkdGgKICAgICAgICAgICAgICAgICAgICB0Q0sgID0gMTAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2xvY2sgQ3ljbGUgVGltZQogICAgICAgICAgICAgICAgICAgIHRESCAgPSAgMC44LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhLWluIEhvbGQgVGltZQogICAgICAgICAgICAgICAgICAgIHREUyAgPSAgMS41LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEYXRhLWluIFNldHVwIFRpbWUKICAgICAgICAgICAgICAgICAgICB0Q0tIID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0tFIEhvbGQgIFRpbWUKICAgICAgICAgICAgICAgICAgICB0Q0tTID0gIDEuNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0tFIFNldHVwIFRpbWUKICAgICAgICAgICAgICAgICAgICB0Q01IID0gIDAuOCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ1MjLCBSQVMjLCBDQVMjLCBXRSMsIERRTSMgSG9sZCAgVGltZQogICAgICAgICAgICAgICAgICAgIHRDTVMgPSAgMS41OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDUyMsIFJBUyMsIENBUyMsIFdFIywgRFFNIyBTZXR1cCBUaW1lCiAgICAgICAgJHdpZHRoICAgIChwb3NlZGdlIENsaywgICAgICAgICAgIHRDSCk7CiAgICAgICAgJHdpZHRoICAgIChuZWdlZGdlIENsaywgICAgICAgICAgIHRDTCk7CiAgICAgICAgJHBlcmlvZCAgIChuZWdlZGdlIENsaywgICAgICAgICAgIHRDSyk7CiAgICAgICAgJHBlcmlvZCAgIChwb3NlZGdlIENsaywgICAgICAgICAgIHRDSyk7CiAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgQ2tlLCAgIHRDS1MsIHRDS0gpOwogICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIENzX24sICB0Q01TLCB0Q01IKTsKICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBDYXNfbiwgdENNUywgdENNSCk7CiAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIENsaywgICAgUmFzX24sIHRDTVMsIHRDTUgpOwogICAgICAgICRzZXR1cGhvbGQocG9zZWRnZSBDbGssICAgIFdlX24sICB0Q01TLCB0Q01IKTsKICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBBZGRyLCAgdEFTLCAgdEFIKTsKICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBCYSwgICAgdEFTLCAgdEFIKTsKICAgICAgICAkc2V0dXBob2xkKHBvc2VkZ2UgQ2xrLCAgICBEcW0sICAgdENNUywgdENNSCk7CiAgICAgICAgJHNldHVwaG9sZChwb3NlZGdlIERxX2NoaywgRHEsICAgIHREUywgIHRESCk7CiAgICBlbmRzcGVjaWZ5CgplbmRtb2R1bGUKCg==