LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykgMjAxNiBGdW5kYWNp824gVGVjbmFsaWEgUmVzZWFyY2ggJiBJbm5vdmF0aW9uLg0KICoNCiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCiAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjIuMA0KICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQNCiAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLTIuMC9FUEwtMi4wLmh0bWwNCiAqDQogKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogRVBMLTIuMA0KICoNCiAqIENvbnRyaWJ1dG9yczoNCiAqICAgSHVhc2NhciBFc3Bpbm96YSAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBBbGVqYW5kcmEgUnXteiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbg0KICogICBJZG95YSBEZWwgUu1vIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIE1hcmkgQ2FybWVuIFBhbGFjaW9zIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKiAgIEFuZ2VsIEzzcGV6IC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uDQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCi8qKg0KICovDQpwYWNrYWdlIG9yZy5lY2xpcHNlLm9wZW5jZXJ0LmFwbS5hc3N1cnByb2ouYXNzdXJhbmNlcHJvamVjdC5wcmVzZW50YXRpb247DQoNCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLkVNRlBsdWdpbjsNCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnVpLkVjbGlwc2VVSVBsdWdpbjsNCmltcG9ydCBvcmcuZWNsaXBzZS5lbWYuY29tbW9uLnV0aWwuUmVzb3VyY2VMb2NhdG9yOw0KaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5jZXJ0LmFwbS5hc3N1cmFuY2Vhc3NldHMuYXNzdXJhbmNlYXNzZXQucHJvdmlkZXIuQXNzdXJhbmNlYXNzZXRFZGl0UGx1Z2luOw0KaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5jZXJ0LmluZnJhLmdlbmVyYWwuZ2VuZXJhbC5wcm92aWRlci5HZW5lcmFsRWRpdFBsdWdpbjsNCmltcG9ydCBvcmcuZWNsaXBzZS5vcGVuY2VydC5pbmZyYS5wcm9wZXJ0aWVzLnByb3BlcnR5LnByb3ZpZGVyLlByb3BlcnR5RWRpdFBsdWdpbjsNCmltcG9ydCBvcmcuZWNsaXBzZS5vcGVuY2VydC5hcG0uYmFzZWxpbmUuYmFzZWxpbmUucHJvdmlkZXIuQmFzZWxpbmVFZGl0UGx1Z2luOw0KaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5jZXJ0LmV2bS5ldmlkc3BlYy5ldmlkZW5jZS5wcm92aWRlci5FdmlkZW5jZUVkaXRQbHVnaW47DQppbXBvcnQgb3JnLmVjbGlwc2Uub3BlbmNlcnQuaW5mcmEubWFwcGluZ3MubWFwcGluZy5wcm92aWRlci5NYXBwaW5nRWRpdFBsdWdpbjsNCmltcG9ydCBvcmcuZWNsaXBzZS5vcGVuY2VydC5wYW0ucHJvY3NwZWMucHJvY2Vzcy5wcm92aWRlci5Qcm9jZXNzRWRpdFBsdWdpbjsNCmltcG9ydCBvcmcuZWNsaXBzZS5vcGVuY2VydC5wa20ucmVmZnJhbWV3b3JrLnJlZmZyYW1ld29yay5wcm92aWRlci5SZWZmcmFtZXdvcmtFZGl0UGx1Z2luOw0KaW1wb3J0IG9yZy5lY2xpcHNlLm9wZW5jZXJ0LnNhbS5hcmcuYXJnLnByb3ZpZGVyLkFyZ0VkaXRQbHVnaW47DQoNCi8qKg0KICogVGhpcyBpcyB0aGUgY2VudHJhbCBzaW5nbGV0b24gZm9yIHRoZSBBc3N1cmFuY2Vwcm9qZWN0IGVkaXRvciBwbHVnaW4uDQogKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KICogPCEtLSBlbmQtdXNlci1kb2MgLS0+DQogKiBAZ2VuZXJhdGVkDQogKi8NCnB1YmxpYyBmaW5hbCBjbGFzcyBBc3N1cmFuY2Vwcm9qZWN0RWRpdG9yUGx1Z2luIGV4dGVuZHMgRU1GUGx1Z2luIHsNCgkvKioNCgkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQoJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCgkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCgkgKiBAZ2VuZXJhdGVkDQoJICovDQoJcHVibGljIHN0YXRpYyBmaW5hbCBBc3N1cmFuY2Vwcm9qZWN0RWRpdG9yUGx1Z2luIElOU1RBTkNFID0gbmV3IEFzc3VyYW5jZXByb2plY3RFZGl0b3JQbHVnaW4oKTsNCgkNCgkvKioNCgkgKiBLZWVwIHRyYWNrIG9mIHRoZSBzaW5nbGV0b24uDQoJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCgkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCgkgKiBAZ2VuZXJhdGVkDQoJICovDQoJcHJpdmF0ZSBzdGF0aWMgSW1wbGVtZW50YXRpb24gcGx1Z2luOw0KDQoJLyoqDQoJICogQ3JlYXRlIHRoZSBpbnN0YW5jZS4NCgkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KCSAqIEBnZW5lcmF0ZWQNCgkgKi8NCglwdWJsaWMgQXNzdXJhbmNlcHJvamVjdEVkaXRvclBsdWdpbigpIHsNCgkJc3VwZXINCgkJCShuZXcgUmVzb3VyY2VMb2NhdG9yIFtdIHsNCgkJCQlBcmdFZGl0UGx1Z2luLklOU1RBTkNFLA0KCQkJCUFzc3VyYW5jZWFzc2V0RWRpdFBsdWdpbi5JTlNUQU5DRSwNCgkJCQlCYXNlbGluZUVkaXRQbHVnaW4uSU5TVEFOQ0UsDQoJCQkJRXZpZGVuY2VFZGl0UGx1Z2luLklOU1RBTkNFLA0KCQkJCUdlbmVyYWxFZGl0UGx1Z2luLklOU1RBTkNFLA0KCQkJCU1hcHBpbmdFZGl0UGx1Z2luLklOU1RBTkNFLA0KCQkJCVByb2Nlc3NFZGl0UGx1Z2luLklOU1RBTkNFLA0KCQkJCVByb3BlcnR5RWRpdFBsdWdpbi5JTlNUQU5DRSwNCgkJCQlSZWZmcmFtZXdvcmtFZGl0UGx1Z2luLklOU1RBTkNFLA0KCQkJfSk7DQoJfQ0KDQoJLyoqDQoJICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFY2xpcHNlIHBsdWdpbi4NCgkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KCSAqIDwhLS0gZW5kLXVzZXItZG9jIC0tPg0KCSAqIEByZXR1cm4gdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4NCgkgKiBAZ2VuZXJhdGVkDQoJICovDQoJQE92ZXJyaWRlDQoJcHVibGljIFJlc291cmNlTG9jYXRvciBnZXRQbHVnaW5SZXNvdXJjZUxvY2F0b3IoKSB7DQoJCXJldHVybiBwbHVnaW47DQoJfQ0KCQ0KCS8qKg0KCSAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRWNsaXBzZSBwbHVnaW4uDQoJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCgkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCgkgKiBAcmV0dXJuIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuDQoJICogQGdlbmVyYXRlZA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgSW1wbGVtZW50YXRpb24gZ2V0UGx1Z2luKCkgew0KCQlyZXR1cm4gcGx1Z2luOw0KCX0NCgkNCgkvKioNCgkgKiBUaGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFY2xpcHNlIDxiPlBsdWdpbjwvYj4uDQoJICogPCEtLSBiZWdpbi11c2VyLWRvYyAtLT4NCgkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCgkgKiBAZ2VuZXJhdGVkDQoJICovDQoJcHVibGljIHN0YXRpYyBjbGFzcyBJbXBsZW1lbnRhdGlvbiBleHRlbmRzIEVjbGlwc2VVSVBsdWdpbiB7DQoJCS8qKg0KCQkgKiBDcmVhdGVzIGFuIGluc3RhbmNlLg0KCQkgKiA8IS0tIGJlZ2luLXVzZXItZG9jIC0tPg0KCQkgKiA8IS0tIGVuZC11c2VyLWRvYyAtLT4NCgkJICogQGdlbmVyYXRlZA0KCQkgKi8NCgkJcHVibGljIEltcGxlbWVudGF0aW9uKCkgew0KCQkJc3VwZXIoKTsNCgkNCgkJCS8vIFJlbWVtYmVyIHRoZSBzdGF0aWMgaW5zdGFuY2UuDQoJCQkvLw0KCQkJcGx1Z2luID0gdGhpczsNCgkJfQ0KCX0NCg0KfQ0K