LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiogqSAyMDE1IE1pY3JvY2hpcCBUZWNobm9sb2d5IEluYy4gYW5kIGl0cyBzdWJzaWRpYXJpZXMuCiogWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBhbmQgYW55IGRlcml2YXRpdmVzIGV4Y2x1c2l2ZWx5IHdpdGgKKiBNaWNyb2NoaXAgcHJvZHVjdHMuCiogVEhJUyBTT0ZUV0FSRSBJUyBTVVBQTElFRCBCWSBNSUNST0NISVAgIkFTIElTIi4KKiBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLAoqIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwKKiBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIElUUyBJTlRFUkFDVElPTiBXSVRIIE1JQ1JPQ0hJUAoqIFBST0RVQ1RTLCBDT01CSU5BVElPTiBXSVRIIEFOWSBPVEhFUiBQUk9EVUNUUywgT1IgVVNFIElOIEFOWSBBUFBMSUNBVElPTi4KKiBJTiBOTyBFVkVOVCBXSUxMIE1JQ1JPQ0hJUCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgUFVOSVRJVkUsCiogSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIExPU1MsIERBTUFHRSwgQ09TVCBPUiBFWFBFTlNFIE9GIEFOWSBLSU5ECiogV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgSE9XRVZFUiBDQVVTRUQsIEVWRU4gSUYgTUlDUk9DSElQIEhBUwoqIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT1IgVEhFIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLgoqIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBBTExPV0VEIEJZIExBVywgTUlDUk9DSElQJ1MgVE9UQUwgTElBQklMSVRZIE9OIEFMTAoqIENMQUlNUyBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhJUyBTT0ZUV0FSRSBXSUxMIE5PVCBFWENFRUQgVEhFIEFNT1VOVCBPRgoqIEZFRVMsIElGIEFOWSwgVEhBVCBZT1UgSEFWRSBQQUlEIERJUkVDVExZIFRPIE1JQ1JPQ0hJUCBGT1IgVEhJUyBTT0ZUV0FSRS4KKiBNSUNST0NISVAgUFJPVklERVMgVEhJUyBTT0ZUV0FSRSBDT05ESVRJT05BTExZIFVQT04gWU9VUiBBQ0NFUFRBTkNFCiogT0YgVEhFU0UgVEVSTVMuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVmVyc2lvbiBDb250cm9sIEluZm9ybWF0aW9uIChQZXJmb3JjZSkKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiRSZXZpc2lvbjogIzEgJCAKJERhdGVUaW1lOiAyMDE2LzA0LzA4IDEwOjE4OjI4ICQgCiRBdXRob3I6IHByYW1hbnMgJApMYXN0IENoYW5nZToJVXBkYXRlZCB3aXRoIHVuaXQgdGVzdGluZyBmZWVkYmFja3MKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiogQGZpbGUgYnRpbWVyLmgKKiBcYnJpZWYgQmFzaWMgVGltZXIgUGVyaXBoZXJhbCBIZWFkZXIgZmlsZQoqIFxhdXRob3IganZhc2FudGgKKiAKKiBUaGlzIGZpbGUgaXMgdGhlIGhlYWRlciBmaWxlIGZvciBCYXNpYyBUaW1lciBQZXJpcGhlcmFsIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKiogQGRlZmdyb3VwIEJhc2ljX1RpbWVyCiAqICBAewogKi8KCiNpZm5kZWYgX0JUSU1FUl9ICiNkZWZpbmUgX0JUSU1FUl9ICgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiogIExvZ2ljYWwgVGltZXIgSUQgZm9yIEFQSXMuCiAqIFRoaXMgaXMgdGhlIHRpbWVyIElEcyBwYXNzZWQgdG8gQmFzaWMgVGltZXIgQVBJIGZ1bmN0aW9uIGNhbGxzIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZW51bSBfUElEX0JUSU1FUl8KewoJUElEX0JUSU1FUl8wLAoJUElEX0JUSU1FUl8xLAoJUElEX0JUSU1FUl8yLAoJUElEX0JUSU1FUl8zLAoJUElEX0JUSU1FUl80LAoJUElEX0JUSU1FUl81LAoJUElEX0JUSU1FUl9NQVgJCn07CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICBMb2dpY2FsIGZsYWdzIGZvciBUaW1lciBDb250cm9sICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovL1RoaXMgaXMgZm9yIHRtcl9jbnRsIHBhcmFtZXRlciBpbiBidGltZXJfaW5pdCBmdW5jdGlvbgojZGVmaW5lIEJUSU1FUl9BVVRPX1JFU1RBUlQgICAgIAkJCSAgICAgKDB4MDh1KQojZGVmaW5lIEJUSU1FUl9PTkVfU0hPVCAgICAgICAgIAkJCSAgICAgKDB1KQojZGVmaW5lIEJUSU1FUl9DT1VOVF9VUCAgICAgICAgIAkJCSAgICAgKDB4MDR1KQojZGVmaW5lIEJUSU1FUl9DT1VOVF9ET1dOICAgICAgIAkJCSAgICAgKDB1KQojZGVmaW5lIEJUSU1FUl9JTlRfRU4gICAgICAgICAgIAkJCSAgICAgKDB4MDF1KQojZGVmaW5lIEJUSU1FUl9OT19JTlQgICAgICAgICAgIAkJCSAgICAgKDB1KQovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoKLy9UaW1lciBCbG9jayBIYXJkd2FyZSBCaXRzIGFuZCBNYXNrcwojZGVmaW5lIEJUSU1FUl9DTlRMX0hBTFQgICAgICAgICAgICAgICAgICAgKDB4ODBVTCkKI2RlZmluZSBCVElNRVJfQ05UTF9SRUxPQUQgICAgICAgICAgICAgICAgICgweDQwVUwpCiNkZWZpbmUgQlRJTUVSX0NOVExfU1RBUlQgICAgICAgICAgICAgICAgICAoMHgyMFVMKQojZGVmaW5lIEJUSU1FUl9DTlRMX1NPRlRfUkVTRVQgICAgICAgICAgICAgKDB4MTBVTCkKI2RlZmluZSBCVElNRVJfQ05UTF9BVVRPX1JFU1RBUlQgICAgICAgICAgICgweDA4VUwpCiNkZWZpbmUgQlRJTUVSX0NOVExfQ09VTlRfVVAgICAgICAgICAgICAgICAoMHgwNFVMKQojZGVmaW5lIEJUSU1FUl9DTlRMX0VOQUJMRSAgICAgICAgICAgICAgICAgKDB4MDFVTCkKCiNkZWZpbmUgQlRJTUVSX0NOVExfSEFMVF9CSVQgICAgICAgICAgICAgICAoN1UpCiNkZWZpbmUgQlRJTUVSX0NOVExfUkVMT0FEX0JJVCAgICAgICAgICAgICAoNlUpCiNkZWZpbmUgQlRJTUVSX0NOVExfU1RBUlRfQklUICAgICAgICAgICAgICAoNVUpCiNkZWZpbmUgQlRJTUVSX0NOVFJMX1NPRlRfUkVTRVRfQklUICAgICAgICAoNFUpCiNkZWZpbmUgQlRJTUVSX0NOVExfQVVUT19SRVNUQVJUX0JJVCAgICAgICAoM1UpCiNkZWZpbmUgQlRJTUVSX0NOVExfQ09VTlRfRElSX0JJVCAgICAgICAgICAoMlUpCiNkZWZpbmUgQlRJTUVSX0NOVExfRU5BQkxFX0JJVCAgICAgICAgICAgICAoMFUpCgojZGVmaW5lIEJUSU1FUl9HSVJRCQkJCQkJCQkJCQkJCU1FQ19HSVJRMjNfSUQKI2RlZmluZSBCVElNRVJfTUFYX0lOU1RBTkNFCQkJCQkJCQkJUElEX0JUSU1FUl9NQVgKCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgQVBJIC0gQmFzaWMgVGltZXIgSW50aXRpYWxpemF0aW9uIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyoqIEluaXRpYWxpemUgc3BlY2lmaWVkIHRpbWVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICogQHBhcmFtIHRtcl9jbnRsIExvZ2ljYWwgZmxhZ3MgZm9yIFRpbWVyIENvbnRyb2wKICogQHBhcmFtIGluaXRpYWxfY291bnQgSW5pdGlhbCBDb3VudAogKiBAcGFyYW0gcHJlbG9hZF9jb3VudCBQcmVsb2FkIENvdW50CiAqIEBub3RlIFBlcmZvcm1zIGEgc29mdCByZXNldCBvZiB0aGUgdGltZXIgYmVmb3JlIGNvbmZpZ3VyYXRpb24gCiAqLwp2b2lkIGJ0aW1lcl9pbml0KHVpbnQ4X3QgYnRpbWVyX2lkLCAKICAgICAgICAgICAgICAgdWludDE2X3QgdG1yX2NudGwsCiAgICAgICAgICAgICAgIHVpbnQxNl90IHByZXNjYWxlciwKICAgICAgICAgICAgICAgdWludDMyX3QgaW5pdGlhbF9jb3VudCwKICAgICAgICAgICAgICAgdWludDMyX3QgcHJlbG9hZF9jb3VudCk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICBBUEkgLSAgIEZ1bmN0aW9ucyB0byBwcm9ncmFtIGFuZCByZWFkIHRoZSBCYXNpYyBUaW1lciBDb3VudGVyICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiogUHJvZ3JhbSB0aW1lcidzIGNvdW50ZXIgcmVnaXN0ZXIuCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICogQHBhcmFtIGNvdW50IG5ldyBjb3VudGVyIHZhbHVlIAogKiBAbm90ZSBUaW1lciBoYXJkd2FyZSBtYXkgaW1wbGVtZW50IGEgMTYtYml0IG9yIDMyLWJpdCAKICogICAgICAgaGFyZHdhcmUgY291bnRlci4gSWYgdGhlIHRpbWVyIGlzIDE2LWJpdCBvbmx5IHRoZSBsb3dlcgogKiAgICAgICAxNi1iaXRzIG9mIHRoZSBjb3VudCBwYXJhbXRlciBhcmUgdXNlZC4KICovCnZvaWQgYnRpbWVyX2NvdW50X3NldCh1aW50OF90IGJ0aW1lcl9pZCwgdWludDMyX3QgY291bnQpOwoKLyoqIFJldHVybiBjdXJyZW50IHZhbHVlIG9mIHRpbWVyJ3MgY291bnQgcmVnaXN0ZXIuCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIAogKiBAcmV0dXJuIHVpbnQzMl90IHRpbWVyIGNvdW50IG1heSBiZSAzMiBvciAxNiBiaXRzIGRlcGVuZGluZyAKICogICAgICAgICB1cG9uIHRoZSBoYXJkd2FyZS4gIFRpbWVycyAwLTMgYXJlIDE2LWJpdAogKiAgICAgICAgIGFuZCBUaW1lcnMgNC01IGFyZSAzMi1iaXQuCiAqLwp1aW50MzJfdCBidGltZXJfY291bnRfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogIEFQSSAtICAgRnVuY3Rpb24gdG8gcmVsb2FkIGNvdW50ZXIgZnJvbSBQcmVsb2FkIFJlZ2lzdGVyICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qKiBGb3JjZSB0aW1lciB0byByZWxvYWQgY291bnRlciBmcm9tIHByZWxvYWQgCiAqIHJlZ2lzdGVyLiAgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIAogKiBAbm90ZSBIYXJkd2FyZSB3aWxsIG9ubHkgcmVsb2FkIGNvdW50ZXIgaWYgdGltZXIgaXMgcnVubmluZy4gCiAqLwp2b2lkIGJ0aW1lcl9yZWxvYWQodWludDhfdCBidGltZXJfaWQpOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgQVBJIC0gICAgRnVuY3Rpb25zIGZvciBzdG9wcGluZyBhbmQgc3RhcnRpbmcgdGhlIGJhc2ljIFRpbWVyICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyoqIFN0YXJ0IHRpbWVyIGNvdW50aW5nLgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELgogKi8Kdm9pZCBidGltZXJfc3RhcnQodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFN0b3AgdGltZXIuIAogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELiAKICogQG5vdGUgV2hlbiBhIHN0b3BwZWQgdGltZXIgaXMgc3RhcnRlZCBhZ2FpbiBpdCB3aWxsIHJlbG9hZCAKICogICAgICAgdGhlIGNvdW50IHJlZ2lzdGVyIGZyb20gcHJlbG9hZCB2YWx1ZS4KICovCnZvaWQgYnRpbWVyX3N0b3AodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFJldHVybiBzdGF0ZSBvZiB0aW1lcidzIFNUQVJUIGJpdC4gCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIAogKiBAcmV0dXJuIHVpbnQ4X3QgMCh0aW1lciBub3Qgc3RhcnRlZCksIDEgKHRpbWVyIHN0YXJ0ZWQpCiAqLwp1aW50OF90IGJ0aW1lcl9pc19zdGFydGVkKHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogIEFQSSAtICAgICAgICAgRnVuY3Rpb24gdG8gcGVyZm9ybSBiYXNpYyB0aW1lciBzb2Z0IHJlc2V0ICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qKiBQZWZvcm0gc29mdCByZXNldCBvZiBzcGVjaWZpZWQgdGltZXIuIAogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKiBAbm90ZSBTb2Z0IHJlc2V0IHNldCBhbGwgcmVnaXN0ZXJzIHRvIFBPUiB2YWx1ZXMuCiAqIFNwaW5zIDI1NiB0aW1lcyB3YWl0aW5nIG9uIGhhcmR3YXJlIHRvIGNsZWFyIHJlc2V0IGJpdC4gCiAqLwp2b2lkIGJ0aW1lcl9yZXNldCh1aW50OF90IGJ0aW1lcl9pZCk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgQVBJIC0gICAgICAgIEZ1bmN0aW9ucyB0byBoYWx0L3VuaGFsdCB0aGUgdGltZXIgY291bnRpbmcgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiogSGFsdCB0aW1lciBjb3VudGluZyB3aXRoIG5vIHJlbG9hZCBvbiB1bmhhbHQuICAgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIAogKiBAbm90ZSBBIGhhbHRlZCB0aW1lciB3aWxsIG5vdCByZWxvYWQgdGhlIGNvdW50IHJlZ2lzdGVyIHdoZW4gCiAqICAgICAgIHVuaGFsdGVkLCBpdCB3aWxsIGNvbnRpbnVlIGNvdW50aW5nIGZyb20gdGhlIGN1cnJlbnQKICogICAgICAgY291bnQgdmFsdWUuCiAqLwp2b2lkIGJ0aW1lcl9oYWx0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBVbmhhbHQgdGltZXIgY291bnRpbmcuIAogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELgogKi8Kdm9pZCBidGltZXJfdW5oYWx0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICBBUEkgLSAgICAgICAgRnVuY3Rpb25zIGZvciBCYXNpYyBUaW1lciBpbnRlcnJ1cHQgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qKiBFbmFibGUgc3BlY2lmaWVkIHRpbWVyJ3MgaW50ZXJydXB0IGZyb20gdGhlIGJsb2NrLiAKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4KICogQHBhcmFtIGllbiBOb24temVybyBlbmFibGUgaW50ZXJydXB0IGluIHRpbWVyIGJsb2NrLCAwIAogKiAgICAgICAgICAgIGRpc2FibGUuCiAqLwp2b2lkIGJ0aW1lcl9pbnRlcnJ1cHRfZW5hYmxlKHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50OF90IGllbik7CgovKiogUmVhZCBUaW1lciBpbnRlcnJ1cHQgc3RhdHVzIGFuZCBjbGVhciBpZiBzZXQgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuIAogKiBAcmV0dXJuIHVpbnQ4X3QgMSAoVGltZXIgaW50ZXJydXB0IHN0YXR1cyBzZXQpIGVsc2UgMC4gCiAqIEBub3RlIElmIHRpbWVyIGludGVycnVwdCBzdGF0dXMgaXMgc2V0IHRoZW4gY2xlYXIgaXQgYmVmb3JlIAogKiAgICAgICByZXR1cm5pbmcuCiAqLwp1aW50OF90IGJ0aW1lcl9pbnRlcnJ1cHRfc3RhdHVzX2dldF9jbHIodWludDhfdCBidGltZXJfaWQpOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgQVBJIC0gICAgICAgICBGdW5jdGlvbnMgZm9yIEJhc2ljIFRpbWVyIEdJUlEgICAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyoqIEVuYWJsZXMgR0lSUSBlbmFibGUgYml0IGZvciB0aGUgdGltZXIgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuCiAqLwp2b2lkIGJ0aW1lcl9naXJxX2VuYWJsZV9zZXQodWludDhfdCBidGltZXJfaWQpOwoKLyoqIENsZWFycyBHSVJRIGVuYWJsZSBiaXQgZm9yIHRoZSB0aW1lciAKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4KICovCnZvaWQgYnRpbWVyX2dpcnFfZW5hYmxlX2Nscih1aW50OF90IGJ0aW1lcl9pZCk7CgovKiogUmV0dXJucyBHSVJRIHNvdXJjZSBiaXQgZm9yIHRoZSB0aW1lciAKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRC4KICogQHJldHVybiB1aW50OF90IDAoc3JjIGJpdCBub3Qgc2V0KSwgTm9uLXplcm8gKHNyYyBiaXQgc2V0KQogKi8KdWludDhfdCBidGltZXJfZ2lycV9zcmNfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBDbGVhcnMgR0lSUSBzb3VyY2UgYml0IGZvciB0aGUgdGltZXIgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuCiAqLwp2b2lkIGJ0aW1lcl9naXJxX3NyY19jbHIodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFJldHVybnMgR0lSUSByZXN1bHQgYml0IGZvciB0aGUgdGltZXIgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuCiAqIEByZXR1cm4gdWludDhfdCAwKHJlc3VsdCBiaXQgbm90IHNldCksIE5vbi16ZXJvIChyZXN1bHQgYml0IHNldCkKICovCnVpbnQ4X3QgYnRpbWVyX2dpcnFfcmVzdWx0X2dldCh1aW50OF90IGJ0aW1lcl9pZCk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICBBUEkgLSAgICAgICAgIEZ1bmN0aW9ucyBmb3IgQmFzaWMgVGltZXIgU2xlZXAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiogRW5hYmxlL0Rpc2FibGUgY2xvY2sgZ2F0aW5nIG9uIGlkbGUgb2YgYSB0aW1lciAgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuCiAqIEBwYXJhbSBzbGVlcF9lbiAxID0gU2xlZXAgZW5hYmxlLCAwID0gU2xlZXAgZGlzYWJsZQogKi8Kdm9pZCBidGltZXJfc2xlZXAodWludDhfdCBidGltZXJfaWQsIHVpbnQ4X3Qgc2xlZXBfZW4pOwoKLyoqIFJldHVybnMgY2xrIHJlcXVpcmVkIHN0YXR1cyBmb3IgdGhlIHRpbWVyIGJsb2NrCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQuCiAqIEByZXR1cm4gTm9uLXplcm8gaWYgY2xrIHJlcXVpcmVkLCBlbHNlIDAKICovCnVpbnQzMl90IGJ0aW1lcl9jbGtfcmVxZF9zdHNfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBFbmFibGUvRGlzYWJsZSByZXNldCBvbiBzbGVlcCBmb3IgdGhlIHRpbWVyIGJsb2NrIAogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElELgogKiBAcGFyYW0gcmVzZXRfZW4gMSB0byBlbmFibGUsIDAgdG8gZGlzYWJsZQogKi8Kdm9pZCBidGltZXJfcmVzZXRfb25fc2xlZXAodWludDhfdCBidGltZXJfaWQsIHVpbnQ4X3QgcmVzZXRfZW4pOwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiBQZXJpcGhlcmFsIEZ1bmN0aW9uIC0gRnVuY3Rpb25zIHRvIHNldCBhbmQgcmVhZCBUaW1lciBDb3VudGVyIFJlZ2lzdGVyICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyoqIFNldHMgdGltZXIgY291bnRlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqIEBwYXJhbSBjb3VudAktIDMyLWJpdCBjb3VudGVyICAKICovCnZvaWQgcF9idGltZXJfY291bnRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50MzJfdCBjb3VudCk7CgovKiogUmVhZCB0aGUgdGltZXIgY291bnRlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqIEByZXR1cm4gY291bnQJLSAzMi1iaXQgY291bnRlciAgCiAqLwp1aW50MzJfdCBwX2J0aW1lcl9jb3VudF9nZXQodWludDhfdCBidGltZXJfaWQpOwoKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogUGVyaXBoZXJhbCBGdW5jdGlvbiAtIEZ1bmN0aW9uIHRvIHByb2dyYW0gdGhlIFByZWxvYWQgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qKiBTZXRzIHByZWxvYWQgZm9yIHRoZSBjb3VudGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICogQHBhcmFtIHByZWxvYWRfY291bnQJLSAzMi1iaXQgcHJlLWxvYWQgdmFsdWUgCiAqLwp2b2lkIHBfYnRpbWVyX3ByZWxvYWRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50MzJfdCBwcmVsb2FkX2NvdW50KTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogUGVyaXBoZXJhbCBGdW5jdGlvbnMgLSBGdW5jdGlvbnMgZm9yIGJhc2ljIHRpbWVyIGludGVycnVwdHMgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qKiBSZWFkcyB0aGUgaW50ZXJydXB0IHN0YXR1cyBiaXQgaW4gdGhlIHRpbWVyIGJsb2NrCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgCiAqIEByZXR1cm4gc3RhdHVzIC0gMSBpZiBpbnRlcnJ1cHQgc3RhdHVzIHNldCwgZWxzZSAwCiAqLwp1aW50OF90IHBfYnRpbWVyX2ludF9zdGF0dXNfZ2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBDbGVhcnMgaW50ZXJydXB0IHN0YXR1cyBiaXQgaW4gdGhlIHRpbWVyIGJsb2NrCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgCiAqLwp2b2lkIHBfYnRpbWVyX2ludF9zdGF0dXNfY2xyKHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBTZXRzIGludGVycnVwdCBlbmFibGUgYml0IGluIHRoZSB0aW1lciBibG9jawogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEICAKICovCnZvaWQgcF9idGltZXJfaW50X2VuYWJsZV9zZXQodWludDhfdCBidGltZXJfaWQpOwoKLyoqIENsZWFycyBpbnRlcnJ1cHQgZW5hYmxlIGJpdCBmb3IgdGhlIHRpbWVyIGJsb2NrCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgIAogKi8Kdm9pZCBwX2J0aW1lcl9pbnRfZW5hYmxlX2Nscih1aW50OF90IGJ0aW1lcl9pZCk7CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qIFBlcmlwaGVyYWwgRnVuY3Rpb25zIC0gRnVuY3Rpb25zIGZvciBDb250cm9sIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiogV3JpdGVzIHRoZSBjb250cm9sIHJlZ2lzdGVyIDMyLWJpdHMKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKiBAcGFyYW0gdmFsdWUJLSAzMi1iaXQgdmFsdWUgdG8gcHJvZ3JhbQogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX3dyaXRlKHVpbnQ4X3QgYnRpbWVyX2lkLCB1aW50MzJfdCB2YWx1ZSk7CgovKiogUmVhZHMgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICogQHJldHVybiB1aW50MzJfdAktIDMyLWJpdCB2YWx1ZQogKi8KdWludDMyX3QgcF9idGltZXJfY3RybF9yZWFkKHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBDbGVhcnMgZW5hYmxlIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElECiAqLwp2b2lkIHBfYnRpbWVyX2N0cmxfZW5hYmxlX3NldCh1aW50OF90IGJ0aW1lcl9pZCk7CgovKiogQ2xlYXJzIGVuYWJsZSBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2VuYWJsZV9jbHIodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFNldHMgY291bnRlciBkaXJlY3Rpb24gYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICovCnZvaWQgcF9idGltZXJfY3RybF9jb3VudGVyX2Rpcl9zZXQodWludDhfdCBidGltZXJfaWQpOwoKLyoqIENsZWFycyBjb3VudGVyIGRpcmVjdGlvbiBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2NvdW50ZXJfZGlyX2Nscih1aW50OF90IGJ0aW1lcl9pZCk7CgovKiogU2V0cyBhdXRvIHJlc3RhcnQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQKICovCnZvaWQgcF9idGltZXJfY3RybF9hdXRvX3Jlc3RhcnRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBDbGVhcnMgYXV0byByZXNldGFydCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2F1dG9fcmVzdGFydF9jbHIodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFNldHMgc29mdCByZXNldCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCAKICovCnZvaWQgcF9idGltZXJfY3RybF9zb2Z0X3Jlc2V0X3NldCh1aW50OF90IGJ0aW1lcl9pZCk7CgovKiogUmVhZCBTb2Z0IFJlc2V0IGJpdCAKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKiBAcmV0dXJuIDAgaWYgc29mdCByZXNldCBzdGF0dXMgYml0IGNsZWFyZWQ7IGVsc2Ugbm9uLXplcm8gdmFsdWUKICovCnVpbnQ4X3QgcF9idGltZXJfY3RybF9zb2Z0X3Jlc2V0X3N0c19nZXQodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFNldHMgc3RhcnQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgCiAqLwp2b2lkIHBfYnRpbWVyX2N0cmxfc3RhcnRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBSZWFkIHN0YXJ0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKiBAcmV0dXJuIDAgaWYgc3RhcnQgYml0IG5vdCBzZXQ7IGVsc2Ugbm9uLXplcm8gdmFsdWUKICovCnVpbnQ4X3QgcF9idGltZXJfY3RybF9zdGFydF9nZXQodWludDhfdCBidGltZXJfaWQpOwoKLyoqIENsZWFycyBzdGFydCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCAKICovCnZvaWQgcF9idGltZXJfY3RybF9zdGFydF9jbHIodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFNldHMgcmVsb2FkIGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX3JlbG9hZF9zZXQodWludDhfdCBidGltZXJfaWQpOwoKLyoqIENsZWFycyByZWxvYWQgYml0IGluIHRoZSBjb250cm9sIHJlZ2lzdGVyCiAqIEBwYXJhbSBidGltZXJfaWQgQmFzaWMgVGltZXIgSUQgCiAqLwp2b2lkIHBfYnRpbWVyX2N0cmxfcmVsb2FkX2Nscih1aW50OF90IGJ0aW1lcl9pZCk7CgovKiogU2V0cyBoYWx0IGJpdCBpbiB0aGUgY29udHJvbCByZWdpc3RlcgogKiBAcGFyYW0gYnRpbWVyX2lkIEJhc2ljIFRpbWVyIElEIAogKi8Kdm9pZCBwX2J0aW1lcl9jdHJsX2hhbHRfc2V0KHVpbnQ4X3QgYnRpbWVyX2lkKTsKCi8qKiBDbGVhcnMgaGFsdCBiaXQgaW4gdGhlIGNvbnRyb2wgcmVnaXN0ZXIKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRCAKICovCgp2b2lkIHBfYnRpbWVyX2N0cmxfaGFsdF9jbHIodWludDhfdCBidGltZXJfaWQpOwoKLyoqIFNldHMgcHJlc2NhbGUgdmFsdWUKICogQHBhcmFtIGJ0aW1lcl9pZCBCYXNpYyBUaW1lciBJRAogKiBAcGFyYW0gcHJlc2NhbGVyCS0gMTYtYml0IHByZS1zY2FsZSB2YWx1ZSAKICovCnZvaWQgcF9idGltZXJfY3RybF9wcmVzY2FsZV9zZXQodWludDhfdCBidGltZXJfaWQsIHVpbnQxNl90IHByZXNjYWxlcik7CgoKI2VuZGlmIC8vICNpZm5kZWYgX0JUSU1FUl9ICgovKiBlbmQgYnRpbWVyX3BlcnBobC5jICovCgovKiogICBAfSAvL1BlcmlwaGVyYWxzIEJhc2ljX1RpbWVyCiAqLwoK