LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIFRyYWNlYWx5emVyIHYyLjQuMSBSZWNvcmRlciBMaWJyYXJ5DQogKiBQZXJjZXBpbyBBQiwgd3d3LnBlcmNlcGlvLmNvbQ0KICoNCiAqIHRyY0hhcmR3YXJlUG9ydC5oDQogKg0KICogQ29udGFpbnMgdG9nZXRoZXIgd2l0aCB0cmNIYXJkd2FyZVBvcnQuYyBhbGwgaGFyZHdhcmUgcG9ydGFiaWxpdHkgaXNzdWVzIG9mDQogKiB0aGUgdHJhY2UgcmVjb3JkZXIgbGlicmFyeS4NCiAqDQogKiBUZXJtcyBvZiBVc2UNCiAqIFRoaXMgc29mdHdhcmUgaXMgY29weXJpZ2h0IFBlcmNlcGlvIEFCLiBUaGUgcmVjb3JkZXIgbGlicmFyeSBpcyBmcmVlIGZvcg0KICogdXNlIHRvZ2V0aGVyIHdpdGggUGVyY2VwaW8gcHJvZHVjdHMuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcmVjb3JkZXIgbGlicmFyeQ0KICogaW4gaXRzIG9yaWdpbmFsIGZvcm0sIGluY2x1ZGluZyBtb2RpZmljYXRpb25zIGluIHRyY1BvcnQuYyBhbmQgdHJjUG9ydC5oDQogKiBnaXZlbiB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbiBhcmUgY2xlYXJseSBtYXJrZWQgYXMgeW91ciBvd24gbW9kaWZpY2F0aW9ucw0KICogYW5kIGRvY3VtZW50ZWQgaW4gdGhlIGluaXRpYWwgY29tbWVudCBzZWN0aW9uIG9mIHRoZXNlIHNvdXJjZSBmaWxlcy4NCiAqIFRoaXMgc29mdHdhcmUgaXMgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBQZXJjZXBpbyBBQiBhbmQgbWF5IG5vdCBiZQ0KICogc29sZCBvciBpbiBvdGhlciB3YXlzIGNvbW1lcmNpYWxseSByZWRpc3RyaWJ1dGVkIHdpdGhvdXQgZXhwbGljaXQgd3JpdHRlbg0KICogcGVybWlzc2lvbiBieSBQZXJjZXBpbyBBQi4NCiAqDQogKiBEaXNjbGFpbWVyDQogKiBUaGUgdHJhY2UgdG9vbCBhbmQgcmVjb3JkZXIgbGlicmFyeSBpcyBiZWluZyBkZWxpdmVyZWQgdG8geW91IEFTIElTIGFuZA0KICogUGVyY2VwaW8gQUIgbWFrZXMgbm8gd2FycmFudHkgYXMgdG8gaXRzIHVzZSBvciBwZXJmb3JtYW5jZS4gUGVyY2VwaW8gQUIgZG9lcw0KICogbm90IGFuZCBjYW5ub3Qgd2FycmFudCB0aGUgcGVyZm9ybWFuY2Ugb3IgcmVzdWx0cyB5b3UgbWF5IG9idGFpbiBieSB1c2luZyB0aGUNCiAqIHNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24uIFBlcmNlcGlvIEFCIG1ha2Ugbm8gd2FycmFudGllcywgZXhwcmVzcyBvcg0KICogaW1wbGllZCwgYXMgdG8gbm9uaW5mcmluZ2VtZW50IG9mIHRoaXJkIHBhcnR5IHJpZ2h0cywgbWVyY2hhbnRhYmlsaXR5LCBvcg0KICogZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4gSW4gbm8gZXZlbnQgd2lsbCBQZXJjZXBpbyBBQiwgaXRzDQogKiB0ZWNobm9sb2d5IHBhcnRuZXJzLCBvciBkaXN0cmlidXRvcnMgYmUgbGlhYmxlIHRvIHlvdSBmb3IgYW55IGNvbnNlcXVlbnRpYWwsDQogKiBpbmNpZGVudGFsIG9yIHNwZWNpYWwgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBsb3N0IHByb2ZpdHMgb3IgbG9zdCBzYXZpbmdzLA0KICogZXZlbiBpZiBhIHJlcHJlc2VudGF0aXZlIG9mIFBlcmNlcGlvIEFCIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5DQogKiBvZiBzdWNoIGRhbWFnZXMsIG9yIGZvciBhbnkgY2xhaW0gYnkgYW55IHRoaXJkIHBhcnR5LiBTb21lIGp1cmlzZGljdGlvbnMgZG8NCiAqIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCBvciBzcGVjaWFsDQogKiBkYW1hZ2VzLCBvciB0aGUgZXhjbHVzaW9uIG9mIGltcGxpZWQgd2FycmFudGllcyBvciBsaW1pdGF0aW9ucyBvbiBob3cgbG9uZyBhbg0KICogaW1wbGllZCB3YXJyYW50eSBtYXkgbGFzdCwgc28gdGhlIGFib3ZlIGxpbWl0YXRpb25zIG1heSBub3QgYXBwbHkgdG8geW91Lg0KICoNCiAqIENvcHlyaWdodCBQZXJjZXBpbyBBQiwgMjAxMy4NCiAqIHd3dy5wZXJjZXBpby5jb20NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCiNpZm5kZWYgVFJDUE9SVF9IDQojZGVmaW5lIFRSQ1BPUlRfSA0KDQojaW5jbHVkZSAidHJjS2VybmVsUG9ydC5oIg0KDQovKiBJZiBXaW4zMiBwb3J0ICovDQojaWZkZWYgV0lOMzINCg0KICAgI3VuZGVmIF9XSU4zMl9XSU5OVA0KICAgI2RlZmluZSBfV0lOMzJfV0lOTlQgMHgwNjAwDQoNCiAgIC8qIFN0YW5kYXJkIGluY2x1ZGVzLiAqLw0KICAgI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAjaW5jbHVkZSA8d2luZG93cy5oPg0KICAgI2luY2x1ZGUgPGRpcmVjdC5oPg0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogVGhlIFdpbjMyIHBvcnQgYnkgZGVmYXVsdCBzYXZlcyB0aGUgdHJhY2UgdG8gZmlsZSBhbmQgdGhlbiBraWxscyB0aGUNCiAqIHByb2dyYW0gd2hlbiB0aGUgcmVjb3JkZXIgaXMgc3RvcHBlZCwgdG8gZmFjaWxpdGF0ZSBxdWljaywgc2ltcGxlIHRlc3RzDQogKiBvZiB0aGUgcmVjb3JkZXIuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KICAgI2RlZmluZSBXSU4zMl9QT1JUX1NBVkVfV0hFTl9TVE9QUEVEIDENCiAgICNkZWZpbmUgV0lOMzJfUE9SVF9FWElUX1dIRU5fU1RPUFBFRCAxDQoNCiNlbmRpZg0KDQojZGVmaW5lIERJUkVDVElPTl9JTkNSRU1FTlRJTkcgMQ0KI2RlZmluZSBESVJFQ1RJT05fREVDUkVNRU5USU5HIDINCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogU3VwcG9ydGVkIHBvcnRzDQogKg0KICogUE9SVF9IV0luZGVwZW5kZW50DQogKiBBIGhhcmR3YXJlIGluZGVwZW5kZW50IGZhbGxiYWNrIG9wdGlvbiBmb3IgZXZlbnQgdGltZXN0YW1waW5nLiBQcm92aWRlcyBsb3cNCiAqIHJlc29sdXRpb24gdGltZXN0YW1wcyBiYXNlZCBvbiB0aGUgT1MgdGljay4NCiAqIFRoaXMgbWF5IGJlIHVzZWQgb24gdGhlIFdpbjMyIHBvcnQsIGJ1dCBtYXkgYWxzbyBiZSB1c2VkIG9uIGVtYmVkZGVkIGhhcmR3YXJlDQogKiBwbGF0Zm9ybXMuIEFsbCB0aW1lIGR1cmF0aW9ucyB3aWxsIGJlIHRydW5jYXRlZCB0byB0aGUgT1MgdGljayBmcmVxdWVuY3ksDQogKiB0eXBpY2FsbHkgMSBLSHouIFRoaXMgbWVhbnMgdGhhdCBhIHRhc2sgb3IgSVNSIHRoYXQgZXhlY3V0ZXMgaW4gbGVzcyB0aGFuDQogKiAxIG1zIGdldCBhbiBleGVjdXRpb24gdGltZSBvZiB6ZXJvLg0KICoNCiAqIFBPUlRfV2luMzINCiAqICJBY2N1cmF0ZSIgdGltZXN0YW1waW5nIGJhc2VkIG9uIHRoZSBXaW5kb3dzIHBlcmZvcm1hbmNlIGNvdW50ZXIuIE5vdGUgdGhhdA0KICogdGhpcyBnaXZlcyB0aGUgaG9zdCBtYWNoaW5lIHRpbWUuDQogKg0KICogT2ZmaWNpYWxseSBzdXBwb3J0ZWQgaGFyZHdhcmUgdGltZXIgcG9ydHM6DQogKiAtIFBPUlRfQXRtZWxfQVQ5MVNBTTcNCiAqIC0gUE9SVF9BdG1lbF9VQzNBMA0KICogLSBQT1JUX0FSTV9Db3J0ZXhNDQogKiAtIFBPUlRfUmVuZXNhc19SWDYwMA0KICogLSBQT1JUX01pY3JvY2hpcF9kc1BJQ19BTkRfUElDMjQNCiAqDQogKiBXZSBhbHNvIHByb3ZpZGUgc2V2ZXJhbCAidW5vZmZpY2lhbCIgaGFyZHdhcmUtc3BlY2lmaWMgcG9ydHMuIFRoZXJlIGhhdmUNCiAqIGJlZW4gZGV2ZWxvcGVkIGJ5IGV4dGVybmFsIGNvbnRyaWJ1dG9ycywgYW5kIGhhdmUgbm90IHlldCBiZWVuIHZlcmlmaWVkDQogKiBieSBQZXJjZXBpbyBBQi4gTGV0IHVzIGtub3cgaWYgeW91IGhhdmUgcHJvYmxlbXMgZ2V0dGluZyB0aGVzZSB0byB3b3JrLg0KICoNCiAqIFVub2ZmaWNpYWwgaGFyZHdhcmUgc3BlY2lmaWMgcG9ydHMgcHJvdmlkZWQgYXJlOg0KICogLSBQT1JUX1RFWEFTX0lOU1RSVU1FTlRTX1RNUzU3MA0KICogLSBQT1JUX1RFWEFTX0lOU1RSVU1FTlRTX01TUDQzMA0KICogLSBQT1JUX01JQ1JPQ0hJUF9QSUMzMg0KICogLSBQT1JUX1hJTElOWF9QUEM0MDUNCiAqIC0gUE9SVF9YSUxJTlhfUFBDNDQwDQogKiAtIFBPUlRfWElMSU5YX01JQ1JPQkxBWkUNCiAqIC0gUE9SVF9OWFBfTFBDMjEwWA0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2RlZmluZSBQT1JUX05PVF9TRVQgICAgICAgICAgICAgICAgICAgICAgICAgIC0xDQoNCi8qKiogT2ZmaWNpYWxseSBzdXBwb3J0ZWQgaGFyZHdhcmUgdGltZXIgcG9ydHMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCiNkZWZpbmUgUE9SVF9IV0luZGVwZW5kZW50ICAgICAgICAgICAgICAgICAgICAgMA0KI2RlZmluZSBQT1JUX1dpbjMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxDQojZGVmaW5lIFBPUlRfQXRtZWxfQVQ5MVNBTTcgICAgICAgICAgICAgICAgICAgIDINCiNkZWZpbmUgUE9SVF9BdG1lbF9VQzNBMCAgICAgICAgICAgICAgICAgICAgICAgMw0KI2RlZmluZSBQT1JUX0FSTV9Db3J0ZXhNICAgICAgICAgICAgICAgICAgICAgICA0DQojZGVmaW5lIFBPUlRfUmVuZXNhc19SWDYwMCAgICAgICAgICAgICAgICAgICAgIDUNCiNkZWZpbmUgUE9SVF9NaWNyb2NoaXBfZHNQSUNfQU5EX1BJQzI0ICAgICAgICAgNg0KDQovKioqIFVub2ZmaWNpYWwgcG9ydHMsIHByb3ZpZGVkIGJ5IGV4dGVybmFsIGRldmVsb3BlcnMsIG5vdCB5ZXQgdmVyaWZpZWQgKioqKiovDQojZGVmaW5lIFBPUlRfVEVYQVNfSU5TVFJVTUVOVFNfVE1TNTcwICAgICAgICAgIDcNCiNkZWZpbmUgUE9SVF9URVhBU19JTlNUUlVNRU5UU19NU1A0MzAgICAgICAgICAgOA0KI2RlZmluZSBQT1JUX01JQ1JPQ0hJUF9QSUMzMiAgICAgICAgICAgICAgICAgICA5DQojZGVmaW5lIFBPUlRfWElMSU5YX1BQQzQwNSAgICAgICAgICAgICAgICAgICAgMTANCiNkZWZpbmUgUE9SVF9YSUxJTlhfUFBDNDQwICAgICAgICAgICAgICAgICAgICAxMQ0KI2RlZmluZSBQT1JUX1hJTElOWF9NSUNST0JMQVpFICAgICAgICAgICAgICAgIDEyDQojZGVmaW5lIFBPUlRfTlhQX0xQQzIxMFggICAgICAgICAgICAgICAgICAgICAgMTMNCg0KLyoqKiBTZWxlY3QgeW91ciBwb3J0IGhlcmUhICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2RlZmluZSBTRUxFQ1RFRF9QT1JUIFBPUlRfV2luMzINCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfTk9UX1NFVCkNCiNlcnJvciAiWW91IG5lZWQgdG8gZGVmaW5lIFNFTEVDVEVEX1BPUlQgaGVyZSEiDQojZW5kaWYNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIElSUV9QUklPUklUWV9PUkRFUg0KICoNCiAqIE1hY3JvIHdoaWNoIHNob3VsZCBiZSBkZWZpbmVkIGFzIGFuIGludGVnZXIgb2YgMCBvciAxLg0KICoNCiAqIFRoaXMgc2hvdWxkIGJlIDAgaWYgbG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBpbXBsaWVzIGhpZ2hlciBwcmlvcml0eQ0KICogbGV2ZWxzLCBzdWNoIGFzIG9uIEFSTSBDb3J0ZXggTS4gSWYgdGhlIG9wcG9zaXRlIHNjaGVtZSBpcyB1c2VkLCBpLmUuLA0KICogaWYgaGlnaGVyIElSUSBwcmlvcml0eSB2YWx1ZXMgbWVhbnMgaGlnaGVyIHByaW9yaXR5LCB0aGlzIHNob3VsZCBiZSAxLg0KICoNCiAqIFRoaXMgc2V0dGluZyBpcyBub3QgY3JpdGljYWwuIEl0IGlzIHVzZWQgb25seSB0byBzb3J0IGFuZCBjb2xvcml6ZSB0aGUNCiAqIGludGVycnVwdHMgaW4gcHJpb3JpdHkgb3JkZXIsIGluIGNhc2UgeW91IHJlY29yZCBpbnRlcnJ1cHRzIHVzaW5nDQogKiB0aGUgdlRyYWNlU3RvcmVJU1JCZWdpbiBhbmQgdlRyYWNlU3RvcmVJU1JFbmQgcm91dGluZXMuDQogKg0KICogV2UgcHJvdmlkZSB0aGlzIHNldHRpbmcgZm9yIHNvbWUgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcyBiZWxvdzoNCiAqIC0gQVJNIENvcnRleCBNOiAgICAgICAwIChsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBBdG1lbCBBVDkxU0FNN3g6ICAgIDEgKGhpZ2hlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBBdG1lbCBBVlIzMjogICAgICAgIDEgKGhpZ2hlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBSZW5lc2FzIFJYNjAwOiAgICAgIDEgKGhpZ2hlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBNaWNyb2NoaXAgUElDMjQ6ICAgIDAgKGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQpDQogKiAtIE1pY3JvY2hpcCBkc1BJQzogICAgMCAobG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gVEkgVE1TNTcwOiAgICAgICAgICAwIChsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBGcmVlc2NhbGUgSENTMDg6ICAgIDAgKGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQpDQogKiAtIEZyZWVzY2FsZSBIQ1MxMjogICAgMCAobG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gUG93ZXJQQyA0MDU6ICAgICAgICAwIChsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICogLSBQb3dlclBDIDQ0MDogICAgICAgIDAgKGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQpDQogKiAtIEZyZWVzY2FsZSBDb2xkRmlyZTogMSAoaGlnaGVyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQpDQogKiAtIE5YUCBMUEMyMTB4OiAgICAgICAgMCAobG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudCkNCiAqIC0gTWljcm9CbGF6ZTogICAgICAgIDAgIChsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50KQ0KICoNCiAqIElmIHlvdXIgY2hpcCBpcyBub3Qgb24gdGhlIGFib3ZlIGxpc3QsIGFuZCB5b3UgcGVyaGFwcyBrbm93IHRoaXMgZGV0YWlsIGJ5DQogKiBoZWFydCwgcGxlYXNlIGluZm9ybSB1cyBieSBlLW1haWwgdG8gc3VwcG9ydEBwZXJjZXBpby5jb20uDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICoNCiAqIEhXVEMgTWFjcm9zDQogKg0KICogVGhlc2UgZm91ciBIV1RDIG1hY3JvcyBwcm92aWRlcyBhIGhhcmR3YXJlIGlzb2xhdGlvbiBsYXllciByZXByZXNlbnRpbmcgYQ0KICogZ2VuZXJpYyBoYXJkd2FyZSB0aW1lci9jb3VudGVyIHVzZWQgZm9yIGRyaXZpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gdGljaywNCiAqIHN1Y2ggYXMgdGhlIFN5c1RpY2sgZmVhdHVyZSBvZiBBUk0gQ29ydGV4IE0zL000LCBvciB0aGUgUElUIG9mIHRoZSBBdG1lbA0KICogQVQ5MVNBTTdYLg0KICoNCiAqIEhXVENfQ09VTlQ6IFRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb3VudGVyLiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIHJlc2V0DQogKiBhIGVhY2ggdGljayBpbnRlcnJ1cHQuIFRodXMsIHdoZW4gdGhlIHRpY2sgaGFuZGxlciBzdGFydHMsIHRoZSBjb3VudGVyIGhhcw0KICogYWxyZWFkeSB3cmFwcGVkLg0KICoNCiAqIEhXVENfQ09VTlRfRElSRUNUSU9OOiBTaG91bGQgYmUgb25lIG9mOg0KICogLSBESVJFQ1RJT05fSU5DUkVNRU5USU5HIC0gZm9yIGhhcmR3YXJlIHRpbWVyL2NvdW50ZXJzIG9mIGluY3JlbWVudGluZyB0eXBlDQogKiAgIHN1Y2ggYXMgdGhlIFBJVCBvbiBBdG1lbCBBVDkxU0FNN1guDQogKiAgIFdoZW4gdGhlIGNvdW50ZXIgdmFsdWUgcmVhY2ggSFdUQ19QRVJJT0QsIGl0IGlzIHJlc2V0IHRvIHplcm8gYW5kIHRoZQ0KICogICBpbnRlcnJ1cHQgaXMgc2lnbmFsZWQuDQogKiAtIERJUkVDVElPTl9ERUNSRU1FTlRJTkcgLSBmb3IgaGFyZHdhcmUgdGltZXIvY291bnRlcnMgb2YgZGVjcmVtZW50aW5nIHR5cGUNCiAqICAgc3VjaCBhcyB0aGUgU3lzVGljayBvbiBBUk0gQ29ydGV4IE0zL000IGNoaXBzLg0KICogICBXaGVuIHRoZSBjb3VudGVyIHZhbHVlIHJlYWNoIDAsIGl0IGlzIHJlc2V0IHRvIEhXVENfUEVSSU9EIGFuZCB0aGUNCiAqICAgaW50ZXJydXB0IGlzIHNpZ25hbGVkLg0KICoNCiAqIEhXVENfUEVSSU9EOiBUaGUgbnVtYmVyIG9mIGluY3JlbWVudHMgb3IgZGVjcmVtZW50cyBvZiBIV1RDX0NPVU5UIGJldHdlZW4NCiAqIHR3byB0aWNrIGludGVycnVwdHMuIFRoaXMgc2hvdWxkIHByZWZlcmFibHkgYmUgbWFwcGVkIHRvIHRoZSByZWxvYWQNCiAqIHJlZ2lzdGVyIG9mIHRoZSBoYXJkd2FyZSB0aW1lciwgdG8gbWFrZSBpdCBtb3JlIHBvcnRhYmxlIGJldHdlZW4gY2hpcHMgaW4gdGhlDQogKiBzYW1lIGZhbWlseS4gVGhlIG1hY3JvIHNob3VsZCBpbiBtb3N0IGNhc2VzIGJlIChyZWxvYWQgcmVnaXN0ZXIgKyAxKS4NCiAqDQogKiBIV1RDX0RJVklTT1I6IElmIHRoZSB0aW1lciBmcmVxdWVuY3kgaXMgdmVyeSBoaWdoLCBsaWtlIG9uIHRoZSBDb3J0ZXggTSBjaGlwcw0KICogKHdoZXJlIHRoZSBTeXNUaWNrIHJ1bnMgYXQgdGhlIGNvcmUgY2xvY2sgZnJlcXVlbmN5KSwgdGhlICJkaWZmZXJlbnRpYWwNCiAqIHRpbWVzdGFtcGluZyIgdXNlZCBpbiB0aGUgcmVjb3JkZXIgd2lsbCBtb3JlIGZyZXF1ZW50bHkgaW5zZXJ0IGV4dHJhIFhUUw0KICogZXZlbnRzIHRvIHN0b3JlIHRoZSB0aW1lc3RhbXBzLCB3aGljaCBpbmNyZWFzZXMgdGhlIGV2ZW50IGJ1ZmZlciB1c2FnZS4NCiAqIEluIHN1Y2ggY2FzZXMsIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIFhUUyBldmVudHMgYW5kIHRoZXJlYnkgZ2V0IGxvbmdlcg0KICogdHJhY2VzLCB5b3UgdXNlIEhXVENfRElWSVNPUiB0byBzY2FsZSBkb3duIHRoZSB0aW1lc3RhbXBzIGFuZCBmcmVxdWVuY3kuDQogKiBBc3N1bWluZyBhIE9TIHRpY2sgcmF0ZSBvZiAxIEtIeiwgaXQgaXMgc3VnZ2VzdGVkIHRvIGtlZXAgdGhlIGVmZmVjdGl2ZSB0aW1lcg0KICogZnJlcXVlbmN5IGJlbG93IDY1IE1IeiB0byBhdm9pZCBhbiBleGNlc3NpdmUgYW1vdW50IG9mIFhUUyBldmVudHMuIFRodXMsIGENCiAqIENvcnRleCBNIGNoaXAgcnVubmluZyBhdCA3MiBNSFogc2hvdWxkIHVzZSBhIEhXVENfRElWSVNPUiBvZiAyLCB3aGlsZSBhDQogKiBmYXN0ZXIgY2hpcCByZXF1aXJlIGEgaGlnaGVyIEhXVENfRElWSVNPUiB2YWx1ZS4NCiAqDQogKiBUaGUgSFdUQyBtYWNyb3MgYW5kIHZUcmFjZVBvcnRHZXRUaW1lU3RhbXAgaXMgdGhlIG1haW4gcG9ydGluZyBpc3N1ZQ0KICogb3IgdGhlIHRyYWNlIHJlY29yZGVyIGxpYnJhcnkuIFR5cGljYWxseSB5b3Ugc2hvdWxkIG5vdCBuZWVkIHRvIGNoYW5nZQ0KICogdGhlIGNvZGUgb2YgdlRyYWNlUG9ydEdldFRpbWVTdGFtcCBpZiB1c2luZyB0aGUgSFdUQyBtYWNyb3MuDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KI2lmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfV2luMzIpDQoNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9JTkNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgKHVsR2V0UnVuVGltZUNvdW50ZXJWYWx1ZSgpKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgMA0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDENCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDEgIC8vIFBsZWFzZSB1cGRhdGUgYWNjb3JkaW5nIHRvIHlvdXIgaGFyZHdhcmUuLi4NCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9IV0luZGVwZW5kZW50KQ0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIDANCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EIDENCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAxICAvLyBQbGVhc2UgdXBkYXRlIGFjY29yZGluZyB0byB5b3VyIGhhcmR3YXJlLi4uDQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfQXRtZWxfQVQ5MVNBTTcpDQoNCiAgICAvKiBIV1RDX1BFUklPRCBpcyBoYXJkY29kZWQgZm9yIEFUOTFTQU03WDI1Ni1FSyBCb2FyZCAoNDggTUh6KQ0KICAgIEEgbW9yZSBnZW5lcmljIHNvbHV0aW9uIGlzIHRvIGdldCB0aGUgcGVyaW9kIGZyb20gcHhQSVQtPlBJVENfUElNUiAqLw0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIChBVDkxQ19CQVNFX1BJVEMtPlBJVENfUElJUiAmIDB4RkZGRkYpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAyOTk1DQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMSAgLy8gaGlnaGVyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9BdG1lbF9VQzNBMCkNCg0KICAgIC8qIEZvciBBdG1lbCBBVlIzMiAoQVQzMlVDM0EpICovDQoNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9JTkNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgc3lzcmVnX3JlYWQoQVZSMzJfQ09VTlQpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAoIFRSQUNFX0NQVV9DTE9DS19IWiAvIFRSQUNFX1RJQ0tfUkFURV9IWiApDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMSAgLy8gaGlnaGVyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9BUk1fQ29ydGV4TSkNCg0KICAgIC8qIEZvciBhbGwgY2hpcHMgdXNpbmcgQVJNIENvcnRleCBNIGNvcmVzICovDQoNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9ERUNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgKCooKHVpbnQzMl90KikweEUwMDBFMDE4KSkNCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EICgoKih1aW50MzJfdCopMHhFMDAwRTAxNCkgKyAxKQ0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDINCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDAgIC8vIGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9SZW5lc2FzX1JYNjAwKQ0KDQogICAgI2luY2x1ZGUgImlvZGVmaW5lLmgiDQoNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9JTkNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgKENNVDAuQ01DTlQpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAoKCgoVFJBQ0VfUEVSSVBIRVJBTF9DTE9DS19IWi9UUkFDRV9USUNLX1JBVEVfSFopLTEpLzgpKQ0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDENCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDEgIC8vIGhpZ2hlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50DQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfTWljcm9jaGlwX2RzUElDX0FORF9QSUMyNCkNCg0KICAgIC8qIEZvciBNaWNyb2NoaXAgUElDMjQgYW5kIGRzUElDICgxNiBiaXQpICovDQoNCiAgICAvKiBOb3RlOiBUaGUgdHJhY2UgbGlicmFyeSB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCBmb3IgMzItYml0IE1DVXMsIGFuZCBpcyBzbG93ZXINCiAgICAgICB0aGFuIGludGVuZGVkIG9uIDE2LWJpdCBNQ1VzLiBTdG9yaW5nIGFuIGV2ZW50IG9uIGEgUElDMjQgdGFrZXMgYWJvdXQgNzAgtXMuDQogICAgICAgSW4gY29tcGFyaXNvbiwgMzItYml0IE1DVXMgYXJlIG9mdGVuIDEwLTIwIHRpbWVzIGZhc3Rlci4gSWYgcmVjb3JkaW5nIG92ZXJoZWFkDQogICAgICAgYmVjb21lcyBhIHByb2JsZW0gb24gUElDMjQsIHVzZSB0aGUgZmlsdGVycyB0byBleGNsdWRlIGxlc3MgaW50ZXJlc3RpbmcgdGFza3MNCiAgICAgICBvciBzeXN0ZW0gY2FsbHMuICovDQoNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9JTkNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgKFRNUjEpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAoUFIxKzEpDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMCAgLy8gbG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX05YUF9MUEMyMTBYKQ0KICAgIC8qIFVOT0ZGSUNJQUwgUE9SVCAtIE5PVCBZRVQgVkVSSUZJRUQgQlkgUEVSQ0VQSU8gKi8NCg0KICAgIC8qIFRlc3RlZCB3aXRoIExQQzIxMDYsIGJ1dCBzaG91bGQgd29yayB3aXRoIG1vc3QgTFBDMjFYWCBjaGlwcy4gKi8NCg0KICAgICNkZWZpbmUgSFdUQ19DT1VOVF9ESVJFQ1RJT04gRElSRUNUSU9OX0lOQ1JFTUVOVElORw0KICAgICNkZWZpbmUgSFdUQ19DT1VOVCAgKigodWludDMyX3QgKikweEUwMDA0MDA4ICkNCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EICggVFJBQ0VfQ1BVX0NMT0NLX0haIC8gVFJBQ0VfVElDS19SQVRFX0haICkNCiAgICAjZGVmaW5lIEhXVENfRElWSVNPUiAxDQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAwICAvLyBsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50DQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfVEVYQVNfSU5TVFJVTUVOVFNfVE1TNTcwKQ0KICAgIC8qIFVOT0ZGSUNJQUwgUE9SVCAtIE5PVCBZRVQgVkVSSUZJRUQgQlkgUEVSQ0VQSU8gKi8NCg0KICAgICNkZWZpbmUgUlRJRlJDMCAqKCh1aW50MzJfdCAqKTB4RkZGRkZDMTApDQogICAgI2RlZmluZSBSVElDT01QMCAqKCh1aW50MzJfdCAqKTB4RkZGRkZDNTApDQogICAgI2RlZmluZSBSVElVRENQMCAqKCh1aW50MzJfdCAqKTB4RkZGRkZDNTQpDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIChSVElGUkMwIC0gKFJUSUNPTVAwIC0gUlRJVURDUDApKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgKFJUSVVEQ1AwKQ0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDENCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDAgIC8vIGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9URVhBU19JTlNUUlVNRU5UU19NU1A0MzApDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fSU5DUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UIChUQTBSKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgVFJBQ0VfQ1BVX0NMT0NLU19QRVJfVElDSw0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDENCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDEgIC8vIGhpZ2hlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50DQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfTUlDUk9DSElQX1BJQzMyKQ0KICAgIC8qIFVOT0ZGSUNJQUwgUE9SVCAtIE5PVCBZRVQgVkVSSUZJRUQgQlkgUEVSQ0VQSU8gKi8NCg0KICAgICNkZWZpbmUgSFdUQ19DT1VOVF9ESVJFQ1RJT04gRElSRUNUSU9OX0lOQ1JFTUVOVElORw0KICAgICNkZWZpbmUgSFdUQ19DT1VOVCAoUmVhZFRpbWVyMSgpKSAgICAgLyogU2hvdWxkIGJlIGF2YWlsYWJsZSBpbiBCU1AgKi8NCiAgICAjZGVmaW5lIEhXVENfUEVSSU9EIChSZWFkUGVyaW9kMSgpKzEpIC8qIFNob3VsZCBiZSBhdmFpbGFibGUgaW4gQlNQICovDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMCAgLy8gbG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX1hJTElOWF9QUEM0MDUpDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fREVDUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UICBtZnNwciggMHgzZGIpDQogICAgI2RlZmluZSBIV1RDX1BFUklPRCAoIFRSQUNFX0NQVV9DTE9DS19IWiAvIFRSQUNFX1RJQ0tfUkFURV9IWiApDQogICAgI2RlZmluZSBIV1RDX0RJVklTT1IgMQ0KDQogICAgI2RlZmluZSBJUlFfUFJJT1JJVFlfT1JERVIgMCAgLy8gbG93ZXIgSVJRIHByaW9yaXR5IHZhbHVlcyBhcmUgbW9yZSBzaWduaWZpY2FudA0KDQojZWxpZiAoU0VMRUNURURfUE9SVCA9PSBQT1JUX1hJTElOWF9QUEM0NDApDQogICAgLyogVU5PRkZJQ0lBTCBQT1JUIC0gTk9UIFlFVCBWRVJJRklFRCBCWSBQRVJDRVBJTyAqLw0KDQogICAgLyogVGhpcyBzaG91bGQgd29yayB3aXRoIG1vc3QgUG93ZXJQQyBjaGlwcyAqLw0KDQogICAgI2RlZmluZSBIV1RDX0NPVU5UX0RJUkVDVElPTiBESVJFQ1RJT05fREVDUkVNRU5USU5HDQogICAgI2RlZmluZSBIV1RDX0NPVU5UICBtZnNwciggMHgwMTYgKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgKCBUUkFDRV9DUFVfQ0xPQ0tfSFogLyBUUkFDRV9USUNLX1JBVEVfSFogKQ0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDENCg0KICAgICNkZWZpbmUgSVJRX1BSSU9SSVRZX09SREVSIDAgIC8vIGxvd2VyIElSUSBwcmlvcml0eSB2YWx1ZXMgYXJlIG1vcmUgc2lnbmlmaWNhbnQNCg0KI2VsaWYgKFNFTEVDVEVEX1BPUlQgPT0gUE9SVF9YSUxJTlhfTUlDUk9CTEFaRSkNCiAgICAvKiBVTk9GRklDSUFMIFBPUlQgLSBOT1QgWUVUIFZFUklGSUVEIEJZIFBFUkNFUElPICovDQoNCiAgICAvKiBUaGlzIHNob3VsZCB3b3JrIHdpdGggbW9zdCBNaWNyb2JsYXplIGNvbmZpZ3VyYXRpb25zLg0KICAgICAqIEl0IHVzZXMgdGhlIEFYSSBUaW1lciAwIC0gdGhlIHRpY2sgaW50ZXJydXB0IHNvdXJjZS4NCiAgICAgKiBJZiBhbiBBWEkgVGltZXIgMCBwZXJpcGhlcmFsIGlzIGF2YWlsYWJsZSBvbiB5b3VyIGhhcmR3YXJlIHBsYXRmb3JtLCBubyBtb2RpZmljYXRpb25zIGFyZSByZXF1aXJlZC4NCiAgICAgKi8NCiAgICAjaW5jbHVkZSAieHRtcmN0cl9sLmgiDQoNCiAgICAjZGVmaW5lIEhXVENfQ09VTlRfRElSRUNUSU9OIERJUkVDVElPTl9ERUNSRU1FTlRJTkcNCiAgICAjZGVmaW5lIEhXVENfQ09VTlQgWFRtckN0cl9HZXRUaW1lckNvdW50ZXJSZWcoIFhQQVJfVE1SQ1RSXzBfQkFTRUFERFIsIDAgKQ0KICAgICNkZWZpbmUgSFdUQ19QRVJJT0QgKCBUUkFDRV9DUFVfQ0xPQ0tfSFogLyBUUkFDRV9USUNLX1JBVEVfSFogKQ0KICAgICNkZWZpbmUgSFdUQ19ESVZJU09SIDE2DQoNCiAgICAjZGVmaW5lIElSUV9QUklPUklUWV9PUkRFUiAwICAvLyBsb3dlciBJUlEgcHJpb3JpdHkgdmFsdWVzIGFyZSBtb3JlIHNpZ25pZmljYW50DQoNCiNlbGlmIChTRUxFQ1RFRF9QT1JUICE9IFBPUlRfTk9UX1NFVCkNCg0KICAgICNlcnJvciAiU0VMRUNURURfUE9SVCBoYWQgdW5zdXBwb3J0ZWQgdmFsdWUhIg0KICAgICNkZWZpbmUgU0VMRUNURURfUE9SVCBQT1JUX05PVF9TRVQNCg0KI2VuZGlmDQoNCiNpZiAoU0VMRUNURURfUE9SVCAhPSBQT1JUX05PVF9TRVQpDQoNCiAgICAjaWZuZGVmIEhXVENfQ09VTlRfRElSRUNUSU9ODQogICAgI2Vycm9yICJIV1RDX0NPVU5UX0RJUkVDVElPTiBpcyBub3Qgc2V0ISINCiAgICAjZW5kaWYNCg0KICAgICNpZm5kZWYgSFdUQ19DT1VOVA0KICAgICNlcnJvciAiSFdUQ19DT1VOVCBpcyBub3Qgc2V0ISINCiAgICAjZW5kaWYNCg0KICAgICNpZm5kZWYgSFdUQ19QRVJJT0QNCiAgICAjZXJyb3IgIkhXVENfUEVSSU9EIGlzIG5vdCBzZXQhIg0KICAgICNlbmRpZg0KDQogICAgI2lmbmRlZiBIV1RDX0RJVklTT1INCiAgICAjZXJyb3IgIkhXVENfRElWSVNPUiBpcyBub3Qgc2V0ISINCiAgICAjZW5kaWYNCg0KICAgICNpZm5kZWYgSVJRX1BSSU9SSVRZX09SREVSDQogICAgI2Vycm9yICJJUlFfUFJJT1JJVFlfT1JERVIgaXMgbm90IHNldCEiDQogICAgI2VsaWYgKElSUV9QUklPUklUWV9PUkRFUiAhPSAwKSAmJiAoSVJRX1BSSU9SSVRZX09SREVSICE9IDEpDQogICAgI2Vycm9yICJJUlFfUFJJT1JJVFlfT1JERVIgaGFzIGJhZCB2YWx1ZSEiDQogICAgI2VuZGlmDQoNCiAgICAjaWYgKEhXVENfRElWSVNPUiA8IDEpDQogICAgI2Vycm9yICJIV1RDX0RJVklTT1IgbXVzdCBiZSBhIG5vbi16ZXJvIHBvc2l0aXZlIHZhbHVlISINCiAgICAjZW5kaWYNCg0KI2VuZGlmDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlQ29uc29sZU1lc3NhZ2UNCiAqDQogKiBBIHdyYXBwZXIgZm9yIHlvdXIgc3lzdGVtLXNwZWNpZmljIGNvbnNvbGUgInByaW50ZiIgY29uc29sZSBvdXRwdXQgZnVuY3Rpb24uDQogKiBUaGlzIG5lZWRzIHRvIGJlIGNvcnJlY3RseSBkZWZpbmVkIHRvIHNlZSBzdGF0dXMgcmVwb3J0cyBmcm9tIHRoZSB0cmFjZQ0KICogc3RhdHVzIG1vbml0b3IgdGFzayAodGhpcyBpcyBkZWZpbmVkIGluIHRyY1VzZXIuYykuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KI2lmIChTRUxFQ1RFRF9QT1JUID09IFBPUlRfQXRtZWxfQVQ5MVNBTTcpDQovKiBQb3J0IHNwZWNpZmljIGluY2x1ZGVzICovDQojaW5jbHVkZSAiY29uc29sZS5oIg0KI2VuZGlmDQoNCiNkZWZpbmUgdlRyYWNlQ29uc29sZU1lc3NhZ2UoeCkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVBvcnRHZXRUaW1lU3RhbXANCiAqDQogKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRpbWUgYmFzZWQgb24gdGhlIEhXVEMgbWFjcm9zIHdoaWNoIHByb3ZpZGUgYSBoYXJkd2FyZQ0KICogaXNvbGF0aW9uIGxheWVyIHRvd2FyZHMgdGhlIGhhcmR3YXJlIHRpbWVyL2NvdW50ZXIuDQogKg0KICogVGhlIEhXVEMgbWFjcm9zIGFuZCB2VHJhY2VQb3J0R2V0VGltZVN0YW1wIGlzIHRoZSBtYWluIHBvcnRpbmcgaXNzdWUNCiAqIG9yIHRoZSB0cmFjZSByZWNvcmRlciBsaWJyYXJ5LiBUeXBpY2FsbHkgeW91IHNob3VsZCBub3QgbmVlZCB0byBjaGFuZ2UNCiAqIHRoZSBjb2RlIG9mIHZUcmFjZVBvcnRHZXRUaW1lU3RhbXAgaWYgdXNpbmcgdGhlIEhXVEMgbWFjcm9zLg0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZVBvcnRHZXRUaW1lU3RhbXAodWludDMyX3QgKnB1aVRpbWVzdGFtcCk7DQoNCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogKiB2VHJhY2VQb3J0RW5kDQogKg0KICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgcmVjb3JkZXIgaXMgc3RvcHBlZCBkdWUgdG8gZnVsbCBidWZmZXIuDQogKiBNYWlubHkgaW50ZW5kZWQgdG8gc2hvdyBhIG1lc3NhZ2UgaW4gdGhlIGNvbnNvbGUuDQogKiBUaGlzIGlzIHVzZWQgYnkgdGhlIFdpbjMyIHBvcnQgdG8gc3RvcmUgdGhlIHRyYWNlIHRvIGEgZmlsZS4gVGhlIGZpbGUgcGF0aCBpcw0KICogc2V0IHVzaW5nIHZUcmFjZVBvcnRTZXRGaWxlTmFtZS4NCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQp2b2lkIHZUcmFjZVBvcnRFbmQodm9pZCk7DQoNCiNpZiAoSU5DTFVERV9TQVZFX1RPX0ZJTEUgPT0gMSkNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIHZUcmFjZVBvcnRTZXRPdXRGaWxlDQogKg0KICogU2V0cyB0aGUgZmlsZW5hbWUvcGF0aCB1c2VkIGluIHZUcmFjZVBvcnRTYXZlLg0KICogVGhpcyBpcyBzZXQgaW4gYSBzZXBhcmF0ZSBmdW5jdGlvbiwgc2luY2UgdGhlIFdpbjMyIHBvcnQgY2FsbHMgdlRyYWNlUG9ydFNhdmUNCiAqIGluIHZUcmFjZVBvcnRFbmQgaWYgV0lOMzJfUE9SVF9TQVZFX1dIRU5fU1RPUFBFRCBpcyBzZXQuDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0Kdm9pZCB2VHJhY2VQb3J0U2V0T3V0RmlsZShjaGFyKiBwYXRoKTsNCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICogdlRyYWNlUG9ydFNhdmUNCiAqDQogKiBTYXZlcyB0aGUgdHJhY2UgdG8gYSBmaWxlIG9uIGEgdGFyZ2V0LXNpZGUgZmlsZSBzeXN0ZW0uIFRoZSBwYXRoIGlzIHNldCBpbiBhDQogKiBzZXBhcmF0ZSBmdW5jdGlvbiwgdlRyYWNlUG9ydFNldE91dEZpbGUsIHNpbmNlIHRoZSBXaW4zMiBwb3J0IG1heSBjYWxsDQogKiB2VHJhY2VQb3J0U2F2ZSBpbiB2VHJhY2VQb3J0RW5kLCBpZiB1c2luZyBXSU4zMl9QT1JUX1NBVkVfV0hFTl9TVE9QUEVELg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnZvaWQgdlRyYWNlUG9ydFNhdmUodm9pZCk7DQoNCiNlbHNlDQoNCiNkZWZpbmUgdlRyYWNlQ29uc29sZU1lc3NhZ2UoeCkNCiNkZWZpbmUgdlRyYWNlUG9ydFNldE91dEZpbGUocGF0aCkNCiNkZWZpbmUgdlRyYWNlUG9ydFNhdmUodm9pZCkNCg0KI2VuZGlmDQoNCiNlbmRpZg0K