LyoKICogQ29weXJpZ2h0IDIwMDEsIE92ZSBL5XZlbiwgVHJhbnNHYW1pbmcgVGVjaG5vbG9naWVzIEluYy4KICogQ29weXJpZ2h0IDIwMDIgR3JlZyBUdXJuZXIKICoKICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgogKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqCiAqIC0tLS0gcnBjc3NfbWFpbi5jOgogKiAgIEluaXRpYWxpemUgYW5kIHN0YXJ0IHNlcnZpbmcgcmVxdWVzdHMuICBCYWlsIGlmIHJwY3NzIGFscmVhZHkgaXMKICogICBydW5uaW5nLgogKgogKiAtLS0tIFJQQ1NTLkVYRToKICogICAKICogICBXaW5lIG5lZWRzIGEgc2VydmVyIHdob3NlIHJvbGUgaXMgc29tZXdoYXQgbGlrZSB0aGF0CiAqICAgb2YgcnBjc3MuZXhlIGluIHdpbmRvd3MuICBUaGlzIGlzIG5vdCBhIGNsb25lIG9mCiAqICAgd2luZG93cyBycGNzcyBhdCBhbGwuICBJdCBoYXMgYmVlbiBnaXZlbiB0aGUgc2FtZSBuYW1lLCBob3dldmVyLAogKiAgIHRvIHByb3ZpZGUgZm9yIHRoZSBwb3NzaWJpbGl0eSB0aGF0IGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgCiAqICAgaXQgbWF5IGJlY29tZSBpbnRlcmZhY2UgY29tcGF0aWJsZSB3aXRoIHRoZSAicmVhbCIgcnBjc3MuZXhlIG9uCiAqICAgV2luZG93cy4KICoKICogLS0tLSBLTk9XTiBCVUdTIC8gVE9ETzoKICoKICogICBvIFNlcnZpY2UgaG9va3MgYXJlIHVuaW1wbGVtZW50ZWQgKGlmIHlvdSBib3RoZXIgdG8gaW1wbGVtZW50CiAqICAgICB0aGVzZSwgYWxzbyBpbXBsZW1lbnQgbmV0LmV4ZSwgYXQgbGVhc3QgZm9yICJuZXQgc3RhcnQiIGFuZAogKiAgICAgIm5ldCBzdG9wIiAoc2hvdWxkIGJlIHByZXR0eSBlYXN5IEkgZ3Vlc3MsIGFzc3VtaW5nIHRoZSByZXN0CiAqICAgICBvZiB0aGUgc2VydmljZXMgQVBJIGluZnJhc3RydWN0dXJlIHdvcmtzLgogKiAKICogICBvIElzIHN1cHBvc2VkIHRvIHVzZSBSUEMsIG5vdCByYW5kb20ga2x1ZGdlcywgdG8gbWFwIGVuZHBvaW50cy4KICoKICogICBvIFByb2JhYmx5IG5hbWUgc2VydmljZXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGhlcmUgYXMgd2VsbC4KICoKICogICBvIFdpbmUncyBuYW1lZCBwaXBlcyAoaW4gZ2VuZXJhbCkgbWF5IG5vdCBpbnRlcm9wZXJhdGUgd2l0aCB0aG9zZSBvZiAKICogICAgIFdpbmRvd3MgeWV0ICg/KQogKgogKiAgIG8gVGhlcmUgaXMgYSBsb29taW5nIHByb2JsZW0gcmVnYXJkaW5nIGxpc3RlbmluZyBvbiBwcml2aWxlZ2VkCiAqICAgICBwb3J0cy4gIFdlIHdpbGwgbmVlZCB0byBiZSBhYmxlIHRvIGNvZXhpc3Qgd2l0aCBTQU1CQSwgYW5kIGJlIGFibGUKICogICAgIHRvIGZ1bmN0aW9uIHdpdGhvdXQgcnVubmluZyB3aW5lbGliIGNvZGUgYXMgcm9vdC4gIFRoaXMgbWF5CiAqICAgICB0YWtlIHNvbWUgZG9pbmcsIGluY2x1ZGluZyBzaWduaWZpY2FudCByZWNvbmNlcHR1YWxpemF0aW9uIG9mIHRoZQogKiAgICAgcm9sZSBvZiBycGNzcy5leGUgaW4gd2luZS4KICoKICogICBvIFdobyBrbm93cz8gIFdoYXRldmVyIHJwY3NzIGRvZXMsIHdlIG91Z2h0IHRvIGF0CiAqICAgICBsZWFzdCB0aGluayBhYm91dCBkb2luZy4uLiBidXQgd2hhdCAvZG9lcy8gaXQgZG8/CiAqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgojaW5jbHVkZSA8YXNzZXJ0Lmg+CgojZGVmaW5lIE5PTkFNRUxFU1NVTklPTgojZGVmaW5lIE5PTkFNRUxFU1NTVFJVQ1QKI2luY2x1ZGUgInJwY3NzLmgiCiNpbmNsdWRlICJ3aW5udC5oIgoKI2luY2x1ZGUgIndpbmUvZGVidWcuaCIKCldJTkVfREVGQVVMVF9ERUJVR19DSEFOTkVMKG9sZSk7CgpzdGF0aWMgSEFORExFIG1hc3Rlcl9tdXRleDsKc3RhdGljIGxvbmcgbWF4X2xhenlfdGltZW91dCA9IFJQQ1NTX0RFRkFVTFRfTUFYX0xBWllfVElNRU9VVDsKCkhBTkRMRSBSUENTU19HZXRNYXN0ZXJNdXRleCh2b2lkKQp7CiAgcmV0dXJuIG1hc3Rlcl9tdXRleDsKfQoKdm9pZCBSUENTU19TZXRNYXhMYXp5VGltZW91dChsb25nIG1sdCkKewogIC8qIEZJWE1FOiB0aGlzIG1heCBlbnN1cmVzIHRoYXQgbm8gY2FsbGVyIHdpbGwgZGVjcmVhc2Ugb3VyIHdhaXQgdGltZSwKICAgICBidXQgY291bGQgaGF2ZSBvdGhlciBiYWQgcmVzdWx0cy4gIGZpeDogU3RvcmUgIm5leHRfbWF4X2xhenlfdGltZW91dCIgCiAgICAgYW5kIGluc3RhbGwgaXQgYXMgbmVjZXNzYXJ5IG5leHQgdGltZSB3ZSAiZG8gd29yayI/ICovCiAgbWF4X2xhenlfdGltZW91dCA9IG1heChSUENTU19HZXRMYXp5VGltZVJlbWFpbmluZygpLCBtbHQpOwp9Cgpsb25nIFJQQ1NTX0dldE1heExhenlUaW1lb3V0KHZvaWQpCnsKICByZXR1cm4gbWF4X2xhenlfdGltZW91dDsKfQoKLyogd2hlbiBkbyB3ZSBqdXN0IGdpdmUgdXAgYW5kIGJhaWw/IChVVEMpICovCnN0YXRpYyBTWVNURU1USU1FIGxhenlfdGltZW91dF90aW1lOwoKI2lmIGRlZmluZWQoTk9OQU1FTEVTU1NUUlVDVCkKICAjZGVmaW5lIEZJTEVUSU1FX1RPX1VMQVJHRUlOVChmaWxldGltZSwgdWxhcmdlKSBcCiAgICAoIHVsYXJnZS51Lkxvd1BhcnQgPSBmaWxldGltZS5kd0xvd0RhdGVUaW1lLCBcCiAgICAgIHVsYXJnZS51LkhpZ2hQYXJ0ID0gZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgKQogICNkZWZpbmUgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FKHVsYXJnZSwgZmlsZXRpbWUpIFwKICAgICggZmlsZXRpbWUuZHdMb3dEYXRlVGltZSA9IHVsYXJnZS51Lkxvd1BhcnQsIFwKICAgICAgZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgPSB1bGFyZ2UudS5IaWdoUGFydCApCiNlbHNlCiAgI2RlZmluZSBGSUxFVElNRV9UT19VTEFSR0VJTlQoZmlsZXRpbWUsIHVsYXJnZSkgXAogICAgKCB1bGFyZ2UuTG93UGFydCA9IGZpbGV0aW1lLmR3TG93RGF0ZVRpbWUsIFwKICAgICAgdWxhcmdlLkhpZ2hQYXJ0ID0gZmlsZXRpbWUuZHdIaWdoRGF0ZVRpbWUgKQogICNkZWZpbmUgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FKHVsYXJnZSwgZmlsZXRpbWUpIFwKICAgICggZmlsZXRpbWUuZHdMb3dEYXRlVGltZSA9IHVsYXJnZS5Mb3dQYXJ0LCBcCiAgICAgIGZpbGV0aW1lLmR3SGlnaERhdGVUaW1lID0gdWxhcmdlLkhpZ2hQYXJ0ICkKI2VuZGlmIC8qIE5PTkFNRUxFU1NTVFJVQ1QgKi8KCiNkZWZpbmUgVEVOX01JTCAxMDAwMDAwMExMCgovKiByZXR1cm5zIHRpbWUgcmVtYWluaW5nIGluIHNlY29uZHMgKi8KbG9uZyBSUENTU19HZXRMYXp5VGltZVJlbWFpbmluZyh2b2lkKQp7CiAgU1lTVEVNVElNRSBzdF9qdXN0X25vdzsKICBGSUxFVElNRSBmdF9qbiwgZnRfbHR0OwogIFVMQVJHRV9JTlRFR0VSIHVsX2puLCB1bF9sdHQ7CgogIEdldFN5c3RlbVRpbWUoJnN0X2p1c3Rfbm93KTsKICBTeXN0ZW1UaW1lVG9GaWxlVGltZSgmc3RfanVzdF9ub3csICZmdF9qbik7CiAgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZ0X2puLCB1bF9qbik7CgogIFN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZsYXp5X3RpbWVvdXRfdGltZSwgJmZ0X2x0dCk7CiAgRklMRVRJTUVfVE9fVUxBUkdFSU5UKGZ0X2x0dCwgdWxfbHR0KTsKICAKICBpZiAodWxfam4uUXVhZFBhcnQgPiB1bF9sdHQuUXVhZFBhcnQpCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICByZXR1cm4gKHVsX2x0dC5RdWFkUGFydCAtIHVsX2puLlF1YWRQYXJ0KSAvIFRFTl9NSUw7Cn0KCnZvaWQgUlBDU1NfU2V0TGF6eVRpbWVSZW1haW5pbmcobG9uZyBzZWNvbmRzKQp7CiAgU1lTVEVNVElNRSBzdF9qdXN0X25vdzsKICBGSUxFVElNRSBmdF9qbiwgZnRfbHR0OwogIFVMQVJHRV9JTlRFR0VSIHVsX2puLCB1bF9sdHQ7CgogIFdJTkVfVFJBQ0UoIihzZWNvbmRzID09ICVsZClcbiIsIHNlY29uZHMpOwoKICBhc3NlcnQoc2Vjb25kcyA+PSAwKTsgICAgIC8qIG5lZ2F0aXZlcyBhcmUgbm90IGFsbG93ZWQgKi8KICAKICBHZXRTeXN0ZW1UaW1lKCZzdF9qdXN0X25vdyk7CiAgU3lzdGVtVGltZVRvRmlsZVRpbWUoJnN0X2p1c3Rfbm93LCAmZnRfam4pOwogIEZJTEVUSU1FX1RPX1VMQVJHRUlOVChmdF9qbiwgdWxfam4pOwoKICAvKiB3ZSB3YW50IHRvIGZpbmQgdGhlIHRpbWUgbHR0LCBzLnQuIGx0dCA9IGp1c3Rfbm93ICsgc2Vjb25kcyAqLwogIHVsX2x0dC5RdWFkUGFydCA9IHVsX2puLlF1YWRQYXJ0ICsgc2Vjb25kcyAqIFRFTl9NSUw7CgogIC8qIGdyZWF0LiBqdXN0IHJlbWVtYmVyIGl0ICovCiAgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FKHVsX2x0dCwgZnRfbHR0KTsKICBpZiAoISBGaWxlVGltZVRvU3lzdGVtVGltZSgmZnRfbHR0LCAmbGF6eV90aW1lb3V0X3RpbWUpKQogICAgYXNzZXJ0KEZBTFNFKTsKfQoKI3VuZGVmIEZJTEVUSU1FX1RPX1VMQVJHRUlOVAojdW5kZWYgVUxBUkdFSU5UX1RPX0ZJTEVUSU1FCiN1bmRlZiBURU5fTUlMCgpCT09MIFJQQ1NTX3dvcmsodm9pZCkKewogIHJldHVybiBSUENTU19OUERvV29yaygpOwp9CgpCT09MIFJQQ1NTX0VtcHR5KHZvaWQpCnsKICBCT09MIHJzbHQgPSBUUlVFOwoKICByc2x0ID0gUlBDU1NfRXBtYXBFbXB0eSgpOwoKICByZXR1cm4gcnNsdDsKfQoKQk9PTCBSUENTU19SZWFkeVRvRGllKHZvaWQpCnsKICBsb25nIGx0ciA9IFJQQ1NTX0dldExhenlUaW1lUmVtYWluaW5nKCk7CiAgTE9ORyBzdGMgPSBSUENTU19TcnZUaHJlYWRDb3VudCgpOwogIEJPT0wgZW1wdHkgPSBSUENTU19FbXB0eSgpOwogIHJldHVybiAoIGVtcHR5ICYmIChsdHIgPD0gMCkgJiYgKHN0YyA9PSAwKSApOwp9CgpCT09MIFJQQ1NTX0luaXRpYWxpemUodm9pZCkKewogIFdJTkVfVFJBQ0UoIlxuIik7CgogIG1hc3Rlcl9tdXRleCA9IENyZWF0ZU11dGV4QSggTlVMTCwgRkFMU0UsIFJQQ1NTX01BU1RFUl9NVVRFWF9OQU1FKTsKICBpZiAoIW1hc3Rlcl9tdXRleCkgewogICAgV0lORV9FUlIoIkZhaWxlZCB0byBjcmVhdGUgbWFzdGVyIG11dGV4XG4iKTsKICAgIHJldHVybiBGQUxTRTsKICB9CgogIGlmICghUlBDU1NfQmVjb21lUGlwZVNlcnZlcigpKSB7CiAgICBXSU5FX1dBUk4oIlNlcnZlciBhbHJlYWR5IHJ1bm5pbmc6IGV4aXRpbmcuXG4iKTsKCiAgICBDbG9zZUhhbmRsZShtYXN0ZXJfbXV0ZXgpOwogICAgbWFzdGVyX211dGV4ID0gTlVMTDsKCiAgICByZXR1cm4gRkFMU0U7CiAgfQoKICByZXR1cm4gVFJVRTsKfQoKLyogcmV0dXJucyBmYWxzZSBpZiB3ZSBkaXNjb3ZlciBhdCB0aGUgbGFzdCBtb21lbnQgdGhhdCB3ZQogICBhcmVuJ3QgcmVhZHkgdG8gdGVybWluYXRlICovCkJPT0wgUlBDU1NfU2h1dGRvd24odm9pZCkKewogIGlmICghUlBDU1NfVW5CZWNvbWVQaXBlU2VydmVyKCkpCiAgICByZXR1cm4gRkFMU0U7CiAgIAogIGlmICghQ2xvc2VIYW5kbGUobWFzdGVyX211dGV4KSkKICAgIFdJTkVfV0FSTigiRmFpbGVkIHRvIHJlbGVhc2UgbWFzdGVyIG11dGV4XG4iKTsKCiAgbWFzdGVyX211dGV4ID0gTlVMTDsKCiAgcmV0dXJuIFRSVUU7Cn0KCnZvaWQgUlBDU1NfTWFpbkxvb3Aodm9pZCkKewogIEJPT0wgZGlkX3NvbWV0aGluZ19uZXc7CgogIFdJTkVfVFJBQ0UoIlxuIik7CgogIGZvciAoOzspIHsKICAgIGRpZF9zb21ldGhpbmdfbmV3ID0gRkFMU0U7CgogICAgd2hpbGUgKCAoISBkaWRfc29tZXRoaW5nX25ldykgJiYgKCEgUlBDU1NfUmVhZHlUb0RpZSgpKSApCiAgICAgIGRpZF9zb21ldGhpbmdfbmV3ID0gKFJQQ1NTX3dvcmsoKSB8fCBkaWRfc29tZXRoaW5nX25ldyk7CgogICAgaWYgKCghIGRpZF9zb21ldGhpbmdfbmV3KSAmJiBSUENTU19SZWFkeVRvRGllKCkpCiAgICAgIGJyZWFrOyAvKiB0aGF0J3MgaXQgZm9yIHVzICovCgogICAgaWYgKGRpZF9zb21ldGhpbmdfbmV3KQogICAgICBSUENTU19TZXRMYXp5VGltZVJlbWFpbmluZyhtYXhfbGF6eV90aW1lb3V0KTsKICB9Cn0KCkJPT0wgUlBDU1NfUHJvY2Vzc0FyZ3MoIGludCBhcmdjLCBjaGFyICoqYXJndiApCnsKICBpbnQgaTsKICBjaGFyICpjLCpjMTsKCiAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgewogICAgYyA9IGFyZ3ZbaV07CiAgICB3aGlsZSAoKmMgPT0gJyAnKSBjKys7CiAgICBpZiAoKCpjICE9ICctJykgJiYgKCpjICE9ICcvJykpCiAgICAgIHJldHVybiBGQUxTRTsKICAgIGMrKzsKICAgIHN3aXRjaCAoKihjKyspKSB7CiAgICAgIGNhc2UgJ3QnOgogICAgICBjYXNlICdUJzoKICAgICAgICB3aGlsZSAoKmMgPT0gJyAnKSBjKys7CglpZiAoKmMgPT0gJ1wwJykgIHsKCSAgLyogbmV4dCBhcmcgKi8KCSAgaWYgKCsraSA+PSBhcmdjKQoJICAgIHJldHVybiBGQUxTRTsKCSAgYyA9IGFyZ3ZbaV07CgkgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKCSAgaWYgKGMgPT0gJ1wwJykKCSAgICByZXR1cm4gRkFMU0U7Cgl9IGVsc2UKCSAgcmV0dXJuIEZBTFNFOwogICAgICAgIG1heF9sYXp5X3RpbWVvdXQgPSBzdHJ0b2woYywgJmMxLCAwKTsKICAgICAgICBpZiAoYyA9PSBjMSkKCSAgcmV0dXJuIEZBTFNFOwoJYyA9IGMxOwoJaWYgKG1heF9sYXp5X3RpbWVvdXQgPD0gMCkKCSAgcmV0dXJuIEZBTFNFOwoJaWYgKG1heF9sYXp5X3RpbWVvdXQgPT0gTE9OR19NQVgpCgkgIHJldHVybiBGQUxTRTsKCVdJTkVfVFJBQ0UoInJlYWQgdGltZW91dCBhcmd1bWVudDogJWxkXG4iLCBtYXhfbGF6eV90aW1lb3V0KTsKCWJyZWFrOwogICAgICBkZWZhdWx0OiAKICAgICAgICByZXR1cm4gRkFMU0U7CglicmVhazsKICAgIH0KICAgIHdoaWxlICgqYyA9PSAnICcpIGMrKzsKICAgIGlmICgqYyAhPSAnXDAnKSByZXR1cm4gRkFMU0U7CiAgfQoKICByZXR1cm4gVFJVRTsKfQoKdm9pZCBSUENTU19Vc2FnZSh2b2lkKQp7CiAgcHJpbnRmKCJcbldpbmUgUlBDU1NcbiIpOwogIHByaW50ZigiXG5zeW50YXg6IHJwY3NzIFstdCB0aW1lb3V0XVxuXG4iKTsKICBwcmludGYoIiAgLXQ6IHJwY3NzIChvciB0aGUgcnVubmluZyBycGNzcyBwcm9jZXNzKSB3aWxsXG4iKTsKICBwcmludGYoIiAgICAgIGV4ZWN1dGUgd2l0aCBhdCBsZWFzdCB0aGUgc3BlY2lmaWVkIHRpbWVvdXQuXG4iKTsKICBwcmludGYoIlxuIik7Cn0KCmludCBtYWluKCBpbnQgYXJnYywgY2hhciAqKmFyZ3YgKQp7CiAgLyogCiAgICogV2UgYXJlIGludm9rZWQgYXMgYSBzdGFuZGFyZCBleGVjdXRhYmxlOyB3ZSBhY3QgaW4gYQogICAqICJsYXp5IiBtYW5uZXIuICBXZSBvcGVuIHVwIG91ciBwaXBlLCBhbmQgaGFuZyBhcm91bmQgdW50aWwgd2UgaGF2ZQogICAqIG5vdGhpbmcgbGVmdCB0byBkbywgYW5kIHRoZW4gc2lsZW50bHkgdGVybWluYXRlLiAgV2hlbiB3ZSdyZSBuZWVkZWQKICAgKiBhZ2FpbiwgcnBjcnQ0LmRsbC5zbyB3aWxsIGludm9rZSB1cyBhdXRvbWF0aWNhbGx5LgogICAqLwogICAgICAgCiAgaWYgKCFSUENTU19Qcm9jZXNzQXJncyhhcmdjLCBhcmd2KSkgewogICAgUlBDU1NfVXNhZ2UoKTsKICAgIHJldHVybiAxOwogIH0KICAgICAgCiAgLyogd2Ugd2FudCB0byB3YWl0IGZvciBzb21ldGhpbmcgdG8gaGFwcGVuLCBhbmQgdGhlbiAKICAgICB0aW1lb3V0IHdoZW4gbm8gYWN0aXZpdHkgb2NjdXJzLiAqLwogIFJQQ1NTX1NldExhenlUaW1lUmVtYWluaW5nKG1heF9sYXp5X3RpbWVvdXQpOwoKICBpZiAoUlBDU1NfSW5pdGlhbGl6ZSgpKSB7CiAgICBkbwogICAgICBSUENTU19NYWluTG9vcCgpOwogICAgd2hpbGUgKCFSUENTU19TaHV0ZG93bigpKTsKICB9CgogIHJldHVybiAwOwp9Cg==