LyoKICogQ29weXJpZ2h0IDIwMDEsIE92ZSBL5XZlbiwgVHJhbnNHYW1pbmcgVGVjaG5vbG9naWVzIEluYy4KICogQ29weXJpZ2h0IDIwMDIgR3JlZyBUdXJuZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCiAqCiAqIC0tLS0gcnBjc3NfbWFpbi5jOgogKiAgIEluaXRpYWxpemUgYW5kIHN0YXJ0IHNlcnZpbmcgcmVxdWVzdHMuICBCYWlsIGlmIHJwY3NzIGFscmVhZHkgaXMKICogICBydW5uaW5nLgogKgogKiAtLS0tIFJQQ1NTLkVYRToKICogICAKICogICBXaW5lIG5lZWRzIGEgc2VydmVyIHdob3NlIHJvbGUgaXMgc29tZXdoYXQgbGlrZSB0aGF0CiAqICAgb2YgcnBjc3MuZXhlIGluIHdpbmRvd3MuICBUaGlzIGlzIG5vdCBhIGNsb25lIG9mCiAqICAgd2luZG93cyBycGNzcyBhdCBhbGwuICBJdCBoYXMgYmVlbiBnaXZlbiB0aGUgc2FtZSBuYW1lLCBob3dldmVyLAogKiAgIHRvIHByb3ZpZGUgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgCiAqICAgaXQgbWF5IGJlY29tZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSAicmVhbCIgcnBjc3MuZXhlIG9uCiAqICAgV2luZG93cy4KICoKICogLS0tLSBLTk9XTiBCVUdTIC8gVE9ETzoKICoKICogICBvIFNlcnZpY2UgaG9va3MgYXJlIHVuaW1wbGVtZW50ZWQgKGlmIHlvdSBib3RoZXIgdG8gaW1wbGVtZW50CiAqICAgICB0aGVzZSwgYWxzbyBpbXBsZW1lbnQgbmV0LmV4ZSwgYXQgbGVhc3QgZm9yICJuZXQgc3RhcnQiIGFuZAogKiAgICAgIm5ldCBzdG9wIiAoc2hvdWxkIGJlIHByZXR0eSBlYXN5IEkgZ3Vlc3MsIGFzc3VtaW5nIHRoZSByZXN0CiAqICAgICBvZiB0aGUgc2VydmljZXMgQVBJIGluZnJhc3RydWN0dXJlIHdvcmtzLgogKiAKICogICBvIElzIHN1cHBvc2VkIHRvIHVzZSBSUEMsIG5vdCByYW5kb20ga2x1ZGdlcywgdG8gbWFwIGVuZHBvaW50cy4KICoKICogICBvIFByb2JhYmx5IG5hbWUgc2VydmljZXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGhlcmUgYXMgd2VsbC4KICoKICogICBvIFdpbmUncyBuYW1lZCBwaXBlcyAoaW4gZ2VuZXJhbCkgbWF5IG5vdCBpbnRlcm9wZXJhdGUgd2l0aCB0aG9zZSBvZiAKICogICAgIFdpbmRvd3MgeWV0ICg/KQogKgogKiAgIG8gVGhlcmUgaXMgYSBsb29taW5nIHByb2JsZW0gcmVnYXJkaW5nIGxpc3RlbmluZyBvbiBwcml2aWxlZ2VkCiAqICAgICBwb3J0cy4gIFdlIHdpbGwgbmVlZCB0byBiZSBhYmxlIHRvIGNvZXhpc3Qgd2l0aCBTQU1CQSwgYW5kIGJlIGFibGUKICogICAgIHRvIGZ1bmN0aW9uIHdpdGhvdXQgcnVubmluZyB3aW5lbGliIGNvZGUgYXMgcm9vdC4gIFRoaXMgbWF5CiAqICAgICB0YWtlIHNvbWUgZG9pbmcsIGluY2x1ZGluZyBzaWduaWZpY2FudCByZWNvbmNlcHR1YWxpemF0aW9uIG9mIHRoZQogKiAgICAgcm9sZSBvZiBycGNzcy5leGUgaW4gd2luZS4KICoKICogICBvIFdobyBrbm93cz8gIFdoYXRldmVyIHJwY3NzIGRvZXMsIHdlIG91Z2h0IHRvIGF0CiAqICAgICBsZWFzdCB0aGluayBhYm91dCBkb2luZy4uLiBidXQgd2hhdCAvZG9lcy8gaXQgZG8/CiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgoKI2RlZmluZSBOT05BTUVMRVNTVU5JT04KI2RlZmluZSBOT05BTUVMRVNTU1RSVUNUCiNpbmNsdWRlICJycGNzcy5oIgojaW5jbHVkZSAid2lubnQuaCIKCiNpbmNsdWRlICJ3aW5lL2RlYnVnLmgiCgpXSU5FX0RFRkFVTFRfREVCVUdfQ0hBTk5FTChvbGUpOwoKc3RhdGljIEhBTkRMRSBtYXN0ZXJfbXV0ZXg7CnN0YXRpYyBsb25nIG1heF9sYXp5X3RpbWVvdXQgPSBSUENTU19ERUZBVUxUX01BWF9MQVpZX1RJTUVPVVQ7CgpIQU5ETEUgUlBDU1NfR2V0TWFzdGVyTXV0ZXgodm9pZCkKewogIHJldHVybiBtYXN0ZXJfbXV0ZXg7Cn0KCnZvaWQgUlBDU1NfU2V0TWF4TGF6eVRpbWVvdXQobG9uZyBtbHQpCnsKICAvKiBGSVhNRTogdGhpcyBtYXggZW5zdXJlcyB0aGF0IG5vIGNhbGxlciB3aWxsIGRlY3JlYXNlIG91ciB3YWl0IHRpbWUsCiAgICAgYnV0IGNvdWxkIGhhdmUgb3RoZXIgYmFkIHJlc3VsdHMuICBmaXg6IFN0b3JlICJuZXh0X21heF9sYXp5X3RpbWVvdXQiIAogICAgIGFuZCBpbnN0YWxsIGl0IGFzIG5lY2Vzc2FyeSBuZXh0IHRpbWUgd2UgImRvIHdvcmsiPyAqLwogIG1heF9sYXp5X3RpbWVvdXQgPSBtYXgoUlBDU1NfR2V0TGF6eVRpbWVSZW1haW5pbmcoKSwgbWx0KTsKfQoKbG9uZyBSUENTU19HZXRNYXhMYXp5VGltZW91dCh2b2lkKQp7CiAgcmV0dXJuIG1heF9sYXp5X3RpbWVvdXQ7Cn0KCi8qIHdoZW4gZG8gd2UganVzdCBnaXZlIHVwIGFuZCBiYWlsPyAoVVRDKSAqLwpzdGF0aWMgU1lTVEVNVElNRSBsYXp5X3RpbWVvdXRfdGltZTsKCiNpZiBkZWZpbmVkKE5PTkFNRUxFU1NTVFJVQ1QpCiMgZGVmaW5lIEZJTEVUSU1FX1RPX1VMQVJHRUlOVChmaWxldGltZSwgdWxhcmdlKSBcCiAgICAoIHVsYXJnZS51Lkxvd1BhcnQgPSBmaWxldGltZS5kd0xvd0RhdGVUaW1lLCBcCiAgICAgIHVsYXJnZS51LkhpZ2hQYXJ0ID0gZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgKQojIGRlZmluZSBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxhcmdlLCBmaWxldGltZSkgXAogICAgKCBmaWxldGltZS5kd0xvd0RhdGVUaW1lID0gdWxhcmdlLnUuTG93UGFydCwgXAogICAgICBmaWxldGltZS5kd0hpZ2hEYXRlVGltZSA9IHVsYXJnZS51LkhpZ2hQYXJ0ICkKI2Vsc2UKIyBkZWZpbmUgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZpbGV0aW1lLCB1bGFyZ2UpIFwKICAgICggdWxhcmdlLkxvd1BhcnQgPSBmaWxldGltZS5kd0xvd0RhdGVUaW1lLCBcCiAgICAgIHVsYXJnZS5IaWdoUGFydCA9IGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lICkKIyBkZWZpbmUgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FKHVsYXJnZSwgZmlsZXRpbWUpIFwKICAgICggZmlsZXRpbWUuZHdMb3dEYXRlVGltZSA9IHVsYXJnZS5Mb3dQYXJ0LCBcCiAgICAgIGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lID0gdWxhcmdlLkhpZ2hQYXJ0ICkKI2VuZGlmIC8qIE5PTkFNRUxFU1NTVFJVQ1QgKi8KCiNkZWZpbmUgVEVOX01JTCAoKFVMT05HTE9ORykxMDAwMDAwMCkKCi8qIHJldHVybnMgdGltZSByZW1haW5pbmcgaW4gc2Vjb25kcyAqLwpsb25nIFJQQ1NTX0dldExhenlUaW1lUmVtYWluaW5nKHZvaWQpCnsKICBTWVNURU1USU1FIHN0X2p1c3Rfbm93OwogIEZJTEVUSU1FIGZ0X2puLCBmdF9sdHQ7CiAgVUxBUkdFX0lOVEVHRVIgdWxfam4sIHVsX2x0dDsKCiAgR2V0U3lzdGVtVGltZSgmc3RfanVzdF9ub3cpOwogIFN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZzdF9qdXN0X25vdywgJmZ0X2puKTsKICBGSUxFVElNRV9UT19VTEFSR0VJTlQoZnRfam4sIHVsX2puKTsKCiAgU3lzdGVtVGltZVRvRmlsZVRpbWUoJmxhenlfdGltZW91dF90aW1lLCAmZnRfbHR0KTsKICBGSUxFVElNRV9UT19VTEFSR0VJTlQoZnRfbHR0LCB1bF9sdHQpOwogIAogIGlmICh1bF9qbi5RdWFkUGFydCA+IHVsX2x0dC5RdWFkUGFydCkKICAgIHJldHVybiAwOwogIGVsc2UKICAgIHJldHVybiAodWxfbHR0LlF1YWRQYXJ0IC0gdWxfam4uUXVhZFBhcnQpIC8gVEVOX01JTDsKfQoKdm9pZCBSUENTU19TZXRMYXp5VGltZVJlbWFpbmluZyhsb25nIHNlY29uZHMpCnsKICBTWVNURU1USU1FIHN0X2p1c3Rfbm93OwogIEZJTEVUSU1FIGZ0X2puLCBmdF9sdHQ7CiAgVUxBUkdFX0lOVEVHRVIgdWxfam4sIHVsX2x0dDsKCiAgV0lORV9UUkFDRSgiKHNlY29uZHMgPT0gJWxkKVxuIiwgc2Vjb25kcyk7CgogIGFzc2VydChzZWNvbmRzID49IDApOyAgICAgLyogbmVnYXRpdmVzIGFyZSBub3QgYWxsb3dlZCAqLwogIAogIEdldFN5c3RlbVRpbWUoJnN0X2p1c3Rfbm93KTsKICBTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3RfanVzdF9ub3csICZmdF9qbik7CiAgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZ0X2puLCB1bF9qbik7CgogIC8qIHdlIHdhbnQgdG8gZmluZCB0aGUgdGltZSBsdHQsIHMudC4gbHR0ID0ganVzdF9ub3cgKyBzZWNvbmRzICovCiAgdWxfbHR0LlF1YWRQYXJ0ID0gdWxfam4uUXVhZFBhcnQgKyBzZWNvbmRzICogVEVOX01JTDsKCiAgLyogZ3JlYXQuIGp1c3QgcmVtZW1iZXIgaXQgKi8KICBVTEFSR0VJTlRfVE9fRklMRVRJTUUodWxfbHR0LCBmdF9sdHQpOwogIGlmICghIEZpbGVUaW1lVG9TeXN0ZW1UaW1lKCZmdF9sdHQsICZsYXp5X3RpbWVvdXRfdGltZSkpCiAgICBhc3NlcnQoRkFMU0UpOwp9CgojdW5kZWYgRklMRVRJTUVfVE9fVUxBUkdFSU5UCiN1bmRlZiBVTEFSR0VJTlRfVE9fRklMRVRJTUUKI3VuZGVmIFRFTl9NSUwKCnN0YXRpYyBCT09MIFJQQ1NTX3dvcmsodm9pZCkKewogIHJldHVybiBSUENTU19OUERvV29yaygpOwp9CgpzdGF0aWMgQk9PTCBSUENTU19FbXB0eSh2b2lkKQp7CiAgQk9PTCByc2x0ID0gVFJVRTsKCiAgcnNsdCA9IFJQQ1NTX0VwbWFwRW1wdHkoKTsKCiAgcmV0dXJuIHJzbHQ7Cn0KCkJPT0wgUlBDU1NfUmVhZHlUb0RpZSh2b2lkKQp7CiAgbG9uZyBsdHIgPSBSUENTU19HZXRMYXp5VGltZVJlbWFpbmluZygpOwogIExPTkcgc3RjID0gUlBDU1NfU3J2VGhyZWFkQ291bnQoKTsKICBCT09MIGVtcHR5ID0gUlBDU1NfRW1wdHkoKTsKICByZXR1cm4gKCBlbXB0eSAmJiAobHRyIDw9IDApICYmIChzdGMgPT0gMCkgKTsKfQoKc3RhdGljIEJPT0wgUlBDU1NfSW5pdGlhbGl6ZSh2b2lkKQp7CiAgV0lORV9UUkFDRSgiXG4iKTsKCiAgbWFzdGVyX211dGV4ID0gQ3JlYXRlTXV0ZXhBKCBOVUxMLCBGQUxTRSwgUlBDU1NfTUFTVEVSX01VVEVYX05BTUUpOwogIGlmICghbWFzdGVyX211dGV4KSB7CiAgICBXSU5FX0VSUigiRmFpbGVkIHRvIGNyZWF0ZSBtYXN0ZXIgbXV0ZXhcbiIpOwogICAgcmV0dXJuIEZBTFNFOwogIH0KCiAgaWYgKCFSUENTU19CZWNvbWVQaXBlU2VydmVyKCkpIHsKICAgIFdJTkVfV0FSTigiU2VydmVyIGFscmVhZHkgcnVubmluZzogZXhpdGluZy5cbiIpOwoKICAgIENsb3NlSGFuZGxlKG1hc3Rlcl9tdXRleCk7CiAgICBtYXN0ZXJfbXV0ZXggPSBOVUxMOwoKICAgIHJldHVybiBGQUxTRTsKICB9CgogIHJldHVybiBUUlVFOwp9CgovKiByZXR1cm5zIGZhbHNlIGlmIHdlIGRpc2NvdmVyIGF0IHRoZSBsYXN0IG1vbWVudCB0aGF0IHdlCiAgIGFyZW4ndCByZWFkeSB0byB0ZXJtaW5hdGUgKi8Kc3RhdGljIEJPT0wgUlBDU1NfU2h1dGRvd24odm9pZCkKewogIGlmICghUlBDU1NfVW5CZWNvbWVQaXBlU2VydmVyKCkpCiAgICByZXR1cm4gRkFMU0U7CiAgIAogIGlmICghQ2xvc2VIYW5kbGUobWFzdGVyX211dGV4KSkKICAgIFdJTkVfV0FSTigiRmFpbGVkIHRvIHJlbGVhc2UgbWFzdGVyIG11dGV4XG4iKTsKCiAgbWFzdGVyX211dGV4ID0gTlVMTDsKCiAgcmV0dXJuIFRSVUU7Cn0KCnN0YXRpYyB2b2lkIFJQQ1NTX01haW5Mb29wKHZvaWQpCnsKICBCT09MIGRpZF9zb21ldGhpbmdfbmV3OwoKICBXSU5FX1RSQUNFKCJcbiIpOwoKICBmb3IgKDs7KSB7CiAgICBkaWRfc29tZXRoaW5nX25ldyA9IEZBTFNFOwoKICAgIHdoaWxlICggKCEgZGlkX3NvbWV0aGluZ19uZXcpICYmICghIFJQQ1NTX1JlYWR5VG9EaWUoKSkgKQogICAgICBkaWRfc29tZXRoaW5nX25ldyA9IChSUENTU193b3JrKCkgfHwgZGlkX3NvbWV0aGluZ19uZXcpOwoKICAgIGlmICgoISBkaWRfc29tZXRoaW5nX25ldykgJiYgUlBDU1NfUmVhZHlUb0RpZSgpKQogICAgICBicmVhazsgLyogdGhhdCdzIGl0IGZvciB1cyAqLwoKICAgIGlmIChkaWRfc29tZXRoaW5nX25ldykKICAgICAgUlBDU1NfU2V0TGF6eVRpbWVSZW1haW5pbmcobWF4X2xhenlfdGltZW91dCk7CiAgfQp9CgpzdGF0aWMgQk9PTCBSUENTU19Qcm9jZXNzQXJncyggaW50IGFyZ2MsIGNoYXIgKiphcmd2ICkKewogIGludCBpOwogIGNoYXIgKmMsKmMxOwoKICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKSB7CiAgICBjID0gYXJndltpXTsKICAgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKICAgIGlmICgoKmMgIT0gJy0nKSAmJiAoKmMgIT0gJy8nKSkKICAgICAgcmV0dXJuIEZBTFNFOwogICAgYysrOwogICAgc3dpdGNoICgqKGMrKykpIHsKICAgICAgY2FzZSAndCc6CiAgICAgIGNhc2UgJ1QnOgogICAgICAgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKCWlmICgqYyA9PSAnXDAnKSAgewoJICAvKiBuZXh0IGFyZyAqLwoJICBpZiAoKytpID49IGFyZ2MpCgkgICAgcmV0dXJuIEZBTFNFOwoJICBjID0gYXJndltpXTsKCSAgd2hpbGUgKCpjID09ICcgJykgYysrOwoJICBpZiAoYyA9PSAnXDAnKQoJICAgIHJldHVybiBGQUxTRTsKCX0gZWxzZQoJICByZXR1cm4gRkFMU0U7CiAgICAgICAgbWF4X2xhenlfdGltZW91dCA9IHN0cnRvbChjLCAmYzEsIDApOwogICAgICAgIGlmIChjID09IGMxKQoJICByZXR1cm4gRkFMU0U7CgljID0gYzE7CglpZiAobWF4X2xhenlfdGltZW91dCA8PSAwKQoJICByZXR1cm4gRkFMU0U7CglpZiAobWF4X2xhenlfdGltZW91dCA9PSBMT05HX01BWCkKCSAgcmV0dXJuIEZBTFNFOwoJV0lORV9UUkFDRSgicmVhZCB0aW1lb3V0IGFyZ3VtZW50OiAlbGRcbiIsIG1heF9sYXp5X3RpbWVvdXQpOwoJYnJlYWs7CiAgICAgIGRlZmF1bHQ6IAogICAgICAgIHJldHVybiBGQUxTRTsKCWJyZWFrOwogICAgfQogICAgd2hpbGUgKCpjID09ICcgJykgYysrOwogICAgaWYgKCpjICE9ICdcMCcpIHJldHVybiBGQUxTRTsKICB9CgogIHJldHVybiBUUlVFOwp9CgpzdGF0aWMgdm9pZCBSUENTU19Vc2FnZSh2b2lkKQp7CiAgcHJpbnRmKCJcbldpbmUgUlBDU1NcbiIpOwogIHByaW50ZigiXG5zeW50YXg6IHJwY3NzIFstdCB0aW1lb3V0XVxuXG4iKTsKICBwcmludGYoIiAgLXQ6IHJwY3NzIChvciB0aGUgcnVubmluZyBycGNzcyBwcm9jZXNzKSB3aWxsXG4iKTsKICBwcmludGYoIiAgICAgIGV4ZWN1dGUgd2l0aCBhdCBsZWFzdCB0aGUgc3BlY2lmaWVkIHRpbWVvdXQuXG4iKTsKICBwcmludGYoIlxuIik7Cn0KCmludCBtYWluKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQp7CiAgLyogCiAgICogV2UgYXJlIGludm9rZWQgYXMgYSBzdGFuZGFyZCBleGVjdXRhYmxlOyB3ZSBhY3QgaW4gYQogICAqICJsYXp5IiBtYW5uZXIuICBXZSBvcGVuIHVwIG91ciBwaXBlLCBhbmQgaGFuZyBhcm91bmQgdW50aWwgd2UgaGF2ZQogICAqIG5vdGhpbmcgbGVmdCB0byBkbywgYW5kIHRoZW4gc2lsZW50bHkgdGVybWluYXRlLiAgV2hlbiB3ZSdyZSBuZWVkZWQKICAgKiBhZ2FpbiwgcnBjcnQ0LmRsbC5zbyB3aWxsIGludm9rZSB1cyBhdXRvbWF0aWNhbGx5LgogICAqLwogICAgICAgCiAgaWYgKCFSUENTU19Qcm9jZXNzQXJncyhhcmdjLCBhcmd2KSkgewogICAgUlBDU1NfVXNhZ2UoKTsKICAgIHJldHVybiAxOwogIH0KICAgICAgCiAgLyogd2Ugd2FudCB0byB3YWl0IGZvciBzb21ldGhpbmcgdG8gaGFwcGVuLCBhbmQgdGhlbiAKICAgICB0aW1lb3V0IHdoZW4gbm8gYWN0aXZpdHkgb2NjdXJzLiAqLwogIFJQQ1NTX1NldExhenlUaW1lUmVtYWluaW5nKG1heF9sYXp5X3RpbWVvdXQpOwoKICBpZiAoUlBDU1NfSW5pdGlhbGl6ZSgpKSB7CiAgICBkbwogICAgICBSUENTU19NYWluTG9vcCgpOwogICAgd2hpbGUgKCFSUENTU19TaHV0ZG93bigpKTsKICB9CgogIHJldHVybiAwOwp9Cg==