LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogQGZpbGUgICAgIHN5c3RlbV9YTUM0NTAwLmgNCiAqIEBicmllZiAgICBIZWFkZXIgZmlsZSBmb3IgdGhlIFhNQzQ1MDAtU2VyaWVzIHN5c3RlbWluaXQNCiAqICAgICAgICAgICANCiAqIEB2ZXJzaW9uICBWMS42DQogKiBAZGF0ZSAgICAgMjMuIE9jdG9iZXIgMjAxMg0KICoNCiAqIEBub3RlDQogKiBDb3B5cmlnaHQgKEMpIDIwMTEgSW5maW5lb24gVGVjaG5vbG9naWVzIEFHLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KDQogKg0KICogQHBhcg0KICogSW5maW5lb24gVGVjaG5vbG9naWVzIEFHIChJbmZpbmVvbikgaXMgc3VwcGx5aW5nIHRoaXMgc29mdHdhcmUgZm9yIHVzZSB3aXRoIEluZmluZW9uknMgbWljcm9jb250cm9sbGVycy4gIA0KICogVGhpcyBmaWxlIGNhbiBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgd2l0aGluIGRldmVsb3BtZW50IHRvb2xzIHRoYXQgYXJlIHN1cHBvcnRpbmcgc3VjaCBtaWNyb2NvbnRyb2xsZXJzLiANCg0KICoNCiAqIEBwYXINCiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIi4gIE5PIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRA0KICogT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRCBXQVJSQU5USUVTIE9GDQogKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFQUExZIFRPIFRISVMgU09GVFdBUkUuDQogKiBJTkZJTkVPTiBTSEFMTCBOT1QsIElOIEFOWSBDSVJDVU1TVEFOQ0VTLCBCRSBMSUFCTEUgRk9SIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SDQogKiBDT05TRVFVRU5USUFMIERBTUFHRVMsIEZPUiBBTlkgUkVBU09OIFdIQVRTT0VWRVIuDQogKg0KICoNCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCg0KI2lmbmRlZiBfX1NZU1RFTV9YTUM0NTAwX0gNCiNkZWZpbmUgX19TWVNURU1fWE1DNDUwMF9IDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIiB7DQojZW5kaWYNCg0KI2luY2x1ZGUgPHN0ZGludC5oPg0KDQpleHRlcm4gdWludDMyX3QgU3lzdGVtQ29yZUNsb2NrOyAgICAgLyohPCBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5IChDb3JlIENsb2NrKSAgKi8NCg0KLyoqDQogKiBJbml0aWFsaXplIHRoZSBzeXN0ZW0NCiAqDQogKiBAcGFyYW0gIG5vbmUNCiAqIEByZXR1cm4gbm9uZQ0KICoNCiAqIEBicmllZiAgU2V0dXAgdGhlIG1pY3JvY29udHJvbGxlciBzeXN0ZW0uDQogKiAgICAgICAgIEluaXRpYWxpemUgdGhlIFN5c3RlbS4NCiAqLw0KZXh0ZXJuIHZvaWQgU3lzdGVtSW5pdCAodm9pZCk7DQoNCg0KLyoqDQogKiBVcGRhdGUgU3lzdGVtQ29yZUNsb2NrIHZhcmlhYmxlDQogKg0KICogQHBhcmFtICBub25lDQogKiBAcmV0dXJuIG5vbmUNCiAqDQogKiBAYnJpZWYgIFVwZGF0ZXMgdGhlIFN5c3RlbUNvcmVDbG9jayB3aXRoIGN1cnJlbnQgY29yZSBDbG9jaw0KICogICAgICAgICByZXRyaWV2ZWQgZnJvbSBjcHUgcmVnaXN0ZXJzLg0KICovDQpleHRlcm4gdm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgKHZvaWQpOw0KDQovKiB0aGlzIHdlYWsgZnVuY3Rpb24gZW5hYmxlcyBEQVZFMyBjbG9jayBBcHAgdXNhZ2UgKi8JCQ0KZXh0ZXJuIHVpbnQzMl90IEFsbG93UExMSW5pdEJ5U3RhcnR1cCh2b2lkKTsJCQkJDQoNCg0KLyogY2xvY2sgZGVmaW5pdGlvbnMsIGRvIG5vdCBtb2RpZnkhICovDQojZGVmaW5lIFNDVV9DTE9DS19DUllTVEFMICAgICAgICAgICAgICAxDQoNCgkJCQkNCgkJCQkNCi8qCQkJCQ0KICogbWFuZGF0b3J5IGNsb2NrIHBhcmFtZXRlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJCQkJDQogKi8JCQkJDQovKiBzb3VyY2UgZm9yIGNsb2NrIGdlbmVyYXRpb24JCQkJDQogKiByYW5nZTogU0NVX0NMT0NLX0NSWVNUQUwgKGNyeXN0YWwgb3IgZXh0ZXJuYWwgY2xvY2sgYXQgY3J5c3RhbCBpbnB1dCkJCQkJDQogKiBtYW5kYXRvcnkgZm9yIG9sZCBzeXN0ZW1feG1jNDUwMC5jIGZpbGVzIC0gcGxlYXNlIGRvIG5vdCByZW1vdmUhISEgICAgICAgCQkJCQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCQkNCgkJCQkNCiNkZWZpbmUJU0NVX1BMTF9DTE9DS19JTlBVVAlTQ1VfQ0xPQ0tfQ1JZU1RBTA0KI2RlZmluZSBDTE9DS19PU0NfSFAJMjQwMDAwMDANCiNkZWZpbmUgQ0xPQ0tfQkFDS19VUAkyNDAwMDAwMAkJIA0KI2RlZmluZQlDTE9DS19DUllTVEFMX0ZSRVFVRU5DWQkxMjAwMDAwMAkJDQojZGVmaW5lCVNZU1RFTV9GUkVRVUVOQ1kJMTIwMDAwMDAwCQkNCgkJCQkNCi8qIE9TQ19IUCBzZXR1cCBwYXJhbWV0ZXJzICovCQkJCQ0KI2RlZmluZQlPU0NfSFBfTU9ERQkwCQkNCiNkZWZpbmUgT1NDSFBXREdESVYgMg0KCQkJCQ0KLyogTUFJTiBQTEwgc2V0dXAgcGFyYW1ldGVycyAqLwkJCQkNCgkJCQkNCgkJCQkNCiNkZWZpbmUgCVBMTF9LMURJVgkxCQkNCiNkZWZpbmUgCVBMTF9LMkRJVgkzCQkNCiNkZWZpbmUgCVBMTF9QRElWCTEJCQ0KI2RlZmluZSAJUExMX05ESVYJNzkNCgkJDQoJCQkJDQoJCQkJDQojZGVmaW5lIAlQTExfSzJESVZfU1RFUF8xCTE5CS8vUExMIG91dHB1dCBpcyAyNE1oegkNCiNkZWZpbmUgCVBMTF9LMkRJVl9TVEVQXzIJNwkvL1BMTCBvdXRwdXQgdG8gNjBNaHoJDQojZGVmaW5lIAlQTExfSzJESVZfU1RFUF8zCTQJLy9QTEwgb3V0cHV0IHRvIDk2TWh6CQ0KCQkJCQ0KCQkJCQ0KCQkNCiNkZWZpbmUgCVVTQlBMTF9QRElWCTEJCQ0KI2RlZmluZSAJVVNCUExMX05ESVYJMTUJCQ0KDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmDQoNCg0KI2VuZGlmDQo=