LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIChjKSBDb3B5cmlnaHQgMjAxMC0yMDEzIE1pY3Jvc2VtaSBTb0MgUHJvZHVjdHMgR3JvdXAuICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICogDQogKiBTbWFydEZ1c2lvbjIgbWljcm9jb250cm9sbGVyIHN1YnN5c3RlbSAoTVNTKSB0aW1lciBkcml2ZXIgQVBJLg0KICoNCiAqIFNWTiAkUmV2aXNpb246IDUxMTEgJA0KICogU1ZOICREYXRlOiAyMDEzLTAyLTE4IDE3OjAzOjA5ICswMDAwIChNb24sIDE4IEZlYiAyMDEzKSAkDQogKi8NCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovLyoqDQogIEBtYWlucGFnZSBTbWFydEZ1c2lvbjIgTVNTIFRpbWVyIEJhcmUgTWV0YWwgRHJpdmVyLg0KDQogIEBzZWN0aW9uIGludHJvX3NlYyBJbnRyb2R1Y3Rpb24NCiAgVGhlIFNtYXJ0RnVzaW9uMiBNaWNyb2NvbnRyb2xsZXIgU3Vic3lzdGVtIChNU1MpIGluY2x1ZGVzIGEgdGltZXIgaGFyZHdhcmUNCiAgYmxvY2sgd2hpY2ggY2FuIGJlIHVzZWQgYXMgdHdvIGluZGVwZW5kZW50IDMyLWJpdHMgdGltZXJzIG9yIGFzIGEgc2luZ2xlDQogIDY0LWJpdHMgdGltZXIgaW4gcGVyaW9kaWMgb3Igb25lLXNob3QgbW9kZS4gDQoNCiAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB0aGUgTVNTIHRpbWVyIGFzIHBhcnQNCiAgb2YgYSBiYXJlIG1ldGFsIHN5c3RlbSB3aGVyZSBubyBvcGVyYXRpbmcgc3lzdGVtIGlzIGF2YWlsYWJsZS4gVGhlc2UgZHJpdmVycw0KICBjYW4gYmUgYWRhcHRlZCBmb3IgdXNlIGFzIHBhcnQgb2YgYW4gb3BlcmF0aW5nIHN5c3RlbSBidXQgdGhlIGltcGxlbWVudGF0aW9uDQogIG9mIHRoZSBhZGFwdGF0aW9uIGxheWVyIGJldHdlZW4gdGhpcyBkcml2ZXIgYW5kIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgZHJpdmVyDQogIG1vZGVsIGlzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgZHJpdmVyLg0KICANCiAgQHNlY3Rpb24gdGhlb3J5X29wIFRoZW9yeSBvZiBPcGVyYXRpb24NCiAgVGhlIE1TUyBUaW1lciBkcml2ZXIgdXNlcyB0aGUgU21hcnRGdXNpb24yICJDb3J0ZXggTWljcm9jb250cm9sZXIgU29mdHdhcmUNCiAgSW50ZXJmYWNlIFN0YW5kYXJkIC0gUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIiIChDTVNJUy1QQUwpIHRvIGFjY2VzcyBoYWR3YXJlDQogIHJlZ2lzdGVycy4gWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIFNtYXJ0RnVzaW9uMiBDTVNJUy1QQUwgaXMgZWl0aGVyIGluY2x1ZGVkDQogIGluIHRoZSBzb2Z0d2FyZSB0b29sY2hhaW4gdXNlZCB0byBidWlsZCB5b3VyIHByb2plY3Qgb3IgaXMgaW5jbHVkZWQgaW4geW91cg0KICBwcm9qZWN0LiBUaGUgbW9zdCB1cC10by1kYXRlIFNtYXJ0RnVzaW9uMiBDTVNJUy1QQUwgZmlsZXMgY2FuIGJlIG9idGFpbmVkIHVzaW5nDQogIHRoZSBBY3RlbCBGaXJtd2FyZSBDYXRhbG9nLg0KICBUaGUgU21hcnRGdXNpb24yIE1TUyBUaW1lciBjYW4gYmUgdXNlZCBpbiBvbmUgb2YgdHdvIG11dHVhbGx5IGV4Y2x1c2l2ZSBtb2RlczsNCiAgZWl0aGVyIGFzIGEgc2luZ2xlIDY0LWJpdHMgdGltZXIgb3IgYXMgdHdvIGluZGVwZW5kZW50IDMyLWJpdHMgdGltZXJzLiBUaGUgTVNTDQogIFRpbWVyIGNhbiBiZSB1c2VkIGluIGVpdGhlciBwZXJpb2RpYyBtb2RlIG9yIG9uZS1zaG90IG1vZGUuIEEgdGltZXIgY29uZmlndXJlZA0KICBmb3IgcGVyaW9kaWMgbW9kZSBvcGVyYXRpb25zIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGFuZCByZWxvYWQgaXRzDQogIGRvd24tY291bnRlciB3aGVuIGl0IHJlYWNoZXMgMC4gVGhlIHRpbWVyIHdpbGwgdGhlbiBjb250aW51ZSBkZWNyZW1lbnRpbmcgZnJvbQ0KICBpdHMgcmVsb2FkIHZhbHVlIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGludGVycnVwdCB0byBiZSBjbGVhcmVkLiBBIHRpbWVyDQogIGNvbmZpZ3VyZWQgZm9yIG9uZS1zaG90IG1vZGUgd2lsbCBvbmx5IGdlbmVyYXRlIGFuIGludGVycnVwdCBvbmNlIHdoZW4gaXRzDQogIGRvd24tY291bnRlciByZWFjaGVzIDAuIEl0IG11c3QgYmUgZXhwbGl0Y2l0bHkgcmVsb2FkZWQgdG8gc3RhcnQgZGVjcmVtZW50aW5nDQogIGFnYWluLg0KICANCiAgVGhlIE1TUyBUaW1lciBkcml2ZXIgZnVuY3Rpb25zIGFyZSBncm91cGVkIGludG8gdGhlIGZvbGxvd2luZyBjYXRlZ29yaWVzOg0KICAgIC0gSW5pdGlhbGl6YXRpb24gYW5kIENvbmZpZ3VyYXRpb24NCiAgICAtIFRpbWVyIGNvbnRyb2wNCiAgICAtIEludGVycnVwdCBjb250cm9sDQogIA0KICBUaGUgTVNTIFRpbWVyIGRyaXZlciBwcm92aWRlcyB0aHJlZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnM6DQogICAgLSBNU1NfVElNMV9pbml0KCkNCiAgICAtIE1TU19USU0yX2luaXQoKQ0KICAgIC0gTVNTX1RJTTY0X2luaXQoKQ0KICBUaGUgTVNTIFRpbWVyIGRyaXZlciBpcyBpbml0aWFsaXplZCB0aHJvdWdoIGNhbGxzIHRvIHRoZXNlIGZ1bmN0aW9ucyBhbmQgYXQNCiAgbGVhc3Qgb25lIG9mIHRoZW0gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciBNU1MgVGltZXIgZHJpdmVyIGZ1bmN0aW9ucw0KICBjYW4gYmUgY2FsbGVkLg0KICBZb3Ugc2hvdWxkIG9ubHkgdXNlIHRoZSBNU1NfVElNMV9pbml0KCkgYW5kIE1TU19USU0yX2luaXQoKSBmdW5jdGlvbnMgaWYgeW91DQogIGludGVuZCB0byB1c2UgdGhlIHRpbWVyIGluIDMyLWJpdHMgbW9kZS4gVXNlIHRoZSBNU1NfVElNNjRfaW5pdCgpIGZ1bmN0aW9uIGlzDQogIHlvdSBpbnRlbmQgdG8gdXNlIHRoZSBNU1MgVGltZXIgYXMgYSBzaW5nbGUgNjQtYml0cyB0aW1lci4gVGhlIGluaXRpYWxpemF0aW9uDQogIGZ1bmN0aW9ucyB0YWtlIGEgc2luZ2xlIHBhcmFtZXRlciBzcGVjaWZ5aW5nIHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgdGltZXINCiAgYmVpbmcgaW5pdGlhbGl6ZWQuDQogIA0KICBPbmNlIGluaXRpYWxpemVkIGEgdGltZXIgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQogICAgLSBNU1NfVElNMV9sb2FkX2ltbWVkaWF0ZSgpDQogICAgLSBNU1NfVElNMV9sb2FkX2JhY2tncm91bmQoKQ0KICAgIC0gTVNTX1RJTTFfZ2V0X2N1cnJlbnRfdmFsdWUoKQ0KICAgIC0gTVNTX1RJTTFfc3RhcnQoKQ0KICAgIC0gTVNTX1RJTTFfc3RvcCgpDQogICAgLSBNU1NfVElNMl9sb2FkX2ltbWVkaWF0ZSgpDQogICAgLSBNU1NfVElNMl9sb2FkX2JhY2tncm91bmQoKQ0KICAgIC0gTVNTX1RJTTJfZ2V0X2N1cnJlbnRfdmFsdWUoKQ0KICAgIC0gTVNTX1RJTTJfc3RhcnQoKQ0KICAgIC0gTVNTX1RJTTJfc3RvcCgpDQogICAgLSBNU1NfVElNNjRfbG9hZF9pbW1lZGlhdGUoKQ0KICAgIC0gTVNTX1RJTTY0X2xvYWRfYmFja2dyb3VuZCgpDQogICAgLSBNU1NfVElNNjRfZ2V0X2N1cnJlbnRfdmFsdWUoKQ0KICAgIC0gTVNTX1RJTTY0X3N0YXJ0KCkNCiAgICAtIE1TU19USU02NF9zdG9wKCkNCiAgDQogIFRpbWVyIGludGVycnVwdHMgYXJlIGNvbnRyb2xsZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6DQogICAgLSBNU1NfVElNMV9lbmFibGVfaXJxKCkNCiAgICAtIE1TU19USU0xX2Rpc2FibGVfaXJxKCkNCiAgICAtIE1TU19USU0xX2NsZWFyX2lycSgpDQogICAgLSBNU1NfVElNMl9lbmFibGVfaXJxKCkNCiAgICAtIE1TU19USU0yX2Rpc2FibGVfaXJxKCkNCiAgICAtIE1TU19USU0yX2NsZWFyX2lycSgpDQogICAgLSBNU1NfVElNNjRfZW5hYmxlX2lycSgpDQogICAgLSBNU1NfVElNNjRfZGlzYWJsZV9pcnEoKQ0KICAgIC0gTVNTX1RJTTY0X2NsZWFyX2lycSgpDQogIA0KICBUaGUgZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgdGhlIHRpbWVyIGludGVycnVwdCBoYW5kbGVycyBhcmU6DQogICAgLSB2b2lkIFRpbWVyMV9JUlFIYW5kbGVyKCB2b2lkICkNCiAgICAtIHZvaWQgVGltZXIyX0lSUUhhbmRsZXIoIHZvaWQgKQ0KICBFbnRyaWVzIGZvciB0aGVzZSBpbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIHByb3ZpZGVkIGluIHRoZSBTbWFydEZ1c2lvbjIgQ01TSVMtUEFMDQogIHZlY3RvciB0YWJsZS4gVG8gYWRkIGEgVGltZXIgMSBpbnRlcnJ1cHQgaGFuZGxlciwgeW91IG11c3QgaW1wbGVtZW50IGENCiAgVGltZXIxX0lSUUhhbmRsZXIoICkgZnVuY3Rpb24gYXMgcGFydCBvZiB5b3VyIGFwcGxpY2F0aW9uIGNvZGUuIFRvIGFkZCBhDQogIFRpbWVyIDIgaW50ZXJydXB0IGhhbmRsZXIsIHlvdSBtdXN0IGltcGxlbWVudCBhIFRpbWVyMl9JUlFIYW5kbGVyKCApIGZ1bmN0aW9uDQogIGFzIHBhcnQgb2YgeW91ciBhcHBsaWNhdGlvbiBjb2RlLiBXaGVuIHVzaW5nIHRoZSBNU1MgVGltZXIgYXMgYSA2NC1iaXQgdGltZXIsDQogIHlvdSBtdXN0IGltcGxlbWVudCBhIFRpbWVyMV9JUlFIYW5kbGVyKCApIGZ1bmN0aW9uIGFzIHBhcnQgb2YgeW91cg0KICBhcHBsaWNhdGlvbiBjb2RlLiBUaGUgVGltZXIgMiBpbnRlcnJ1cHQgaXMgbm90IHVzZWQgd2hlbiB0aGUgTVNTIFRpbWVyIGlzDQogIGNvbmZpZ3VyZWQgYXMgYSA2NC1iaXQgdGltZXIuDQogIA0KICovLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8NCiNpZm5kZWYgTVNTX1RJTUVSX0hfDQojZGVmaW5lIE1TU19USU1FUl9IXw0KDQoNCiNpbmNsdWRlICIuLi8uLi9DTVNJUy9tMnN4eHguaCINCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiIHsNCiNlbmRpZiANCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAqIFRpbWVyIG1vZGUgc2VsZWN0aW9uLiBUaGlzIGVudW1lcmF0aW9uIGlzIHVzZWQgdG8gc2VsZWN0IGJldHdlZW4gdGhlIHR3bw0KICogcG9zc2libGUgdGltZXIgbW9kZXMgb2Ygb3BlcmF0aW9uOiBwZXJpb2RpYyBhbmQgb25lLXNob3QgbW9kZS4gSXQgaXMgdXNlZCBhcw0KICogYW4gYXJndW1lbnQgdG8gdGhlIE1TU19USU0xX2luaXQoKSwgTVNTX1RJTTJfaW5pdCgpIGFuZCBNU1NfVElNNjRfaW5pdCgpDQogKiBmdW5jdGlvbnMuDQogKiBNU1NfVElNRVJfUEVSSU9ESUNfTU9ERToNCiAqICBJbiBwZXJpb2RpYyBtb2RlIHRoZSB0aW1lciBnZW5lcmF0ZXMgaW50ZXJydXB0cyBhdCBjb25zdGFudCBpbnRlcnZhbHMuIE9uIA0KICogIHJlYWNoaW5nIHplcm8sIHRoZSB0aW1lcidzIGNvdW50ZXIgaXMgcmVsb2FkZWQgd2l0aCBhIHZhbHVlIGhlbGQgaW4gYQ0KICogIHJlZ2lzdGVyIGFuZCBiZWdpbnMgY291bnRpbmcgZG93biBhZ2Fpbi4NCiAqIE1TU19USU1FUl9PTkVfU0hPVF9NT0RFOg0KICogIFRoZSB0aW1lciBnZW5lcmF0ZXMgYSBzaW5nbGUgaW50ZXJydXB0IGluIHRoaXMgbW9kZS4gT24gcmVhY2hpbmcgemVybywgdGhlDQogKiAgdGltZXIncyBjb3VudGVyIGhhbHRzIHVudGlsIHJlcHJvZ3JhbW1lZCBieSB0aGUgdXNlci4NCiAqLw0KdHlwZWRlZiBlbnVtIF9fbXNzX3RpbWVyX21vZGVfdA0Kew0KICAgIE1TU19USU1FUl9QRVJJT0RJQ19NT0RFID0gMCwNCiAgICBNU1NfVElNRVJfT05FX1NIT1RfTU9ERSA9IDENCn0gbXNzX3RpbWVyX21vZGVfdDsNCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0xX2luaXQoKSBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgU21hcnRGdXNpb24yIE1TUyBUaW1lciBibG9jayBmb3INCiAgdXNlIGFzIGEgMzItYml0IHRpbWVyIGFuZCBzZWxlY3RzIHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgVGltZXIgMS4gVGhpcyBmdW5jdGlvbg0KICB0YWtlcyB0aGUgTVNTIFRpbWVyIGJsb2NrIG91dCBvZiByZXNldCBpbiBjYXNlIHRoaXMgaGFzbpJ0IGJlZW4gZG9uZSBhbHJlYWR5LA0KICBzdG9wcyBUaW1lciAxLCBkaXNhYmxlcyBpdHMgaW50ZXJydXB0IGFuZCBzZXRzIHRoZSBUaW1lciAxIG9wZXJhdGluZyBtb2RlLg0KICBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBTbWFydEZ1c2lvbjIgTVNTIFRpbWVyIGJsb2NrIGNhbm5vdCBiZSB1c2VkIGJvdGggYXMgYQ0KICA2NC1iaXQgYW5kIDMyLWJpdCB0aW1lci4gQ2FsbGluZyBNU1NfVElNMV9pbml0KCkgd2lsbCBvdmVyd3JpdGUgYW55IHByZXZpb3VzDQogIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1TUyBUaW1lciBhcyBhIDY0LWJpdCB0aW1lci4NCg0KIA0KICBAcGFyYW0gbW9kZQ0KICAgIFRoZSBtb2RlIHBhcmFtZXRlciBzcGVjaWZpZXMgd2hldGhlciB0aGUgdGltZXIgd2lsbCBvcGVyYXRlIGluIHBlcmlvZGljIG9yDQogICAgb25lLXNob3QgbW9kZS4gQWxsb3dlZCB2YWx1ZXMgZm9yIHRoaXMgcGFyYW1ldGVyIGFyZToNCiAgICAgICAgLSBNU1NfVElNRVJfUEVSSU9ESUNfTU9ERQ0KICAgICAgICAtIE1TU19USU1FUl9PTkVfU0hPVF9NT0RFDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0xX2luaXQobXNzX3RpbWVyX21vZGVfdCBtb2RlKQ0Kew0KICAgIE5WSUNfRGlzYWJsZUlSUShUaW1lcjFfSVJRbik7ICAgICAgICAgICAgIC8qIERpc2FibGUgdGltZXIgMSBpcnEgaW4gdGhlIENvcnRleC1NMyBOVklDICovICANCiAgICANCiAgICBTWVNSRUctPlNPRlRfUlNUX0NSICY9IH5TWVNSRUdfVElNRVJfU09GVFJFU0VUX01BU0s7IC8qIFRha2UgdGltZXIgYmxvY2sgb3V0IG9mIHJlc2V0ICovDQogICAgDQogICAgVElNRVItPlRJTTY0X01PREUgPSAwdTsgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gMzIgYml0cyBtb2RlICovDQogICAgDQogICAgVElNRVJfQklUQkFORC0+VElNMUVOQUJMRSA9IDB1OyAgICAgICAgICAgICAvKiBkaXNhYmxlIHRpbWVyICovDQogICAgVElNRVJfQklUQkFORC0+VElNMUlOVEVOID0gMHU7ICAgICAgICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdCAqLw0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTFNT0RFID0gKHVpbnQzMl90KW1vZGU7ICAgLyogc2V0IG1vZGUgKGNvbnRpbnVvdXMvb25lLXNob3QpICovDQogICAgDQogICAgVElNRVItPlRJTTFfUklTID0gMXU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhciB0aW1lciAxIGludGVycnVwdCAqLw0KICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFRpbWVyMV9JUlFuKTsgICAgICAgIC8qIGNsZWFyIHRpbWVyIDEgaW50ZXJydXB0IHdpdGhpbiBOVklDICovDQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMV9zdGFydCgpIGZ1bmN0aW9uIGVuYWJsZXMgVGltZXIgMSBhbmQgc3RhcnRzIGl0cyBkb3duLWNvdW50ZXINCiAgZGVjcmVtZW50aW5nIGZyb20gdGhlIGxvYWRfdmFsdWUgc3BlY2lmaWVkIGluIHByZXZpb3VzIGNhbGxzIHRvIHRoZQ0KICBNU1NfVElNMV9sb2FkX2ltbWVkaWF0ZSgpIG9yIE1TU19USU0xX2xvYWRfYmFja2dyb3VuZCgpIGZ1bmN0aW9ucy4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTFfc3RhcnQodm9pZCkNCnsNCiAgICBUSU1FUl9CSVRCQU5ELT5USU0xRU5BQkxFID0gMXU7ICAgIC8qIGVuYWJsZSB0aW1lciAqLw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTFfc3RvcCgpIGZ1bmN0aW9uIGRpc2FibGVzIFRpbWVyIDEgYW5kIHN0b3BzIGl0cyBkb3duLWNvdW50ZXINCiAgZGVjcmVtZW50aW5nLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMV9zdG9wKHZvaWQpDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNMUVOQUJMRSA9IDB1OyAgICAvKiBkaXNhYmxlIHRpbWVyICovDQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMV9nZXRfY3VycmVudF92YWx1ZSgpIHJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFRpbWVyIDENCiAgZG93bi1jb3VudGVyLg0KICANCiAgQHJldHVybg0KICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgMzItYml0cyBjdXJyZW50IHZhbHVlIG9mIHRoZSBUaW1lciAxIGRvd24tY291bnRlci4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IE1TU19USU0xX2dldF9jdXJyZW50X3ZhbHVlKHZvaWQpDQp7DQogICAgcmV0dXJuIFRJTUVSLT5USU0xX1ZBTDsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0xX2xvYWRfaW1tZWRpYXRlKCkgZnVuY3Rpb24gbG9hZHMgdGhlIHZhbHVlIHBhc3NlZCBieSB0aGUNCiAgbG9hZF92YWx1ZSBwYXJhbWV0ZXIgaW50byB0aGUgVGltZXIgMSBkb3duLWNvdW50ZXIuIFRoZSBjb3VudGVyIHdpbGwgZGVjcmVtZW50DQogIGltbWVkaWF0ZWx5IGZyb20gdGhpcyB2YWx1ZSBvbmNlIFRpbWVyIDEgaXMgZW5hYmxlZC4gVGhlIE1TUyBUaW1lciB3aWxsDQogIGdlbmVyYXRlIGFuIGludGVycnVwdCB3aGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgemVybyBpZiBUaW1lciAxIGludGVycnVwdHMgYXJlDQogIGVuYWJsZWQuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIFRpbWVyIDEgaXMgY29uZmlndXJlZCBmb3INCiAgb25lLXNob3QgbW9kZSB0byB0aW1lIGEgc2luZ2xlIGRlbGF5Lg0KIA0KICBAcGFyYW0gbG9hZF92YWx1ZQ0KICAgIFRoZSBsb2FkX3ZhbHVlIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHZhbHVlIGZyb20gd2hpY2ggdGhlIFRpbWVyIDEgZG93bi1jb3VudGVyDQogICAgd2lsbCBzdGFydCBkZWNyZW1lbnRpbmcgZnJvbS4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTFfbG9hZF9pbW1lZGlhdGUodWludDMyX3QgbG9hZF92YWx1ZSkNCnsNCiAgICBUSU1FUi0+VElNMV9MT0FEVkFMID0gbG9hZF92YWx1ZTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0xX2xvYWRfYmFja2dyb3VuZCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgdmFsdWUgdGhhdCB3aWxsDQogIGJlIHJlbG9hZGVkIGludG8gdGhlIFRpbWVyIDEgZG93bi1jb3VudGVyIHRoZSBuZXh0IHRpbWUgdGhlIGNvdW50ZXIgcmVhY2hlcw0KICB6ZXJvLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkIHdoZW4gVGltZXIgMSBpcyBjb25maWd1cmVkIGZvciBwZXJpb2RpYw0KICBtb2RlIG9wZXJhdGlvbiB0byBzZWxlY3Qgb3IgY2hhbmdlIHRoZSBkZWxheSBwZXJpb2QgYmV0d2VlbiB0aGUgaW50ZXJydXB0cw0KICBnZW5lcmF0ZWQgYnkgVGltZXIgMS4NCiANCiAgQHBhcmFtIGxvYWRfdmFsdWUNCiAgICBUaGUgbG9hZF92YWx1ZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgbG9hZGVkIGludG8gdGhlDQogICAgVGltZXIgMSBkb3duLWNvdW50ZXIgdGhlIG5leHQgdGltZSB0aGUgZG93bi1jb3VudGVyIHJlYWNoZXMgemVyby4gVGhlIFRpbWVyDQogICAgMSBkb3duLWNvdW50ZXIgd2lsbCBzdGFydCBkZWNyZW1lbnRpbmcgZnJvbSB0aGlzIHZhbHVlIGFmdGVyIHRoZSBjdXJyZW50DQogICAgY291bnQgZXhwaXJlcy4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTFfbG9hZF9iYWNrZ3JvdW5kKHVpbnQzMl90IGxvYWRfdmFsdWUpDQp7DQogICAgVElNRVItPlRJTTFfQkdMT0FEVkFMID0gbG9hZF92YWx1ZTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0xX2VuYWJsZV9pcnEoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZSBpbnRlcnJ1cHQgZ2VuZXJhdGlvbiBmb3INCiAgVGltZXIgMS4gVGhpcyBmdW5jdGlvbiBhbHNvIGVuYWJsZXMgdGhlIGludGVycnVwdCBpbiB0aGUgQ29ydGV4LU0zIGludGVycnVwdA0KICBjb250cm9sbGVyLiBUaGUgVGltZXIxX0lSUUhhbmRsZXIoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgVGltZXIgMQ0KICBpbnRlcnJ1cHQgb2NjdXJzLg0KICBOb3RlOiBOb3RlOiAJQSBUaW1lcjFfSVJRSGFuZGxlcigpIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZGVmaW5lZCwgd2l0aA0KICB3ZWFrIGxpbmthZ2UsIGluIHRoZSBTbWFydEZ1c2lvbjIgQ01TSVMtUEFMLiBZb3UgbXVzdCBwcm92aWRlIHlvdXIgb3duDQogIGltcGxlbWVudGF0aW9uIG9mIHRoZSBUaW1lcjFfSVJRSGFuZGxlcigpIGZ1bmN0aW9uLCB0aGF0IHdpbGwgb3ZlcnJpZGUgdGhlDQogIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIHRvIHN1aXQgeW91ciBhcHBsaWNhdGlvbi4NCg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMV9lbmFibGVfaXJxKHZvaWQpDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNMUlOVEVOID0gMXU7DQogICAgTlZJQ19FbmFibGVJUlEoVGltZXIxX0lSUW4pOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTFfZGlzYWJsZV9pcnEoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgaW50ZXJydXB0IGdlbmVyYXRpb24NCiAgZm9yIFRpbWVyIDEuIFRoaXMgZnVuY3Rpb24gYWxzbyBkaXNhYmxlcyB0aGUgaW50ZXJydXB0IGluIHRoZSBDb3J0ZXgtTTMNCiAgaW50ZXJydXB0IGNvbnRyb2xsZXIuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0xX2Rpc2FibGVfaXJxKHZvaWQpDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNMUlOVEVOID0gMHU7DQogICAgTlZJQ19EaXNhYmxlSVJRKFRpbWVyMV9JUlFuKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0xX2NsZWFyX2lycSgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgYSBwZW5kaW5nIGludGVycnVwdCBmcm9tDQogIFRpbWVyIDEuIFRoaXMgZnVuY3Rpb24gYWxzbyBjbGVhcnMgdGhlIGludGVycnVwdCBpbiB0aGUgQ29ydGV4LU0zIGludGVycnVwdA0KICBjb250cm9sbGVyLg0KICBOb3RlOiBZb3UgbXVzdCBjYWxsIHRoZSBNU1NfVElNMV9jbGVhcl9pcnEoKSBmdW5jdGlvbiBhcyBwYXJ0IG9mIHlvdXINCiAgaW1wbGVtZW50YXRpb24gb2YgdGhlIFRpbWVyMV9JUlFIYW5kbGVyKCkgVGltZXIgMSBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lDQogIChJU1IpIGluIG9yZGVyIHRvIHByZXZlbnQgdGhlIHNhbWUgaW50ZXJydXB0IGV2ZW50IHJldHJpZ2dlcmluZyBhIGNhbGwgdG8gdGhlDQogIElTUi4NCg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNMV9jbGVhcl9pcnEodm9pZCkNCnsNCiAgICBUSU1FUi0+VElNMV9SSVMgPSAxdTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0yX2luaXQoKSBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgU21hcnRGdXNpb24yIE1TUyBUaW1lciBibG9jayBmb3INCiAgdXNlIGFzIGEgMzItYml0IHRpbWVyIGFuZCBzZWxlY3RzIHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgVGltZXIgMi4gVGhpcyBmdW5jdGlvbg0KICB0YWtlcyB0aGUgTVNTIFRpbWVyIGJsb2NrIG91dCBvZiByZXNldCBpbiBjYXNlIHRoaXMgaGFzbpJ0IGJlZW4gZG9uZSBhbHJlYWR5LA0KICBzdG9wcyBUaW1lciAyLCBkaXNhYmxlcyBpdHMgaW50ZXJydXB0IGFuZCBzZXRzIHRoZSBUaW1lciAyIG9wZXJhdGluZyBtb2RlLg0KICBOb3RlOiBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBTbWFydEZ1c2lvbjIgTVNTIFRpbWVyIGJsb2NrIGNhbm5vdCBiZSB1c2VkIGJvdGggYXMNCiAgYSA2NC1iaXQgYW5kIDMyLWJpdCB0aW1lci4gQ2FsbGluZyBNU1NfVElNMl9pbml0KCkgd2lsbCBvdmVyd3JpdGUgYW55IHByZXZpb3VzDQogIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1TUyBUaW1lciBhcyBhIDY0LWJpdCB0aW1lci4NCiAgDQogIEBwYXJhbSBtb2RlDQogICAgVGhlIG1vZGUgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0aW1lciB3aWxsIG9wZXJhdGUgaW4gcGVyaW9kaWMgb3INCiAgICBvbmUtc2hvdCBtb2RlLiBBbGxvd2VkIHZhbHVlcyBmb3IgdGhpcyBwYXJhbWV0ZXIgYXJlOg0KICAgICAgICAtIE1TU19USU1FUl9QRVJJT0RJQ19NT0RFDQogICAgICAgIC0gTVNTX1RJTUVSX09ORV9TSE9UX01PREUgDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0yX2luaXQobXNzX3RpbWVyX21vZGVfdCBtb2RlKQ0Kew0KICAgIE5WSUNfRGlzYWJsZUlSUShUaW1lcjJfSVJRbik7ICAgICAgICAgICAgIC8qIERpc2FibGUgdGltZXIgMiBpcnEgaW4gdGhlIENvcnRleC1NMyBOVklDICovICANCiAgICANCiAgICBTWVNSRUctPlNPRlRfUlNUX0NSICY9IH5TWVNSRUdfVElNRVJfU09GVFJFU0VUX01BU0s7IC8qIFRha2UgdGltZXIgYmxvY2sgb3V0IG9mIHJlc2V0ICovDQogICAgDQogICAgVElNRVItPlRJTTY0X01PREUgPSAwdTsgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gMzIgYml0cyBtb2RlICovDQogICAgDQogICAgVElNRVJfQklUQkFORC0+VElNMkVOQUJMRSA9IDB1OyAgICAgICAgICAgICAvKiBkaXNhYmxlIHRpbWVyICovDQogICAgVElNRVJfQklUQkFORC0+VElNMklOVEVOID0gMHU7ICAgICAgICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdCAqLw0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTJNT0RFID0gKHVpbnQzMl90KW1vZGU7ICAgLyogc2V0IG1vZGUgKGNvbnRpbnVvdXMvb25lLXNob3QpICovDQogICAgDQogICAgVElNRVItPlRJTTJfUklTID0gMXU7ICAgICAgICAgICAgICAgICAgICAgICAvKiBjbGVhciB0aW1lciAyIGludGVycnVwdCAqLw0KICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFRpbWVyMl9JUlFuKTsgICAgICAgIC8qIGNsZWFyIHRpbWVyIDIgaW50ZXJydXB0IHdpdGhpbiBOVklDICovDQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMl9zdGFydCgpIGZ1bmN0aW9uIGVuYWJsZXMgVGltZXIgMiBhbmQgIHN0YXJ0cyBpdHMgZG93bi1jb3VudGVyDQogIGRlY3JlbWVudGluZyBmcm9tIHRoZSBsb2FkX3ZhbHVlIHNwZWNpZmllZCBpbiBwcmV2aW91cyBjYWxscyB0byB0aGUNCiAgTVNTX1RJTTJfbG9hZF9pbW1lZGlhdGUoKSBvciBNU1NfVElNMl9sb2FkX2JhY2tncm91bmQoKSBmdW5jdGlvbnMuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0yX3N0YXJ0KHZvaWQpDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNMkVOQUJMRSA9IDF1OyAgICAvKiBlbmFibGUgdGltZXIgKi8NCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0yX3N0b3AoKSBmdW5jdGlvbiBkaXNhYmxlcyBUaW1lciAyIGFuZCBzdG9wcyBpdHMgZG93bi1jb3VudGVyDQogIGRlY3JlbWVudGluZy4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTJfc3RvcCh2b2lkKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTJFTkFCTEUgPSAwdTsgICAgLyogZGlzYWJsZSB0aW1lciAqLw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTJfZ2V0X2N1cnJlbnRfdmFsdWUoKSByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBUaW1lciAyDQogIGRvd24tY291bnRlci4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHVpbnQzMl90IE1TU19USU0yX2dldF9jdXJyZW50X3ZhbHVlKHZvaWQpDQp7DQogICAgcmV0dXJuIFRJTUVSLT5USU0yX1ZBTDsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0yX2xvYWRfaW1tZWRpYXRlKCkgZnVuY3Rpb24gbG9hZHMgdGhlIHZhbHVlIHBhc3NlZCBieSB0aGUNCiAgbG9hZF92YWx1ZSBwYXJhbWV0ZXIgaW50byB0aGUgVGltZXIgMiBkb3duLWNvdW50ZXIuIFRoZSBjb3VudGVyIHdpbGwgZGVjcmVtZW50DQogIGltbWVkaWF0ZWx5IGZyb20gdGhpcyB2YWx1ZSBvbmNlIFRpbWVyIDIgaXMgZW5hYmxlZC4gVGhlIE1TUyBUaW1lciB3aWxsDQogIGdlbmVyYXRlIGFuIGludGVycnVwdCB3aGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgemVybyBpZiBUaW1lciAyIGludGVycnVwdHMgYXJlDQogIGVuYWJsZWQuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIFRpbWVyIDIgaXMgY29uZmlndXJlZCBmb3INCiAgb25lLXNob3QgbW9kZSB0byB0aW1lIGEgc2luZ2xlIGRlbGF5Lg0KICANCiAgQHBhcmFtIGxvYWRfdmFsdWUNCiAgICBUaGUgbG9hZF92YWx1ZSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB2YWx1ZSBmcm9tIHdoaWNoIHRoZSBUaW1lciAyDQogICAgZG93bi1jb3VudGVyIHdpbGwgc3RhcnQgZGVjcmVtZW50aW5nLiANCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTJfbG9hZF9pbW1lZGlhdGUodWludDMyX3QgbG9hZF92YWx1ZSkNCnsNCiAgICBUSU1FUi0+VElNMl9MT0FEVkFMID0gbG9hZF92YWx1ZTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0yX2xvYWRfYmFja2dyb3VuZCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgdmFsdWUgdGhhdCB3aWxsDQogIGJlIHJlbG9hZGVkIGludG8gdGhlIFRpbWVyIDIgZG93bi1jb3VudGVyIHRoZSBuZXh0IHRpbWUgdGhlIGNvdW50ZXIgcmVhY2hlcw0KICB6ZXJvLiBUaGlzIGZ1bmN0aW9uIGlzIHR5cGljYWxseSB1c2VkIHdoZW4gVGltZXIgMiBpcyBjb25maWd1cmVkIGZvciBwZXJpb2RpYw0KICBtb2RlIG9wZXJhdGlvbiB0byBzZWxlY3Qgb3IgY2hhbmdlIHRoZSBkZWxheSBwZXJpb2QgYmV0d2VlbiB0aGUgaW50ZXJydXB0cw0KICBnZW5lcmF0ZWQgYnkgVGltZXIgMi4NCiAgDQogIEBwYXJhbSBsb2FkX3ZhbHVlDQogICAgVGhlIGxvYWRfdmFsdWUgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIGxvYWRlZCBpbnRvIHRoZQ0KICAgIFRpbWVyIDIgZG93bi1jb3VudGVyIHRoZSBuZXh0IHRpbWUgdGhlIGRvd24tY291bnRlciByZWFjaGVzIHplcm8uIFRoZSBUaW1lcg0KICAgIDIgZG93bi1jb3VudGVyIHdpbGwgc3RhcnQgZGVjcmVtZW50aW5nIGZyb20gdGhpcyB2YWx1ZSBhZnRlciB0aGUgY3VycmVudA0KICAgIGNvdW50IGV4cGlyZXMuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0yX2xvYWRfYmFja2dyb3VuZCh1aW50MzJfdCBsb2FkX3ZhbHVlKQ0Kew0KICAgIFRJTUVSLT5USU0yX0JHTE9BRFZBTCA9IGxvYWRfdmFsdWU7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNMl9lbmFibGVfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yDQogIFRpbWVyIDIuIFRoaXMgZnVuY3Rpb24gYWxzbyBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIENvcnRleC1NMyBpbnRlcnJ1cHQNCiAgY29udHJvbGxlci4gVGhlIFRpbWVyMl9JUlFIYW5kbGVyKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBhIFRpbWVyIDINCiAgaW50ZXJydXB0IG9jY3Vycy4NCiAgTm90ZTogQSBUaW1lcjJfSVJRSGFuZGxlcigpIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZGVmaW5lZCwgd2l0aCB3ZWFrDQogIGxpbmthZ2UsIGluIHRoZSBTbWFydEZ1c2lvbjIgQ01TSVMtUEFMLiBZb3UgbXVzdCBwcm92aWRlIHlvdXIgb3duIGltcGxlbWVudGF0aW9uDQogIG9mIHRoZSBUaW1lcjJfSVJRSGFuZGxlcigpIGZ1bmN0aW9uLCB0aGF0IHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQNCiAgaW1wbGVtZW50YXRpb24sIHRvIHN1aXQgeW91ciBhcHBsaWNhdGlvbi4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTJfZW5hYmxlX2lycSh2b2lkKQ0Kew0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTJJTlRFTiA9IDF1Ow0KICAgIE5WSUNfRW5hYmxlSVJRKCBUaW1lcjJfSVJRbiApOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTJfZGlzYWJsZV9pcnEoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGRpc2FibGUgaW50ZXJydXB0IGdlbmVyYXRpb24NCiAgZm9yIFRpbWVyIDIuIFRoaXMgZnVuY3Rpb24gYWxzbyBkaXNhYmxlcyB0aGUgaW50ZXJydXB0IGluIHRoZSBDb3J0ZXgtTTMNCiAgaW50ZXJydXB0IGNvbnRyb2xsZXIuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU0yX2Rpc2FibGVfaXJxKHZvaWQpDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNMklOVEVOID0gMHU7DQogICAgTlZJQ19EaXNhYmxlSVJRKFRpbWVyMl9JUlFuKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU0yX2NsZWFyX2lycSgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2xlYXIgYSBwZW5kaW5nIGludGVycnVwdCBmcm9tDQogIFRpbWVyIDIuIFRoaXMgZnVuY3Rpb24gYWxzbyBjbGVhcnMgdGhlIGludGVycnVwdCBpbiB0aGUgQ29ydGV4LU0zIGludGVycnVwdA0KICBjb250cm9sbGVyLg0KICBOb3RlOiBZb3UgbXVzdCBjYWxsIHRoZSBNU1NfVElNMl9jbGVhcl9pcnEoKSBmdW5jdGlvbiBhcyBwYXJ0IG9mIHlvdXINCiAgaW1wbGVtZW50YXRpb24gb2YgdGhlIFRpbWVyMl9JUlFIYW5kbGVyKCkgVGltZXIgMiBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lDQogIChJU1IpIGluIG9yZGVyIHRvIHByZXZlbnQgdGhlIHNhbWUgaW50ZXJydXB0IGV2ZW50IHJldHJpZ2dlcmluZyBhIGNhbGwgdG8gdGhlDQogIElTUi4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTJfY2xlYXJfaXJxKHZvaWQpDQp7DQogICAgVElNRVItPlRJTTJfUklTID0gMXU7DQp9DQoNCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovLyoqDQogIFRoZSBNU1NfVElNNjRfaW5pdCgpIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBTbWFydEZ1c2lvbjIgTVNTIFRpbWVyIGJsb2NrIGZvcg0KICB1c2UgYXMgYSBzaW5nbGUgNjQtYml0IHRpbWVyIGFuZCBzZWxlY3RzIHRoZSBvcGVyYXRpbmcgbW9kZSBvZiB0aGUgdGltZXIuIFRoaXMNCiAgZnVuY3Rpb24gdGFrZXMgdGhlIE1TUyBUaW1lciBibG9jayBvdXQgb2YgcmVzZXQgaW4gY2FzZSB0aGlzIGhhc26SdCBiZWVuIGRvbmUNCiAgYWxyZWFkeSwgc3RvcHMgdGhlIHRpbWVyLCBkaXNhYmxlcyBpdHMgaW50ZXJydXB0cyBhbmQgc2V0cyB0aGUgdGltZXIncw0KICBvcGVyYXRpbmcgbW9kZS4NCiAgTm90ZTogUGxlYXNlIG5vdGUgdGhhdCB0aGUgU21hcnRGdXNpb24yIE1TUyBUaW1lciBibG9jayBjYW5ub3QgYmUgdXNlZCBib3RoIGFzDQogIGEgNjQtYml0IGFuZCAzMi1iaXQgdGltZXIuIENhbGxpbmcgTVNTX1RJTTY0X2luaXQoKSB3aWxsIG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMNCiAgY29uZmlndXJhdGlvbiBvZiB0aGUgTVNTIFRpbWVyIGFzIGEgMzItYml0IHRpbWVyLg0KDQogIEBwYXJhbSBtb2RlDQogICAgVGhlIG1vZGUgcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyIHRoZSB0aW1lciB3aWxsIG9wZXJhdGUgaW4gcGVyaW9kaWMgb3INCiAgICBvbmUtc2hvdCBtb2RlLiBBbGxvd2VkIHZhbHVlcyBmb3IgdGhpcyBwYXJhbWV0ZXIgYXJlOg0KICAgICAgICAtIE1TU19USU1FUl9QRVJJT0RJQ19NT0RFDQogICAgICAgIC0gTVNTX1RJTUVSX09ORV9TSE9UX01PREUgDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU02NF9pbml0KG1zc190aW1lcl9tb2RlX3QgbW9kZSkNCnsNCiAgICBOVklDX0Rpc2FibGVJUlEoVGltZXIxX0lSUW4pOyAgICAgICAgIC8qIGRpc2FibGUgdGltZXIgMSBpbnRlcnJ1cHQgd2l0aGluIE5WSUMgKi8NCiAgICBOVklDX0Rpc2FibGVJUlEoVGltZXIyX0lSUW4pOyAgICAgICAgIC8qIGRpc2FibGUgdGltZXIgMiBpbnRlcnJ1cHQgd2l0aGluIE5WSUMgKi8NCiAgICANCiAgICBTWVNSRUctPlNPRlRfUlNUX0NSICY9IH5TWVNSRUdfVElNRVJfU09GVFJFU0VUX01BU0s7IC8qIFRha2UgdGltZXIgYmxvY2sgb3V0IG9mIHJlc2V0ICovDQogICAgDQogICAgVElNRVItPlRJTTY0X01PREUgPSAxdTsgICAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggdG8gNjQgYml0cyBtb2RlICovDQogICAgDQogICAgVElNRVJfQklUQkFORC0+VElNNjRFTkFCTEUgPSAwdTsgICAgICAgICAgICAvKiBkaXNhYmxlIHRpbWVyICovDQogICAgVElNRVJfQklUQkFORC0+VElNNjRJTlRFTiA9IDB1OyAgICAgICAgICAgICAvKiBkaXNhYmxlIGludGVycnVwdCAqLw0KICAgIFRJTUVSX0JJVEJBTkQtPlRJTTY0TU9ERSA9ICh1aW50MzJfdCltb2RlOyAgLyogc2V0IG1vZGUgKGNvbnRpbnVvdXMvb25lLXNob3QpICovDQogICAgDQogICAgVElNRVItPlRJTTFfUklTID0gMXU7ICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIHRpbWVyIDEgaW50ZXJydXB0ICovDQogICAgVElNRVItPlRJTTJfUklTID0gMXU7ICAgICAgICAgICAgICAgICAgIC8qIGNsZWFyIHRpbWVyIDIgaW50ZXJydXB0ICovDQogICAgTlZJQ19DbGVhclBlbmRpbmdJUlEoVGltZXIxX0lSUW4pOyAgICAvKiBjbGVhciB0aW1lciAxIGludGVycnVwdCB3aXRoaW4gTlZJQyAqLw0KICAgIE5WSUNfQ2xlYXJQZW5kaW5nSVJRKFRpbWVyMl9JUlFuKTsgICAgLyogY2xlYXIgdGltZXIgMiBpbnRlcnJ1cHQgd2l0aGluIE5WSUMgKi8NCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9zdGFydCgpIGZ1bmN0aW9uIGVuYWJsZXMgdGhlIDY0LWJpdCB0aW1lciBhbmQgc3RhcnRzIGl0cw0KICBkb3duLWNvdW50ZXIgZGVjcmVtZW50aW5nIGZyb20gdGhlIGxvYWRfdmFsdWUgc3BlY2lmaWVkIGluIHByZXZpb3VzIGNhbGxzIHRvDQogIHRoZSBNU1NfVElNNjRfbG9hZF9pbW1lZGlhdGUoKSBvciBNU1NfVElNNjRfbG9hZF9iYWNrZ3JvdW5kKCkgZnVuY3Rpb25zLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNNjRfc3RhcnQodm9pZCkNCnsNCiAgICBUSU1FUl9CSVRCQU5ELT5USU02NEVOQUJMRSA9IDF1OyAgICAvKiBlbmFibGUgdGltZXIgKi8NCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9zdG9wKCkgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIDY0LWJpdCB0aW1lciBhbmQgc3RvcHMgaXRzDQogIGRvd24tY291bnRlciBkZWNyZW1lbnRpbmcuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU02NF9zdG9wKHZvaWQpDQp7DQogICAgVElNRVJfQklUQkFORC0+VElNNjRFTkFCTEUgPSAwdTsgICAgLyogZGlzYWJsZSB0aW1lciAqLw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTY0X2dldF9jdXJyZW50X3ZhbHVlKCkgaXMgdXNlZCB0byByZWFkIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQ0KICA2NC1iaXQgdGltZXIgZG93bi1jb3VudGVyLiANCiANCiAgQHBhcmFtIGxvYWRfdmFsdWVfdQ0KICAgIFRoZSBsb2FkX3ZhbHVlX3UgcGFyYW1ldGVyIGlzIGEgcG9pbnRlciB0byBhIDMyLWJpdCB2YXJpYWJsZSB3aGVyZSB0aGUgdXBwZXINCiAgICAzMiBiaXRzIG9mIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSA2NC1iaXQgdGltZXIgZG93bi1jb3VudGVyIHdpbGwgYmUgY29waWVkLg0KICAgIA0KICBAcGFyYW0gbG9hZF92YWx1ZV9sDQogICAgVGhlIGxvYWRfdmFsdWVfbCBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEgMzItYml0IHZhcmlhYmxlIHdoZXJlIHRoZSBsb3dlcg0KICAgIDMyIGJpdHMgb2YgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIDY0LWJpdCB0aW1lciBkb3duLWNvdW50ZXIgd2lsbCBiZSBjb3BpZWQuDQogICAgDQogIEV4YW1wbGU6DQogIEBjb2RlDQogICAgdWludDMyX3QgY3VycmVudF92YWx1ZV91ID0gMDsNCiAgICB1aW50MzJfdCBjdXJyZW50X3ZhbHVlX2wgPSAwOw0KICAgIE1TU19USU02NF9nZXRfY3VycmVudF92YWx1ZSggJmN1cnJlbnRfdmFsdWVfdSwgJmN1cnJlbnRfdmFsdWVfbCApOw0KICBAZW5kY29kZQ0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNNjRfZ2V0X2N1cnJlbnRfdmFsdWUNCigNCiAgICB1aW50MzJfdCAqIGxvYWRfdmFsdWVfdSwNCiAgICB1aW50MzJfdCAqIGxvYWRfdmFsdWVfbA0KKQ0Kew0KICAgICpsb2FkX3ZhbHVlX2wgPSBUSU1FUi0+VElNNjRfVkFMX0w7DQogICAgKmxvYWRfdmFsdWVfdSA9IFRJTUVSLT5USU02NF9WQUxfVTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9sb2FkX2ltbWVkaWF0ZSgpIGZ1bmN0aW9uIGxvYWRzIHRoZSB2YWx1ZXMgcGFzc2VkIGJ5IHRoZQ0KICBsb2FkX3ZhbHVlX3UgYW5kIGxvYWRfdmFsdWVfbCBwYXJhbWV0ZXJzIGludG8gdGhlIDY0LWJpdCB0aW1lciBkb3duLWNvdW50ZXIuDQogIFRoZSBjb3VudGVyIHdpbGwgZGVjcmVtZW50IGltbWVkaWF0ZWx5IGZyb20gdGhlIGNvbmNhdGVuYXRlZCA2NC1iaXQgdmFsdWUgb25jZQ0KICB0aGUgNjQtYml0IHRpbWVyIGlzIGVuYWJsZWQuIFRoZSBNU1MgVGltZXIgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgd2hlbiB0aGUNCiAgY291bnRlciByZWFjaGVzIHplcm8gaWYgNjQtYml0IHRpbWVyIGludGVycnVwdHMgYXJlIGVuYWJsZWQuIFRoaXMgZnVuY3Rpb24gaXMNCiAgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIHRoZSA2NC1iaXQgdGltZXIgaXMgY29uZmlndXJlZCBmb3Igb25lLXNob3QgbW9kZSB0bw0KICB0aW1lIGEgc2luZ2xlIGRlbGF5Lg0KIA0KICBAcGFyYW0gbG9hZF92YWx1ZV91DQogICAgVGhlIGxvYWRfdmFsdWVfdSBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSB1cHBlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgdGltZXINCiAgICBsb2FkIHZhbHVlIGZyb20gd2hpY2ggdGhlIDY0LWJpdCB0aW1lciBkb3duLWNvdW50ZXIgd2lsbCBzdGFydCBkZWNyZW1lbnRpbmcuDQogICAgDQogIEBwYXJhbSBsb2FkX3ZhbHVlX2wNCiAgICBUaGUgbG9hZF92YWx1ZV9sIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCB0aW1lcg0KICAgIGxvYWQgdmFsdWUgZnJvbSB3aGljaCB0aGUgNjQtYml0IHRpbWVyIGRvd24tY291bnRlciB3aWxsIHN0YXJ0IGRlY3JlbWVudGluZy4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X2xvYWRfaW1tZWRpYXRlDQooDQogICAgdWludDMyX3QgbG9hZF92YWx1ZV91LA0KICAgIHVpbnQzMl90IGxvYWRfdmFsdWVfbA0KKQ0Kew0KICAgIFRJTUVSLT5USU02NF9MT0FEVkFMX1UgPSBsb2FkX3ZhbHVlX3U7DQogICAgVElNRVItPlRJTTY0X0xPQURWQUxfTCA9IGxvYWRfdmFsdWVfbDsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9sb2FkX2JhY2tncm91bmQoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIDY0LWJpdCB2YWx1ZQ0KICB0aGF0IHdpbGwgYmUgcmVsb2FkZWQgaW50byB0aGUgNjQtYml0IHRpbWVyIGRvd24tY291bnRlciB0aGUgbmV4dCB0aW1lIHRoZQ0KICBjb3VudGVyIHJlYWNoZXMgemVyby4gVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgdXNlZCB3aGVuIHRoZSA2NC1iaXQgdGltZXIgaXMNCiAgY29uZmlndXJlZCBmb3IgcGVyaW9kaWMgbW9kZSBvcGVyYXRpb24gdG8gc2VsZWN0IG9yIGNoYW5nZSB0aGUgZGVsYXkgcGVyaW9kDQogIGJldHdlZW4gdGhlIGludGVycnVwdHMgZ2VuZXJhdGVkIGJ5IHRoZSA2NC1iaXQgdGltZXIuDQogDQogIEBwYXJhbSBsb2FkX3ZhbHVlX3UNCiAgICBUaGUgbG9hZF92YWx1ZV91IHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIHVwcGVyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCB0aW1lcg0KICAgIGxvYWQgdmFsdWUuIFRoZSBjb25jYXRlbmF0ZWQgNjQtYml0IHZhbHVlIGZvcm1lZCBmcm9tIGxvYWRfdmFsdWVfdSBhbmQNCiAgICBsb2FkX3ZhbHVlX2wgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgNjQtYml0IHRpbWVyIGRvd24tY291bnRlciB0aGUgbmV4dA0KICAgIHRpbWUgdGhlIGRvd24tY291bnRlciByZWFjaGVzIHplcm8uIFRoZSA2NC1iaXQgdGltZXIgZG93bi1jb3VudGVyIHdpbGwgc3RhcnQNCiAgICBkZWNyZW1lbnRpbmcgZnJvbSB0aGUgY29uY2F0ZW5hdGVkIDY0LWJpdCB2YWx1ZSBhZnRlciB0aGUgY3VycmVudCBjb3VudA0KICAgIGV4cGlyZXMuDQogICAgDQogIEBwYXJhbSBsb2FkX3ZhbHVlX2wNCiAgICBUaGUgbG9hZF92YWx1ZV9sIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGxvd2VyIDMyIGJpdHMgb2YgdGhlIDY0LWJpdCB0aW1lcg0KICAgIGxvYWQgdmFsdWUuIFRoZSBjb25jYXRlbmF0ZWQgNjQtYml0IHZhbHVlIGZvcm1lZCBmcm9tIGxvYWRfdmFsdWVfdSBhbmQNCiAgICBsb2FkX3ZhbHVlX2wgd2lsbCBiZSBsb2FkZWQgaW50byB0aGUgNjQtYml0IHRpbWVyIGRvd24tY291bnRlciB0aGUgbmV4dCB0aW1lDQogICAgdGhlIGRvd24tY291bnRlciByZWFjaGVzIHplcm8uIFRoZSA2NC1iaXQgdGltZXIgZG93bi1jb3VudGVyIHdpbGwgc3RhcnQNCiAgICBkZWNyZW1lbnRpbmcgZnJvbSB0aGUgY29uY2F0ZW5hdGVkIDY0LWJpdCB2YWx1ZSBhZnRlciB0aGUgY3VycmVudCBjb3VudA0KICAgIGV4cGlyZXMuDQogDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU02NF9sb2FkX2JhY2tncm91bmQNCigNCiAgICB1aW50MzJfdCBsb2FkX3ZhbHVlX3UsDQogICAgdWludDMyX3QgbG9hZF92YWx1ZV9sDQopDQp7DQogICAgVElNRVItPlRJTTY0X0JHTE9BRFZBTF9VID0gbG9hZF92YWx1ZV91Ow0KICAgIFRJTUVSLT5USU02NF9CR0xPQURWQUxfTCA9IGxvYWRfdmFsdWVfbDsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9lbmFibGVfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBlbmFibGUgaW50ZXJydXB0IGdlbmVyYXRpb24gZm9yDQogIHRoZSA2NC1iaXQgdGltZXIuIFRoaXMgZnVuY3Rpb24gYWxzbyBlbmFibGVzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIENvcnRleC1NMw0KICBpbnRlcnJ1cHQgY29udHJvbGxlci4gVGhlIFRpbWVyMV9JUlFIYW5kbGVyKCkgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbiBhDQogIDY0LWJpdCB0aW1lciBpbnRlcnJ1cHQgb2NjdXJzLg0KICBOb3RlOiBBIFRpbWVyMV9JUlFIYW5kbGVyKCkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBkZWZpbmVkLCB3aXRoIHdlYWsNCiAgbGlua2FnZSwgaW4gdGhlIFNtYXJ0RnVzaW9uMiBDTVNJUy1QQUwuIFlvdSBtdXN0IHByb3ZpZGUgeW91ciBvd24NCiAgaW1wbGVtZW50YXRpb24gb2YgdGhlIFRpbWVyMV9JUlFIYW5kbGVyKCkgZnVuY3Rpb24sIHRoYXQgd2lsbCBvdmVycmlkZSB0aGUNCiAgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgdG8gc3VpdCB5b3VyIGFwcGxpY2F0aW9uLg0KICBOb3RlOiBUaGUgTVNTX1RJTTY0X2VuYWJsZV9pcnEoKSBmdW5jdGlvbiBlbmFibGVzIGFuZCB1c2VzIFRpbWVyIDEgaW50ZXJydXB0cw0KICBmb3IgdGhlIDY0LWJpdCB0aW1lci4gVGltZXIgMiBpbnRlcnJ1cHRzIHJlbWFpbiBkaXNhYmxlZC4NCiAqLw0Kc3RhdGljIF9fSU5MSU5FIHZvaWQgTVNTX1RJTTY0X2VuYWJsZV9pcnEodm9pZCkNCnsNCiAgICBUSU1FUl9CSVRCQU5ELT5USU02NElOVEVOID0gMXU7DQogICAgTlZJQ19FbmFibGVJUlEoVGltZXIxX0lSUW4pOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLy8qKg0KICBUaGUgTVNTX1RJTTY0X2Rpc2FibGVfaXJxKCkgZnVuY3Rpb24gaXMgdXNlZCB0byBkaXNhYmxlIGludGVycnVwdCBnZW5lcmF0aW9uDQogIGZvciB0aGUgNjQtYml0IHRpbWVyLiBUaGlzIGZ1bmN0aW9uIGFsc28gZGlzYWJsZXMgdGhlIGludGVycnVwdCBpbiB0aGUNCiAgQ29ydGV4LU0zIGludGVycnVwdCBjb250cm9sbGVyLg0KICovDQpzdGF0aWMgX19JTkxJTkUgdm9pZCBNU1NfVElNNjRfZGlzYWJsZV9pcnEodm9pZCkNCnsNCiAgICBUSU1FUl9CSVRCQU5ELT5USU02NElOVEVOID0gMHU7DQogICAgTlZJQ19EaXNhYmxlSVJRKFRpbWVyMV9JUlFuKTsNCn0NCg0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8vKioNCiAgVGhlIE1TU19USU02NF9jbGVhcl9pcnEoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIGNsZWFyIGEgcGVuZGluZyBpbnRlcnJ1cHQgZnJvbQ0KICB0aGUgNjQtYml0IHRpbWVyLiBUaGlzIGZ1bmN0aW9uIGFsc28gY2xlYXJzIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIENvcnRleC1NMw0KICBpbnRlcnJ1cHQgY29udHJvbGxlci4NCiAgTm90ZTogWW91IG11c3QgY2FsbCB0aGUgTVNTX1RJTTY0X2NsZWFyX2lycSgpIGZ1bmN0aW9uIGFzIHBhcnQgb2YgeW91cg0KICBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgVGltZXIxX0lSUUhhbmRsZXIoKSA2NC1iaXQgdGltZXIgaW50ZXJydXB0IHNlcnZpY2UNCiAgcm91dGluZSAoSVNSKSBpbiBvcmRlciB0byBwcmV2ZW50IHRoZSBzYW1lIGludGVycnVwdCBldmVudCByZXRyaWdnZXJpbmcgYQ0KICBjYWxsIHRvIHRoZSBJU1IuDQogKi8NCnN0YXRpYyBfX0lOTElORSB2b2lkIE1TU19USU02NF9jbGVhcl9pcnEodm9pZCkNCnsNCiAgICBUSU1FUi0+VElNNjRfUklTID0gMXU7DQp9DQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCiNlbmRpZiAvKk1TU19USU1FUl9IXyovDQo=