LyoKICogQ29weXJpZ2h0IDIwMDEsIE92ZSBL5XZlbiwgVHJhbnNHYW1pbmcgVGVjaG5vbG9naWVzIEluYy4KICogQ29weXJpZ2h0IDIwMDIgR3JlZyBUdXJuZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIC0tLS0gcnBjc3NfbWFpbi5jOgogKiAgIEluaXRpYWxpemUgYW5kIHN0YXJ0IHNlcnZpbmcgcmVxdWVzdHMuICBCYWlsIGlmIHJwY3NzIGFscmVhZHkgaXMKICogICBydW5uaW5nLgogKgogKiAtLS0tIFJQQ1NTLkVYRToKICogICAKICogICBXaW5lIG5lZWRzIGEgc2VydmVyIHdob3NlIHJvbGUgaXMgc29tZXdoYXQgbGlrZSB0aGF0CiAqICAgb2YgcnBjc3MuZXhlIGluIHdpbmRvd3MuICBUaGlzIGlzIG5vdCBhIGNsb25lIG9mCiAqICAgd2luZG93cyBycGNzcyBhdCBhbGwuICBJdCBoYXMgYmVlbiBnaXZlbiB0aGUgc2FtZSBuYW1lLCBob3dldmVyLAogKiAgIHRvIHByb3ZpZGUgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgCiAqICAgaXQgbWF5IGJlY29tZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSAicmVhbCIgcnBjc3MuZXhlIG9uCiAqICAgV2luZG93cy4KICoKICogLS0tLSBLTk9XTiBCVUdTIC8gVE9ETzoKICoKICogICBvIFNlcnZpY2UgaG9va3MgYXJlIHVuaW1wbGVtZW50ZWQgKGlmIHlvdSBib3RoZXIgdG8gaW1wbGVtZW50CiAqICAgICB0aGVzZSwgYWxzbyBpbXBsZW1lbnQgbmV0LmV4ZSwgYXQgbGVhc3QgZm9yICJuZXQgc3RhcnQiIGFuZAogKiAgICAgIm5ldCBzdG9wIiAoc2hvdWxkIGJlIHByZXR0eSBlYXN5IEkgZ3Vlc3MsIGFzc3VtaW5nIHRoZSByZXN0CiAqICAgICBvZiB0aGUgc2VydmljZXMgQVBJIGluZnJhc3RydWN0dXJlIHdvcmtzLgogKiAKICogICBvIElzIHN1cHBvc2VkIHRvIHVzZSBSUEMsIG5vdCByYW5kb20ga2x1ZGdlcywgdG8gbWFwIGVuZHBvaW50cy4KICoKICogICBvIFByb2JhYmx5IG5hbWUgc2VydmljZXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGhlcmUgYXMgd2VsbC4KICoKICogICBvIFdpbmUncyBuYW1lZCBwaXBlcyAoaW4gZ2VuZXJhbCkgbWF5IG5vdCBpbnRlcm9wZXJhdGUgd2l0aCB0aG9zZSBvZiAKICogICAgIFdpbmRvd3MgeWV0ICg/KQogKgogKiAgIG8gVGhlcmUgaXMgYSBsb29taW5nIHByb2JsZW0gcmVnYXJkaW5nIGxpc3RlbmluZyBvbiBwcml2aWxlZ2VkCiAqICAgICBwb3J0cy4gIFdlIHdpbGwgbmVlZCB0byBiZSBhYmxlIHRvIGNvZXhpc3Qgd2l0aCBTQU1CQSwgYW5kIGJlIGFibGUKICogICAgIHRvIGZ1bmN0aW9uIHdpdGhvdXQgcnVubmluZyB3aW5lbGliIGNvZGUgYXMgcm9vdC4gIFRoaXMgbWF5CiAqICAgICB0YWtlIHNvbWUgZG9pbmcsIGluY2x1ZGluZyBzaWduaWZpY2FudCByZWNvbmNlcHR1YWxpemF0aW9uIG9mIHRoZQogKiAgICAgcm9sZSBvZiBycGNzcy5leGUgaW4gd2luZS4KICoKICogICBvIFdobyBrbm93cz8gIFdoYXRldmVyIHJwY3NzIGRvZXMsIHdlIG91Z2h0IHRvIGF0CiAqICAgICBsZWFzdCB0aGluayBhYm91dCBkb2luZy4uLiBidXQgd2hhdCAvZG9lcy8gaXQgZG8/CiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgoKI2RlZmluZSBOT05BTUVMRVNTVU5JT04KI2RlZmluZSBOT05BTUVMRVNTU1RSVUNUCiNpbmNsdWRlICJycGNzcy5oIgojaW5jbHVkZSAid2lubnQuaCIKCiNpbmNsdWRlICJ3aW5lL2RlYnVnLmgiCgpXSU5FX0RFRkFVTFRfREVCVUdfQ0hBTk5FTChvbGUpOwoKc3RhdGljIEhBTkRMRSBtYXN0ZXJfbXV0ZXg7CnN0YXRpYyBsb25nIG1heF9sYXp5X3RpbWVvdXQgPSBSUENTU19ERUZBVUxUX01BWF9MQVpZX1RJTUVPVVQ7CgpIQU5ETEUgUlBDU1NfR2V0TWFzdGVyTXV0ZXgodm9pZCkKewogIHJldHVybiBtYXN0ZXJfbXV0ZXg7Cn0KCnZvaWQgUlBDU1NfU2V0TWF4TGF6eVRpbWVvdXQobG9uZyBtbHQpCnsKICAvKiBGSVhNRTogdGhpcyBtYXggZW5zdXJlcyB0aGF0IG5vIGNhbGxlciB3aWxsIGRlY3JlYXNlIG91ciB3YWl0IHRpbWUsCiAgICAgYnV0IGNvdWxkIGhhdmUgb3RoZXIgYmFkIHJlc3VsdHMuICBmaXg6IFN0b3JlICJuZXh0X21heF9sYXp5X3RpbWVvdXQiIAogICAgIGFuZCBpbnN0YWxsIGl0IGFzIG5lY2Vzc2FyeSBuZXh0IHRpbWUgd2UgImRvIHdvcmsiPyAqLwogIG1heF9sYXp5X3RpbWVvdXQgPSBtYXgoUlBDU1NfR2V0TGF6eVRpbWVSZW1haW5pbmcoKSwgbWx0KTsKfQoKbG9uZyBSUENTU19HZXRNYXhMYXp5VGltZW91dCh2b2lkKQp7CiAgcmV0dXJuIG1heF9sYXp5X3RpbWVvdXQ7Cn0KCi8qIHdoZW4gZG8gd2UganVzdCBnaXZlIHVwIGFuZCBiYWlsPyAoVVRDKSAqLwpzdGF0aWMgU1lTVEVNVElNRSBsYXp5X3RpbWVvdXRfdGltZTsKCiNpZiBkZWZpbmVkKE5PTkFNRUxFU1NTVFJVQ1QpCiMgZGVmaW5lIEZJTEVUSU1FX1RPX1VMQVJHRUlOVChmaWxldGltZSwgdWxhcmdlKSBcCiAgICAoIHVsYXJnZS51Lkxvd1BhcnQgPSBmaWxldGltZS5kd0xvd0RhdGVUaW1lLCBcCiAgICAgIHVsYXJnZS51LkhpZ2hQYXJ0ID0gZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgKQojIGRlZmluZSBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxhcmdlLCBmaWxldGltZSkgXAogICAgKCBmaWxldGltZS5kd0xvd0RhdGVUaW1lID0gdWxhcmdlLnUuTG93UGFydCwgXAogICAgICBmaWxldGltZS5kd0hpZ2hEYXRlVGltZSA9IHVsYXJnZS51LkhpZ2hQYXJ0ICkKI2Vsc2UKIyBkZWZpbmUgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZpbGV0aW1lLCB1bGFyZ2UpIFwKICAgICggdWxhcmdlLkxvd1BhcnQgPSBmaWxldGltZS5kd0xvd0RhdGVUaW1lLCBcCiAgICAgIHVsYXJnZS5IaWdoUGFydCA9IGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lICkKIyBkZWZpbmUgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FKHVsYXJnZSwgZmlsZXRpbWUpIFwKICAgICggZmlsZXRpbWUuZHdMb3dEYXRlVGltZSA9IHVsYXJnZS5Mb3dQYXJ0LCBcCiAgICAgIGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lID0gdWxhcmdlLkhpZ2hQYXJ0ICkKI2VuZGlmIC8qIE5PTkFNRUxFU1NTVFJVQ1QgKi8KCiNkZWZpbmUgVEVOX01JTCAxMDAwMDAwMExMCgovKiByZXR1cm5zIHRpbWUgcmVtYWluaW5nIGluIHNlY29uZHMgKi8KbG9uZyBSUENTU19HZXRMYXp5VGltZVJlbWFpbmluZyh2b2lkKQp7CiAgU1lTVEVNVElNRSBzdF9qdXN0X25vdzsKICBGSUxFVElNRSBmdF9qbiwgZnRfbHR0OwogIFVMQVJHRV9JTlRFR0VSIHVsX2puLCB1bF9sdHQ7CgogIEdldFN5c3RlbVRpbWUoJnN0X2p1c3Rfbm93KTsKICBTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3RfanVzdF9ub3csICZmdF9qbik7CiAgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZ0X2puLCB1bF9qbik7CgogIFN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZsYXp5X3RpbWVvdXRfdGltZSwgJmZ0X2x0dCk7CiAgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZ0X2x0dCwgdWxfbHR0KTsKICAKICBpZiAodWxfam4uUXVhZFBhcnQgPiB1bF9sdHQuUXVhZFBhcnQpCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICByZXR1cm4gKHVsX2x0dC5RdWFkUGFydCAtIHVsX2puLlF1YWRQYXJ0KSAvIFRFTl9NSUw7Cn0KCnZvaWQgUlBDU1NfU2V0TGF6eVRpbWVSZW1haW5pbmcobG9uZyBzZWNvbmRzKQp7CiAgU1lTVEVNVElNRSBzdF9qdXN0X25vdzsKICBGSUxFVElNRSBmdF9qbiwgZnRfbHR0OwogIFVMQVJHRV9JTlRFR0VSIHVsX2puLCB1bF9sdHQ7CgogIFdJTkVfVFJBQ0UoIihzZWNvbmRzID09ICVsZClcbiIsIHNlY29uZHMpOwoKICBhc3NlcnQoc2Vjb25kcyA+PSAwKTsgICAgIC8qIG5lZ2F0aXZlcyBhcmUgbm90IGFsbG93ZWQgKi8KICAKICBHZXRTeXN0ZW1UaW1lKCZzdF9qdXN0X25vdyk7CiAgU3lzdGVtVGltZVRvRmlsZVRpbWUoJnN0X2p1c3Rfbm93LCAmZnRfam4pOwogIEZJTEVUSU1FX1RPX1VMQVJHRUlOVChmdF9qbiwgdWxfam4pOwoKICAvKiB3ZSB3YW50IHRvIGZpbmQgdGhlIHRpbWUgbHR0LCBzLnQuIGx0dCA9IGp1c3Rfbm93ICsgc2Vjb25kcyAqLwogIHVsX2x0dC5RdWFkUGFydCA9IHVsX2puLlF1YWRQYXJ0ICsgc2Vjb25kcyAqIFRFTl9NSUw7CgogIC8qIGdyZWF0LiBqdXN0IHJlbWVtYmVyIGl0ICovCiAgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FKHVsX2x0dCwgZnRfbHR0KTsKICBpZiAoISBGaWxlVGltZVRvU3lzdGVtVGltZSgmZnRfbHR0LCAmbGF6eV90aW1lb3V0X3RpbWUpKQogICAgYXNzZXJ0KEZBTFNFKTsKfQoKI3VuZGVmIEZJTEVUSU1FX1RPX1VMQVJHRUlOVAojdW5kZWYgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FCiN1bmRlZiBURU5fTUlMCgpzdGF0aWMgQk9PTCBSUENTU193b3JrKHZvaWQpCnsKICByZXR1cm4gUlBDU1NfTlBEb1dvcmsoKTsKfQoKc3RhdGljIEJPT0wgUlBDU1NfRW1wdHkodm9pZCkKewogIEJPT0wgcnNsdCA9IFRSVUU7CgogIHJzbHQgPSBSUENTU19FcG1hcEVtcHR5KCk7CgogIHJldHVybiByc2x0Owp9CgpCT09MIFJQQ1NTX1JlYWR5VG9EaWUodm9pZCkKewogIGxvbmcgbHRyID0gUlBDU1NfR2V0TGF6eVRpbWVSZW1haW5pbmcoKTsKICBMT05HIHN0YyA9IFJQQ1NTX1NydlRocmVhZENvdW50KCk7CiAgQk9PTCBlbXB0eSA9IFJQQ1NTX0VtcHR5KCk7CiAgcmV0dXJuICggZW1wdHkgJiYgKGx0ciA8PSAwKSAmJiAoc3RjID09IDApICk7Cn0KCnN0YXRpYyBCT09MIFJQQ1NTX0luaXRpYWxpemUodm9pZCkKewogIFdJTkVfVFJBQ0UoIlxuIik7CgogIG1hc3Rlcl9tdXRleCA9IENyZWF0ZU11dGV4QSggTlVMTCwgRkFMU0UsIFJQQ1NTX01BU1RFUl9NVVRFWF9OQU1FKTsKICBpZiAoIW1hc3Rlcl9tdXRleCkgewogICAgV0lORV9FUlIoIkZhaWxlZCB0byBjcmVhdGUgbWFzdGVyIG11dGV4XG4iKTsKICAgIHJldHVybiBGQUxTRTsKICB9CgogIGlmICghUlBDU1NfQmVjb21lUGlwZVNlcnZlcigpKSB7CiAgICBXSU5FX1dBUk4oIlNlcnZlciBhbHJlYWR5IHJ1bm5pbmc6IGV4aXRpbmcuXG4iKTsKCiAgICBDbG9zZUhhbmRsZShtYXN0ZXJfbXV0ZXgpOwogICAgbWFzdGVyX211dGV4ID0gTlVMTDsKCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKICByZXR1cm4gVFJVRTsKfQoKLyogcmV0dXJucyBmYWxzZSBpZiB3ZSBkaXNjb3ZlciBhdCB0aGUgbGFzdCBtb21lbnQgdGhhdCB3ZQogICBhcmVuJ3QgcmVhZHkgdG8gdGVybWluYXRlICovCnN0YXRpYyBCT09MIFJQQ1NTX1NodXRkb3duKHZvaWQpCnsKICBpZiAoIVJQQ1NTX1VuQmVjb21lUGlwZVNlcnZlcigpKQogICAgcmV0dXJuIEZBTFNFOwogICAKICBpZiAoIUNsb3NlSGFuZGxlKG1hc3Rlcl9tdXRleCkpCiAgICBXSU5FX1dBUk4oIkZhaWxlZCB0byByZWxlYXNlIG1hc3RlciBtdXRleFxuIik7CgogIG1hc3Rlcl9tdXRleCA9IE5VTEw7CgogIHJldHVybiBUUlVFOwp9CgpzdGF0aWMgdm9pZCBSUENTU19NYWluTG9vcCh2b2lkKQp7CiAgQk9PTCBkaWRfc29tZXRoaW5nX25ldzsKCiAgV0lORV9UUkFDRSgiXG4iKTsKCiAgZm9yICg7OykgewogICAgZGlkX3NvbWV0aGluZ19uZXcgPSBGQUxTRTsKCiAgICB3aGlsZSAoICghIGRpZF9zb21ldGhpbmdfbmV3KSAmJiAoISBSUENTU19SZWFkeVRvRGllKCkpICkKICAgICAgZGlkX3NvbWV0aGluZ19uZXcgPSAoUlBDU1Nfd29yaygpIHx8IGRpZF9zb21ldGhpbmdfbmV3KTsKCiAgICBpZiAoKCEgZGlkX3NvbWV0aGluZ19uZXcpICYmIFJQQ1NTX1JlYWR5VG9EaWUoKSkKICAgICAgYnJlYWs7IC8qIHRoYXQncyBpdCBmb3IgdXMgKi8KCiAgICBpZiAoZGlkX3NvbWV0aGluZ19uZXcpCiAgICAgIFJQQ1NTX1NldExhenlUaW1lUmVtYWluaW5nKG1heF9sYXp5X3RpbWVvdXQpOwogIH0KfQoKc3RhdGljIEJPT0wgUlBDU1NfUHJvY2Vzc0FyZ3MoIGludCBhcmdjLCBjaGFyICoqYXJndiApCnsKICBpbnQgaTsKICBjaGFyICpjLCpjMTsKCiAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogICAgYyA9IGFyZ3ZbaV07CiAgICB3aGlsZSAoKmMgPT0gJyAnKSBjKys7CiAgICBpZiAoKCpjICE9ICctJykgJiYgKCpjICE9ICcvJykpCiAgICAgIHJldHVybiBGQUxTRTsKICAgIGMrKzsKICAgIHN3aXRjaCAoKihjKyspKSB7CiAgICAgIGNhc2UgJ3QnOgogICAgICBjYXNlICdUJzoKICAgICAgICB3aGlsZSAoKmMgPT0gJyAnKSBjKys7CglpZiAoKmMgPT0gJ1wwJykgIHsKCSAgLyogbmV4dCBhcmcgKi8KCSAgaWYgKCsraSA+PSBhcmdjKQoJICAgIHJldHVybiBGQUxTRTsKCSAgYyA9IGFyZ3ZbaV07CgkgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKCSAgaWYgKGMgPT0gJ1wwJykKCSAgICByZXR1cm4gRkFMU0U7Cgl9IGVsc2UKCSAgcmV0dXJuIEZBTFNFOwogICAgICAgIG1heF9sYXp5X3RpbWVvdXQgPSBzdHJ0b2woYywgJmMxLCAwKTsKICAgICAgICBpZiAoYyA9PSBjMSkKCSAgcmV0dXJuIEZBTFNFOwoJYyA9IGMxOwoJaWYgKG1heF9sYXp5X3RpbWVvdXQgPD0gMCkKCSAgcmV0dXJuIEZBTFNFOwoJaWYgKG1heF9sYXp5X3RpbWVvdXQgPT0gTE9OR19NQVgpCgkgIHJldHVybiBGQUxTRTsKCVdJTkVfVFJBQ0UoInJlYWQgdGltZW91dCBhcmd1bWVudDogJWxkXG4iLCBtYXhfbGF6eV90aW1lb3V0KTsKCWJyZWFrOwogICAgICBkZWZhdWx0OiAKICAgICAgICByZXR1cm4gRkFMU0U7CglicmVhazsKICAgIH0KICAgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKICAgIGlmICgqYyAhPSAnXDAnKSByZXR1cm4gRkFMU0U7CiAgfQoKICByZXR1cm4gVFJVRTsKfQoKc3RhdGljIHZvaWQgUlBDU1NfVXNhZ2Uodm9pZCkKewogIHByaW50ZigiXG5XaW5lIFJQQ1NTXG4iKTsKICBwcmludGYoIlxuc3ludGF4OiBycGNzcyBbLXQgdGltZW91dF1cblxuIik7CiAgcHJpbnRmKCIgIC10OiBycGNzcyAob3IgdGhlIHJ1bm5pbmcgcnBjc3MgcHJvY2Vzcykgd2lsbFxuIik7CiAgcHJpbnRmKCIgICAgICBleGVjdXRlIHdpdGggYXQgbGVhc3QgdGhlIHNwZWNpZmllZCB0aW1lb3V0LlxuIik7CiAgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbiggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKewogIC8qIAogICAqIFdlIGFyZSBpbnZva2VkIGFzIGEgc3RhbmRhcmQgZXhlY3V0YWJsZTsgd2UgYWN0IGluIGEKICAgKiAibGF6eSIgbWFubmVyLiAgV2Ugb3BlbiB1cCBvdXIgcGlwZSwgYW5kIGhhbmcgYXJvdW5kIHVudGlsIHdlIGhhdmUKICAgKiBub3RoaW5nIGxlZnQgdG8gZG8sIGFuZCB0aGVuIHNpbGVudGx5IHRlcm1pbmF0ZS4gIFdoZW4gd2UncmUgbmVlZGVkCiAgICogYWdhaW4sIHJwY3J0NC5kbGwuc28gd2lsbCBpbnZva2UgdXMgYXV0b21hdGljYWxseS4KICAgKi8KICAgICAgIAogIGlmICghUlBDU1NfUHJvY2Vzc0FyZ3MoYXJnYywgYXJndikpIHsKICAgIFJQQ1NTX1VzYWdlKCk7CiAgICByZXR1cm4gMTsKICB9CiAgICAgIAogIC8qIHdlIHdhbnQgdG8gd2FpdCBmb3Igc29tZXRoaW5nIHRvIGhhcHBlbiwgYW5kIHRoZW4gCiAgICAgdGltZW91dCB3aGVuIG5vIGFjdGl2aXR5IG9jY3Vycy4gKi8KICBSUENTU19TZXRMYXp5VGltZVJlbWFpbmluZyhtYXhfbGF6eV90aW1lb3V0KTsKCiAgaWYgKFJQQ1NTX0luaXRpYWxpemUoKSkgewogICAgZG8KICAgICAgUlBDU1NfTWFpbkxvb3AoKTsKICAgIHdoaWxlICghUlBDU1NfU2h1dGRvd24oKSk7CiAgfQoKICByZXR1cm4gMDsKfQo=