LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDEwIEplc3BlciBTdGVlbiBNv2xsZXIgYW5kIG90aGVycy4KICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwogKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKICogCiAqIENvbnRyaWJ1dG9yczoKICogICAgIEplc3BlciBTdGVlbiBNb2xsZXIgLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KICogICAgIE11a3VsIEdhbmRoaSAtIGJ1ZyAyODA3OTggLSBQc3ljaG9QYXRoIHN1cHBvcnQgZm9yIEpESyAxLjQKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgpwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwueHBhdGgyLnByb2Nlc3Nvci5pbnRlcm5hbC51dGlsczsKCi8qKgogKiBTdHJpbmcgbGl0ZXJhbCB1dGlsaXRpZXMKICogCiAqCiAqLwpwdWJsaWMgY2xhc3MgTGl0ZXJhbFV0aWxzIHsKCQoJLyoqCgkgKiBVbnF1b3RlcyBhIHF1b3RlZCBzdHJpbmcsIGNoYW5naW5nIGRvdWJsZSBxdW90ZXMgaW50byBzaW5nbGUgcXVvdGVzIGFzIHdlbGwuCiAgICAgKiBFeGFtcGxlcyAoc3RyaW5nIGRlbGltaXRlZCBieSA+IGFuZCA8KToKICAgICAqICA+IkEiPCBiZWNvbWVzID5BPCAKICAgICAqICA+J0InPCBiZWNvbWVzID5CPCAKCSAqICA+IkEiIkIiPCBiZWNvbWVzID5BIkI8CgkgKiAgPiJBIiJCIjwgYmVjb21lcyA+QSJCPAoJICogID4nQScnJydCJzwgYmVjb21lcyA+QScnQjwKCSAqICA+IkEnJycnQiI8IGJlY29tZXMgPkEnJycnQjwKCSAqIEBwYXJhbSBxdW90ZWRTdHJpbmcgQSBxdW90ZWQgc3RyaW5nIHBvc3NpYmx5IGNvbnRhaW5pbmcgZXNjYXBlZCBxdW90ZXMKCSAqIEByZXR1cm4gdW5xdW90ZWQgYW5kIHVuZXNjYXBlZCBzdHJpbmcKCSAqLwoJcHVibGljIHN0YXRpYyBTdHJpbmcgdW5xdW90ZShTdHJpbmcgcXVvdGVkU3RyaW5nKSB7CgkJaW50IGlucHV0TGVuZ3RoID0gcXVvdGVkU3RyaW5nLmxlbmd0aCgpOwoJCWNoYXIgcXVvdGVDaGFyID0gcXVvdGVkU3RyaW5nLmNoYXJBdCgwKTsKCQlpZiAocXVvdGVkU3RyaW5nLmluZGV4T2YocXVvdGVDaGFyLCAxKSA9PSBpbnB1dExlbmd0aC0xKSB7CgkJCS8vIFRoZSB0cml2aWFsIGNhc2Ugd2hlcmUgdGhlcmUncyBubyBxdW90ZXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc3RyaW5nLgoJCQlyZXR1cm4gcXVvdGVkU3RyaW5nLnN1YnN0cmluZygxLCBpbnB1dExlbmd0aC0xKTsKCQl9CgkJCgkJU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoJCWZvciAoaW50IGkgPSAxOyBpIDwgaW5wdXRMZW5ndGgtMTsgKytpKSB7CgkJCWNoYXIgY2ggPSBxdW90ZWRTdHJpbmcuY2hhckF0KGkpOwoJCQlzYi5hcHBlbmQoY2gpOwoJCQlpZiAoY2ggPT0gcXVvdGVDaGFyKSArK2k7IC8vIFNraXAgcGFzdCBzZWNvbmQgcXVvdGUgY2hhciAoZW5zdXJlZCBieSB0aGUgbGV4ZXIpCgkJfQoJCXJldHVybiBzYi50b1N0cmluZygpOwoJfQp9Cg==