LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLy8qKg0KICogQGZpbGUgICAgIHN5c3RlbV9YTUM0NTAwLmgNCiAqIEBicmllZiAgICBIZWFkZXIgZmlsZSBmb3IgdGhlIFhNQzQ1MDAtU2VyaWVzIHN5c3RlbWluaXQNCiAqICAgICAgICAgICANCiAqIEB2ZXJzaW9uICBWMS40DQogKiBAZGF0ZSAgICAgMzEuIEphbnVhciAyMDEyDQogKg0KICogQG5vdGUNCiAqIENvcHlyaWdodCAoQykgMjAxMSBJbmZpbmVvbiBUZWNobm9sb2dpZXMgQUcuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQoNCiAqDQogKiBAcGFyDQogKiBJbmZpbmVvbiBUZWNobm9sb2dpZXMgQUcgKEluZmluZW9uKSBpcyBzdXBwbHlpbmcgdGhpcyBzb2Z0d2FyZSBmb3IgdXNlIHdpdGggSW5maW5lb26ScyBtaWNyb2NvbnRyb2xsZXJzLiAgDQogKiBUaGlzIGZpbGUgY2FuIGJlIGZyZWVseSBkaXN0cmlidXRlZCB3aXRoaW4gZGV2ZWxvcG1lbnQgdG9vbHMgdGhhdCBhcmUgc3VwcG9ydGluZyBzdWNoIG1pY3JvY29udHJvbGxlcnMuIA0KDQogKg0KICogQHBhcg0KICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLiAgTk8gV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEDQogKiBPUiBTVEFUVVRPUlksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YNCiAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVBQTFkgVE8gVEhJUyBTT0ZUV0FSRS4NCiAqIElORklORU9OIFNIQUxMIE5PVCwgSU4gQU5ZIENJUkNVTVNUQU5DRVMsIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1INCiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUywgRk9SIEFOWSBSRUFTT04gV0hBVFNPRVZFUi4NCiAqDQogKg0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KDQojaWZuZGVmIF9fU1lTVEVNX1hNQzQ1MDBfSA0KI2RlZmluZSBfX1NZU1RFTV9YTUM0NTAwX0gNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiIHsNCiNlbmRpZg0KDQojaW5jbHVkZSA8c3RkaW50Lmg+DQoNCmV4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7ICAgICAvKiE8IFN5c3RlbSBDbG9jayBGcmVxdWVuY3kgKENvcmUgQ2xvY2spICAqLw0KDQovKioNCiAqIEluaXRpYWxpemUgdGhlIHN5c3RlbQ0KICoNCiAqIEBwYXJhbSAgbm9uZQ0KICogQHJldHVybiBub25lDQogKg0KICogQGJyaWVmICBTZXR1cCB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4NCiAqICAgICAgICAgSW5pdGlhbGl6ZSB0aGUgU3lzdGVtLg0KICovDQpleHRlcm4gdm9pZCBTeXN0ZW1Jbml0ICh2b2lkKTsNCg0KDQovKioNCiAqIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUNCiAqDQogKiBAcGFyYW0gIG5vbmUNCiAqIEByZXR1cm4gbm9uZQ0KICoNCiAqIEBicmllZiAgVXBkYXRlcyB0aGUgU3lzdGVtQ29yZUNsb2NrIHdpdGggY3VycmVudCBjb3JlIENsb2NrDQogKiAgICAgICAgIHJldHJpZXZlZCBmcm9tIGNwdSByZWdpc3RlcnMuDQogKi8NCmV4dGVybiB2b2lkIFN5c3RlbUNvcmVDbG9ja1VwZGF0ZSAodm9pZCk7DQoNCg0KLyogY2xvY2sgZGVmaW5pdGlvbnMsIGRvIG5vdCBtb2RpZnkhICovDQojZGVmaW5lIFNDVV9DTE9DS19DUllTVEFMICAgICAgICAgICAgICAxDQoNCgkJCQkNCgkJCQkNCi8qCQkJCQ0KICogbWFuZGF0b3J5IGNsb2NrIHBhcmFtZXRlcnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioJCQkJDQogKi8JCQkJDQovKiBzb3VyY2UgZm9yIGNsb2NrIGdlbmVyYXRpb24JCQkJDQogKiByYW5nZTogU0NVX0NMT0NLX0NSWVNUQUwgKGNyeXN0YWwgb3IgZXh0ZXJuYWwgY2xvY2sgYXQgY3J5c3RhbCBpbnB1dCkJCQkJDQogKiAgICAgICAgCQkJCQ0KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkJCQkNCgkJCQkNCiNkZWZpbmUJU0NVX1BMTF9DTE9DS19JTlBVVAlTQ1VfQ0xPQ0tfQ1JZU1RBTA0KI2RlZmluZSBDTE9DS19PU0NfSFAJMjQwMDAwMDAJCQkgDQojZGVmaW5lCUNMT0NLX0NSWVNUQUxfRlJFUVVFTkNZCTEyMDAwMDAwCQkNCiNkZWZpbmUJU1lTVEVNX0ZSRVFVRU5DWQkxMjAwMDAwMDAJCQ0KCQkJCQ0KLyogT1NDX0hQIHNldHVwIHBhcmFtZXRlcnMgKi8JCQkJDQojZGVmaW5lCU9TQ19IUF9NT0RFCTAJCQ0KI2RlZmluZSBPU0NIUFdER0RJViAyDQoJCQkJDQovKiBNQUlOIFBMTCBzZXR1cCBwYXJhbWV0ZXJzICovCQkJCQ0KCQkJCQ0KCQkJCQ0KI2RlZmluZSAJUExMX0sxRElWCTEJCQ0KI2RlZmluZSAJUExMX0syRElWCTMJCQ0KI2RlZmluZSAJUExMX1BESVYJMQkJDQojZGVmaW5lIAlQTExfTkRJVgk3OQ0KCQkNCgkJCQkNCgkJCQkNCiNkZWZpbmUgCVBMTF9LMkRJVl9TVEVQXzEJMTkJLy9QTEwgb3V0cHV0IGlzIDI0TWh6CQ0KI2RlZmluZSAJUExMX0syRElWX1NURVBfMgk3CS8vUExMIG91dHB1dCB0byA2ME1oegkNCiNkZWZpbmUgCVBMTF9LMkRJVl9TVEVQXzMJNAkvL1BMTCBvdXRwdXQgdG8gOTZNaHoJDQoJCQkJDQoJCQkJDQoJCQ0KI2RlZmluZSAJVVNCUExMX1BESVYJMQkJDQojZGVmaW5lIAlVU0JQTExfTkRJVgkxNQkJDQoNCg0KI2lmZGVmIF9fY3BsdXNwbHVzDQp9DQojZW5kaWYNCg0KDQojZW5kaWYNCg==