LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAxNiBGdW5kYWNp824gVGVjbmFsaWEgUmVzZWFyY2ggJiBJbm5vdmF0aW9uLg0KICoNCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjIuMA0KICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCiAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLTIuMC9FUEwtMi4wLmh0bWwNCiAqDQogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KICoNCiAqIENvbnRyaWJ1dG9yczoNCiAqICAgSHVhc2NhciBFc3Bpbm96YSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBBbGVqYW5kcmEgUnXteiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIE1hcmkgQ2FybWVuIFBhbGFjaW9zIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIEFuZ2VsIEzzcGV6IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCnBhY2thZ2Ugb3JnLmVjbGlwc2Uub3BlbmNlcnQuYXBtLmFzc3VycHJvai51dGlsczsNCg0KaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5wcm9ncmFtLlByb2dyYW07DQoNCnB1YmxpYyBjbGFzcyBQcm9ncmFtVXRpbHMgew0KCXByaXZhdGUgUHJvZ3JhbSBwcm9ncmFtRXhwbG9yZXI7DQoJDQoJcHVibGljIHZvaWQgaW5pdEV4cGxvcmVyKCl7DQoJCVByb2dyYW0gW10gbGlzdE9mUHJvZ3JhbXMgPSBQcm9ncmFtLmdldFByb2dyYW1zKCk7DQoJCWZvciAoaW50IGk9MDsgaTxsaXN0T2ZQcm9ncmFtcy5sZW5ndGg7IGkrKyl7DQoJCQlpZiAobGlzdE9mUHJvZ3JhbXNbaV0uZ2V0TmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImZvbGRlciIpKXsNCgkJCQlwcm9ncmFtRXhwbG9yZXIgPSBsaXN0T2ZQcm9ncmFtc1tpXTsNCgkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCglwdWJsaWMgdm9pZCBsYXVuY2hFeHBsb3JlcihTdHJpbmcgcGFyYW0pew0KCQlwcm9ncmFtRXhwbG9yZXIubGF1bmNoKHBhcmFtKTsNCgl9DQoNCglwdWJsaWMgdm9pZCBsYXVuY2hGaWxlKFN0cmluZyB0aGVmaWxlKXsNCgkJaW50IGRvdCA9IHRoZWZpbGUubGFzdEluZGV4T2YoJy4nKTsNCgkJaWYgKGRvdCAhPSAtMSl7DQoJCQlTdHJpbmcgZXh0ZW5zaW9uID0gdGhlZmlsZS5zdWJzdHJpbmcoZG90KTsNCgkJCVByb2dyYW0gcHJvZ3JhbSA9IFByb2dyYW0uZmluZFByb2dyYW0oZXh0ZW5zaW9uKTsNCgkJCWlmIChwcm9ncmFtICE9IG51bGwpew0KCQkJCVByb2dyYW0ubGF1bmNoKHRoZWZpbGUpOw0KCQkJfWVsc2V7DQoJCQkJbGF1bmNoRXhwbG9yZXIodGhlZmlsZSk7DQoJCQl9DQoJCX1lbHNlew0KCQkJbGF1bmNoRXhwbG9yZXIodGhlZmlsZSk7DQoJCX0NCgl9DQoNCn0NCg==