LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgdGltZXIuaAogKiBWZXJzaW9uOiAgICAgICAKICogRGVzY3JpcHRpb246ICAgCiAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KICogQXV0aG9yOiAgICAgICAgRGFnIEJyYXR0bGkgPGRhZ2JAY3MudWl0Lm5vPgogKiBDcmVhdGVkIGF0OiAgICBTYXQgQXVnIDE2IDAwOjU5OjI5IDE5OTcKICogTW9kaWZpZWQgYXQ6ICAgVGh1IE9jdCAgNyAxMjoyNToyNCAxOTk5CiAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogCiAqICAgICBDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgtMTk5OSBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+LCAKICogICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAqICAgICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBKZWFuIFRvdXJyaWxoZXMgPGp0QGhwbC5ocC5jb20+CiAqICAgICAKICogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgCiAqICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyAKICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCiAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2lmbmRlZiBUSU1FUl9ICiNkZWZpbmUgVElNRVJfSAoKI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CgojaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAvKiBmb3IgSFogKi8KCiNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CgovKiBBIGZldyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAodG8gbWFrZSBjb21waWxlciBoYXBweSkgKi8Kc3RydWN0IGlybG1wX2NiOwpzdHJ1Y3QgaXJsYXBfY2I7CnN0cnVjdCBsc2FwX2NiOwpzdHJ1Y3QgbGFwX2NiOwoKLyogCiAqICBUaW1lb3V0IGRlZmluaXRpb25zLCBzb21lIGRlZmluZWQgaW4gSXJMQVAgNi4xMy41IC0gcC4gOTIKICovCiNkZWZpbmUgUE9MTF9USU1FT1VUICAgICAgICAoNDUwKkhaLzEwMDApICAgIC8qIE11c3QgbmV2ZXIgZXhjZWVkIDUwMCBtcyAqLwojZGVmaW5lIEZJTkFMX1RJTUVPVVQgICAgICAgKDUwMCpIWi8xMDAwKSAgICAvKiBNdXN0IG5ldmVyIGV4Y2VlZCA1MDAgbXMgKi8KCi8qIAogKiAgTm9ybWFsbHkgdHdpY2Ugb2YgcC10aW1lci4gTm90ZSAzLCBJckxBUCA2LjMuMTEuMiAtIHAuIDYwIHN1Z2dlc3RzCiAqICBhdCBsZWFzdCB0d2ljZSBkdXJhdGlvbiBvZiB0aGUgUC10aW1lci4KICovCiNkZWZpbmUgV0RfVElNRU9VVCAgICAgICAgICAoUE9MTF9USU1FT1VUKjIpCgojZGVmaW5lIE1FRElBQlVTWV9USU1FT1VUICAgKDUwMCpIWi8xMDAwKSAgICAvKiA1MDAgbXNlYyAqLwojZGVmaW5lIFNNQUxMQlVTWV9USU1FT1VUICAgKDEwMCpIWi8xMDAwKSAgICAvKiAxMDAgbXNlYyAtIElyTEFQIDYuMTMuNCAqLwoKLyoKICogIFNsb3QgdGltZXIgbXVzdCBuZXZlciBleGNlZWQgODUgbXMsIGFuZCBtdXN0IGFsd2F5cyBiZSBhdCBsZWFzdCAyNSBtcywgCiAqICBzdWdnZXN0ZWQgdG8gIDc1LTg1IG1zZWMgYnkgSXJEQSBsaXRlLiBUaGlzIGRvZXNuJ3Qgd29yayB3aXRoIGEgbG90IG9mCiAqICBkZXZpY2VzLCBhbmQgb3RoZXIgc3RhY2tlcyB1c2VzIGEgbG90IG1vcmUsIHNvIGl0J3MgYmVzdCB3ZSBkbyBpdCBhcyB3ZWxsCiAqICAoTm90ZSA6IHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgYW5kIHN5c2N0bCBvdmVyaWRlcyBpdCAtIEplYW4gSUkpCiAqLwojZGVmaW5lIFNMT1RfVElNRU9VVCAgICAgICAgICAgICg5MCpIWi8xMDAwKQoKLyogCiAqICBUaGUgbGF0ZXN0IGRpc2NvdmVyeSBmcmFtZSAoWElEKSBpcyBsb25nZXIgZHVlIHRvIHRoZSBleHRyYSBkaXNjb3ZlcnkKICogIGluZm9ybWF0aW9uIChoaW50cywgZGV2aWNlIG5hbWUuLi4pLiBUaGlzIGlzIGl0cyBleHRyYSBsZW5ndGguCiAqICBXZSB1c2UgdGhhdCB3aGVuIHNldHRpbmcgdGhlIHF1ZXJ5IHRpbWVvdXQuIEplYW4gSUkKICovCiNkZWZpbmUgWElERVhUUkFfVElNRU9VVCAgICAgICAgKDM0KkhaLzEwMDApICAvKiAzNCBtc2VjICovCgojZGVmaW5lIFdBVENIRE9HX1RJTUVPVVQgICAgICAgICgyMCpIWikgICAgICAgLyogMjAgc2VjICovCgp0eXBlZGVmIHZvaWQgKCpUSU1FUl9DQUxMQkFDSykodm9pZCAqKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBpcmRhX3N0YXJ0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICpwdGltZXIsIGludCB0aW1lb3V0LCAKCQkJCSAgICB2b2lkKiBkYXRhLCBUSU1FUl9DQUxMQkFDSyBjYWxsYmFjaykKewoJcHRpbWVyLT5mdW5jdGlvbiA9ICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkgY2FsbGJhY2s7CglwdGltZXItPmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGF0YTsKCQoJLyogU2V0IG5ldyB2YWx1ZSBmb3IgdGltZXIgKHVwZGF0ZSBvciBhZGQgdGltZXIpLgoJICogV2UgdXNlIG1vZF90aW1lcigpIGJlY2F1c2UgaXQncyBtb3JlIGVmZmljaWVudCBhbmQgYWxzbwoJICogc2FmZXIgd2l0aCByZXNwZWN0IHRvIHJhY2UgY29uZGl0aW9ucyAtIEplYW4gSUkgKi8KCW1vZF90aW1lcihwdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTsKfQoKCnZvaWQgaXJsYXBfc3RhcnRfc2xvdF90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KTsKdm9pZCBpcmxhcF9zdGFydF9xdWVyeV90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCBTLCBpbnQgcyk7CnZvaWQgaXJsYXBfc3RhcnRfZmluYWxfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7CnZvaWQgaXJsYXBfc3RhcnRfd2RfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7CnZvaWQgaXJsYXBfc3RhcnRfYmFja29mZl90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYsIGludCB0aW1lb3V0KTsKCnZvaWQgaXJsYXBfc3RhcnRfbWJ1c3lfdGltZXIoc3RydWN0IGlybGFwX2NiICpzZWxmLCBpbnQgdGltZW91dCk7CnZvaWQgaXJsYXBfc3RvcF9tYnVzeV90aW1lcihzdHJ1Y3QgaXJsYXBfY2IgKik7Cgp2b2lkIGlybG1wX3N0YXJ0X3dhdGNoZG9nX3RpbWVyKHN0cnVjdCBsc2FwX2NiICosIGludCB0aW1lb3V0KTsKdm9pZCBpcmxtcF9zdGFydF9kaXNjb3ZlcnlfdGltZXIoc3RydWN0IGlybG1wX2NiICosIGludCB0aW1lb3V0KTsKdm9pZCBpcmxtcF9zdGFydF9pZGxlX3RpbWVyKHN0cnVjdCBsYXBfY2IgKiwgaW50IHRpbWVvdXQpOwp2b2lkIGlybG1wX3N0b3BfaWRsZV90aW1lcihzdHJ1Y3QgbGFwX2NiICpzZWxmKTsKCiNlbmRpZgoK