LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqDQoqICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEzIFpURSBDb3Jwb3JhdGlvbi4NCioNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiDEoyC/6SDD+yA6IGNjYXBwDQoqIM7EILz+IMP7IDogY2NfdGltZXIuYw0KKiDP4LnYzsS8/iA6DQoqIMq1z9a5psTcIDogY2NhcHC2qMqxxvezrMqxtKbA7Q0KKiDX9yAgICDV3yA6IA0KKiCw5iAgICCxviA6IFYxLjANCiogzeqzycjVxtogOiAyMDE2LTAyLTI1DQoqIMbky/zLtcP3IDoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiog0N64xLzHwrwgOg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqINDeuMSx4LrFIDogMDAwMQ0KKiDQ3iC4xCDIyyA6DQoqINDeuMTI1cbaIDoNCiog0N64xMTayN0gOg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKiAjaW5jbHVkZcf4DQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNpbmNsdWRlICJjY19tYWluLmgiDQojaW5jbHVkZSAiY2NfcHJvYy5oIg0KI2luY2x1ZGUgImNjX2NvbS5oIg0KI2luY2x1ZGUgImNjX3RpbWVyLmgiDQojaW5jbHVkZSAic3RyaW5nLmgiDQpWT0lEICAqekNjQXBwX0hvb2tPZmZUaW1lcihWT0lEICphcmcpDQp7ICAgICAgICANCiAgICBNU0dfQlVGIHRNc2dCdWYgPSB7MH07DQoNCiAgICB0TXNnQnVmLnNyY19pZCA9IE1PRFVMRV9JRF9DQUxMX0NUUkw7DQogICAgdE1zZ0J1Zi51c01zZ0NtZCA9IFpDQ19IT09LT0ZGVElNRVJfRTsNCiAgICB0TXNnQnVmLnVzRGF0YUxlbiA9IDA7DQogICAgekNjX1NlbmRNc2dUb1N1YigmdE1zZ0J1Zik7IC8qILeiuPjW98/fs8wgKi8gICAgIA0KICAgIHp0ZV9sb2dfYXBwZW5kKF9fRklMRV9fLCBfX0xJTkVfXywgInp0ZV9jY2FwcC5sb2ciLCIlcyAgIHpDY0FwcF9Ib29rT2ZmVGltZXIgXG4iLF9fRlVOQ1RJT05fXyk7DQogICAgcmV0dXJuIE5VTEw7DQp9DQoNClZPSUQgICp6Q2NBcHBfSG9va09mZl9JZGxlX1RpbWVyKFZPSUQgKmFyZykNCnsgICAgICAgIA0KICAgIE1TR19CVUYgdE1zZ0J1ZiA9IHswfTsNCg0KICAgIHRNc2dCdWYuc3JjX2lkID0gTU9EVUxFX0lEX0NBTExfQ1RSTDsNCiAgICB0TXNnQnVmLnVzTXNnQ21kID0gWkNDX0hPT0tPRkZfSURMRV9USU1FUl9FOw0KICAgIHRNc2dCdWYudXNEYXRhTGVuID0gMDsNCiAgICB6Q2NfU2VuZE1zZ1RvU3ViKCZ0TXNnQnVmKTsgLyogt6K4+Nb3z9+zzCAqLyAgICAgDQogICAgenRlX2xvZ19hcHBlbmQoX19GSUxFX18sIF9fTElORV9fLCAienRlX2NjYXBwLmxvZyIsIiVzICAgekNjQXBwX0hvb2tPZmZfSWRsZV9UaW1lciBcbiIsX19GVU5DVElPTl9fKTsNCiAgICByZXR1cm4gTlVMTDsNCn0NCg0KVk9JRCAgKnpDY0FwcF9EdG1mVGltZXIoVk9JRCAqYXJnKQ0KeyAgICAgICAgIA0KICAgIE1TR19CVUYgdE1zZ0J1ZiA9IHswfTsNCg0KICAgIHRNc2dCdWYuc3JjX2lkID0gTU9EVUxFX0lEX0NBTExfQ1RSTDsNCiAgICB0TXNnQnVmLnVzTXNnQ21kID0gWkNDX0RUTUZUSU1FUl9FOw0KICAgIHRNc2dCdWYudXNEYXRhTGVuID0gMDsNCiAgICB6Q2NfU2VuZE1zZ1RvU3ViKCZ0TXNnQnVmKTsgLyogt6K4+Nb3z9+zzCAqLyAgICAgDQogICAgenRlX2xvZ19hcHBlbmQoX19GSUxFX18sIF9fTElORV9fLCAienRlX2NjYXBwLmxvZyIsIiVzICAgekNjQXBwX0R0bWZUaW1lciBcbiIsX19GVU5DVElPTl9fKTsNCg0KICAgIHJldHVybiBOVUxMOw0KfQ0KVk9JRCAgKnpDY0FwcF9CdXN5VG9uZVRpbWVyKFZPSUQgKmFyZykNCnsgICAgICAgICAgDQogICAgTVNHX0JVRiB0TXNnQnVmID0gezB9Ow0KDQogICAgdE1zZ0J1Zi5zcmNfaWQgPSBNT0RVTEVfSURfQ0FMTF9DVFJMOw0KICAgIHRNc2dCdWYudXNNc2dDbWQgPSBaQ0NfQlVTWVRPTkVUSU1FUl9FOw0KICAgIHRNc2dCdWYudXNEYXRhTGVuID0gMDsNCiAgICB6Q2NfU2VuZE1zZ1RvU3ViKCZ0TXNnQnVmKTsgLyogt6K4+Nb3z9+zzCAqLyAgICAgDQogICAgenRlX2xvZ19hcHBlbmQoX19GSUxFX18sIF9fTElORV9fLCAienRlX2NjYXBwLmxvZyIsIiVzICAgekNjQXBwX0J1c3lUb25lVGltZXIgXG4iLF9fRlVOQ1RJT05fXyk7DQogICAgcmV0dXJuIE5VTEw7DQp9DQpWT0lEICAqekNjQXBwX1RreVRvbmVUaW1lcihWT0lEICphcmcpDQp7ICAgICAgDQogICAgTVNHX0JVRiB0TXNnQnVmID0gezB9Ow0KDQogICAgdE1zZ0J1Zi5zcmNfaWQgPSBNT0RVTEVfSURfQ0FMTF9DVFJMOw0KICAgIHRNc2dCdWYudXNNc2dDbWQgPSBaQ0NfVEtZVElNRVJfRTsNCiAgICB0TXNnQnVmLnVzRGF0YUxlbiA9IDA7DQogICAgekNjX1NlbmRNc2dUb1N1YigmdE1zZ0J1Zik7IC8qILeiuPjW98/fs8wgKi8gICAgIA0KICAgIHp0ZV9sb2dfYXBwZW5kKF9fRklMRV9fLCBfX0xJTkVfXywgInp0ZV9jY2FwcC5sb2ciLCIlcyAgIHpDY0FwcF9Ua3lUb25lVGltZXIgXG4iLF9fRlVOQ1RJT05fXyk7DQogICAgcmV0dXJuIE5VTEw7DQp9DQpWT0lEICAqekNjQXBwX1NzRGlhbFRvbmVUaW1lcihWT0lEICphcmcpDQp7ICAgICAgICANCiAgICBNU0dfQlVGIHRNc2dCdWYgPSB7MH07DQoNCiAgICB0TXNnQnVmLnNyY19pZCA9IE1PRFVMRV9JRF9DQUxMX0NUUkw7DQogICAgdE1zZ0J1Zi51c01zZ0NtZCA9IFpDQ19TU0RJQUxUT05FVElNRVJfRTsNCiAgICB0TXNnQnVmLnVzRGF0YUxlbiA9IDA7DQogICAgekNjX1NlbmRNc2dUb1N1YigmdE1zZ0J1Zik7IC8qILeiuPjW98/fs8wgKi8gICAgIA0KICAgIHp0ZV9sb2dfYXBwZW5kKF9fRklMRV9fLCBfX0xJTkVfXywgInp0ZV9jY2FwcC5sb2ciLCIlcyAgIFNzRGlhbFRvbmVUaW1lciBcbiIsX19GVU5DVElPTl9fKTsNCiAgICByZXR1cm4gTlVMTDsNCn0NCg0K