LyoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMDAsIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gYW5kICAgICoKICogb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogJFNvdXJjZTogL3hzcmwvTnN2bi9pY3UvaWN1NGovc3JjL2NvbS9pYm0vdXRpbC9yZXNvdXJjZXMvQXR0aWMvSG9saWRheUJ1bmRsZV9mci5qYXZhLHYgJCAKICogJERhdGU6IDIwMDAvMDMvMTAgMDQ6MTg6MDQgJCAKICogJFJldmlzaW9uOiAxLjIgJAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICovCgpwYWNrYWdlIGNvbS5pYm0udXRpbC5yZXNvdXJjZXM7CgppbXBvcnQgY29tLmlibS51dGlsLio7CmltcG9ydCBqYXZhLnV0aWwuTGlzdFJlc291cmNlQnVuZGxlOwoKcHVibGljIGNsYXNzIEhvbGlkYXlCdW5kbGVfZnIgZXh0ZW5kcyBMaXN0UmVzb3VyY2VCdW5kbGUgewogICAgc3RhdGljIHByaXZhdGUgZmluYWwgT2JqZWN0W11bXSBmQ29udGVudHMgPSB7CiAgICAgICAgeyAgICJBbGwgU2FpbnRzJyBEYXkiLCAgICAgICJUb3Vzc2FpbnQiIH0sCiAgICAgICAgeyAgICJBcm1pc3RpY2UgRGF5IiwgICAgICAgICJKb3VyIGRlIGwnQXJtaXN0aWNlIiB9LAogICAgICAgIHsgICAiQXNjZW5zaW9uIiwgICAgICAgICAgICAiQXNjZW5zaW9uIiB9LAogICAgICAgIHsgICAiQmFzdGlsbGUgRGF5IiwgICAgICAgICAiRop0ZSBkZSBsYSBCYXN0aWxsZSIgfSwKICAgICAgICB7ICAgIkJlbml0byBKdd9yZXogRGF5IiwgICAgIkaKdGUgZGUgQmVuaXRvIEp133JleiIgfSwKICAgICAgICB7ICAgIkJveGluZyBEYXkiLCAgICAgICAgICAgIkxlbmRlbWFpbiBkZSBOb4tsIiB9LAogICAgICAgIHsgICAiQ2hyaXN0bWFzIEV2ZSIsICAgICAgICAiVmVpbGxlIGRlIE5vi2wiIH0sCiAgICAgICAgeyAgICJDaHJpc3RtYXMiLCAgICAgICAgICAgICJOb4tsIiB9LAogICAgICAgIHsgICAiRWFzdGVyIE1vbmRheSIsICAgICAgICAiUIJxdWVzIGx1bmRpIiB9LAogICAgICAgIHsgICAiRWFzdGVyIFN1bmRheSIsICAgICAgICAiUIJxdWVzIiB9LAogICAgICAgIHsgICAiRXBpcGhhbnkiLCAgICAgICAgICAgICAibCfQcGlwaGFuaWUiIH0sCiAgICAgICAgeyAgICJGbGFnIERheSIsICAgICAgICAgICAgICJGinRlIGR1IERyYXBlYXUiIH0sCiAgICAgICAgeyAgICJHb29kIEZyaWRheSIsICAgICAgICAgICJWZW5kcmVkaSBTYWludCIgfSwKICAgICAgICB7ICAgIkhhbGxvd2VlbiIsICAgICAgICAgICAgIlZlaWxsZSBkZSBsYSBUb3Vzc2FpbnQiIH0sCiAgICAgICAgeyAgICJBbGwgU2FpbnRzJyBEYXkiLCAgICAgICJUb3Vzc2FpbnQiIH0sCiAgICAgICAgeyAgICJJbmRlcGVuZGVuY2UgRGF5IiwgICAgICJGinRlIEluZIlwZW5kYW5jZSIgfSwKICAgICAgICB7ICAgIk1hdW5keSBUaHVyc2RheSIsICAgICAgIkpldWRpIFNhaW50IiB9LAogICAgICAgIHsgICAiTW90aGVyJ3MgRGF5IiwgICAgICAgICAiRop0ZSBkZXMgbYhyZXMiIH0sCiAgICAgICAgeyAgICJOYXRpb25hbCBEYXkiLCAgICAgICAgICJGinRlIE5hdGlvbmFsZSIgfSwKICAgICAgICB7ICAgIk5ldyBZZWFyJ3MgRGF5IiwgICAgICAgIkpvdXIgZGUgbCdhbiIgfSwKICAgICAgICB7ICAgIlBhbG0gU3VuZGF5IiwgICAgICAgICAgImxlcyBSYW1lYXV4IiB9LAogICAgICAgIHsgICAiUGVudGVjb3N0IiwgICAgICAgICAgICAiUGVudGVjn3RlIiB9LAogICAgICAgIHsgICAiU2hyb3ZlIFR1ZXNkYXkiLCAgICAgICAiTWFyZGkgR3JhcyIgfSwKICAgICAgICB7ICAgIlN0LiBTdGVwaGVuJ3MgRGF5IiwgICAgIlNhaW50LdB0aWVubmUiIH0sCiAgICAgICAgeyAgICJWaWN0b3JpYSBEYXkiLCAgICAgICAgICJGinRlIGRlIGxhIFZpY3RvcmlhIiB9LAogICAgICAgIHsgICAiVmljdG9yeSBEYXkiLCAgICAgICAgICAiRop0ZSBkZSBsYSBWaWN0b2lyZSIgfSwKICAgIH07CgogICAgcHVibGljIHN5bmNocm9uaXplZCBPYmplY3RbXVtdIGdldENvbnRlbnRzKCkgeyByZXR1cm4gZkNvbnRlbnRzOyB9Cn07Cg==