LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIENvcHlyaWdodCAoYykgMjAxMyBDRUEgTElTVC4KICoKICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICoKICogQ29udHJpYnV0b3JzOgogKgkJUulnaXMgQ0hFVlJFTDogY2hldnJlbC5yZWdpcyA8YXQ+IGdtYWlsLmNvbQogKgkJQ0VBIExJU1QgLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpwYWNrYWdlIG9yZy5lY2xpcHNlLnBhcHlydXMuc3lzbWwuZGlhZ3JhbS5wYXJhbWV0cmljLnByb3ZpZGVyOwoKaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwppbXBvcnQgamF2YS51dGlsLk1hcDsKCmltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZTsKaW1wb3J0IG9yZy5lY2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uLlZpZXc7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmdtZi5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LkFmZml4ZWRMYWJlbFZpZXdGYWN0b3J5OwppbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5nbWYuZGlhZ3JhbS5jb21tb24uZmFjdG9yeS5Db21wYXJ0bWVudFNoYXBlVmlld0ZhY3Rvcnk7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmdtZi5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LkNvbm5lY3RvckxhYmVsVmlld0ZhY3Rvcnk7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLmdtZi5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LklubmVyTGFiZWxWaWV3RmFjdG9yeTsKaW1wb3J0IG9yZy5lY2xpcHNlLnBhcHlydXMuZ21mLmRpYWdyYW0uY29tbW9uLnByb3ZpZGVyLkN1c3RvbUFic3RyYWN0Vmlld1Byb3ZpZGVyOwppbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LkJsb2NrQ29tcG9zaXRlQ2xhc3NpZmllclZpZXdGYWN0b3J5OwppbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LkJsb2NrUHJvcGVydHlDb21wb3NpdGVDbGFzc2lmaWVyVmlld0ZhY3Rvcnk7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmRpYWdyYW0uY29tbW9uLmZhY3RvcnkuQ29uc3RyYWludEJsb2NrUHJvcGVydHlDb21wb3NpdGVDbGFzc2lmaWVyVmlld0ZhY3Rvcnk7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnN5c21sLmRpYWdyYW0uY29tbW9uLmZhY3RvcnkuRmxvd1BvcnRBZmZpeGVkTm9kZVZpZXdGYWN0b3J5OwppbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy5zeXNtbC5kaWFncmFtLmNvbW1vbi51dGlscy5TeXNNTEdyYXBoaWNhbFR5cGVzOwppbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwuZGlhZ3JhbS5jb21tb24uZmFjdG9yeS5Db25uZWN0b3JMaW5rVmlld0ZhY3Rvcnk7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LkNvbnN0cmFpbnRQcm9wZXJ0eUFmZml4ZWROb2RlVmlld0ZhY3Rvcnk7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LkRlcGVuZGVuY3lMaW5rVmlld0ZhY3Rvcnk7CmltcG9ydCBvcmcuZWNsaXBzZS5wYXB5cnVzLnVtbC5kaWFncmFtLmNvbW1vbi5mYWN0b3J5LlBvcnRBZmZpeGVkTm9kZVZpZXdGYWN0b3J5OwppbXBvcnQgb3JnLmVjbGlwc2UucGFweXJ1cy51bWwuZGlhZ3JhbS5jb21tb24udXRpbHMuVU1MR3JhcGhpY2FsVHlwZXM7CgpwdWJsaWMgY2xhc3MgQ3VzdG9tVmlld1Byb3ZpZGVyIGV4dGVuZHMgQ3VzdG9tQWJzdHJhY3RWaWV3UHJvdmlkZXIgewoKCS8qKiBNYXAgY29udGFpbmluZyBub2RlIHZpZXcgdHlwZXMgc3VwcG9ydGVkIGJ5IHRoaXMgcHJvdmlkZXIgKi8KCXByb3RlY3RlZCBNYXA8U3RyaW5nLCBDbGFzczw/Pj4gbm9kZU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQ2xhc3M8Pz4+KCk7CgoJLyoqIE1hcCBjb250YWluaW5nIGVkZ2UgdmlldyB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhpcyBwcm92aWRlciAqLwoJcHJvdGVjdGVkIE1hcDxTdHJpbmcsIENsYXNzPD8+PiBlZGdlTWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBDbGFzczw/Pj4oKTsKCgkvKiogRGVmYXVsdCBjb25zdHJ1Y3RvciAqLwoJcHVibGljIEN1c3RvbVZpZXdQcm92aWRlcigpIHsKCQlzdXBlcigpOwoJCXRoaXMucmVnaXN0cnkgPSBuZXcgQ3VzdG9tR3JhcGhpY2FsVHlwZVJlZ2lzdHJ5KCk7CgoJCWRpYWdyYW1UeXBlID0gRWxlbWVudFR5cGVzLkRJQUdSQU1fSUQ7CgoJCS8vIEN1c3RvbSBjbGFzc2lmaWVyIG5vZGVzCgkJbm9kZU1hcC5wdXQoU3lzTUxHcmFwaGljYWxUeXBlcy5TSEFQRV9TWVNNTF9CTE9DS19BU19DT01QT1NJVEVfSUQsIEJsb2NrQ29tcG9zaXRlQ2xhc3NpZmllclZpZXdGYWN0b3J5LmNsYXNzKTsKCQlub2RlTWFwLnB1dChTeXNNTEdyYXBoaWNhbFR5cGVzLlNIQVBFX1NZU01MX0JMT0NLUFJPUEVSVFlfQVNfQ09NUE9TSVRFX0lELCBCbG9ja1Byb3BlcnR5Q29tcG9zaXRlQ2xhc3NpZmllclZpZXdGYWN0b3J5LmNsYXNzKTsKCQlub2RlTWFwLnB1dChTeXNNTEdyYXBoaWNhbFR5cGVzLlNIQVBFX1NZU01MX0NPTlNUUkFJTlRCTE9DS1BST1BFUlRZX0FTX0NPTVBPU0lURV9JRCwgQ29uc3RyYWludEJsb2NrUHJvcGVydHlDb21wb3NpdGVDbGFzc2lmaWVyVmlld0ZhY3RvcnkuY2xhc3MpOwoJCW5vZGVNYXAucHV0KFVNTEdyYXBoaWNhbFR5cGVzLlNIQVBFX1VNTF9QUk9QRVJUWV9BU19BRkZJWEVEX0lELCBDb25zdHJhaW50UHJvcGVydHlBZmZpeGVkTm9kZVZpZXdGYWN0b3J5LmNsYXNzKTsKCQkvLyBDdXN0b20gYWZmaXhlZCBub2RlcwoJCW5vZGVNYXAucHV0KFN5c01MR3JhcGhpY2FsVHlwZXMuU0hBUEVfU1lTTUxfRkxPV1BPUlRfQVNfQUZGSVhFRF9JRCwgRmxvd1BvcnRBZmZpeGVkTm9kZVZpZXdGYWN0b3J5LmNsYXNzKTsKCQlub2RlTWFwLnB1dChVTUxHcmFwaGljYWxUeXBlcy5TSEFQRV9VTUxfUE9SVF9BU19BRkZJWEVEX0lELCBQb3J0QWZmaXhlZE5vZGVWaWV3RmFjdG9yeS5jbGFzcyk7CgkJLy8gQ3VzdG9tIGNoaWxkIG5vZGUgbGFiZWxzCgkJLy8gQ3VzdG9tIGlubmVyIGxhYmVscwoJCW5vZGVNYXAucHV0KFN5c01MR3JhcGhpY2FsVHlwZXMuTEFCRUxfU1lTTUxfQkxPQ0tfTkFNRV9JRCwgSW5uZXJMYWJlbFZpZXdGYWN0b3J5LmNsYXNzKTsKCQlub2RlTWFwLnB1dChVTUxHcmFwaGljYWxUeXBlcy5MQUJFTF9VTUxfUFJPUEVSVFlfTEFCRUxfSUQsIElubmVyTGFiZWxWaWV3RmFjdG9yeS5jbGFzcyk7CgkJbm9kZU1hcC5wdXQoVU1MR3JhcGhpY2FsVHlwZXMuU0hBUEVfVU1MX0NPTlNUUkFJTlRfQVNfTEFCRUxfSUQsIElubmVyTGFiZWxWaWV3RmFjdG9yeS5jbGFzcyk7CgkJLy8gQ3VzdG9tIGNvbXBhcnRtZW50cwoJCW5vZGVNYXAucHV0KFN5c01MR3JhcGhpY2FsVHlwZXMuQ09NUEFSVE1FTlRfU1lTTUxfU1RSVUNUVVJFX0lELCBDb21wYXJ0bWVudFNoYXBlVmlld0ZhY3RvcnkuY2xhc3MpOwoJCW5vZGVNYXAucHV0KFN5c01MR3JhcGhpY2FsVHlwZXMuQ09NUEFSVE1FTlRfU1lTTUxfQkxPQ0tQUk9QRVJUWV9TVFJVQ1RVUkVfSUQsIENvbXBhcnRtZW50U2hhcGVWaWV3RmFjdG9yeS5jbGFzcyk7CgkJLy8gQ3VzdG9tIGFmZml4ZWQgbGFiZWxzCgkJbm9kZU1hcC5wdXQoU3lzTUxHcmFwaGljYWxUeXBlcy5BRkZJWEVETEFCRUxfU1lTTUxfRkxPV1BPUlRfTEFCRUxfSUQsIEFmZml4ZWRMYWJlbFZpZXdGYWN0b3J5LmNsYXNzKTsKCQlub2RlTWFwLnB1dChVTUxHcmFwaGljYWxUeXBlcy5BRkZJWEVETEFCRUxfVU1MX0FQUExJRURTVEVSRU9UWVBFX0lELCBBZmZpeGVkTGFiZWxWaWV3RmFjdG9yeS5jbGFzcyk7CgkJbm9kZU1hcC5wdXQoVU1MR3JhcGhpY2FsVHlwZXMuQUZGSVhFRExBQkVMX1VNTF9QT1JUX0xBQkVMX0lELCBBZmZpeGVkTGFiZWxWaWV3RmFjdG9yeS5jbGFzcyk7CgoJCS8vIEN1c3RvbSBlZGdlcwoJCWVkZ2VNYXAucHV0KFVNTEdyYXBoaWNhbFR5cGVzLkxJTktfVU1MX0NPTk5FQ1RPUl9JRCwgQ29ubmVjdG9yTGlua1ZpZXdGYWN0b3J5LmNsYXNzKTsKCQllZGdlTWFwLnB1dChVTUxHcmFwaGljYWxUeXBlcy5MSU5LX1VNTF9ERVBFTkRFTkNZX0lELCBEZXBlbmRlbmN5TGlua1ZpZXdGYWN0b3J5LmNsYXNzKTsKCgkJLy8gQ3VzdG9tIGVkZ2UgbGFiZWxzCgkJbm9kZU1hcC5wdXQoVU1MR3JhcGhpY2FsVHlwZXMuTElOS0xBQkVMX1VNTF9BUFBMSUVEU1RFUkVPVFlQRV9JRCwgQ29ubmVjdG9yTGFiZWxWaWV3RmFjdG9yeS5jbGFzcyk7CgkJbm9kZU1hcC5wdXQoVU1MR3JhcGhpY2FsVHlwZXMuTElOS0xBQkVMX1VNTF9DT05ORUNUT1JfTEFCRUxfSUQsIENvbm5lY3RvckxhYmVsVmlld0ZhY3RvcnkuY2xhc3MpOwoJCW5vZGVNYXAucHV0KFVNTEdyYXBoaWNhbFR5cGVzLkxJTktMQUJFTF9VTUxfQ09OTkVDVE9SX1NPVVJDRV9NVUxUSVBMSUNJVFlfSUQsIENvbm5lY3RvckxhYmVsVmlld0ZhY3RvcnkuY2xhc3MpOwoJCW5vZGVNYXAucHV0KFVNTEdyYXBoaWNhbFR5cGVzLkxJTktMQUJFTF9VTUxfQ09OTkVDVE9SX1RBUkdFVF9NVUxUSVBMSUNJVFlfSUQsIENvbm5lY3RvckxhYmVsVmlld0ZhY3RvcnkuY2xhc3MpOwoJCW5vZGVNYXAucHV0KFVNTEdyYXBoaWNhbFR5cGVzLkxJTktMQUJFTF9VTUxfTkFNRURFTEVNRU5UX05BTUVfSUQsIENvbm5lY3RvckxhYmVsVmlld0ZhY3RvcnkuY2xhc3MpOwoJfQoKCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICovCglAT3ZlcnJpZGUKCXByb3RlY3RlZCBDbGFzczw/PiBnZXROb2RlVmlld0NsYXNzKElBZGFwdGFibGUgc2VtYW50aWNBZGFwdGVyLCBWaWV3IGNvbnRhaW5lclZpZXcsIFN0cmluZyBncmFwaGljYWxUeXBlKSB7CgkJcmV0dXJuIG5vZGVNYXAuZ2V0KGdyYXBoaWNhbFR5cGUpOwoJfQoKCS8qKgoJICoge0Bpbmhlcml0RG9jfQoJICovCglAT3ZlcnJpZGUKCXByb3RlY3RlZCBDbGFzczw/PiBnZXRFZGdlVmlld0NsYXNzKElBZGFwdGFibGUgc2VtYW50aWNBZGFwdGVyLCBWaWV3IGNvbnRhaW5lclZpZXcsIFN0cmluZyBncmFwaGljYWxUeXBlKSB7CgkJcmV0dXJuIGVkZ2VNYXAuZ2V0KGdyYXBoaWNhbFR5cGUpOwoJfQp9Cg==